Também concordo que isso torna os ataques de dicionário menos eficazes como formas de obter acesso a uma conta sem a devida autoridade. Contudo:
Essa abordagem pode transformar um ataque de dicionário em um ataque do DOS contra o sistema, impedindo o acesso, se implementado mal. Por exemplo, um servidor pode ser inundado com tentativas de autenticação. Uma maneira de contornar isso é fazer com que o serviço de autenticação controle o fluxo de acessos subseqüentes a uma conta bloqueada. Por exemplo, se uma conta estiver bloqueada, apresente um atraso antes de cada tentativa de login subsequente. Pode-se colocar um atraso entre uma tentativa de login e um `acesso negado ', no entanto, que mantém a porta aberta para um ataque distribuído de negação de serviço, no qual um invasor lança muitas tentativas de autenticação simultâneas.
Como mencionado na outra resposta, isso também pode transformar um ataque de dicionário em um DOS bruto contra o proprietário legítimo da conta que está sendo atacada. As maneiras de mitigar o impacto para o legítimo proprietário incluem:
- Retardar a execução de nomes de usuário, sem fornecer pistas sobre se o nome de usuário ou a senha estão incorretos. Isso torna os ataques nos quais o culpado adivinha nomes de usuários mais visíveis aos administradores e menos eficazes.
- Em vez de bloquear uma conta após um número fixo de tentativas com falha, simplesmente bloqueie esse modo de autenticação. Em outras palavras, exija que um usuário cuja conta está sendo atacada se autentique usando um método diferente (possivelmente mais envolvido, mas menos facilmente atacado). Um bom exemplo é como um telefone Android exigirá que o usuário use suas informações de login do Google depois de não se autenticar usando um padrão de desbloqueio de tela ou PIN. Em teoria, é mais ou menos como exigir que um usuário atacado solicite o desbloqueio da sua conta, no entanto, não requer intervenção imediata de um administrador do sistema.
- Em vez de bloquear uma conta (ou além de bloquear uma conta, para este modo específico de autenticação - veja acima), o bloqueio tenta autenticar no local onde o ataque está se originando. Por exemplo, se a autenticação for feita através de um nome de usuário e senha, através da rede, após três tentativas de autenticação com falha, você poderá impedir que novas tentativas de usuários do mesmo IP ou sub-rede entrem com um nome de usuário ou senha. Onde houver uma boa chance de vários usuários (incluindo o invasor) estarem usando o mesmo IP ou sub-rede, você pode simplesmente desativar a autenticação de nome de usuário / senha para o IP ou sub-rede por um período de tempo, deixando os métodos de autenticação mais envolvidos abertos para inocentes usuários próximos ao atacante.
Se o seu medo está inadvertidamente penalizando um usuário esquecido como se fosse um invasor, em vez de controlar o fluxo de tentativas de login com falha após um número fixo de tentativas com falha, você pode usar a frequência de tentativas de login como evidência de que uma conta está sendo atacada. Por exemplo, se você vir 10 tentativas de autenticação no espaço de um segundo, poderá usar um dos métodos acima para impedir novas tentativas de autenticação semelhantes. Como alternativa, você pode usar essa enxurrada rápida de tentativas de login como um sinal para começar a controlar o fluxo. Esse método está se tornando cada vez mais popular nos fóruns, enquanto, após uma certa quantidade de tentativas de login com falha de um IP específico, esse IP é impedido de se autenticar por um curto período de tempo.
Finalmente, uma boa maneira de impedir que um usuário seja repetidamente alvo de um ataque do DOS é permitir que ele redefina sua senha e nome de usuário . Em outras palavras, trate o nome de usuário e a senha como segredos. Onde o nome de usuário for usado em outro lugar (por exemplo, em um fórum, se o nome de usuário for o nome de exibição do usuário), simplesmente trate esse nome de exibição como algo separado. Essa abordagem geralmente é usada pelas redes sociais em que o nome de usuário usado na autenticação é o endereço de e-mail de alguém - algo que pode ser alterado, mas raramente é compartilhado - enquanto o nome de exibição usado no site é algo definido pelo usuário que pode ou não ser alterado.
De qualquer forma, espero que uma ou alguma combinação dessas abordagens seja útil.