Pular para o conteúdo principal

Práticas recomendadas de erro no processo de login

· Leitura de 4 minutos
Alan Christian

Banner

🎨 Não importa quão bom seja nosso design, os erros são inevitáveis.

A maioria de nós, enquanto desenvolvemos sites, juramos que as mensagens de erro mostradas ao usuário final são o mais específicas possível, o que ajuda bastante na criação de um UX amigável. Mas a mesma regra, se usada no fluxo de login, pode ter implicações significativas de privacidade e segurança. Ao inserir credenciais de login incorretas, a maioria dos sites mostra variações de Invalid username/passworderro na tela de login.

Login

Pode-se presumir com segurança que não existe nenhum usuário para esses e-mails, mas as mensagens de erro exibidas por esses sites proeminentes não indicam isso. Você vê por quê?

🔏 Protegendo as informações da base de usuários

Ao alimentar e-mails aleatórios, um simples login/redefinição de senha pode mostrar que o usuário não existe e, portanto, nenhum login/redefinição de senha é possível. Um cliente hostil pode criar uma lista de usuários válidos a partir dessas informações. Nem todo site se preocupa com isso. O Facebook não.

Facebook Login

Não faz mal para um site como o Facebook vazar a base de usuários porque todo mundo está nele, mas quando o site é algo como Ashley Maddison, pode ter implicações.

Fechando o ciclo

As pessoas costumam argumentar que a base de usuários é vazada durante o processo de registro, o que não pode continuar se o usuário já existir. Esse vazamento também é evitável, continuando o registro por e-mail. Caso o usuário já exista, o e-mail pode informar, caso contrário, pode direcionar o destinatário para continuar o processo de registro.

👨🏽‍💻 Dissuasão à força bruta

Em um ataque de força bruta, um grande número de combinações de nomes de usuário e senhas são tentados a entrar na conta de um usuário. Um ataque de dicionário é mais rápido e melhor, pois aproveita as tendências humanas de usar senhas comuns e reutilizar senhas antigas. Mensagens específicas como Invalid username tornam esses ataques mais rápidos, eliminando um grande número de combinações em poucas tentativas.

Demonstração

Para quantificar a diferença que mensagens de erro detalhadas podem fazer para ataques de força bruta ou de dicionário, confira esse script, login-attack-demo, que incluía:

Dicionário

Uma coleção de 1575 senhas mais usadas com base em danielmiessler/SecLists.

🔴 Servidor ingênuo

Um servidor que emite mensagens de erro específicas com base no estágio de falha do processo de login. Se o nome de usuário for inválido, ele dirá Invalid username.

🟢 Servidor inteligente

Um servidor que emite mensagens de erro vagas em caso de falha no processo de login. Se a senha for inválida e não o nome de usuário, ainda será exibido Invalid username/password.

Atacante

Um cliente hostil que usa o dicionário para gerar um par de nome de usuário e senha e os usa para invadir o sistema. Também analisa as mensagens de erro nas seguintes regras:

  • Uma mensagem de erro dizendo que a senha era inválida indica que o nome de usuário era válido.
  • Uma mensagem de erro informando que o nome de usuário era inválido indica que nenhuma combinação de senha resultará em um login bem-sucedido.
  • Uma mensagem de erro inconclusiva é ignorada e a próxima combinação é tentada.

Métricas analises

Os pontos azuis indicam o número de tentativas que o invasor levou para invadir a conta do usuário com mensagens de erro vagas, enquanto os pontos vermelhos indicam quando as mensagens de erro eram específicas. A linha amarela é o número máximo de combinações para tentar.

É evidente que, em teoria, mensagens de erro vagas tornam bastante difícil para o invasor, às vezes até 1.000 vezes mais difícil. No entanto, tapar todos os buracos pode tornar o UX longe do ideal. No final, tudo se resume a uma troca entre UX e segurança. Dependendo do espaço que você está operando, esses métodos podem ser usados ​​para proteger os usuários.

Dicas

Vou dar alguns conselhos do ponto de vista de Segurança + UX. Eu não sacrificaria um pelo outro. Ter ambos.

Sugestões