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
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
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
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