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:
- Um cliente (por exemplo, Cliente A) quer tentar a senha "123456".
- Primeiro, ele envia uma solicitação ao Servidor Brain: "A senha '123456' já foi tentada antes?"
- O Servidor Brain verifica seu banco de dados. Se for a primeira vez, ele responde: "Não, ainda não foi."
- O Cliente A procede para testar a senha. Após terminar, ele informa ao Servidor Brain: "Eu testei '123456'." O Servidor Brain registra isso.
- Mais tarde, se o Cliente B quiser tentar "123456", ele pergunta ao Servidor Brain. O servidor agora responderá: "Sim, já foi tentada."
- 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. Usaremos127.0.0.1pois 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.


