John the Ripper e Estratégias de Adivinhação de Senhas

Kali LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você mergulhará no mundo da segurança de senhas aprendendo a usar o John the Ripper, uma popular ferramenta de quebra de senhas de código aberto. Compreender como as senhas podem ser adivinhadas ou quebradas é crucial para desenvolver práticas de segurança mais robustas. Você explorará diferentes estratégias de adivinhação de senhas, desde o brute-force básico até ataques mais avançados como combinator e hybrid. Ao final deste laboratório, você terá um entendimento prático dessas técnicas e como aplicá-las usando o John the Ripper.

Compreender Técnicas Comuns de Adivinhação de Senhas

Nesta etapa, você aprenderá sobre os conceitos fundamentais por trás das técnicas de adivinhação de senhas, com foco específico em ataques de dicionário e brute-force simples. O John the Ripper pode utilizar esses métodos para tentar quebrar senhas.

Primeiro, vamos usar o John the Ripper para quebrar um hash MD5 simples usando um ataque de dicionário. Já preparamos um arquivo passwords.txt contendo uma senha com hash e um arquivo wordlist.txt com senhas comuns.

Abra seu terminal e navegue até o diretório ~/project.

cd ~/project

Agora, execute o John the Ripper com o arquivo wordlist.txt:

john --format=raw-md5 --wordlist=wordlist.txt passwords.txt

Você deverá ver uma saída indicando que o John está tentando quebrar a senha. Se for bem-sucedido, ele mostrará a senha quebrada.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
password         (user1)
1g 0:00:00:00 DONE (2023-10-27 08:00) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password

Para visualizar as senhas quebradas, você pode usar a opção --show:

john --show passwords.txt
user1:password

1 password hash cracked, 0 left

Isso demonstra um ataque de dicionário básico. O John the Ripper encontrou com sucesso "password" na lista de palavras fornecida.

Implementar Ataques de Brute-Force com Padrões Específicos

Nesta etapa, você explorará ataques de brute-force usando o modo incremental do John the Ripper. O modo incremental permite que o John gere senhas com base em conjuntos de caracteres (por exemplo, minúsculas, maiúsculas, dígitos, símbolos) e comprimento, realizando efetivamente um ataque de brute-force.

Primeiro, vamos criar um novo hash de senha que não está em nossa lista de palavras simples. Usaremos testuser:testpass (o hash MD5 de testpass é 5d41402abc4b2a76b9719d911017c592).

echo "testuser:5d41402abc4b2a76b9719d911017c592" > /home/labex/project/brute_passwords.txt

Agora, usaremos o John the Ripper no modo incremental. Para simplicidade e velocidade, limitaremos o conjunto de caracteres e o comprimento da senha. Usaremos o modo digits para quebrar uma senha que consiste apenas em dígitos.

Vamos supor que temos uma senha de 4 dígitos, por exemplo, 1234. O hash MD5 para 1234 é 81dc9bdb52d04dc20036dbd8313ed055.

echo "digituser:81dc9bdb52d04dc20036dbd8313ed055" > /home/labex/project/digit_passwords.txt

Agora, execute o John the Ripper no modo incremental, visando especificamente os dígitos:

john --format=raw-md5 --incremental=digits digit_passwords.txt

Este comando tentará todas as combinações de dígitos até encontrar a senha. Isso pode levar um momento, dependendo do comprimento da senha.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
1234             (digituser)
1g 0:00:00:00 DONE (2023-10-27 08:05) 100.0g/s 100.0p/s 100.0c/s 100.0C/s 1234

Uma vez quebrada, você pode mostrar o resultado:

john --show digit_passwords.txt
digituser:1234

1 password hash cracked, 0 left

Isso demonstra como o brute-force pode ser usado quando a estrutura da senha é conhecida ou limitada.

Utilizar Ataques Combinatórios

Nesta etapa, você aprenderá sobre ataques combinatórios, que combinam palavras de duas listas de palavras diferentes. Isso é útil quando senhas são formadas pela concatenação de duas palavras comuns.

Primeiro, vamos criar um novo hash de senha para um ataque combinatório. Usaremos john_doe como senha (o hash MD5 de john_doe é 112233445566778899aabbccddeeff00).

echo "combo_user:112233445566778899aabbccddeeff00" > /home/labex/project/combo_passwords.txt

Já preparamos base_wordlist.txt com "john" e "doe". Agora, vamos criar uma segunda lista de palavras, second_wordlist.txt:

echo "doe" > /home/labex/project/second_wordlist.txt
echo "smith" >> /home/labex/project/second_wordlist.txt

Agora, use o John the Ripper com o modo Combinator. Este modo pega duas listas de palavras e combina cada palavra da primeira lista com cada palavra da segunda lista.

john --format=raw-md5 --rules=Combinator --wordlist=base_wordlist.txt --stdout > /home/labex/project/combined_words.txt
john --format=raw-md5 --wordlist=combined_words.txt combo_passwords.txt

O primeiro comando gera combinações e as salva em combined_words.txt. O segundo comando então usa esta lista de palavras gerada para quebrar a senha.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
john_doe         (combo_user)
1g 0:00:00:00 DONE (2023-10-27 08:10) 100.0g/s 100.0p/s 100.0c/s 100.0C/s john_doe

