Use o John the Ripper para Quebrar Senhas Shadow do Linux

Kali LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você explorará o processo de extração, preparação e quebra de hashes de senhas do Linux usando uma ferramenta poderosa chamada John the Ripper. Compreender como a quebra de senhas funciona é crucial para implementar medidas de segurança robustas. Você aprenderá sobre o arquivo /etc/shadow, como combiná-lo com /etc/passwd para criar um arquivo que possa ser quebrado e, em seguida, usará o John the Ripper para encontrar senhas fracas. Finalmente, você obterá insights sobre a estrutura do arquivo shadow e as melhores práticas para proteger senhas de usuários em sistemas Linux.

Extrair o Arquivo /etc/shadow

Nesta etapa, você aprenderá como acessar e extrair o conteúdo do arquivo /etc/shadow. O arquivo /etc/shadow armazena senhas de usuário criptografadas e outras informações relacionadas à segurança. Devido à sua natureza sensível, apenas o usuário root tem acesso de leitura a este arquivo. Para este laboratório, criamos arquivos dummy passwd_dummy e shadow_dummy em seu diretório ~/project para simular os arquivos reais, sem exigir privilégios de root para acesso direto ao /etc/shadow.

Primeiro, vamos visualizar o conteúdo do arquivo dummy passwd_dummy. Este arquivo contém informações básicas da conta de usuário, mas não os hashes de senha.

cat ~/project/passwd_dummy

Você deverá ver uma saída semelhante a esta:

root:x:0:0:root:/root:/bin/bash
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/bash
testuser:x:1001:1001:Test User,,,:/home/labex/testuser:/bin/bash

Em seguida, vamos visualizar o conteúdo do arquivo dummy shadow_dummy. Este arquivo contém os hashes de senha reais.

cat ~/project/shadow_dummy

Você deverá ver uma saída semelhante a esta, onde o segundo campo é a senha com hash:

root:$6$rounds=40000$abcdefghijklmnop$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./:18000:0:99999:7:::
labex:$6$rounds=40000$fedcba9876543210$ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./:18000:0:99999:7:::
testuser:$6$rounds=5000$testsalt$testpasswordhash:18000:0:99999:7:::

Em um cenário real, você normalmente usaria sudo cat /etc/shadow para extrair o arquivo shadow, mas para este laboratório, usaremos os arquivos dummy.

Descriptografar o Arquivo de Senha

Nesta etapa, você usará o utilitário unshadow, que faz parte do conjunto John the Ripper, para combinar os arquivos passwd_dummy e shadow_dummy em um único arquivo que o John the Ripper pode processar. A ferramenta unshadow mescla as informações do usuário do arquivo de senhas com os hashes de senha do arquivo shadow, criando um formato unificado adequado para quebra.

Execute o seguinte comando para combinar passwd_dummy e shadow_dummy em um novo arquivo chamado unshadowed.txt em seu diretório ~/project:

unshadow ~/project/passwd_dummy ~/project/shadow_dummy > ~/project/unshadowed.txt

Agora, vamos visualizar o conteúdo do arquivo recém-criado unshadowed.txt para entender seu formato.

cat ~/project/unshadowed.txt

Você deverá ver uma saída onde cada linha começa com um nome de usuário, seguido pelo hash da senha e, em seguida, outras informações do usuário. Por exemplo:

root:$6$rounds=40000$abcdefghijklmnop$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./:0:0:root:/root:/bin/bash
labex:$6$rounds=40000$fedcba9876543210$ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./:1000:1000:LabEx User,,,:/home/labex:/bin/bash
testuser:$6$rounds=5000$testsalt$testpasswordhash:1001:1001:Test User,,,:/home/labex/testuser:/bin/bash

Este arquivo unshadowed.txt está agora pronto para ser usado pelo John the Ripper para a quebra de senhas.

Quebrar Hashes de Senha com John the Ripper

