Senhas são, ainda hoje, a principal barreira entre um atacante e um sistema — e, frequentemente, a mais frágil. Antes de aprender a atacá-las, você precisa entender profundamente contra o que está lutando, porque "quebrar uma senha" significa coisas técnicas muito diferentes conforme a situação. Esta aula estabelece a teoria que torna os ataques das próximas três compreensíveis em vez de mágicos, retomando e aprofundando o que você viu sobre hashes na aula Hashes e assinaturas digitais: a impressão digital dos dados.
Online contra offline: duas famílias
Comece pela distinção mais importante do bloco, que separa duas famílias completamente diferentes de ataque: online vs. offline. Um ataque online tenta autenticar diretamente contra um serviço vivo — você envia usuário e senha ao SSH, ao RDP, ao painel de login, e vê se entra. Um ataque offline ocorre quando você já obteve os hashes das senhas (de um vazamento, do arquivo SAM de um Windows comprometido, de um banco de dados) e tenta descobrir as senhas sem interagir com nenhum serviço — trabalhando localmente sobre os hashes. Essa diferença muda tudo: o ataque online é lento e barulhento (cada tentativa é uma requisição de rede, sujeita a bloqueios de conta, alertas, e limites de velocidade), enquanto o offline é rápido e silencioso (você testa bilhões de candidatas por segundo na sua própria máquina, sem ninguém para te barrar ou detectar). Reconhecer em qual situação você está determina qual ferramenta e estratégia usar — Hydra para online (aula Brute force online com Hydra: atacando serviços vivos), John/Hashcat para offline (aula Cracking offline com John e Hashcat: quebrando hashes em escala).
Não reverter o hash: adivinhar e conferir
Relembre o coração conceitual da aula Hashes e assinaturas digitais: a impressão digital dos dados: sistemas bem projetados não armazenam senhas, armazenam hashes. O hash é unidirecional — você não o "reverte". Então como um ataque offline funciona? Ele não reverte o hash; ele adivinha e confere. O atacante pega uma candidata a senha, calcula o hash dela com o mesmo algoritmo, e compara com o hash-alvo; se baterem, a candidata é a senha. Como o hash é determinístico (mesma entrada → mesmo hash), essa comparação funciona. Todo cracking de senha, no fundo, é esse laço: gerar candidata → hashear → comparar → repetir. A velocidade do ataque depende de quantas candidatas você consegue testar por segundo, e é por isso que o algoritmo de hash importa tanto — um hash rápido (MD5, SHA-256 cru) permite testar bilhões por segundo; um hash lento e deliberadamente custoso (bcrypt, Argon2) reduz isso a alguns milhares, tornando o ataque ordens de magnitude mais difícil.
Dicionário, força bruta e regras
As estratégias de geração de candidatas definem os tipos de ataque, e você precisa conhecê-las: O ataque de dicionário usa uma lista pré-definida de senhas prováveis (uma wordlist) — é o mais eficiente, porque a maioria das pessoas usa senhas comuns, e testar as 10 milhões de senhas mais frequentes captura uma fração enorme dos usuários. O ataque de força bruta puro testa todas as combinações possíveis de caracteres — garantidamente encontra a senha, mas é inviável para senhas longas (o número de combinações explode exponencialmente com o comprimento). O ataque híbrido combina os dois: pega palavras do dicionário e aplica variações (adicionar números no fim, trocar letras por símbolos — "senha" vira "S3nh@2024"), capturando as senhas "espertas" que as pessoas acham seguras mas seguem padrões previsíveis. Na prática, o dicionário e o híbrido resolvem a esmagadora maioria dos casos; a força bruta pura é último recurso.
As wordlists e a rockyou.txt
Isso nos leva às wordlists, a matéria-prima do cracking. A mais famosa é a rockyou.txt — uma lista de milhões de senhas reais vazadas de um serviço anos atrás, que se tornou o dicionário padrão da indústria justamente por conter senhas que humanos de verdade usaram. Ela já vem no Kali. Existem wordlists especializadas (por idioma, por tema, por serviço), e ferramentas como o crunch geram listas customizadas segundo regras, e o CeWL cria wordlists a partir do site do próprio alvo (capturando jargões e termos específicos da organização — que funcionários tendem a usar em senhas). A qualidade da wordlist frequentemente determina o sucesso: uma lista bem escolhida, adaptada ao contexto do alvo, crackeia o que uma lista genérica não pega.
Dois ingredientes: usuários e candidatas
O último conceito, que amarra tudo e conecta com a enumeração do Bloco VI, é que um ataque de senha precisa de dois ingredientes: usuários e senhas candidatas. Você já domina metade: as listas de usuários que a enumeração SMB, RPC, LDAP e SMTP revelou (aulas Enumeração SMB: o protocolo mais explorado do mundo Windows a Enumeração SMTP, POP3 e IMAP: minerando os serviços de e-mail) são exatamente os usuários que você vai atacar. Agora você adiciona as candidatas (wordlists). Essa é a convergência que torna o bloco anterior tão valioso: sem a enumeração, você adivinharia usuários e senhas às cegas; com ela, você sabe quem atacar e concentra o esforço só nas senhas. Do lado defensivo, entender essa teoria já aponta as contramedidas que detalharemos: senhas longas e únicas (derrotam dicionário e força bruta), hashing lento com salt (derrota o cracking offline em massa), e limites de tentativa (derrotam o ataque online) — cada defesa mira uma parte específica desta mecânica.
Fontes e leituras recomendadas
- OWASP Authentication Cheat Sheet — fundamentos de autenticação segura
- SecLists (github.com/danielmiessler/SecLists) — a coleção de referência de wordlists
- Documentação do crunch e do CeWL — geração de wordlists customizadas
- The Hacker Playbook — capítulos sobre ataques de credenciais
Exercícios
-
Explique a diferença entre um ataque online e um offline, destacando as implicações de velocidade e detecção de cada um.
✓ Resposta:O online tenta autenticar contra um serviço vivo (envia credenciais e vê se entra), sendo lento e barulhento — sujeito a bloqueio de contas, limites de taxa e alertas. O offline trabalha localmente sobre hashes já obtidos, sendo rápido e silencioso — testa bilhões de candidatas por segundo sem interagir com nenhum serviço nem ser detectado.
-
Se o hash é unidirecional e não pode ser revertido, como um ataque offline descobre a senha? Descreva o laço.
✓ Resposta:Ele não reverte o hash; adivinha e confere. Pega uma candidata a senha, calcula o hash dela com o mesmo algoritmo e compara com o hash-alvo; se baterem, a candidata é a senha. O laço é: gerar candidata → hashear → comparar → repetir. Funciona porque o hash é determinístico.
-
Por que o algoritmo de hash (rápido vs. lento) afeta drasticamente a viabilidade de um ataque de cracking?
✓ Resposta:Porque a velocidade do ataque depende de quantas candidatas se testa por segundo. Hashes rápidos (MD5, SHA-256 cru) permitem bilhões de tentativas por segundo; hashes lentos e custosos (bcrypt, Argon2) reduzem isso a milhares, tornando o cracking em massa ordens de magnitude mais difícil.
-
Diferencie ataque de dicionário, força bruta e híbrido, e explique por que o híbrido captura senhas "espertas".
✓ Resposta:Dicionário usa uma lista de senhas prováveis (eficiente, pois pessoas usam senhas comuns); força bruta testa todas as combinações possíveis (garantido, mas inviável para senhas longas); híbrido combina os dois, aplicando variações a palavras do dicionário (números, símbolos). O híbrido captura senhas "espertas" porque elas seguem padrões previsíveis (ex.: "S3nh@2024") que derivam de palavras comuns.
-
Quais são os dois ingredientes de um ataque de senha, e como a enumeração do Bloco VI fornece um deles?
✓ Resposta:Usuários e senhas candidatas. A enumeração do Bloco VI (SMB, RPC, LDAP, SMTP) fornece as listas de usuários válidos, permitindo concentrar o ataque apenas nas senhas em vez de adivinhar também quem são as contas.