Ataques de Dicionário com Hashcat

LinuxBeginner
Pratique Agora

Introdução

Hashcat é uma ferramenta poderosa e versátil de recuperação de senhas, amplamente utilizada em cibersegurança para testar a força de senhas e recuperar senhas perdidas. Ele suporta inúmeros algoritmos de hash e vários modos de ataque.

Neste laboratório, você se concentrará em uma das técnicas mais fundamentais de quebra de senhas: o ataque de dicionário (dictionary attack). Você aprenderá a usar o modo de ataque "Direto" (-a 0) do Hashcat para quebrar um hash MD5 simples usando uma lista de palavras (wordlist) personalizada. Esta experiência prática fornecerá uma base sólida para entender como funciona a quebra de senhas.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 100%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Compreender o conceito de ataque de dicionário (-a 0)

Nesta etapa, você aprenderá sobre o ataque de dicionário e como ele é implementado no Hashcat.

Um ataque de dicionário é um método de invasão em um sistema protegido por senha, inserindo sistematicamente cada palavra de uma lista, chamada dicionário ou wordlist, como senha. É uma técnica simples, mas eficaz, especialmente contra senhas fracas ou comuns.

O Hashcat se refere a este método como um ataque "Direto" (Straight), ao qual é atribuído o número de modo de ataque 0. Você especifica o modo de ataque usando a opção -a.

Vamos usar o comando hashcat --help para ver exemplos do modo de ataque 0. Podemos canalizar a saída (pipe) para o grep para encontrar as linhas específicas.

hashcat --help | grep -- "-a 0"

Você verá a seguinte saída, mostrando exemplos de ataques de dicionário usando -a 0:

  Wordlist         | $P$   | hashcat -a 0 -m 400 example400.hash example.dict
  Wordlist + Rules | MD5   | hashcat -a 0 -m 0 example0.hash example.dict -r rules/best64.rule

Isso confirma que, para realizar um ataque de dicionário, você usará a opção -a 0 no seu comando Hashcat, onde -a 0 representa o modo de ataque Direto (dicionário).

Preparar um arquivo de hash alvo e uma wordlist simples

Nesta etapa, você preparará os dois arquivos essenciais necessários para um ataque de dicionário: um arquivo contendo o hash alvo e um arquivo de lista de palavras (wordlist). Todas as operações serão realizadas no diretório ~/project.

Primeiro, vamos criar um arquivo para armazenar nosso hash alvo. Usaremos o hash MD5 da string "password123", que é 482c811da5d5b4bc6d497ffa98491e38.

Use o comando echo para criar um arquivo chamado my_hash.txt contendo este hash.

echo "482c811da5d5b4bc6d497ffa98491e38" > my_hash.txt

Em seguida, crie um arquivo de lista de palavras simples chamado my_wordlist.txt. Uma wordlist do mundo real pode conter milhões de palavras, mas para este laboratório, criaremos uma pequena que inclua a senha correta.

echo "password" > my_wordlist.txt
echo "123456" >> my_wordlist.txt
echo "password123" >> my_wordlist.txt
echo "qwerty" >> my_wordlist.txt

Agora, verifique o conteúdo de ambos os arquivos usando o comando cat.

Primeiro, verifique o arquivo de hash:

cat my_hash.txt

Saída esperada:

482c811da5d5b4bc6d497ffa98491e38

Em seguida, verifique o arquivo de wordlist:

cat my_wordlist.txt

Saída esperada:

password
123456
password123
qwerty

Agora você tem um hash alvo e uma wordlist, prontos para o ataque.

Lançar um ataque de dicionário em um hash MD5

Nesta etapa, você iniciará o ataque de dicionário contra o hash MD5 que você preparou.

Para fazer isso, você precisa construir um comando Hashcat que especifique o modo de ataque, o tipo de hash, o arquivo de hash e o arquivo de wordlist.

A estrutura do comando é a seguinte:
hashcat [opções] [arquivo_hash] [arquivo_wordlist]

Aqui estão as opções que usaremos:

  • -a 0: Especifica o modo de ataque Direto (Straight, dicionário).
  • -m 0: Especifica o tipo de hash. 0 corresponde a MD5. É crucial que o tipo de hash esteja correto.
  • --force: Esta opção é frequentemente necessária em ambientes virtualizados ou ao rodar na CPU para ignorar certos avisos e forçar a execução do Hashcat.

Agora, execute o comando para iniciar o ataque:

hashcat -a 0 -m 0 my_hash.txt my_wordlist.txt --force

