Agora o outro lado do bloco, e o mais poderoso: o ataque offline. Você já obteve os hashes das senhas — do arquivo SAM de um Windows comprometido, de um /etc/shadow do Linux, de um dump de banco de dados, de um vazamento. Sem nenhum serviço para te barrar, você trabalha localmente, testando candidatas na velocidade do seu hardware — potencialmente bilhões por segundo. As duas ferramentas soberanas são o John the Ripper e o Hashcat. Esta aula ensina a usá-las e, no caminho, consolida por que as defesas de hashing da aula Hashes e assinaturas digitais: a impressão digital dos dados importam tanto. Tudo, claro, sobre hashes obtidos em laboratório autorizado.

Primeiro, identificar o tipo de hash

O primeiro passo de todo ataque offline é identificar o tipo de hash, porque cada algoritmo (MD5, SHA-1, NTLM, bcrypt...) exige um modo de ataque específico. Um hash tem características reconhecíveis — comprimento, formato, prefixos. Ferramentas ajudam:

hashid '5f4dcc3b5aa765d61d8327deb882cf99'      # identifica o provável algoritmo
hash-identifier                                  # alternativa interativa

Identificar errado o hash faz o ataque falhar silenciosamente, então este passo é essencial. Aquele hash de exemplo, aliás, é o MD5 da senha "password" — um lembrete de como senhas comuns são triviais.

John the Ripper para começar

O John the Ripper é versátil e ótimo para começar. Ele frequentemente autodetecta o tipo de hash e tem modos inteligentes:

# ataque de dicionário com uma wordlist
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt

# modo "single" e incremental (força bruta inteligente) — John decide muito sozinho
john hashes.txt

# mostra as senhas já quebradas
john --show hashes.txt

Os utilitários *2john

O John também traz utilitários valiosos: os scripts *2john convertem formatos protegidos em hashes que ele pode atacar — por exemplo, zip2john arquivo.zip > hash.txt extrai o hash de um ZIP protegido por senha, ssh2john de uma chave SSH cifrada. Isso amplia o alcance do cracking para muito além de senhas de login.

Hashcat e a força da GPU

O Hashcat é o campeão de velocidade, porque usa a GPU (placa de vídeo) em vez da CPU. GPUs têm milhares de núcleos otimizados para cálculos paralelos, e como o cracking é justamente calcular o mesmo hash milhões de vezes em paralelo, uma boa GPU acelera o ataque em ordens de magnitude — de milhões para bilhões de tentativas por segundo em hashes rápidos. O Hashcat usa números de modo para especificar o algoritmo e tipos de ataque:

# -m = modo (tipo de hash); -a = tipo de ataque (0 = dicionário)
hashcat -m 0 -a 0 hashes.txt rockyou.txt          # MD5 com dicionário
hashcat -m 1000 -a 0 hashes.txt rockyou.txt       # NTLM (hashes do Windows!)
hashcat -m 1800 -a 0 hashes.txt rockyou.txt       # sha512crypt (Linux moderno)

# ataque híbrido com "regras" que transformam as palavras do dicionário
hashcat -m 0 -a 0 hashes.txt rockyou.txt -r regras.rule

NTLM e o poder das regras

O modo -m 1000 (NTLM) é especialmente relevante: são os hashes do Windows que você extrai numa pós-exploração (aula Windows internals: processos, registro e o coração da autenticação), e crackeá-los revela as senhas em texto claro, úteis para movimentação lateral. As regras (-r) são o recurso mais poderoso do Hashcat: elas aplicam transformações programáveis às palavras da wordlist (capitalizar, adicionar números, substituir letras por símbolos), materializando o ataque híbrido da aula Teoria de autenticação e hashes: entendendo o que você vai quebrar de forma industrial — uma wordlist de 14 milhões vira efetivamente bilhões de candidatas "humanamente plausíveis" sem você listá-las manualmente.

Força da senha e força do algoritmo