Para verificar a senha quebrada:

john --show combo_passwords.txt
combo_user:john_doe

1 password hash cracked, 0 left

Isso demonstra como os ataques combinatórios podem ser eficazes quando as senhas são uma combinação de palavras conhecidas.

Explorar Ataques Híbridos com John the Ripper

Nesta etapa, você aprenderá sobre ataques híbridos, que combinam palavras de dicionário com elementos de brute-force (como números ou caracteres especiais). Esta é uma estratégia muito comum e eficaz para quebrar senhas que são variações de palavras comuns.

Vamos criar um novo hash de senha para um ataque híbrido. Usaremos password123 como senha (o hash MD5 de password123 é 28a112233445566778899aabbccddeeff).

echo "hybrid_user:28a112233445566778899aabbccddeeff" > /home/labex/project/hybrid_passwords.txt

Usaremos nosso wordlist.txt existente e aplicaremos uma regra que anexa quatro dígitos a cada palavra. Já criamos um arquivo de regras simples rules.txt na configuração.

Agora, execute o John the Ripper usando o wordlist.txt e o arquivo de regras personalizado:

john --format=raw-md5 --wordlist=wordlist.txt --rules=rules.txt hybrid_passwords.txt

Este comando pegará cada palavra de wordlist.txt e aplicará as regras definidas em rules.txt (anexando quatro dígitos).

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
password123      (hybrid_user)
1g 0:00:00:00 DONE (2023-10-27 08:15) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123

Para verificar a senha quebrada:

john --show hybrid_passwords.txt
hybrid_user:password123

1 password hash cracked, 0 left

Isso demonstra o poder dos ataques híbridos em quebrar senhas que combinam palavras de dicionário com padrões previsíveis.

Desenvolver Estratégias de Adivinhação Personalizadas

Nesta etapa, você aprenderá como desenvolver estratégias de adivinhação personalizadas criando e utilizando seus próprios arquivos de regras com o John the Ripper. Isso permite ataques altamente direcionados com base em padrões de senha conhecidos ou hábitos do usuário.

Vamos criar um novo hash de senha para uma estratégia personalizada. Usaremos LabEx@2023 como senha (o hash MD5 de LabEx@2023 é e0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5).

echo "custom_user:e0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5" > /home/labex/project/custom_passwords.txt

Agora, vamos criar um arquivo de regras personalizado chamado custom_rules.txt que capitaliza a primeira letra, anexa @ e, em seguida, anexa quatro dígitos.

nano /home/labex/project/custom_rules.txt

Adicione o seguinte conteúdo ao arquivo custom_rules.txt:

:
c
$@
$[0-9]$[0-9]$[0-9]$[0-9]
  • : (regra vazia) - Este é um placeholder, frequentemente usado para iniciar um conjunto de regras.
  • c - Capitaliza a primeira letra da palavra.
  • $@ - Anexa o símbolo @.
  • $[0-9]$[0-9]$[0-9]$[0-9] - Anexa quatro dígitos.

Salve e saia do nano (Ctrl+X, Y, Enter).

Agora, vamos usar uma lista de palavras base contendo "labex":

echo "labex" > /home/labex/project/base_custom_wordlist.txt

Execute o John the Ripper com seu arquivo de regras personalizado:

john --format=raw-md5 --wordlist=base_custom_wordlist.txt --rules=custom_rules.txt custom_passwords.txt
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
LabEx@2023       (custom_user)
1g 0:00:00:00 DONE (2023-10-27 08:20) 100.0g/s 100.0p/s 100.0c/s 100.0C/s LabEx@2023

Para verificar a senha quebrada:

john --show custom_passwords.txt
custom_user:LabEx@2023

1 password hash cracked, 0 left

Isso demonstra a flexibilidade do motor de regras do John the Ripper, permitindo que você crie estratégias de adivinhação de senhas altamente específicas e eficazes.

Resumo

Neste laboratório, você adquiriu experiência prática com o John the Ripper, uma ferramenta poderosa para quebra de senhas. Você aprendeu e implementou várias estratégias de adivinhação de senhas, incluindo:

  • Ataques de Dicionário: Utilizando listas pré-compiladas de senhas comuns.
  • Ataques de Força Bruta (Brute-Force Attacks): Tentando sistematicamente todas as combinações de caracteres possíveis dentro de um conjunto definido.
  • Ataques Combinatórios (Combinator Attacks): Combinando palavras de múltiplas listas de palavras para formar novos candidatos a senha.
  • Ataques Híbridos: Misturando palavras de dicionário com elementos de força bruta usando regras.
  • Estratégias de Adivinhação Personalizadas: Desenvolvendo suas próprias regras para direcionar padrões específicos de senha.

Compreender essas técnicas é crucial tanto para segurança ofensiva (testes de penetração) quanto para segurança defensiva (criação de políticas de senha fortes e educação de usuários). Ao ver com que facilidade padrões de senha comuns podem ser quebrados, você pode apreciar melhor a importância de senhas complexas e únicas e da autenticação multifator.