Nesta etapa, você usará o John the Ripper para quebrar os hashes de senha contidos no arquivo unshadowed.txt. O John the Ripper pode realizar vários tipos de ataques, incluindo ataques de dicionário, que envolvem tentar palavras de uma lista predefinida. Já criamos uma lista de palavras simples chamada wordlist.txt em seu diretório ~/project durante a configuração.

Execute o seguinte comando para iniciar a quebra das senhas usando o arquivo wordlist.txt:

john --wordlist=~/project/wordlist.txt ~/project/unshadowed.txt

O John the Ripper tentará quebrar os hashes. Se encontrar uma correspondência, exibirá a senha quebrada. Em nossos arquivos dummy, o testuser tem uma senha fraca que está presente no wordlist.txt.

Você deverá ver uma saída semelhante a esta, indicando uma senha quebrada:

Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts to test (sha512crypt, crypt(3) $6$)
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
testpassword     (testuser)
3g 0:00:00:00 DONE (2024-01-01 12:00) 100.0% (ETA: 00:00:00) 3.000g/s 180.0p/s 180.0c/s 180.0C/s testpassword
Session completed.

Após a quebra, você pode visualizar as senhas quebradas que o John the Ripper encontrou usando a opção --show:

john --show ~/project/unshadowed.txt

Este comando exibirá todas as senhas quebradas com sucesso da sessão.

testuser:testpassword

1 password hash cracked, 2 left

Isso demonstra com que facilidade senhas fracas podem ser quebradas usando ferramentas e listas de palavras prontamente disponíveis.

Compreender o Formato do Arquivo Shadow

Nesta etapa, você se aprofundará na estrutura e no significado dos campos dentro do arquivo /etc/shadow. Compreender este formato é crucial para entender como o Linux armazena e gerencia as informações de senha do usuário de forma segura.

O arquivo /etc/shadow contém uma linha por usuário, com cada linha consistindo em nove campos separados por dois pontos. Vamos reexaminar uma linha de nosso arquivo shadow_dummy:

testuser:$6$rounds=5000$testsalt$testpasswordhash:18000:0:99999:7:::

Aqui está uma análise de cada campo:

  1. Nome de Usuário (Username): testuser - O nome de login do usuário.
  2. Senha Criptografada (Encrypted Password): $6$rounds=5000$testsalt$testpasswordhash - Este é o campo mais crítico. Ele contém a senha com hash.
    • $6 indica o algoritmo de hashing usado (SHA-512 neste caso). Outros tipos comuns incluem $1 (MD5), $2a (Blowfish), $5 (SHA-256).
    • rounds=5000 especifica o número de rodadas de hashing, o que aumenta o custo computacional da quebra.
    • testsalt é o salt, uma string aleatória adicionada à senha antes do hashing para prevenir ataques de rainbow table.
    • testpasswordhash é o hash da senha real.
  3. Última Alteração de Senha (Last Password Change): 18000 - O número de dias desde 1º de janeiro de 1970 que a senha foi alterada pela última vez.
  4. Idade Mínima da Senha (Minimum Password Age): 0 - O número mínimo de dias exigido entre as alterações de senha. Um valor de 0 significa que o usuário pode alterar sua senha a qualquer momento.
  5. Idade Máxima da Senha (Maximum Password Age): 99999 - O número máximo de dias que a senha é válida. Após esse período, o usuário será forçado a alterar sua senha. 99999 geralmente significa que a senha nunca expira.
  6. Período de Aviso de Senha (Password Warning Period): 7 - O número de dias antes do vencimento da senha que o usuário será avisado.
  7. Período de Inatividade da Senha (Password Inactive Period): (vazio) - O número de dias após o vencimento da senha que a conta será desativada. Se vazio, a conta nunca é desativada devido à inatividade da senha.
  8. Data de Expiração da Conta (Account Expiration Date): (vazio) - A data (em dias desde 1º de janeiro de 1970) em que a conta será desativada. Se vazio, a conta nunca expira.
  9. Campo Reservado (Reserved Field): (vazio) - Este campo é reservado para uso futuro.

