Use o Hashcat Brain para Quebra Distribuída

Kali LinuxBeginner
Pratique Agora

Introdução

Hashcat é uma ferramenta de recuperação de senhas mundialmente renomada, conhecida por sua velocidade e versatilidade. Ao realizar ataques de senhas em larga escala, é comum usar múltiplos sistemas para atacar a mesma lista de hashes. Essa abordagem distribuída pode levar à ineficiência, pois diferentes sistemas podem perder tempo tentando os mesmos candidatos a senha.

Para resolver esse problema, o Hashcat introduziu o recurso "Brain". O Hashcat Brain atua como um servidor centralizado que mantém um registro de todos os candidatos a senha que foram tentados. Antes que um cliente tente uma senha, ele consulta o Brain. Se a senha já foi tentada antes, o cliente a ignora, economizando tempo e recursos valiosos.

Neste laboratório, você aprenderá a:

  • Iniciar um servidor Hashcat Brain.
  • Conectar um cliente Hashcat ao servidor.
  • Executar um ataque de senha e observar como o Brain evita trabalho redundante.

Compreender o Conceito do Hashcat Brain

Nesta etapa, abordaremos brevemente o conceito central do Hashcat Brain e o problema que ele foi projetado para resolver. Esta etapa é puramente conceitual, e nenhum comando é necessário.

Em um cenário típico de quebra de senhas, você tem uma lista de hashes e uma lista de senhas potenciais (uma wordlist). O Hashcat tenta cada senha da wordlist contra os hashes. Agora, imagine que você tem dois computadores separados (ou clientes) trabalhando na mesma tarefa.

O Problema: Sem coordenação, tanto o Cliente A quanto o Cliente B podem tentar a mesma senha exata, como "123456", em momentos diferentes. Isso é um desperdício de poder computacional, pois o trabalho está sendo duplicado.

A Solução (Hashcat Brain): O Hashcat Brain atua como um servidor central inteligente. O fluxo de trabalho é o seguinte:

  1. Um cliente (por exemplo, Cliente A) quer tentar a senha "123456".
  2. Primeiro, ele envia uma solicitação ao Servidor Brain: "A senha '123456' já foi tentada antes?"
  3. O Servidor Brain verifica seu banco de dados. Se for a primeira vez, ele responde: "Não, ainda não foi."
  4. O Cliente A procede para testar a senha. Após terminar, ele informa ao Servidor Brain: "Eu testei '123456'." O Servidor Brain registra isso.
  5. Mais tarde, se o Cliente B quiser tentar "123456", ele pergunta ao Servidor Brain. O servidor agora responderá: "Sim, já foi tentada."
  6. O Cliente B imediatamente ignora essa senha e passa para a próxima, economizando tempo e eletricidade.

Este mecanismo garante que cada candidato a senha em toda a rede distribuída seja testado apenas uma vez, melhorando drasticamente a eficiência de ataques em larga escala.

Iniciar o Servidor Hashcat Brain

Nesta etapa, você iniciará o servidor Hashcat Brain. Este servidor aguardará conexões de clientes Hashcat e gerenciará o banco de dados de senhas tentadas.

Para este laboratório, executaremos o servidor e o cliente na mesma máquina, mas eles se comunicarão pela rede como se estivessem em sistemas separados.

O comando para iniciar o servidor é hashcat com o flag --brain-server. Também especificaremos uma porta para que ele escute. Por segurança, o Hashcat pode gerar automaticamente uma senha para o servidor.

Primeiro, vamos criar um diretório para nossos arquivos do brain dentro da pasta do nosso projeto.

mkdir -p ~/project/brain

Agora, execute o seguinte comando no seu terminal para iniciar o servidor. Ele escutará na porta 7890 e armazenará seus dados no diretório ~/project/brain/.

Observação: Este comando ocupará seu terminal atual. Para as próximas etapas, você precisará abrir uma nova aba de terminal clicando no ícone + no painel do terminal.

hashcat --brain-server --brain-port 7890 --brain-session-path ~/project/brain/

Após executar o comando, você verá uma saída indicando que o servidor está em execução. Preste muita atenção à linha que diz Password..:, pois esta é a senha gerada automaticamente que você precisará para o cliente se conectar.

Starting brain server on 0.0.0.0:7890...

Password..: 82b5d1a3e... (a long hex string)

Accepting clients...

Deixe este terminal em execução. Não o feche. Abra um novo terminal para as etapas seguintes.

Obter a Senha do Servidor Brain

