Extrair e Quebrar Hashes de um Arquivo Shadow do Linux

Kali LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá o processo fundamental de auditoria de segurança de senhas no Linux. Você explorará como o Linux armazena informações de senhas de usuários, extrairá essas informações e, em seguida, tentará quebrar as senhas usando um ataque de dicionário. Este processo é essencial para testadores de penetração e administradores de sistemas para identificar e remediar senhas fracas dentro de um sistema.

Você trabalhará com dois arquivos críticos: /etc/passwd, que armazena informações de contas de usuário, e /etc/shadow, que armazena de forma segura as senhas com hash. Você usará ferramentas padrão de linha de comando do Linux e software especializado como unshadow (da suíte John the Ripper) e Hashcat para realizar o processo de quebra.

Ao final deste laboratório, você terá experiência prática com:

  • Compreender o formato do arquivo /etc/shadow.
  • Combinar dados de usuário e senha em um formato que possa ser quebrado.
  • Identificar tipos de hash de senha.
  • Usar o Hashcat para realizar um ataque de dicionário.

Compreender o Formato do Arquivo /etc/shadow

Nesta etapa, você examinará o arquivo /etc/shadow. Este arquivo armazena os hashes de senha reais dos usuários em um sistema Linux e só pode ser lido pelo usuário root por motivos de segurança. Compreender sua estrutura é o primeiro passo para extrair os hashes.

Primeiro, use sudo para obter os privilégios necessários para visualizar o conteúdo do arquivo /etc/shadow.

sudo cat /etc/shadow

Você verá uma saída contendo várias linhas, cada uma correspondendo a uma conta de usuário. Vamos analisar a entrada para o testuser que criamos. Ela será semelhante a esta (o salt e o hash serão diferentes):

root:*:19327:0:99999:7:::
daemon:*:19327:0:99999:7:::
...
testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:19422:0:99999:7:::

Cada linha é uma série de campos separados por dois pontos. Para este laboratório, estamos interessados nos dois primeiros:

  1. Nome de usuário: testuser
  2. Senha com Hash: $6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1

Os sinais de dólar ($) no campo do hash são significativos. O número entre os dois primeiros caracteres $ indica o algoritmo de hashing. Neste caso, $6$ significa que a senha foi hasheada usando o algoritmo sha512crypt.

Use a Ferramenta unshadow para Combinar os Arquivos passwd e shadow

Nesta etapa, você usará o utilitário unshadow para criar um único arquivo adequado para ferramentas de quebra de senha como o Hashcat. Ferramentas de quebra precisam tanto do nome de usuário do /etc/passwd quanto do hash do /etc/shadow em um formato específico. A ferramenta unshadow, que faz parte da suíte John the Ripper, automatiza esse processo de combinação.

Você agora executará o unshadow, fornecendo /etc/passwd e /etc/shadow como entrada, e redirecionará a saída para um novo arquivo chamado hashes.txt dentro do seu diretório ~/project.

Execute o seguinte comando no seu terminal:

sudo unshadow /etc/passwd /etc/shadow > ~/project/hashes.txt

Este comando lê ambos os arquivos do sistema e mescla as informações relevantes, salvando-as em ~/project/hashes.txt.

Agora, vamos visualizar o conteúdo do arquivo recém-criado para ver o resultado.

cat ~/project/hashes.txt

A saída mostrará uma lista de usuários e seus hashes correspondentes no formato que as ferramentas de quebra esperam. A linha para testuser será semelhante a esta:

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:1001:1001::/home/testuser:/bin/bash

Este arquivo está agora pronto para ser usado com o Hashcat.

Identificar o Tipo de Hash (ex: sha512crypt)

Nesta etapa, você confirmará o tipo de hash usado para as senhas dos usuários. Este é um passo crucial porque você deve informar ao Hashcat exatamente qual algoritmo de hashing usar para a tentativa de quebra. Um algoritmo incorreto sempre falhará.

Como observamos na Etapa 1, o formato da própria string de hash revela o algoritmo. Vamos examinar o arquivo hashes.txt novamente.

cat ~/project/hashes.txt

Concentre-se na string de hash para testuser:

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:...

O hash começa com $6$. Este é um identificador padrão para um tipo específico de hash. Aqui está uma referência rápida para identificadores comuns de hash do Linux:

  • $1$ = md5crypt (MD5)
  • $2a$ ou $2y$ = bcrypt (Blowfish)
  • $5$ = sha256crypt (SHA-256)
  • $6$ = sha512crypt (SHA-512)

