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:
- Nome de Usuário (Username):
testuser- O nome de login do usuário. - Senha Criptografada (Encrypted Password):
$6$rounds=5000$testsalt$testpasswordhash- Este é o campo mais crítico. Ele contém a senha com hash.$6indica o algoritmo de hashing usado (SHA-512 neste caso). Outros tipos comuns incluem$1(MD5),$2a(Blowfish),$5(SHA-256).rounds=5000especifica 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.
- Ú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. - 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 de0significa que o usuário pode alterar sua senha a qualquer momento. - 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.99999geralmente significa que a senha nunca expira. - 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. - 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.
- 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.
- 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:
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.
Permissões de Arquivo:
- O arquivo
/etc/shadowdeve ter permissões muito restritas:0640(-rw-r-----). Isso significa que apenas orootpode ler e escrever nele, e os membros do gruposhadowpodem 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).
- O arquivo
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.
- Sempre use algoritmos de hashing modernos e fortes como SHA-512 (
Salting:
- Sempre use salts únicos para cada senha. Isso é tratado automaticamente por algoritmos de hashing modernos e previne ataques de rainbow table.
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.
Monitorar Atividade Suspeita:
- Monitore regularmente os logs do sistema em busca de tentativas de login incomuns ou modificações no arquivo
/etc/shadow. Ferramentas comoAIDEouTripwirepodem detectar alterações na integridade do arquivo.
- Monitore regularmente os logs do sistema em busca de tentativas de login incomuns ou modificações no arquivo
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).