Nesta etapa, você aprenderá como recuperar a senha do servidor Brain a partir do seu arquivo de sessão. Embora a senha tenha sido exibida no terminal ao iniciar o servidor, ela também é armazenada em um arquivo para fácil acesso, o que é útil em ambientes automatizados.

O arquivo de sessão, por padrão, é nomeado hashcat.brain. Como especificamos um caminho personalizado com --brain-session-path, nosso arquivo está localizado em ~/project/brain/hashcat.brain.

Na sua nova aba de terminal, use o comando cat para exibir o conteúdo deste arquivo. Este conteúdo é a senha do servidor.

cat ~/project/brain/hashcat.brain

A saída será uma longa string de caracteres hexadecimais, que é a senha.

82b5d1a3e4c9a0f7d6b3c1a9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f0e9

Esta senha é necessária por qualquer cliente que deseje se conectar ao seu servidor Brain. Nas próximas etapas, usaremos um comando para ler esta senha diretamente do arquivo para evitar erros de copiar e colar.

Configurar um Cliente Hashcat para Conectar ao Brain

Nesta etapa, você configurará um cliente Hashcat para usar o servidor Brain. Isso é feito adicionando várias opções --brain-* a um comando hashcat padrão.

Executaremos um comando de "dry-run" para testar a conexão. A opção --show no Hashcat é usada para exibir hashes previamente quebrados, mas quando combinada com as opções do cliente Brain, serve como uma boa maneira de verificar a conexão sem iniciar um ataque completo.

As opções de cliente necessárias são:

  • --brain-client: Informa ao Hashcat para operar em modo cliente.
  • --brain-host: O endereço IP do servidor. Usaremos 127.0.0.1 pois está na mesma máquina.
  • --brain-port: A porta em que o servidor está escutando, que é 7890.
  • --brain-password: A senha para o servidor. Podemos usar substituição de comando $(cat ...) para lê-la diretamente do arquivo.

Execute o seguinte comando na sua nova aba de terminal:

hashcat --show -m 0 ~/project/hashes.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

Este comando não produzirá muita saída no terminal do cliente. No entanto, se você voltar para a sua primeira aba de terminal (aquela que está executando o servidor), você deverá ver uma nova linha que diz Client connected from 127.0.0.1. Isso confirma que o cliente se conectou com sucesso ao servidor.

## No terminal do servidor
Accepting clients...
Client connected from 127.0.0.1

Isso confirma que sua configuração de cliente está correta.

Executar um Ataque e Observar a Comunicação do Brain

Nesta etapa, você realizará um ataque de dicionário e verá o Hashcat Brain em ação. Usaremos os arquivos hashes.txt e wordlist.txt que foram preparados para você.

Primeiro, execute o ataque. O comando é um ataque de dicionário padrão (-a 0) para hashes MD5 (-m 0), com as opções do cliente Brain adicionadas.

Execute isso no seu terminal do cliente (a segunda aba):

hashcat -m 0 -a 0 ~/project/hashes.txt ~/project/wordlist.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

O ataque será executado, e você verá que ele encontrará rapidamente a senha.

...
5f4dcc3b5aa765d61d8327deb882cf99:password
...
Session..........: hashcat
Status...........: Cracked
...

Agora, esta é a parte importante. Execute o mesmo comando novamente.

hashcat -m 0 -a 0 ~/project/hashes.txt ~/project/wordlist.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

Observe a saída desta vez. O ataque deve terminar quase instantaneamente. Note a linha Status.

...
Session..........: hashcat
Status...........: Exhausted
...

O status é Exhausted porque o cliente Brain perguntou ao servidor sobre cada senha em wordlist.txt, e o servidor respondeu: "Sim, todas estas já foram tentadas antes." O cliente então soube que não havia trabalho a fazer e saiu imediatamente. Isso demonstra o poder e a eficiência do Hashcat Brain.

Resumo

Neste laboratório, você explorou com sucesso o Hashcat Brain, um recurso poderoso para otimizar operações de quebra de senhas distribuídas.

Você aprendeu:

  • O conceito central por trás do Hashcat Brain e como ele evita trabalho redundante.
  • Como iniciar um servidor Hashcat Brain e deixá-lo gerar uma senha segura.
  • Como localizar o arquivo de sessão do servidor para recuperar a senha.
  • Como configurar um cliente Hashcat com as flags necessárias para conectar ao Brain.
  • Como executar um ataque e observar o Brain em ação, testemunhando como ele inteligentemente pula senhas previamente tentadas.

Ao dominar o Hashcat Brain, você pode aumentar significativamente a eficiência de qualquer campanha de recuperação de senhas em larga escala ou de longa duração, economizando tempo e recursos computacionais.