Pontos Fracos da Segurança em 3 Greves

10

Eu tenho lido alguma literatura sobre segurança, especificamente segurança / criptografia de senha, e há uma coisa que eu estou me perguntando: a regra dos 3 ataques é uma solução perfeita para a segurança de senhas? Ou seja, se o número de tentativas de senha for limitado a um número pequeno, após o qual todas as solicitações de autenticação não serão atendidas, isso não protegerá os usuários contra invasões? Sei que obter acesso ou controle sobre algo nem sempre significa passar pelo sistema de autenticação, mas esse recurso não torna obsoletos os ataques de dicionário / força bruta? Tem algo que estou perdendo?

prelic
fonte
3
Essa pergunta pode ter sido melhor feita na Security para referência futura.
Maple_shaft
11
Como eu descobri, sempre há um lugar mais apropriado para perguntar. Obrigado, porém, vou tentar lembrar disso.
Prelic 06/04

Respostas:

13

Sim, isso tornará os ataques de dicionário impossíveis através do mecanismo de login . (Porém, isso não significa muito se eles obtiverem acesso ao banco de dados. Por segurança, você precisará hash e salgar as senhas corretamente.)

Também permite a possibilidade de um ataque do DOS contra um determinado usuário. Digamos que eu queira impedir que você faça o login. Tudo o que eu preciso fazer é executar três tentativas de login falsas na sua conta e fazê-lo novamente toda vez que você fizer o necessário para redefinir o login. Lidar com esse problema é um pouco mais complicado.

Mason Wheeler
fonte
11
Obrigado! Por curiosidade, qual seria uma abordagem para lidar com o último problema que você descreveu? Para um exemplo do mundo real, vários fóruns on-line usam o nome de usuário público como o ID de logon (em oposição a um e-mail anexado à conta ou algo mais), o que significa que posso ver o que cada usuário está usando para fazer login. O que me impede de bloquear todos os usuários da conta deles? Um bom administrador? Parece que seria trivialmente fácil bloquear todos os usuários fora do site.
prelic
@prelic: Bem, para lidar com esse problema, eu implementaria algo como "se um determinado endereço IP fizer muitas tentativas inválidas de login, bloqueie-as". Isso interromperá o cenário que você mencionou, mas não lidará com uma tentativa séria de invasão como uma botnet. Para isso, você precisa de segurança mais pesada.
Mason Wheeler
4
A solução usual é limitar a taxa de tentativas que um determinado usuário recebe de um IP fixo digita 5 por minuto. Não é perfeito, mas geralmente você não criar problemas para outros usuários, a menos que você acontecer para estar por trás do mesmo proxy
Andrea
Outra abordagem é apresentar um captcha após 2 tentativas de logon com falha do mesmo IP - mas então, um invasor determinado pode apenas alugar um turk mecânico de quebra de captcha para esse fim, além de ser muito difícil encontrar um bom captcha que realmente mantenha as máquinas Fora.
Tdjdjdjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj /
3

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.

ctt
fonte