O programa John the Ripper (http://www.openwall.com/john/) é capaz de quebrar senhas de usuários em diversos sistemas operacionais, incluindo Unix, Linux, Windows e DOS. Seu propósito inicial é detectar senhas fracas, para que o administrador do sistema solicite ao usuário que altere sua senha. O John the Ripper é capaz de identificar o algoritmo utilizado para gerar os hashes das senhas.
Um sistema Linux tradicional armazena as senhas das contas dos usuários no arquivo /etc/passwd. As distribuições modernas utilizam o arquivo /etc/shadow para armazenar as senhas. Desta forma, primeiramente é necessário combinar o /etc/passwd e o /etc/shadow em um único arquivo para que o programa john reconheça o conteúdo. Use uma linha de comando semelhante a apresentada a seguir:
# unshadow /etc/passwd /etc/shadow > senhas.txt
Neste primeiro momento é necessário acessar como root para ter permissão de leitura nos arquivos em /etc/. Se preferir, copie os arquivos /etc/passwd e /etc/shadow para um diretório de usuário e execute o comando unshadow por este usuário nas cópias do passwd e shadow:
$ unshadow passwd shadow > senhas.txt
Agora podemos executar o programa john neste arquivo combinado de senhas, para que o programa quebre as senhas encontradas:
$ john senhas.txt
Pode ser interessante, para não perder tempo, especificar determinado usuário para quebrar a senha. Há algumas formas para fazer isto, com a opção --users, especificando o nome do usuário, o número UID, ou excluindo os outros usuários. As três linhas abaixo são exemplos para cada uma das formas:
$ john --users=convidado senhas.txt
$ john --users=503 senhas.txt
$ john --users=-root,joao,pedro senhas.txt
Quando o programa john está em execução, ele não exibe as tentativas de quebra, mas uma linha de palpites pode ser exibida pressionando a tecla Espaço. Esta linha possui informações como tempo gasto, caracteres por segundo, tentativas de senhas etc. Para abortar pressione Ctrl+C.
Ao encontrar a senha, ela é exibida junto com o nome do usuário. As senhas quebradas serão armazenadas no arquivo ~/.john/john.pot, para consultas posteriores, com o comando:
$ john --show senhas.txt
Veja um exemplo completo de comando e resposta do programa john (a senha da conta convidado é 123):
$ john --users=convidado senhas.txt
Loaded 1 password hash (generic crypt(3) [?/64])
123 (convidado)
guesses: 1 time: 0:00:00:05 100% (2) c/s: 146 trying: 12345 - missy
A senha 123 é muito simples e rápida de se quebrar. Entretanto, senhas com oito ou mais caracteres alfanuméricos, armazenadas com a função crypt(), podem demorar um bocado para serem quebradas.
Por exemplo, sem contar caracteres especiais e maiúsculas, pode-se usar as 26 letras e os 10 números para compor um dígito da senha. Uma senha com 8 dígitos pode ser formada de 36 elevado à 8 arranjos diferentes, ou seja, 2,82e+12 arranjos. Isto é relativamente imenso. Se um computador pudesse processar 10 milhões de senhas por segundo, apenas comparando o hash, a quebra desta senha por força-bruta poderia levar até 78 horas. É tempo razoável mas possível.
Com a necessidade de usar a função crypt(), o desempenho no número de senhas por segundo cai bastante. Pois felizmente, as distribuições Linux adicionam um "salt", forçando o uso da função crypt(), para dificultar a quebra por força-bruta com Hash Tables.
O modo de uso do programa john, apresentado neste artigo, não utiliza Hash Tables. Os arranjos são gerados e calculados com a função crypt() em cada tentativa. Isto atrasa bastante o processo.
O programa John the Ripper utiliza alguns modos para otimizar a quebra da senha e possui algumas opções para sua linha de comando. Consulte a documentação, normalmente localizada em /usr/share/doc/john-x.x.x/, para saber mais.
Um sistema Linux tradicional armazena as senhas das contas dos usuários no arquivo /etc/passwd. As distribuições modernas utilizam o arquivo /etc/shadow para armazenar as senhas. Desta forma, primeiramente é necessário combinar o /etc/passwd e o /etc/shadow em um único arquivo para que o programa john reconheça o conteúdo. Use uma linha de comando semelhante a apresentada a seguir:
# unshadow /etc/passwd /etc/shadow > senhas.txt
Neste primeiro momento é necessário acessar como root para ter permissão de leitura nos arquivos em /etc/. Se preferir, copie os arquivos /etc/passwd e /etc/shadow para um diretório de usuário e execute o comando unshadow por este usuário nas cópias do passwd e shadow:
$ unshadow passwd shadow > senhas.txt
Agora podemos executar o programa john neste arquivo combinado de senhas, para que o programa quebre as senhas encontradas:
$ john senhas.txt
Pode ser interessante, para não perder tempo, especificar determinado usuário para quebrar a senha. Há algumas formas para fazer isto, com a opção --users, especificando o nome do usuário, o número UID, ou excluindo os outros usuários. As três linhas abaixo são exemplos para cada uma das formas:
$ john --users=convidado senhas.txt
$ john --users=503 senhas.txt
$ john --users=-root,joao,pedro senhas.txt
Quando o programa john está em execução, ele não exibe as tentativas de quebra, mas uma linha de palpites pode ser exibida pressionando a tecla Espaço. Esta linha possui informações como tempo gasto, caracteres por segundo, tentativas de senhas etc. Para abortar pressione Ctrl+C.
Ao encontrar a senha, ela é exibida junto com o nome do usuário. As senhas quebradas serão armazenadas no arquivo ~/.john/john.pot, para consultas posteriores, com o comando:
$ john --show senhas.txt
Veja um exemplo completo de comando e resposta do programa john (a senha da conta convidado é 123):
$ john --users=convidado senhas.txt
Loaded 1 password hash (generic crypt(3) [?/64])
123 (convidado)
guesses: 1 time: 0:00:00:05 100% (2) c/s: 146 trying: 12345 - missy
A senha 123 é muito simples e rápida de se quebrar. Entretanto, senhas com oito ou mais caracteres alfanuméricos, armazenadas com a função crypt(), podem demorar um bocado para serem quebradas.
Por exemplo, sem contar caracteres especiais e maiúsculas, pode-se usar as 26 letras e os 10 números para compor um dígito da senha. Uma senha com 8 dígitos pode ser formada de 36 elevado à 8 arranjos diferentes, ou seja, 2,82e+12 arranjos. Isto é relativamente imenso. Se um computador pudesse processar 10 milhões de senhas por segundo, apenas comparando o hash, a quebra desta senha por força-bruta poderia levar até 78 horas. É tempo razoável mas possível.
Com a necessidade de usar a função crypt(), o desempenho no número de senhas por segundo cai bastante. Pois felizmente, as distribuições Linux adicionam um "salt", forçando o uso da função crypt(), para dificultar a quebra por força-bruta com Hash Tables.
O modo de uso do programa john, apresentado neste artigo, não utiliza Hash Tables. Os arranjos são gerados e calculados com a função crypt() em cada tentativa. Isto atrasa bastante o processo.
O programa John the Ripper utiliza alguns modos para otimizar a quebra da senha e possui algumas opções para sua linha de comando. Consulte a documentação, normalmente localizada em /usr/share/doc/john-x.x.x/, para saber mais.
Nenhum comentário:
Postar um comentário