Na semana passada, enquanto conversava com alguns colegas de trabalho (a maioria deles são administradores de sistemas que às vezes me questionam sobre assuntos relacionados com a segurança), me perguntaram por que continuamos insistindo tanto com a utilização de senhas seguras se, hoje em dia, a maioria dos sites e aplicativos utilizam métodos como captchas ou bloqueio de contas para evitar que um cibercriminoso utilize técnicas de força bruta para adivinhar a senha. Apesar dessas técnicas não serem mais tão utilizadas para tentar entrar em sistemas, não significa que estejam ultrapassadas ou que não funcionem para conseguir credenciais de acesso. Pelo contrário, continuam sendo bastante úteis.

Quando um atacante compromete um sistema e consegue ter acesso à base de dados de usuários, e, consequentemente, às senhas, dificilmente as encontrará em um texto ou prontas para serem utilizadas.

Na realizada, o cibercriminoso obterá os hashes dessas senhas, ou seja, a senha criptografada através de um algoritmo matemático. E é nesse momento que entram em ação as ferramentas de força bruta, considerando que para descobrir qual senha pertence a cada hash o atacante deve “testar” com diferentes palavras até obter aquela que coincida com o hash.

Ferramenta como o HastCat ou o John the Ripper se encarregam de fazer esse processo, tomando palavras de uma lista (dicionário) e aplicando a cada uma a função Hash até obter aquela que coincida com os hashes previamente anteriormente roubados. Quanto mais previsíveis forem as senhas, maior será a probabilidade de que a encontrem na lista de palavras.

É por isso que a maioria dos sistemas atuais implementam políticas de senhas que obrigam o usuário a utilizar letras maiúsculas, números e caracteres especiais para tentar evitar que essas combinações possam aparecer em um dicionário.

Quando “password” se transforma em “P@ssW0rd”

Até o ano passado, senhas como “123456”, “password” e “qwerty” estavam na lista das mais utilizadas. Apesar de ser bem provável que o mesmo ocorra neste ano, também começaram a aparecer combinações como “pasword01” ou “Qwerty01!”. Ou seja, as mesmas palavras previsíveis de sempre, mas com algumas mudanças para que sejam validadas e passem pela auditoria básica de segurança.

Segundo um estudo da empresa Praetorian Security, no qual analisaram mais de 34 milhões de senhas vazadas, existem certas estruturas que se repetem na hora de escolher uma senha. No total, 50% das chaves analisadas se baseiam em 13 estruturas diferentes (quando falamos de “estruturas”, nos referimos especificamente à forma na qual estão montadas).

Por exemplo, “Password1234”, possui uma estrutura formada por letra maiúscula com sete minúsculas e com quatro dígitos numéricos. De fato, as mais comuns costumam ser desse estilo, uma letra maiúscula, seguida por cinco e oito minúsculas e finalizada com dois ou quatro dígitos numéricos e algum caractere especial, na maioria das vezes o “!” ou “.”. Por exemplo: “Inverno2017”, “Linkedin01!” ou “Football10.”.

Baseando-se nessas estruturas, aparecem diversas “listas de regras” que são utilizadas junto com as técnicas de força bruta. Por exemplo, se escolho a palavra “password” do dicionário, também são adicionadas as formas “Password01”, “Password1!”, “P@ssW0rd” e uma longa combinação de possibilidades, o qual não só acaba sendo um trabalho tedioso, como também cria uma lista intermináveis de palavras.

A solução é utilizar um conjunto de regras, nas quais usam palavras e alteram a sua estrutura, para testar com diferentes combinações possíveis. Veja alguns exemplos destas regras:

  • ‘c’: Colocar em maiúscula a primeira letra da palavra. Exemplo: password → Password
  • ‘TN’: Usar letras maiúsculas e minúsculas, e um caractere especial na posição N. Exemplo ‘T5’: password → passWord
  • ‘$X’:  Agregar ‘X’ caracteres após o $ ao final da palavra. Exemplo ‘$01’: password → pasword01
  • ‘sXY’:  Substituir os caracteres ‘X’ por ‘Y’. Exemplo ‘so0’: password → passw0rd.

Agora, veja o que ocorre quando também usamos as seguintes regras:

  • ‘c $01’ : password → Password01
  • ‘c $! sa@ so0’: password → P@ssw0rd!
  • ‘c T5 sa@ so0’: password -> P@ssW0rd

Existe uma grande quantidade de regras que podem ser utilizadas para alterar a estrutura de uma lista de palavras e conseguir uma grande variedade de combinações possíveis para senhas.

Essa técnica é bastante útil na hora de realizar auditorias de segurança, especialmente quando devem auditar senhas ou se conseguem obter uma amostra de hashes de alguma base de dados. Habitualmente, as auditorias contam com pouco tempo para analisar senhas, mas utilizando essas técnicas e baseando-se em estatísticas, é possível melhorar notavelmente o tempo requerido e as probabilidades de crackear um ou vários hashes tendo como base esses padrões.

Se, além disso, quando utilizam ferramentas como o CeWL, que coleta palavras de um site (como o perfil de uma rede social ou a página de uma empresa) para criar o dicionário de palavras, as possibilidades aumentam muito mais.

Temos visto nos últimos anos diversos vazamentos de senhas que ocorreram com várias empresas e, apesar das informações vazadas serem os hashes dessas credenciais, podemos entender agora que quanto mais previsível for a senha, mais fácil será crackear esse hash e encontrá-la.

Como estar protegido?

Neste vídeo, mostramos como criar uma senha segura de forma simples e rápida:

https://www.youtube.com/watch?v=q5DYkzOrz_I

Assim como destacamos neste post, quanto mais “imprevisível” for a senha, mais difícil será para um atacante encontrá-la. O uso de regras mnemotécnicas como trocar letras por símbolos ou números continua sendo muito útil, mas será muito mais efetivo quando é utilizado em uma palavra longa ou, melhor ainda, em uma frase:

E$t4.e$.m1nha.S4$h4.$egur4!

Outro grau de segurança que podemos adicionar é fazer trocas que não sejam tão previsíveis e que, dessa forma, não possam ser aplicadas para a maioria das regras de dicionário. Ou seja, no lugar de trocar as letras “a” da frase por “4” ou “@” que é o mais natural e lógico, podemos escolher outro caractere que não seja previsível, como por exemplo: ”#”

Est#.E.aMinh#.Senh#.Segur#

Por último, se a informação armazenada no sistema for crítica, sempre é interessante utilizar os fatores de dupla autenticação, para evitar que um atacante possa acessar ao sistema mesmo que obtenha o usuário e a senha.

Além disso, se somos os administradores dos sistemas, é recomendável adicionar um nível a mais de segurança na hora de armazenar os hashes e utilizar técnicas como as ErsatzPasswords.

Leia também: Saiba como criar uma senha forte em um minuto e proteger sua identidade digital