IT & Engineering
Medidores de força de senha não são para humanos
Já estamos há alguns meses no ano novo e, como sempre, a luta contra agentes mal-intencionados continua.
O Mailgun leva a segurança das contas da nossa base de usuários muito a sério, e quando uma conta é comprometida, a situação não tem graça nenhuma. Com tantos fatores que podem contribuir para o comprometimento de uma conta, demos um passo atrás para analisar os vários vetores de ataque usados por agentes mal-intencionados para obter acesso a contas.
Na base de tudo isso estava uma das primeiras coisas que as pessoas configuram ao criar uma conta: a senha. Uma senha forte é fundamental para uma boa postura de segurança, mas criar uma senha forte pode ser uma tarefa tediosa, o que leva grande parte da base de usuários a recorrer a senhas simples ou fracas. Para protegê-los contra o comprometimento de contas, precisamos orientá-los na direção certa.
Medidores de força de senha
Quando buscamos inicialmente uma nova maneira de mitigar o comprometimento, incentivando os usuários a fazer escolhas melhores ao criar senhas, imaginamos que ter um medidor de força de senha no formulário de assinatura seria uma boa ideia.
A partir daí, analisamos vários exemplos existentes para ver o que o setor está fazendo e, como os medidores de força de senha não são novidade, o que poderia ser melhorado. Normalmente, os medidores de força de senha consistem nas seguintes regras ou requisitos. Sua senha:
- Deve ter no mínimo oito caracteres
- Deve incluir pelo menos uma letra maiúscula
- Deve incluir pelo menos uma letra minúscula
- Deve incluir pelo menos um número
- Deve incluir pelo menos um caractere especial de um conjunto escolhido de símbolos aceitáveis
As regras acima são bastante comuns, mas não funcionam bem.
Sempre que alguém fala sobre senhas, é comum encontrar uma referência a uma tirinha específica que aborda exatamente esse assunto (esta aqui aqui caso você não conheça). Há muito material como esse que faz um excelente trabalho ao apontar onde queremos chegar:
Humanos não são bons em criar senhas fortes.
Embora incluir todas as regras acima em uma senha possa dar a impressão de que você está orientando as pessoas na direção certa, isso não significa que será mais difícil para os computadores decifrá-la. Isso ocorre porque as pessoas têm geradores aleatórios muito ruins instalados em suas cabeças. Em primeiro lugar, as pessoas normalmente usam palavras que têm um significado especial para elas. Porém, o cérebro humano também pode ser estimulado a usar palavras associadas quando exposto a um ambiente específico. A análise a seguir sobre o vazamento de dados do LinkedIn é um ótimo exemplo disso:

Justificando o julgamento
Com isso em mente, agora precisávamos responder como faríamos para julgar a força da senha que o usuário cria.
Para começar, descobrimos que a maneira mais eficaz de mitigar o roubo de contas devido a senhas inseguras é verificá-las em um banco de dados de hashes de credenciais expostas. O banco de dados que nós mesmos estamos utilizando vem de https://haveibeenpwned.com

Se o usuário tentar configurar uma senha já exposta, ele não deverá conseguir avançar no fluxo. Como benefício adicional, esperamos que isso incentive o usuário a alterar essa senha, caso ela esteja sendo usada em outros serviços.
Portanto, também marcamos senhas com menos de dez caracteres ou que incluem qualquer informação fornecida anteriormente no formulário de assinatura, como nome de domínio, nome real, nome da empresa, etc.
Mas e se a senha não existir na lista de hashes de senhas expostas, atender a todos os outros requisitos, mas for algo simples como “Password0001!”?
Entropia
Outra forma de medir a força de uma senha é calcular sua entropia. “A entropia de senha é uma medida de quão imprevisível uma senha é. [Ela é] baseada nos conjuntos de caracteres usados… e no comprimento da senha” [1].
Geralmente medida em “bits”, a entropia da senha pode ser calculada encontrando a entropia de cada caractere, usando um logaritmo na base 2 do número de caracteres no conjunto de caracteres utilizado, multiplicado pelo número de caracteres na própria string da senha.
Ao considerar senhas fracas que ainda não vazaram ou foram quebradas, usar a entropia da senha para exibir uma mensagem ao usuário por meio de um medidor de força de senha é útil para mostrar que ele deve considerar usar algo melhor.
No entanto, medir a força de uma senha com base apenas na sua entropia é falho.
Por exemplo, vamos usar a senha “Password01!”, que é bem comum e poderia ser facilmente adivinhada. O que vemos é que um medidor de força de senha ingênuo diz o contrário:

Este é um medidor de força de senha que mostra que essa senha é “Muito forte”. Porém, do jeito que está, essa senha foi vista no site haveibeenpwned.com mais de 400 vezes:

