Auditando senhas com John The Ripper

Senhas são a parte mais fraca de qualquer sistema de segurança, pois pessoas que não conhecem os riscos causados por senhas fracas são responsáveis por criar tais senhas. Auditar as senhas que seus usuários utilizam para acessar os servidores é necessário para se garantir o mínimo de segurança nesse quesito. Com uma ferramenta como o John The Ripper, isso fica muito fácil.

[ Hits: 190.019 ]

Por: Pedro Pereira em 13/06/2007 | Blog: http://www.pedropereira.net


Baixando e instalando



A instalação do JtR é extremamente fácil. Primeiro acesse o site www.openwall.com/john/ e faça o download da versão mais nova (1.7.0.2 no momento em que escrevo o texto). Após o download, descompacte o arquivo e acesse o diretório recém criado:

$ tar xzvf john-1.7.0.2.tar.gz
$ cd john-1.7.0.2


Neste diretório você irá encontrar o sub-diretório "src", é nele que estão os fontes do software e é lá que você precisa ir para compilar o programa:

$ cd src/

A compilação do JtR é feita baseada no processador que você usa na sua máquina para que ele seja mais bem otimizado e tenha um desempenho melhor enquanto tenta quebrar as senhas. Digite make e uma lista com todas as possibilidades será exibida para você. Escolha a mais adequada e:

$ make clean linux-x86-mmx

Lembre-se de substituir o "linux-x86-mmx" pelo valor que mais se adequar ao seu hardware. Após digitar este comando terá início o processo de compilação, que deve levar menos de 5 minutos. :)

Todos os binários resultantes da compilação serão colocados no diretório run, vá para lá:

$ cd ../run

Para testar o binário que foi gerado e verificar se está tudo correto com ele, digite o comando:

$ ./john --test

Isso irá efetuar um teste de benchmarking com todos os algoritmos de criptografia que o JtR suporta. Se você quiser executar o benchmarking com um algoritmo em específico, faça o seguinte:

$ ./john --test --format=[formato que você quer testar]

O parâmetro format pode ser utilizado também quando você estiver tentando quebrar uma senha e souber qual é o formato dela. As opções são DES, BSDI, MD5, BF, AFS e LM.

Uma característica interessante do software é que você não precisa instalá-lo em outros diretórios do sistema: pode utilizar todas as opções e funcionalidades dele diretamente do diretório "run" que é criado quando você compila o programa.

Isso não quer dizer que você não possa instalar o software no diretório que quiser: não há restrição nenhuma quanto a isso. Porém, de acordo com a documentação oficial do software instalar ele system-wide (instalar ele em diretórios como /usr/local/bin, por exemplo) é apenas para pessoas que desenvolvem pacotes do John para o ports de sistemas *BSD ou distribuições do Linux. Fica à seu critério instalar system-wide ou simplesmente executar a partir do diretório "run".

Se você observou direitinho o diretório run do pacote, você irá ver que vários arquivos além do binário do JtR estão presentes lá. São eles:
  • Mailer: é um shellscript desenvolvido para enviar emails para os usuários cujas senhas são fracas e foram quebradas. Seu uso é opcional;
  • john.conf: é o arquivo de configuração do JtR. Será explicado mais adiante;
  • john: é o executável do software;
  • password.lst: um arquivo com algumas senhas para serem utilizadas quando se está quebrando uma senha;
  • *.chr: são arquivos binários utilizados diretamente pelo JtR para quebrar as senhas;
  • unshadow: quando você já tem acesso aos arquivos shadow e passwd, este script irá combinar ambos para o uso com o John. Recomenda-se utilizar esta opção com --show (explicado mais adiante);
  • unafs: pega hashes binários com banco de dados AFS e o coloca em um arquivo no estilo do arquivo /etc/passwd de sistemas Unix-like. Sua saída deve ser redirecionada para um arquivo;
  • unique: remove entradas duplicadas de uma wordlist sem modificar a ordem.

É isso, agora que o John já está instalado, vamos configurá-lo!

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. O John The Ripper
   3. Baixando e instalando
   4. Configurando o JtR
   5. Modos
   6. Linha de comando
   7. Exemplos de uso do John
   8. Conclusão
Outros artigos deste autor

OpenVPN se comportando como PPTP

VPN com FreeS/WAN

Instalando o Ocomon 1.40 no FreeBSD 6.0

Aplicando patches no kernel

Leitura recomendada

Intrusão simples com Metasploit

Analizando os logs do IPTables

Suporte TCP Wrapper - Serviços stand-alone no Debian 6

Verifique a sua fortaleza com lsat - software de auditoria em servidores e desktops

