Pular para o conteúdo principal

john

O John The Ripper, muitas vezes abreviado como "John", é uma das ferramentas de quebra de senha mais renomadas e amplamente utilizadas no mundo da segurança da informação e teste de penetração. Desenvolvido originalmente para sistemas Unix e Linux, o John The Ripper é uma aplicação de linha de comando que tem como objetivo principal a recuperação de senhas perdidas ou esquecidas.

O software ganhou notoriedade devido à sua eficiência e capacidade de quebrar senhas por meio de diversos métodos, como ataques de força bruta, dicionários de palavras, ataques de força bruta baseados em regras, entre outros. Ele também é capaz de lidar com diferentes formatos de senhas, incluindo senhas criptografadas em sistemas Unix/Linux e senhas de arquivos GPG (GnuPG).


Quebra de Senha no Linux

John The Ripper é uma ferramenta poderosa para quebra de senhas no Linux. Para utilizá-lo, siga os passos abaixo:

Concatenar os Arquivos /etc/passwd e /etc/shadow

Para que o John The Ripper possa trabalhar com senhas do sistema, você precisa concatenar os arquivos /etc/passwd e /etc/shadow em um único arquivo. Você pode fazer isso com o seguinte comando:

unshadow /etc/passwd /etc/shadow >> 2crack
informação

Isso criará um arquivo chamado 2crack que contém as informações necessárias para quebrar as senhas.

Quebrar Senhas

Agora que você tem o arquivo 2crack, pode usar o John The Ripper para quebrar as senhas:

john 2crack

O John The Ripper usará seu mecanismo de quebra de senha para tentar descobrir as senhas contidas no arquivo 2crack. Certifique-se de que o programa esteja configurado corretamente para utilizar dicionários de palavras e regras para maximizar suas chances de sucesso.

Diretório de Wordlist Padrão

O John The Ripper possui um diretório de wordlists padrão em /usr/share/john/password.lst. Você pode verificar o número de linhas em uma wordlist da seguinte maneira:

wc -l /usr/share/john/password.lst

Isso fornecerá o número de palavras na wordlist padrão.

Adicionando Regras Personalizadas

Você pode personalizar a criação de wordlists mutáveis adicionando regras ao arquivo de configuração do John The Ripper, que geralmente está localizado em /etc/john/john.conf. Por exemplo:

  • $$[0-9]$$[0-9] ==> Adiciona dois números no final da palavra.
  • ^[0-9] ==> Adiciona um número no começo da palavra.

Você pode usar essas regras para criar wordlists mais eficazes para quebra de senhas específicas.

Utilizando uma Wordlist Personalizada

Para usar uma wordlist personalizada durante a quebra de senhas, você pode usar o seguinte comando:

john --wordlist=words.txt --rules --stdout > mutacao.txt

Isso instruirá o John The Ripper a usar a wordlist words.txt com as regras definidas no arquivo de configuração e a salvar os resultados em mutacao.txt.

Quebra de GPG

O John The Ripper também pode ser usado para quebrar senhas de arquivos criptografados com GPG. Siga os passos abaixo:

Converter GPG para Hash

Primeiro, você precisa converter o arquivo GPG em um formato que o John The Ripper possa entender. Faça isso com o comando:

gpg2john lab1.gpg > hash
informação

Isso criará um arquivo hash que contém as informações do arquivo GPG no formato apropriado para a quebra de senha.

Iniciar a Quebra do Hash

Agora, você pode iniciar o processo de quebra de senha com o John The Ripper, usando uma wordlist, como rockyou.txt:

john --wordlist=rockyou.txt hash
informação

O John The Ripper tentará quebrar a senha do arquivo GPG usando a wordlist especificada. Certifique-se de usar uma wordlist adequada às características da senha que você está tentando quebrar.

Referência adicional:

Força bruta em hash yescrypt

yescrypt é um KDF (key-derivation function) projetado para hashing de senhas: é memory-hard e tunable — ou seja, consome bastante RAM além de CPU, o que dificulta ataques em ASICs/GPUs.