Aqui está outro exemplo – vamos usar uma senha composta por cinco PALAVRAS SELECIONADAS ALEATORIAMENTE, com cada palavra variando de três a quatro caracteres; sem letras maiúsculas, sem símbolos especiais e sem números:

Se você não conseguir decifrar, as palavras são “fit”, “heat”, “scale”, “pot” e “kneel”. Em termos de entropia, essa senha tem um conjunto menor de caracteres, mas preste atenção nisso:

Embora seja avaliada como uma senha “fraca” com base na complexidade, ela não vazou (até onde podemos ver pela resposta do haveibeenpwned.com acima). Ao levar em consideração o número de permutações e combinações que você tem ao escolher aleatoriamente cinco palavras entre aquelas com três, quatro e cinco letras no idioma inglês, por exemplo, o resultado pode ser muito complexo. Vamos analisar os detalhes:

Não leve isso tão a sério, no entanto, pois, como sugere o aviso do HaveIBeenPwned, só porque não vazou, não significa que seja uma boa senha. Essa senha é do tipo que você poderia associar àquela tirinha mencionada anteriormente. Junto com todas as senhas do tipo “correcthorsebatterystaple”, que sugerem que senhas assim são mais fáceis de memorizar para os humanos e mais difíceis de serem quebradas por computadores devido ao ponto abordado acima.
Resumo: não impressiona
Então, onde quero chegar com isso? Temos ciência de que os requisitos comuns não funcionam bem e sabemos que a entropia de senha, no que diz respeito a dar um veredito sobre a força, tem algumas falhas, então o que fazemos?
Nós criamos um medidor de força de senha que simplesmente não se impressiona com nada do que você digitar, é isso.

Embora nosso medidor de força de senha, rabugento e nada impressionável, pareça ainda estar em um estágio inicial em comparação com o que poderá se tornar mais tarde, sinto que é o começo para deixar uma mensagem muito clara.
Outra coisa que é um problema na maioria dos medidores de força de senha é o excesso de reforço positivo que eles fornecem. Embora um medidor de força de senha grite com você quando os requisitos não são cumpridos, assim que você os atende, recebe respostas positivas sobre suas escolhas e quase explicitamente lhe dizem que sua senha é excelente e não há mais nada a fazer para manter sua conta segura. Em outras palavras, você não precisa se preocupar, sua conta nunca será comprometida.
Os medidores comuns de força de senha funcionam de maneira muito semelhante às duas primeiras curvas de sino que você vê na imagem abaixo:

Normalmente, depois de atender aos requisitos de um medidor, você cai nas áreas de “Tudo bem” ou “Muito boa”, e fica por isso mesmo, o que, na verdade, não é nada bom ou seguro.

O que estamos buscando é ser como a terceira curva de sino que você vê acima. Onde somos contrários à sua escolha de senha na maior parte do tempo e indiferentes no restante. O motivo é que, hoje em dia, apenas uma senha não é suficiente para garantir a segurança e, como tal, o medidor de senha não deve se impressionar.
Conclusão
Em resumo, criar um bom medidor de força de senha é complicado e pode levar os usuários a criar senhas mais fracas, em vez de melhores e mais fortes. Além disso, utilizar recursos como o haveibeenpwned.com para verificar senhas expostas é muito mais robusto do que inventar e usar seus próprios algoritmos de verificação de força.
Utilizar um gerenciador de senhas capaz de gerar senhas a partir de um conjunto de caracteres suficientemente grande para atingir o nível desejado de entropia é uma das melhores opções no momento para criar senhas fortes e exclusivas. Mesmo assim, você ainda deve considerar utilizar qualquer e/ou todas as outras opções de segurança disponíveis, como chaves de segurança, aplicativos autenticadores ou quaisquer outros métodos de autenticação multifator, indo além de apenas uma senha.
Basicamente, se você está se perguntando se deveria implementar um medidor de força de senha no seu site (ou sites), eu diria que não, a menos que quisesse usá-lo como algum tipo de veículo para passar uma mensagem. Na verdade, um medidor de senha é apenas enfeite, pois nós tornamos quase impossível e inconveniente para humanos criarem uma senha verdadeiramente aleatória, se é que isso é possível.
E embora tenhamos projetado esses medidores para dar notas às senhas que criamos, eles são mais bem aproveitados contra aquelas que um computador pode criar, pois os humanos são previsíveis demais, mesmo quando tentam ao máximo não ser.
Referências:
https://xkcd.com/936/
https://whatis.techtarget.com/definition/password-entropy
http://securitynirvana.blogspot.com/2012/06/linkedin-password-infographic.html
https://haveibeenpwned.com/Passwords
https://passwordmeter.com/