IT & Engineering

Medidores de força de senha não são para humanos

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.
Imagem para 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:

Gráfico de barras das 15 principais palavras-base nas senhas do LinkedIn. 'linkedin' é a mais comum com 46.193 ocorrências

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

Campo de senha com aviso: Oh não! Parece que esta senha foi encontrada em um banco de dados de hashes de senhas expostas. Você não deve usar esta senha de forma alguma

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:

Testador de senha mostrando 'Password01!' com pontuação de 84% e complexidade Muito forte. Lista requisitos de comprimento e caracteres

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:

Oh não — pwned! Esta senha já foi vista 482 vezes em uma violação de dados e nunca deve ser usada. Mude-a!

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:

Testador de senha mostrando uma pontuação fraca de 21% para a senha fitheatscalepotkneel ao lado dos requisitos mínimos

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:

Boas notícias — nenhum pwnage encontrado! Esta senha não foi encontrada em nenhuma das Pwned Passwords carregadas no Have I Been Pwned. Isso não significa necessariamente que é uma boa senha, apenas que não está indexada neste site. Se você ainda não estiver usando um gerenciador de senhas, baixe o 1Password e altere todas as suas senhas para serem fortes e exclusivas

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:

Cálculos mostrando que uma senha de 5 palavras a partir de 14.000 palavras de Scrabble rende 5,37e20 combinações, exigindo 1,7e13 tentativas/segundo para ser decifrada em um ano

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.

Campo de senha com aviso: Esta senha é boa, mas ainda pode ser vulnerável. Também recomendaria configurar o 2FA

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:

Duas curvas de sino comparando marcadores de qualidade objetivos com os americanos. Americanos classificam a maioria das coisas como incríveis ou um bom começo

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. 

Curva de sino intitulada Europeus Orientais. Reações de ruins a boas: Que lixo é esse?, Eu não gosto disso, e Ainda assim

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/