Com base no prefixo $6$, podemos identificar com confiança o tipo de hash como sha512crypt. Esta é a informação que precisaremos para a próxima etapa.

Selecionar o Modo Correspondente do Hashcat

Nesta etapa, você encontrará o número de modo correto que o Hashcat usa para identificar o algoritmo sha512crypt. O Hashcat suporta centenas de tipos de hash diferentes, e cada um é atribuído um número de modo exclusivo.

Para encontrar o modo para sha512crypt, você pode pesquisar nas informações de ajuda do Hashcat usando grep. Esta é uma maneira eficiente de encontrar o modo específico que você precisa sem ler todo o menu de ajuda.

Execute o seguinte comando para pesquisar por sha512crypt:

hashcat --help | grep -i sha512crypt

O sinalizador -i no grep torna a pesquisa insensível a maiúsculas e minúsculas, o que é uma boa prática. A saída mostrará a linha correspondente do menu de ajuda:

...
1800 | sha512crypt, SHA512(Unix)                  | Operating System
...

A partir desta saída, você pode ver que o número do modo para sha512crypt é 1800. Você usará este número de modo na etapa final para dizer ao Hashcat como interpretar os hashes no seu arquivo hashes.txt.

Lançar um Ataque de Dicionário nos Hashes do Linux

Nesta etapa final, você lançará um ataque de dicionário contra os hashes capturados usando o Hashcat. Um ataque de dicionário funciona pegando uma lista de senhas potenciais (um "dicionário" ou "wordlist"), aplicando hash a cada uma usando o mesmo algoritmo do hash alvo e comparando os resultados. Se uma correspondência for encontrada, a senha foi quebrada.

Você usará a wordlist rockyou.txt que foi baixada para o seu diretório ~/project durante a configuração do laboratório. Esta é uma wordlist muito comum usada para auditoria de senhas.

Agora, construa o comando completo do Hashcat com todas as informações que você coletou:

  • Modo (-m): 1800 para sha512crypt.
  • Arquivo de Hash: ~/project/hashes.txt.
  • Wordlist: ~/project/rockyou.txt.
  • Opção (--force): Isso é adicionado para evitar possíveis erros ao executar o Hashcat em um ambiente virtualizado ou com certos drivers.

Execute o comando para iniciar o ataque:

hashcat -m 1800 --force ~/project/hashes.txt ~/project/rockyou.txt

O Hashcat inicializará e iniciará a sessão de quebra. Como a senha password123 está na lista rockyou.txt, o processo deve ser muito rápido.

...
Session..........: hashcat
Status...........: Running
Hash.Name........: sha512crypt, SHA512(Unix)
Hash.Target......: testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn...
...
Approaching final keyspace - workload adjusted.

Session..........: hashcat
Status...........: Cracked
...

Assim que o Hashcat mostrar o status como Cracked (Quebrado) ou Exhausted (Esgotado), o ataque estará completo. Para visualizar a senha quebrada, você pode usar a opção --show com o mesmo comando.

hashcat -m 1800 --force ~/project/hashes.txt --show

A saída exibirá claramente o hash quebrado juntamente com sua senha em texto simples correspondente.

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:password123

Você quebrou com sucesso a senha do testuser!

Resumo

Parabéns por completar este laboratório! Você realizou com sucesso um fluxo de trabalho clássico de auditoria de senhas em um sistema Linux.

Neste laboratório, você aprendeu a:

  • Ler e entender a estrutura do arquivo /etc/shadow, que armazena os hashes de senha dos usuários.
  • Usar a ferramenta unshadow para combinar dados de usuário e hash de /etc/passwd e /etc/shadow em um único arquivo.
  • Identificar o algoritmo de hashing de senha (sha512crypt) inspecionando o formato do hash.
  • Encontrar o modo correspondente (1800) no Hashcat para o tipo de hash identificado.
  • Lançar um ataque de dicionário usando o Hashcat, uma poderosa wordlist e os hashes extraídos.
  • Visualizar a senha quebrada com sucesso.

Este exercício demonstra a importância de usar senhas fortes, complexas e únicas que não são encontradas em wordlists comuns. Administradores de sistema podem usar essas mesmas técnicas para encontrar e corrigir proativamente senhas fracas em seus ambientes.