Os perigos dos ataques de enumeração

Enquanto auditavam aplicações web, nossos especialistas encontraram uma vulnerabilidade para ataques de enumeração. Descrevemos o problema e explicamos como combate-lo.

Recentemente, ao auditar uma plataforma blockchain em busca de vulnerabilidades, nossos especialistas da Kaspersky Blockchain Security descobriram que o processo de recuperação de senha era vulnerável a um ataque por meio da enumeração de nomes de usuário. Os desenvolvedores web precisam estar atentos a esse tipo de ataque e seus perigos.

O que é um ataque de enumeração?

Aplicativos web com autenticação de senha e login geralmente incluem vários componentes que interagem com o banco de dados do usuário: a janela de login (por motivos óbvios), o formulário de cadastro (para evitar duplicação de nomes de usuário) e a página de redefinição de senha (para garantir a existência da conta correspondente). Se os desenvolvedores web não implementarem esses recursos com a devida segurança, os invasores poderão usá-los para determinar se consta um nome de usuário específico no banco de dados.

No passado, era comum os desenvolvedores implementarem todos esses recursos sem nenhuma proteção, e os cibercriminosos podiam usar uma lista de nomes de usuários e um programa que os introduzia um por um. Com o tempo, para afastar possíveis hackers, os desenvolvedores começaram a aplicar truques de proteção, como captcha, limites no número de tentativas de login e o uso de asteriscos ou outros meios para ocultar certos detalhes da resposta.

Nos aplicativos web de hoje em dia, a janela de login geralmente possui esse tipo de proteção. No entanto, às vezes não há formulários de registro e páginas de redefinição de senha. Além disso, os desenvolvedores nem sempre consideram que a presença ou ausência de um usuário no banco de dados pode ser determinada pelo tempo da resposta do servidor. Por exemplo, se o nome do usuário aparecer no banco de dados, a resposta do servidor levará 2 milissegundos. Caso contrário, a resposta leva o dobro do tempo – 4 milissegundos. Para um ser humano, a diferença é indetectável, mas fácil de ser percebida pelas ferramentas de enumeração automatizadas.

Os perigos de um ataque de enumeração com nome de usuário

Um ataque de enumeração permite a um hacker verificar se existe um nome no banco de dados. Isso não permitirá o login imediato, mas fornece metade da informação necessária. Por exemplo, para configurar um ataque de força bruta, em vez de pesquisar por pares de login e senha, tudo o que precisam é de uma senha correspondente para um nome de usuário verificado, economizando tempo e esforço.

Lembre-se também de que quase todos os serviços usam endereços de e-mail como nomes de usuário. Portanto, o usuário médio possui um login para muitos sites e nem todos os sites levam a segurança igualmente a sério; notícias de vazamentos de combinações de login e senha são deprimentemente comuns. Coleções consolidadas de dados desses vazamentos estão disponíveis em fóruns de mensagens de hackers. Além disso, as pessoas tendem a usar as mesmas senhas em sites diferentes; portanto, depois de garantir que exista um nome de usuário no site, um invasor pode buscar em um acervo desses e ver se as senhas do mesmo usuário existem em outros sites – e depois tentar essas senhas.

Além disso, os operadores de spear phishing costumam usar ataques de enumeração durante a fase de reconhecimento. Depois de verificar se o alvo tem uma conta em um determinado serviço, podem enviar um e-mail que parece vir de você, solicitando ao usuário que altere sua senha e faça o link para uma página de phishing parecida com o site original. Quando o cliente desavisado digita uma nova senha, também é preciso confirmar a antiga – e, assim, fornecer aos golpistas tudo o que precisam.

Como se proteger contra um ataque de enumeração

Você já reparou como os sites atuais respondem ao envio de um formulário de redefinição de senha? Eles não dizem “Um link para redefinir sua senha foi enviado a você” ou “O e-mail especificado não está em nosso banco de dados”, como costumava ser. Em vez disso, escrevem: “Se este e-mail existir em nosso banco de dados, enviaremos uma mensagem com um link”. Em outras palavras, os sites não confirmam ou negam explicitamente a existência do nome de usuário. Essa alteração foi feita especificamente para proteger os usuários contra ataques de enumeração.

Da mesma forma, não é necessário explicar em detalhes na janela de login que o usuário digitou uma senha incorreta ou que esse nome de usuário não existe no sistema. Basta dizer que a combinação de login / senha não foi encontrada. Não é o ideal do ponto de vista de experiência do usuário – eu fico exasperado quando esqueço qual e-mail usei para cadastro, mesmo tendo certeza da senha ou vice-versa, mas o site não me dá nenhuma pista sobre qual campo eu errei. No entanto, a segurança quase sempre tem o custo do conforto e, no caso de serviços de autenticação, torna-se um pequeno preço para um ganho maior.

Obviamente, o uso de um captcha e as limitações nas tentativas de login também são obrigatórios. Além disso, para garantir a segurança do seu aplicativo web, recomendamos a realização de uma auditoria de terceiros. E se você estiver na tecnologia blockchain, nossos colegas do Kaspersky Blockchain Security podem ajudar na análise de segurança de aplicativos web.

Dicas