Compreender esses campos ajuda na configuração de políticas de senha e no aprimoramento da segurança do sistema.

Implementar Melhores Práticas para Segurança do Arquivo Shadow

Nesta etapa, você aprenderá e entenderá as melhores práticas para proteger o arquivo /etc/shadow e as senhas de usuário em sistemas Linux. Dada a natureza sensível do arquivo shadow, protegê-lo é fundamental para a segurança do sistema.

Aqui estão algumas melhores práticas essenciais:

  1. Políticas de Senha Fortes:

    • Complexidade: Imponha requisitos de complexidade de senha fortes (por exemplo, comprimento mínimo, mistura de letras maiúsculas, minúsculas, números e caracteres especiais).
    • Unicidade: Impede que os usuários reutilizem senhas antigas.
    • Alterações Regulares: Implemente políticas para alterações regulares de senha, embora conselhos de segurança modernos às vezes favoreçam senhas longas, fortes e únicas em vez de alterações frequentes para contas não privilegiadas.
    • Passphrases: Incentive o uso de passphrases longas em vez de senhas curtas e complexas, pois elas são frequentemente mais fáceis de lembrar e mais difíceis de quebrar.
  2. Permissões de Arquivo:

    • O arquivo /etc/shadow deve ter permissões muito restritas: 0640 (-rw-r-----). Isso significa que apenas o root pode ler e escrever nele, e os membros do grupo shadow podem lê-lo. Nenhum outro usuário deve ter acesso.
    • Verifique as permissões usando ls -l /etc/shadow (em um sistema real, não em nosso arquivo dummy).
  3. Algoritmos de Hashing:

    • Sempre use algoritmos de hashing modernos e fortes como SHA-512 ($6) ou Blowfish ($2a, $2b, $2y). Evite algoritmos mais antigos e fracos como MD5 ($1) ou DES.
    • Certifique-se de que a configuração do PAM (Pluggable Authentication Modules) do seu sistema esteja definida para usar algoritmos de hashing fortes.
  4. Salting:

    • Sempre use salts únicos para cada senha. Isso é tratado automaticamente por algoritmos de hashing modernos e previne ataques de rainbow table.
  5. Políticas de Bloqueio de Conta:

    • Implemente políticas de bloqueio de conta para prevenir ataques de força bruta. Após um certo número de tentativas de login falhas, a conta deve ser temporariamente bloqueada.
  6. Monitorar Atividade Suspeita:

    • Monitore regularmente os logs do sistema em busca de tentativas de login incomuns ou modificações no arquivo /etc/shadow. Ferramentas como AIDE ou Tripwire podem detectar alterações na integridade do arquivo.
  7. Educar Usuários:

    • Eduque os usuários sobre a importância de senhas fortes e únicas e os riscos de phishing e engenharia social.

Ao implementar essas melhores práticas, você pode aprimorar significativamente a segurança das contas de usuário e proteger informações confidenciais de senha em seus sistemas Linux.

Resumo

Neste laboratório, você adquiriu experiência prática com o processo de quebra de senhas em sistemas Linux usando John the Ripper. Você aprendeu a extrair e combinar os arquivos /etc/passwd e /etc/shadow usando unshadow, e então utilizou o John the Ripper com uma wordlist para quebrar hashes de senhas fracas. Além disso, você explorou o formato detalhado do arquivo /etc/shadow, compreendendo a importância de cada campo, especialmente o algoritmo de hashing e o salt. Finalmente, você revisou as melhores práticas essenciais para proteger senhas de usuário e o arquivo shadow, incluindo políticas de senha fortes, permissões de arquivo adequadas e o uso de algoritmos de hashing robustos. Este conhecimento é crucial tanto para segurança ofensiva (compreendendo como os sistemas podem ser comprometidos) quanto para segurança defensiva (implementando medidas para proteger contra tais ataques).