Quebrar senha é uma das etapas que mais rende em teste interno, e uma das mais mal compreendidas. Muita gente imagina o atacante digitando tentativas numa tela de login. Na prática, quase toda quebra acontece fora do sistema, sobre dados que já foram obtidos.
Entender como isso funciona é o que permite, do lado da defesa, criar senhas que não valem a pena atacar.
Primeiro: hash não é criptografia
Sistemas sérios não guardam a sua senha. Eles guardam um hash dela, o resultado de uma função que transforma a senha em uma sequência de tamanho fixo e da qual, em tese, não se volta atrás.
Quando você faz login, o sistema calcula o hash do que você digitou e compara com o que está guardado. A senha em si nunca é armazenada. Por isso a quebra não é “descriptografar”: é adivinhar uma entrada que produza o mesmo hash.
Por que a quebra acontece fora do sistema
Tentar senhas na tela de login é lento e barulhento: o sistema limita tentativas e dispara alarme, como tratei ao falar de fail2ban em Hardening de servidores Linux.
Mas quando o atacante já obteve os hashes, por exemplo depois de comprometer um servidor ou uma base, ele leva esse material para a própria máquina e testa bilhões de possibilidades por segundo, sem nenhum limite e sem gerar um único registro no sistema-alvo. É por isso que vazamento de base de senhas é tão grave mesmo quando as senhas estão em hash.
As três abordagens
| Abordagem | Como funciona | Contra o que é eficaz |
|---|---|---|
| Dicionário | Testa listas de senhas conhecidas e vazadas | Senhas comuns e reaproveitadas |
| Regras sobre dicionário | Aplica transformações típicas, como trocar a por @ ou somar um número no fim | Senhas “espertas” que seguem padrão previsível |
| Força bruta | Testa todas as combinações possíveis | Só senhas curtas, fica inviável com o tamanho |
A ordem prática é sempre essa: dicionário primeiro, porque a maioria das senhas cai ali; regras depois; força bruta por último e só em senha curta, porque o custo cresce absurdamente com cada caractere a mais.
A conta que explica tudo
O poder da força bruta esbarra na matemática. Cada caractere adicional multiplica o espaço de possibilidades. Uma senha de oito caracteres pode cair em horas; a mesma composição com dezesseis caracteres levaria mais tempo do que faz sentido esperar.
É por isso que comprimento vence complexidade. Uma frase longa e fácil de lembrar resiste muito mais do que uma sequência curta cheia de símbolos. O símbolo dificulta o dicionário; o comprimento derrota a força bruta, que é o ataque que não tem como ser impedido depois que o hash vazou.
O que torna o hash mais difícil de quebrar
Nem todo hash é igual. Do lado de quem guarda senhas, três decisões definem se um vazamento é catástrofe ou apenas incidente.
- Sal. Um valor aleatório somado a cada senha antes do hash. Impede que o atacante quebre todas de uma vez com tabelas pré-calculadas, e força atacar uma por uma.
- Função lenta e própria para senha. Funções feitas para serem deliberadamente custosas tornam cada tentativa cara. O que é imperceptível em um login vira barreira enorme para quem precisa de bilhões de tentativas.
- Custo ajustável. Poder aumentar a dificuldade conforme o hardware evolui mantém a proteção ao longo dos anos.
Base que usa função de hash rápida e sem sal é a que produz aqueles vazamentos em que milhões de senhas são reveladas em pouco tempo.
Do lado do teste: o que reportar
Em um teste autorizado, a quebra de senhas gera achados valiosos, e o relatório deve tratá-los com cuidado, seguindo a mesma lógica de Metodologia de teste de invasão em aplicações web:
- Não liste as senhas em claro no relatório. Reporte estatísticas: quantas caíram, em quanto tempo, com qual abordagem.
- Aponte padrões perigosos, como uso do nome da empresa ou do ano corrente.
- Destaque senhas reaproveitadas entre contas, que transformam uma quebra em várias.
- Recomende a política concreta: comprimento mínimo alto, verificação contra senhas vazadas, e segundo fator onde importa.
A defesa que encerra o assunto
A quebra de senhas ataca o que a senha tem de fraco: ser um segredo que se adivinha. A defesa definitiva é reduzir a importância da senha, adicionando um segundo fator, ou eliminá-la, como discuti em Passkeys em ambiente corporativo.
Senha que, sozinha, não abre nada, é senha que não vale a pena quebrar. E tornar o ataque inútil é sempre melhor do que apenas torná-lo mais difícil.