Quebre Senhas com Hashcat: Guia Completo para Iniciantes

A Importância da Quebra de Senhas em Testes de Penetração

No universo da segurança cibernética, especificamente em testes de penetração e hacking ético, a capacidade de quebrar senhas assume um papel fundamental para a obtenção de acesso a sistemas e servidores.

É importante notar que, em sistemas e bases de dados, as senhas raramente são armazenadas em formato de texto legível (plain text).

Em vez disso, elas passam por um processo de criptografia antes de serem armazenadas no banco de dados. Durante a verificação de acesso, o valor resultante dessa criptografia (hash) é comparado com o hash da senha fornecida pelo usuário.

A maneira como os hashes de senhas são armazenados varia de acordo com o tipo de criptografia utilizada. Uma vez que se tem acesso a esses hashes, é possível, em teoria, quebrar qualquer senha, dependendo da complexidade e da força do algoritmo utilizado.

Neste artigo, iremos explorar o processo de quebra de hashes de senhas, utilizando uma ferramenta de linha de comando eficiente e amplamente reconhecida: o Hashcat.

Vamos iniciar esta jornada!

Mas, antes de avançarmos…

O que é uma Função Hash?

O processo de hashing consiste em transformar uma mensagem de texto de entrada, em uma sequência de texto de tamanho fixo, através de uma função matemática específica, conhecida como Função Hash. Basicamente, qualquer texto, independentemente de seu tamanho, pode ser convertido em uma combinação aleatória de números e letras por meio de um algoritmo.

  • A “entrada” refere-se à mensagem que será transformada em hash.
  • A “função hash” é o algoritmo de criptografia, como MD5 ou SHA-256, responsável pela conversão da mensagem em um valor de hash.
  • O “valor de hash” é o resultado final do processo.

O que é Hashcat?

Hashcat é considerada uma das ferramentas mais rápidas para recuperação de senhas, projetada para quebrar senhas complexas em um período relativamente curto. Além disso, ela oferece recursos para ataques de força bruta e de lista de palavras (wordlists).

Existem duas variantes principais do Hashcat: uma baseada em CPU e outra em GPU (Unidade de Processamento Gráfico). A versão para GPU tende a ser mais rápida na quebra de hashes. Recomenda-se consultar o site oficial do Hashcat para obter informações sobre os drivers de GPU necessários.

Principais Características do Hashcat:

  • Software gratuito e de código aberto.
  • Suporta mais de 200 variações de tipos de hash.
  • Compatível com diversos sistemas operacionais, como Linux, Windows e macOS.
  • Oferece suporte multiplataforma, tanto para CPU quanto para GPU.
  • Permite a quebra de vários hashes simultaneamente.
  • Suporta arquivos hex-salt e hex-charset, além de ajuste automático de desempenho.
  • Possui sistema de benchmarking integrado.
  • Permite o uso de redes distribuídas para cracking através de sobreposições.

Outras funcionalidades podem ser exploradas no site oficial da ferramenta.

Instalação do Hashcat

Inicialmente, é importante garantir que o sistema Linux esteja atualizado com os programas e ferramentas mais recentes.

Para isso, execute o seguinte comando em um terminal:

$ sudo apt update && sudo apt upgrade

Em geral, o Hashcat já vem pré-instalado em distribuições como o Kali Linux, podendo ser encontrado na seção de quebra de senhas. Caso necessite instalar manualmente em outras distribuições Linux, use o seguinte comando:

$ sudo apt-get install hashcat

Utilizando o Hashcat

Para começar a utilizar o Hashcat, é necessário ter acesso a alguns hashes de senha. Caso não possua nenhum, é possível criar alguns para teste.

Para gerar hashes através da linha de comando, siga o formato abaixo:

echo -n "input" | algorithm | tr -d "-">>outputfiename

O exemplo abaixo demonstra a conversão de algumas palavras em hashes usando o algoritmo MD5:

