Credential stuffing é repetir, contra o seu login, pares de email e senha vazados de outros sites. As pessoas reutilizam senhas, então uma pequena parte de qualquer lista vazada funciona em quase todo lugar. O atacante não precisa invadir o seu sistema; precisa de volume e de um formulário de login que responda rápido.
Como aparece nos seus logs
- Uma taxa de falha que dispara. Logins normais costumam dar certo. Uma rodada de stuffing falha dezenove vezes em vinte.
- Muitas contas, poucas tentativas em cada. Ao contrário da força bruta, cada conta é tentada uma ou duas vezes, então o bloqueio por conta nunca dispara.
- Muitos endereços. As tentativas vêm de pools de proxies residenciais, então bloquear os IPs que mais aparecem quase não faz diferença.
- Logins sem página. O endpoint de login é chamado direto, por clientes que nunca carregaram a página de login.
- Ritmo de máquina. Requisições em cadência constante, em horários em que os seus clientes dormem.
Por que as defesas de sempre não bastam
Rate limit por IP é vencido por pools de proxies com milhares de saídas. Bloqueio de conta prejudica mais os seus clientes do que o atacante, e pode ser usado para bloquear contas de propósito. CAPTCHAs são resolvidos por serviços pagos por uma fração de centavo. Cada um adiciona atrito para pessoas reais e um custo pequeno para os bots.
Julgue o cliente, não só a requisição
Uma ferramenta de stuffing troca IP e User-Agent a cada requisição. O difícil para ela é falsificar um navegador inteiro e consistente, que carregou a sua página, rodou o seu script e se comporta como uma pessoa ao longo da sessão:
- um token assinado da página, ausente ou compartilhado entre muitas sessões;
- sinais de automação e fingerprints de navegador que não fecham;
- um dispositivo ou token tentando muitas contas diferentes;
- novas tentativas em sequência apesar dos erros, o que pessoas não fazem.
Onde colocar a checagem
Pergunte antes de verificar a senha, para que um bot nunca descubra se um par funciona:
- bot_high: responda como se a senha estivesse errada. A ferramenta não aprende nada, e o seu cliente nem fica sabendo.
- bot: peça um segundo fator ou um código por email antes de abrir a sessão.
- todo o resto: o login normal.
Responder a um bot com o mesmo "senha errada" que uma pessoa veria faz diferença: uma página de bloqueio diferente avisa o atacante para mudar de tática.
Depois do login
Conte à sua checagem de bots o que aconteceu depois. Um login que mais tarde faz um pedido real, ou um chargeback que prova o contrário, é uma evidência que nenhum header consegue falsificar, e torna mais precisa a próxima decisão sobre o mesmo visitante.