Resenha do livro: Praticando a Segurança da Informação

  
Comentários
[1] Comentário enviado por y2h4ck em 13/06/2007 - 08:36h

"Definir um tamanho mínimo de senhas de 8 ou 10 caracteres;" Isto é bem relativo, dependendo principalmente do algoritmo utilizado.

Existem métodos para se quebrar senhas de usuários windows no padrão NTLMv1, inclusive comerciais, que conseguem quebrar uma senha de até 15 caracteres em no máximo 10 minutos.

Legal o artigo, parabéns :) nota 10.

[2] Comentário enviado por phelipe em 13/06/2007 - 12:00h

Ótimo artigo... Nota 10.

[3] Comentário enviado por vodooo em 13/06/2007 - 12:10h

Parabéns pelo artigo!

Muito bemn explicado!

Abraços

[4] Comentário enviado por tsanches em 13/06/2007 - 13:58h

Ola pogo,
Parabéns pelo artigo.
TSANCHES

[5] Comentário enviado por acollucci em 13/06/2007 - 17:52h

Otimo artigo. Agora quanto ao comentario do y2h4ck, sim existem metodos para se quebrar senhas fortes, porem senhas fortes dificultam ataques do tipo wordlists, ou de engenharia social.

Nota 10...

abraços

[6] Comentário enviado por marcrock em 14/06/2007 - 16:07h


Excelente artigo!!!!
E seu site também é massa!!!

Parabéns pelo artigo.


[7] Comentário enviado por fjunior em 18/06/2007 - 10:46h

Criar uma senha forte realmente vai dificultar ataques.
Parabéns,
seu artigo é 10

[8] Comentário enviado por manomauricio em 26/10/2007 - 13:10h

Puro CTRL+C CTRL+V desse site http://www.pedroaugusto.eti.br/?q=node/49

[9] Comentário enviado por pogo em 26/10/2007 - 13:38h

huaehueahuehUAHUEHUAEUHAEHUAEHUHU esse site aí é meu cara :) hueahueauhaeuheauhae não copio nada de lugar nenhum :D

[10] Comentário enviado por thorking em 27/11/2007 - 23:31h

hehhe depois de algum tempo acabei caindo aki novamente.

to tentando instalar o john no ubuntu 7.10 porem pelo comando apt-get ele apresenta o erro:

Lendo lista de pacotes... Pronto
Construindo árvore de dependências
Reading state information... Pronto
E: Impossível achar pacote john

e pelo modo tradicional:

rm -f ../run/john ../run/unshadow ../run/unafs ../run/unique ../run/john.bin ../run/john.com ../run/unshadow.com ../run/unafs.com ../run/unique.com ../run/john.exe ../run/unshadow.exe ../run/unafs.exe ../run/unique.exe
rm -f ../run/john.exe *.o *.bak core
rm -f detect bench generic.h arch.h sparc.h tmp.s
rm -f DES_bs_s.c DES_bs_n.c DES_bs_a.c
cp /dev/null Makefile.dep
ln -sf x86-mmx.h arch.h
make ../run/john ../run/unshadow ../run/unafs ../run/unique \
JOHN_OBJS="DES_fmt.o DES_std.o DES_bs.o BSDI_fmt.o MD5_fmt.o MD5_std.o BF_fmt.o BF_std.o AFS_fmt.o LM_fmt.o batch.o bench.o charset.o common.o compiler.o config.o cracker.o crc32.o external.o formats.o getopt.o idle.o inc.o john.o list.o loader.o logger.o math.o memory.o misc.o options.o params.o path.o recovery.o rpp.o rules.o signals.o single.o status.o tty.o wordlist.o unshadow.o unafs.o unique.o x86.o x86-mmx.o"
make[1]: Entrando no diretório `/home/thorking/john-1.7.2/src'
gcc -c -Wall -O2 -fomit-frame-pointer -funroll-loops DES_fmt.c
DES_fmt.c:6:20: erro: string.h: Arquivo ou diretório inexistente
Em arquivo incluído de common.h:14,
do DES_fmt.c:10:
memory.h:13:19: erro: stdio.h: Arquivo ou diretório inexistente
memory.h:14:20: erro: stdlib.h: Arquivo ou diretório inexistente
In file included from common.h:14,
from DES_fmt.c:10:
memory.h:46: error: expected ‘)’ before ‘size’
memory.h:64: error: expected ‘)’ before ‘size’
memory.h:69: error: expected ‘)’ before ‘size’
DES_fmt.c:29: error: ‘NULL’ undeclared here (not in a function)
DES_fmt.c: In function ‘split’:
DES_fmt.c:109: warning: implicit declaration of function ‘memcpy’
DES_fmt.c:109: warning: incompatible implicit declaration of built-in function ‘memcpy’
DES_fmt.c:112: warning: incompatible implicit declaration of built-in function ‘memcpy’
DES_fmt.c: In function ‘get_key’:
DES_fmt.c:300: warning: incompatible implicit declaration of built-in function ‘memcpy’
make[1]: ** [DES_fmt.o] Erro 1
make[1]: Saindo do diretório `/home/thorking/john-1.7.2/src'
make: ** [linux-x86-mmx] Erro 2