┌──(root💀kali)-[/home/writer/Desktop]
└─# echo -n "etechpt.com" | md5sum | tr -d "-">>crackhash.txt
echo -n "password123" | md5sum | tr -d "-">>crackhash.txt
echo -n "Webtechnology" | md5sum | tr -d "-">>crackhash.txt
echo -n "microsoftteams" | md5sum | tr -d "-">>crackhash.txt
echo -n "recyclebin" | md5sum | tr -d "-">>crackhash.txt

Os hashes resultantes serão armazenados no arquivo crackhash.txt.

Para verificar os hashes salvos, execute o seguinte comando:

┌──(root💀kali)-[/home/writer/Desktop]
└─# cat crackhash.txt

066d45208667198296e0688629e28b14
482c811da5d5b4bcd497ffeaa98491e3
72a2bc267579aae943326d17e14a8048
2192d208d304b75bcd00b29bc8de5024
caae8dd682acb088ed63e2d492fe1e13

Com esses hashes disponíveis, podemos prosseguir com a quebra das senhas. Este procedimento ilustra como criar hashes com diferentes algoritmos de sua escolha.

O próximo passo é iniciar o Hashcat. O comando a seguir mostrará as opções disponíveis:

$ hashcat --help

O terminal exibirá todos os modos de ataque e tipos de hash que podem ser usados com a ferramenta.

A sintaxe geral do comando é:

$ hashcat -a num -m num hashfile wordlistfile

Onde ‘num’ representa o modo de ataque e o tipo de hash a serem utilizados. No terminal, você encontrará os números correspondentes a cada modo de ataque e hash, como 0 para MD4 e 1740 para SHA256.

Para este exemplo, utilizaremos a wordlist rockyou.txt, que pode ser encontrada em /usr/share/wordlists.

Você pode utilizar o comando locate para encontrar a localização da lista de palavras:

┌──(root💀kali)-[/home/writer]
└─# locate rockyou.txt

Para iniciar a quebra de hashes utilizando a wordlist, execute o seguinte comando:

$ hashcat -a 0 -m 0 ./crackhash.txt rockyou.txt

Após executar o comando, um erro de tempo de execução (erro de exceção de comprimento de token) pode ocorrer. Para solucionar isso, salve cada hash em um arquivo separado. Este erro geralmente ocorre quando a velocidade da CPU ou GPU é baixa. Em máquinas com processadores mais rápidos, é possível quebrar todos os hashes em um único arquivo.

Após corrigir esse erro e executar o comando, o resultado será semelhante a:

┌──(root💀kali)-[/home/writer/Desktop]
└─# hashcat -a 0 -m 0 hashcrack.txt rockyou.txt
hashcat (v6.1.1) starting...

OpenCL API (OpenCL 1.2 pocl 1.6, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=============================================================================================================================
* Device #1: pthread-Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz, 2403/2467 MB (1024 MB allocatable), 4MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Dictionary cache built:
* Filename..: rockyou.txt
* Passwords.: 14344405
* Bytes.....: 139921671
* Keyspace..: 14344398
* Runtime...: 1 sec

8276b0e763d7c9044d255e025fe0c212: [email protected]
                                                 
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 8276b0e763d7c9044d255e025fe0c212
Time.Started.....: Sun Dec 12 08:06:15 2021 (0 secs)
Time.Estimated...: Sun Dec 12 08:06:15 2021 (0 secs)
Guess.Base.......: File (rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:  1059.6 kH/s (0.52ms) @ Accel:1024 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4096/14344398 (0.03%)
Rejected.........: 0/4096 (0.00%)
Restore.Point....: 0/14344398 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: 123456 -> pampam

Started: Sun Dec 12 08:06:13 2021
Stopped: Sun Dec 12 08:06:16 2021

Nesta saída, observe que o hash foi quebrado e a senha correspondente foi revelada, conforme indicado após os detalhes do cache do dicionário.

Conclusão

Esperamos que este guia tenha oferecido uma compreensão clara de como utilizar o Hashcat para quebrar senhas.

Pode ser interessante explorar outras ferramentas de força bruta para testes de penetração, assim como outras ferramentas úteis de pentesting.