O Hashcat iniciará e exibirá uma tela de status. Como nossa wordlist é muito pequena, o processo terminará quase instantaneamente. A saída será semelhante a esta (alguns detalhes como o tempo de início variarão):

hashcat (v6.2.6) starting

... (some initial warnings and info) ...

Session..........: hashcat
Status...........: Cracked
Hash.Type........: MD5
Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38
Time.Started.....: Sun Nov 19 10:30:00 2023 (0 secs)
Time.Estimated...: Sun Nov 19 10:30:00 2023 (0 secs)
Guess.Base.......: File (my_wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#*.........:   133.7 kH/s (0.02ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 3/4 (75.00%)
Restore.Sub.#*...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#*....: password123 -> qwerty
Hardware.Mon.#*..: Temp: 45c

Started: ...
Stopped: ...

A linha Status...........: Cracked indica que a senha foi encontrada com sucesso em sua wordlist.

Analisar o status de saída e as palavras-chave

Nesta etapa, você analisará mais detalhadamente a saída da etapa anterior para entender o que ela significa. Quando o Hashcat quebra um hash com sucesso, ele salva o resultado em um arquivo chamado "potfile" e relata o sucesso na tela.

Vamos analisar as linhas chave da saída de status:

  • Status...........: Cracked: Este é o indicador mais importante. Confirma que pelo menos um hash foi quebrado com sucesso. Se estivesse escrito Exhausted (Esgotado), significaria que o Hashcat tentou todas as palavras na wordlist sem sucesso.
  • Hash.Type........: MD5: Confirma o algoritmo de hash que está sendo visado.
  • Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38: Mostra o hash que está sendo atacado.
  • Guess.Base.......: File (my_wordlist.txt): Indica que a fonte dos candidatos a senha é nosso arquivo de wordlist.
  • Recovered........: 1/1 (100.00%) Digests: Mostra que, de 1 hash total fornecido, 1 foi recuperado.
  • Progress.........: 4/4 (100.00%): Indica que todas as 4 palavras da nossa wordlist foram testadas.

Após uma quebra bem-sucedida, o Hashcat armazena automaticamente o hash quebrado e sua senha em texto simples correspondente em seu potfile. O local padrão para este arquivo é ~/.local/share/hashcat/hashcat.potfile. Isso evita que você perca tempo quebrando o mesmo hash novamente no futuro.

Você pode verificar se o potfile foi criado listando seu conteúdo, mas usaremos um recurso mais direto do Hashcat na próxima etapa.

Visualizar a senha decifrada usando a opção '--show'

Nesta etapa, você aprenderá como visualizar a senha quebrada usando uma opção conveniente do Hashcat.

Embora você pudesse inspecionar o potfile diretamente, o Hashcat fornece a opção --show para exibir as senhas quebradas dos hashes em um determinado arquivo. Ele cruza seu arquivo de hash com seu potfile e imprime quaisquer correspondências que encontrar.

Para usar esta opção, você precisa fornecer o arquivo de hash original e especificar o tipo de hash, assim como fez para o ataque.

Execute o seguinte comando:

hashcat -m 0 my_hash.txt --show

O Hashcat imprimirá imediatamente o resultado no formato hash:senha.

482c811da5d5b4bc6d497ffa98491e38:password123

Esta saída mostra claramente o hash MD5 original e sua senha em texto simples correspondente, "password123".

Para comparação, você também pode visualizar o conteúdo bruto do potfile. Isso mostrará a mesma informação, mas --show é frequentemente mais limpo quando você deseja verificar hashes específicos.

cat ~/.local/share/hashcat/hashcat.potfile

Saída esperada:

482c811da5d5b4bc6d497ffa98491e38:password123

Usar --show é a maneira padrão de verificar senhas já quebradas no banco de dados do Hashcat.

Resumo

Neste laboratório, você aprendeu os fundamentos da execução de um ataque de dicionário com o Hashcat. Você quebrou com sucesso um hash MD5 testando candidatos de uma wordlist pequena e personalizada.

Você adquiriu experiência prática com as seguintes habilidades principais:

  • Compreender o conceito de ataque de dicionário e o modo de ataque Direto (Straight attack) do Hashcat (-a 0).
  • Preparar um arquivo de hash alvo e um arquivo de wordlist.
  • Iniciar um ataque a um hash MD5 especificando o modo de ataque correto (-a 0) e o tipo de hash (-m 0).
  • Analisar a tela de status para confirmar uma quebra bem-sucedida.
  • Visualizar a senha quebrada usando a opção --show.

Este conhecimento forma uma base crítica para explorar técnicas mais avançadas de quebra de senhas e entender a importância de usar senhas fortes e exclusivas.