q ,aldito erros são esses?

abraço cara!

[11] Comentário enviado por felipezs em 01/02/2008 - 13:57h

eu tenho um processador core 2 duo e o john só usa um processador....o outro fica livre...como eu configuro pra usar os 2?

[12] Comentário enviado por mosoli em 08/10/2008 - 16:20h

Exelente... ja ta nos favoritos = )

[13] Comentário enviado por elgio em 30/01/2009 - 10:50h

A leitura do teu artigo sobre VPN hoje me fez olhar os demais artigos que escreveste. Muito interessante, a gente meio que se interessa pelos mesmos assuntos ;-)

Sobre senhas, reforço o que meu amigo Anderson (y2h4ck: depois de alguns mal entendidos com ele, ambos concordamos em nos tratarmos como amigo! :-D hehehe Forte abraço): para senhas lmpasswd nenhuma senha (NENHUMA NENHUMA) é segura. De nada adianta colocar 14 cars de senha no lmpasswd (e é o máximo que ele aceita. Mais que isto é truncado), pois ele divide a tua senha em duas partes de 7, logo uma força bruta é sobre 7 cars. John the Ripper sempre conseguirá quebrar as senhas e creio que em questão de horas com os processadores domésticos de hoje.

Ntpasswd é melhor pois usa o MD4 e não tem os vícios do LM, mas a falta de salt numbers torna ele também não confiável pois perece ao ataque de Rainbow Tables (muito embora uma tabela de RB completa até 8 cars custe $499 e tem o tamanho de 52G - http://ophcrack.sourceforge.net/tables.php ). A princípio senhas maiores que 9 caracteres para o NTpasswd são seguros pois parece (PARECE) que ninguém ainda conseguiu compilar uma Rainbow tables para tantos cars.

No Linux porém, que usa MD5 com salt numbers, qualquer senha maior do que SEIS cars torna INVIÁVEl o força bruta (cuidado, estou falando de força bruta, não de outros ataques. Mesmo que tu use 15 cars de senha ela será estúpida se for apenas números, como este artigo explica).

A presença de salt numbers torna inviável a técnica de Rainbow tables.

http://www.vivaolinux.com.br/artigo/Armazenamento-de-senhas-no-Linux/
http://gravatai.ulbra.tche.br/~elgio/senhas.html
http://pt.wikipedia.org/wiki/Rainbow_table
http://en.wikipedia.org/wiki/Rainbow_table

[14] Comentário enviado por elgio em 30/01/2009 - 11:00h

A propósito: o teu site http://www.pedroaugusto.eti.br está fora!
O que houve?

[15] Comentário enviado por pogo em 02/02/2009 - 09:33h

opa elgio,

o site eu acabei tirando do ar pq não tinha mais tempo de manter... como pagava pela hospedagem, acabava dando prejuízo!

fico feliz que tenha gostado dos textos! =)

[]'s

Pedro.

[16] Comentário enviado por chapafogu1nho em 02/07/2010 - 17:20h

Cara, eu não entendi a parada de juntar os arquivos com o unshadow.

eu digitei #./unshadow /etc/passwd /etc/shadow e imprimiu na tela..

tentei jogar pra uma arquivo txt #./unshadow /etc/passwd /etc/shadow > saida.txt

mas quando eu rodo o john no arquivo txt fala que nao tem hashes :P

ai se eu digitar #./unshadow /etc/passwd /etc/shadow

e depois #./john unshadow

aparece esta mensagem: ./john unshadow
Loaded 1 password hash (PIX MD5 [pix-md5 SSE2])
guesses: 0 time: 0:00:13:57 (3) c/s: 3804K trying: 36tly121 - 36tly128

......

É isso mesmo? ou eu num entendi nada ? ;P

[17] Comentário enviado por trev0r em 15/10/2015 - 13:53h

lembrando que o john abre senhas não somente de sistemas DES e de arquivos ZIP, RAR, e outros algoritmos de compressão ;)
Trev0r F00d


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts