Fundamentos de Hashing do Hashcat

LinuxBeginner
Pratique Agora

Introdução

Bem-vindo ao mundo do hashing e da quebra de senhas! Hashing é um conceito fundamental em cibersegurança, usado para verificar a integridade dos dados e armazenar senhas de forma segura. Uma função de hash recebe uma entrada (como uma senha) e retorna uma string de bytes de tamanho fixo, o hash. Este processo é projetado para ser unidirecional (one-way), o que significa que você não pode revertê-lo facilmente para obter a entrada original.

Hashcat é uma ferramenta de recuperação de senhas poderosa e mundialmente reconhecida. Antes de usá-la de forma eficaz, você deve entender o básico sobre o que são hashes e como manipulá-los.

Neste laboratório, você aprenderá os conceitos fundamentais de hashing. Você explorará tipos de hash comuns, gerará seu próprio hash, o preparará para uso com o Hashcat e entenderá a diferença crucial entre uma senha e seu hash. Esse conhecimento é o primeiro passo essencial em sua jornada para dominar o Hashcat.

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 94%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Compreender tipos de hash comuns - MD5, SHA1 e NTLM

Nesta etapa, você aprenderá sobre três tipos de hash comuns que encontrará frequentemente no campo da cibersegurança: MD5, SHA1 e NTLM. Não há comandos para executar nesta etapa; o objetivo é entender esses conceitos centrais.

  • O que é um Hash?
    Um hash é uma string de caracteres única e de tamanho fixo gerada a partir de um pedaço de dados. Os algoritmos de hashing são projetados para serem funções unidirecionais (one-way functions), o que significa que é computacionalmente inviável reverter o processo e encontrar os dados de entrada originais apenas a partir do hash.

  • MD5 (Message Digest 5)
    MD5 é um dos algoritmos de hash mais antigos e mais conhecidos. Ele produz um valor de hash de 128 bits (32 caracteres hexadecimais). Embora já tenha sido popular para armazenamento de senhas, agora é considerado inseguro para esse fim devido a vulnerabilidades que o tornam suscetível a "colisões" (onde duas entradas diferentes produzem o mesmo hash). Hoje, é usado principalmente para verificar a integridade de arquivos, garantindo que um arquivo não foi alterado durante a transferência.

  • SHA-1 (Secure Hash Algorithm 1)
    O SHA-1 foi desenvolvido como um sucessor do MD5. Ele produz um hash de 160 bits (40 caracteres hexadecimais). Assim como o MD5, o SHA-1 também não é mais considerado seguro para fins criptográficos devido a fraquezas descobertas. No entanto, você ainda o encontrará em sistemas mais antigos e aplicações legadas (legacy applications).

  • NTLM (NT LAN Manager)
    NTLM é um algoritmo de hashing usado pelo Microsoft Windows para armazenar senhas de usuário. Quando você define uma senha em um sistema Windows, ela é convertida em um hash NTLM e armazenada. Estes são um alvo comum em atividades de testes de penetração (penetration testing engagements) envolvendo ambientes Windows.

Compreender esses tipos é o primeiro passo para identificar um hash e escolher o método correto para quebrá-lo.

Criar um hash MD5 a partir de uma string usando 'echo' e 'md5sum'

Nesta etapa, você gerará um hash MD5 a partir de uma string de texto simples. Esta é uma tarefa comum para fazer o hash rapidamente de um pedaço de dados a partir da linha de comando. Usaremos duas utilidades padrão do Linux: echo e md5sum.

Primeiro, vamos entender as ferramentas:

  • echo: Este comando é usado para exibir uma linha de texto.
  • md5sum: Este comando calcula e verifica os message digests MD5.
  • | (Pipe): Este operador envia a saída do comando à sua esquerda como entrada para o comando à sua direita.

Faremos o hash da string password123. É importante usar a flag -n com echo. Isso diz ao echo para não emitir o caractere de nova linha final (trailing newline character), que de outra forma seria incluído no cálculo do hash e produziria um resultado diferente.

Execute o seguinte comando no seu terminal:

echo -n "password123" | md5sum

Você verá a seguinte saída. A longa string de caracteres é o hash MD5 de "password123", e o - indica que o md5sum leu sua entrada da entrada padrão (standard input - o pipe) em vez de um arquivo.

482c811da5d5b4bc6d497ffa98491e38  -

Você agora criou com sucesso seu primeiro hash!

Preparar um arquivo de texto contendo um único hash alvo

Nesta etapa, você criará um arquivo para armazenar o hash que gerou. O Hashcat e outras ferramentas de quebra de senha tipicamente trabalham com arquivos contendo um ou mais hashes, e não com entrada de string direta. Isso permite que você tenha como alvo vários hashes de uma só vez.