Aqui a teoria da aula Hashes e assinaturas digitais: a impressão digital dos dados vira realidade tangível, e é a lição central: o sucesso do cracking offline depende de dois fatores — a força da senha e a força do algoritmo de hash. Contra hashes rápidos (MD5, NTLM, SHA sem salt), o Hashcat com GPU testa bilhões por segundo, e qualquer senha fraca ou média cai em segundos ou minutos; senhas longas e aleatórias resistem, mas as comuns evaporam. Contra hashes lentos e salgados (bcrypt, Argon2), a história muda radicalmente: o salt anula rainbow tables e força ataque individual por hash, e a lentidão deliberada derruba a velocidade para milhares por segundo — tornando o cracking em massa impraticável mesmo com hardware potente. É a demonstração viva de por que essas defesas existem: elas não impedem o cracking, elas o tornam economicamente inviável. Você vai sentir, na prática do laboratório, a diferença abissal entre crackear um dump de MD5 (rápido) e um de bcrypt (agonizante) — e essa experiência ensina, melhor que qualquer texto, por que a escolha do algoritmo de armazenamento é uma decisão de segurança crítica.

A defesa: hash lento, salgado e adaptativo

Do lado defensivo, tudo se conecta e fecha o raciocínio do bloco. As contramedidas contra o cracking offline são exatamente as defesas de armazenamento de senha da aula Hashes e assinaturas digitais: a impressão digital dos dados, agora com o "porquê" visceral: usar funções lentas, salgadas e adaptativas (bcrypt, scrypt, Argon2) que tornam o ataque inviável; jamais MD5/SHA cru para senhas; impor senhas longas e únicas que resistem mesmo a hashes rápidos; e, transversalmente, proteger os hashes em primeiro lugar — porque o ataque offline só é possível se o atacante obteve os hashes, o que significa que impedir o vazamento (proteger o SAM, o shadow, o banco) é a defesa de origem. Um vazamento de hashes bem-feitos (bcrypt + senhas fortes) é muito menos catastrófico que um de hashes fracos (MD5 + senhas comuns), que equivale a vazar as senhas em texto claro.

Fontes e leituras recomendadas

Exercícios

  1. Por que identificar o tipo de hash é o primeiro passo essencial de um ataque offline?

    ✓ Resposta:

    Porque cada algoritmo de hash (MD5, NTLM, bcrypt...) exige um modo de ataque específico; identificar errado faz o ataque falhar silenciosamente. Ferramentas como hashid ajudam a reconhecer o algoritmo pelas características do hash.

  2. Qual a diferença fundamental de abordagem entre John the Ripper e Hashcat, e por que a GPU torna o Hashcat tão rápido?

    ✓ Resposta:

    O John é versátil e roda tipicamente em CPU, com boa autodetecção e modos inteligentes; o Hashcat é otimizado para velocidade usando a GPU. A GPU acelera porque tem milhares de núcleos paralelos, e o cracking consiste em calcular o mesmo hash em paralelo milhões de vezes, o que se ajusta perfeitamente a essa arquitetura.

  3. Para que servem os utilitários *2john (como zip2john) e o modo -m 1000 do Hashcat?

    ✓ Resposta:

    Os utilitários *2john convertem formatos protegidos (ZIP, chaves SSH) em hashes atacáveis, ampliando o cracking além de logins. O -m 1000 especifica o modo NTLM, permitindo crackear os hashes de senha do Windows obtidos na pós-exploração.

  4. Explique como o mesmo ataque offline tem resultados radicalmente diferentes contra hashes MD5 versus bcrypt, e o que isso demonstra sobre as defesas.

    ✓ Resposta:

    Contra MD5 (rápido, sem salt), o Hashcat com GPU testa bilhões por segundo e senhas fracas/médias caem quase imediatamente; contra bcrypt (lento e salgado), o salt impede rainbow tables e a lentidão reduz a velocidade a milhares por segundo, tornando o cracking em massa impraticável. Isso demonstra que as defesas de hashing não impedem o cracking, mas o tornam economicamente inviável.

  5. Quais são as contramedidas contra cracking offline, e por que "proteger os hashes em primeiro lugar" é a defesa de origem?

    ✓ Resposta:

    Contramedidas: usar funções lentas, salgadas e adaptativas (bcrypt/scrypt/Argon2), nunca MD5/SHA cru, e exigir senhas longas e únicas. Proteger os hashes em primeiro lugar é a defesa de origem porque o ataque offline só existe se o atacante obteve os hashes; impedir o vazamento (proteger SAM, shadow, banco) elimina a possibilidade do ataque na raiz.