Deriva do scrypt e adiciona opções/mesclas (mais parâmetros, salt/nonce avançados e proteções contra paralelismo massivo), oferecendo resistência maior a ataques por hardware especializado, ou seja, na quebra utilizando Hashcat ou qualquer ferramenta de brute foce em hash, mesmo que estiver utilizando placas de vídeo mais atuais e com maior poder de processamento, não irá aumentar a taxa de hashes por segundo, ou seja, uma Nvidia GTX1050 pode ter um hash rate muito próximo de uma Nvidia RTX5090.

É usado para proteger senhas em sistemas modernos (por exemplo, implementações em bibliotecas de criptografia/libxcrypt) e permite ajustar custo de tempo e memória conforme a ameaça.

Nesse exemplo o hash foi encontrado no arquivo /etc/shadow no sistema operacional Kali Linux, quando iniciado com $y significa que é yescrypt:

$ sudo cat /etc/shadow
[sudo] password for kali: ****
root:*:19966:0:99999:7:::
daemon:*:19966:0:99999:7:::
bin:*:19966:0:99999:7:::
sys:*:19966:0:99999:7:::
sync:*:19966:0:99999:7:::
games:*:19966:0:99999:7:::
man:*:19966:0:99999:7:::
lp:*:19966:0:99999:7:::
mail:*:19966:0:99999:7:::
news:*:19966:0:99999:7:::
uucp:*:19966:0:99999:7:::
proxy:*:19966:0:99999:7:::
www-data:*:19966:0:99999:7:::
backup:*:19966:0:99999:7:::
list:*:19966:0:99999:7:::
irc:*:19966:0:99999:7:::
_apt:*:19966:0:99999:7:::
nobody:*:19966:0:99999:7:::
systemd-network:!*:19966::::::
messagebus:!:19966::::::
tcpdump:!:19966::::::
sshd:!:19966::::::
kali:$y$j9T$P4e5rDVu4IoZc9phsGnXr0$Bug5WTkDSra/pzgNbm7aFWTJAa1RSO5iI5msAaADYCC:19996:0:99999:7:::
_rpc:!:20366::::::
statd:!:20366::::::

Nesse aquivos podemos notar o usuário kali e seu respectivo hash, correspondente à sua senha.

kali:$y$j9T$P4e5rDVu4IoZc9phsGnXr0$Bug5WTkDSra/pzgNbm7aFWTJAa1RSO5iI5msAaADYCC:19996:0:99999:7:30:3403031096:

Fazendo a decomposição dessa linha em várias partes temos:

kali: ID do usuário.
$y$j9T$P4e5rDVu4IoZc9phsGnXr0$Bug5WTkDSra/pzgNbm7aFWTJAa1RSO5iI5msAaADYCC: Informações do algoritmo hash e o próprio hash.
19996": Última alteração de senha em Unix time.
0: O número mínimo de dias necessários entre as alterações de senha.
99999: O número máximo de dias em que a senha é válida.
7: O número de dias antes da expiração da senha em que o usuário é avisado de que sua senha deve ser alterada.
30: O número de dias após a expiração da senha em que a conta é desativada.
3403031096: A data de expiração da conta em Unix time.

Fazendo a decomposição da parte destinada ao hash e sua informações, com delimitador $, temos:

y ==> algorítmo
j9T ==> parâmetro
P4e5rDVu4IoZc9phsGnXr0 ==> salt em crypt base64
Bug5WTkDSra/pzgNbm7aFWTJAa1RSO5iI5msAaADYCC ==> digest em crypt base64

Efetuando a quebra com John the Ripper:

echo '$y$j9T$P4e5rDVu4IoZc9phsGnXr0$Bug5WTkDSra/pzgNbm7aFWTJAa1RSO5iI5msAaADYCC' > hash.txt
john --wordlist=/usr/share/wordlists/rockyou.txt --format=crypt hash.txt

Também é possível fazer de uma forma mais simples com o unshadow:

unshadow /etc/passwd /etc/shadow > hashes.txt
john --wordlist=/usr/share/wordlists/rockyou.txt --format=crypt hashes.txt

Referências