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.