Usaremos o hash MD5 para password123 que você gerou na etapa anterior: 482c811da5d5b4bc6d497ffa98491e38.

Podemos usar o comando echo novamente, mas desta vez usaremos o operador de redirecionamento de saída > para escrever a string em um novo arquivo chamado target_hash.txt. Este comando criará o arquivo no seu diretório atual (~/project).

Execute o seguinte comando para criar o arquivo:

echo "482c811da5d5b4bc6d497ffa98491e38" > target_hash.txt

Agora, vamos verificar se o arquivo foi criado corretamente e contém o hash. Use o comando cat para exibir o conteúdo do arquivo:

cat target_hash.txt

A saída deve ser o próprio hash:

482c811da5d5b4bc6d497ffa98491e38

Você agora tem um arquivo alvo formatado corretamente, pronto para uma ferramenta de quebra como o Hashcat.

Identificar o modo de hash correto para MD5 na ajuda do Hashcat

Nesta etapa, você aprenderá como encontrar o modo correto para um tipo de hash específico no Hashcat. O Hashcat suporta centenas de algoritmos de hash diferentes, e você deve dizer a ele exatamente qual tipo de hash está tentando quebrar (crack). Isso é feito usando um "modo de hash" numérico.

Para encontrar o modo correto, você pode usar o menu de ajuda integrado do Hashcat. Executar hashcat --help exibirá uma lista muito longa de todos os tipos de hash suportados e seus modos correspondentes. Para encontrar rapidamente o que precisamos, podemos canalizar (pipe) essa saída para o comando grep para procurar por "md5".

Execute o seguinte comando para procurar o modo de hash MD5:

hashcat --help | grep -i "md5"

A flag -i no grep torna a busca insensível a maiúsculas e minúsculas (case-insensitive). Você verá muita saída, pois existem muitas variações de MD5. Procure pela mais básica.

...
      0 | MD5                                            | Raw Hash
...
   2410 | Cisco-ASA MD5                                  | Operating System
...

Como você pode ver na saída, o modo de hash para um hash MD5 padrão e bruto (raw) é 0. Este é o número que você forneceria ao Hashcat com a flag -m (por exemplo, -m 0) para informá-lo de que você está quebrando um hash MD5.

Diferenciar entre um hash e uma senha

Nesta etapa final, reforçaremos a diferença crítica entre uma senha (password) e seu hash. Este é um conceito fundamental na quebra de senhas (password cracking).

  • A Senha (Password) é a string secreta e legível por humanos. Em nosso exemplo, é password123.
  • O Hash é a string embaralhada e de comprimento fixo gerada a partir da senha. Em nosso exemplo, é 482c811da5d5b4bc6d497ffa98491e38.

A quebra de senhas não reverte o hash. Em vez disso, ela funciona pegando uma lista de senhas potenciais (uma lista de palavras ou wordlist), aplicando o hash em cada uma e comparando o resultado com o hash alvo. Se corresponderem, a senha foi encontrada.

Para ilustrar isso, vamos criar um arquivo de wordlist simples. Em um cenário real, este arquivo conteria milhões de tentativas de senhas. Para este laboratório, ele conterá apenas a senha correta.

Crie um arquivo chamado potential_passwords.txt com a senha original:

echo "password123" > potential_passwords.txt

Agora, vamos olhar para os dois arquivos que você preparou. Use o comando ls para vê-los no seu diretório.

ls
potential_passwords.txt  target_hash.txt

Você tem target_hash.txt, que contém o hash a ser quebrado, e potential_passwords.txt, que contém a senha a ser testada. Essa separação é fundamental para o funcionamento das ferramentas de quebra de senhas.

Resumo

Parabéns por concluir este laboratório! Você aprendeu com sucesso os fundamentos essenciais de hashing que são necessários antes de usar uma ferramenta como o Hashcat.

Neste laboratório, você:

  • Aprendeu os conceitos por trás de tipos de hash comuns como MD5, SHA-1 e NTLM.
  • Gerou um hash MD5 a partir de uma string usando os comandos echo e md5sum.
  • Preparou um arquivo de hash alvo (target hash file), que é o formato padrão para ferramentas de quebra (cracking).
  • Usou o comando hashcat --help para identificar o modo de hash correto para MD5.
  • Solidificou sua compreensão da diferença crucial entre uma senha e seu hash correspondente.

Com esta base, você está agora mais preparado para avançar para laboratórios mais avançados, onde usará esses arquivos e conceitos para realizar um ataque real de quebra de senha com o Hashcat.