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.
O John The Ripper é um software livre que consegue identificar automaticamente qual é o algoritmo de criptografia que foi utilizado para cifrar as senhas presentes no arquivo que você indicou para ele. Ele também possui uma versão paga, porém a versão livre não deixa nada a desejar. Neste artigo focaremos na sua versão livre.
Ele é multiplataforma, podendo ser executado em vários sistemas Unix-like, Windows, DOS, BeOS e OpenVMS. É desenvolvido pelo pessoal do projeto OpenWall, que além do JtR possuem vários outros ótimos softwares e até uma distribuição Linux, a OpenWall GNU/Linux (ou Owl). O site do projeto é www.openwall.com/.
Possui vários módulos que aumentam sua funcionalidade, o que eu gostei mais foi um módulo que se integra ao PAM e faz uma monitoração pró-ativa das senhas do sistema, impedindo que usuários utilizem senhas fracas, o que facilita a vida do atacante. Este módulo também oferece suporte a passphrases (que são frases ao invés de palavras sendo utilizadas como senha) e também pode gerar senhas, se integrando totalmente com o passwd.
Além deste módulo, também foi desenvolvido um patch para o JtR para que ele se utilize de vários processadores em uma mesma máquina ou consiga utilizar um cluster de máquinas para conseguir quebrar as senhas. O nome do patch é MPI pode ser encontrado em www.bindshell.net/tools/johntheripper.
#1Comentá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.
#2Comentário enviado por phelipe em 13/06/2007 - 12:00h
Ótimo artigo... Nota 10.
#3Comentário enviado por vodooo em 13/06/2007 - 12:10h
Parabéns pelo artigo!
Muito bemn explicado!
Abraços
#4Comentário enviado por tsanches em 13/06/2007 - 13:58h
Ola pogo,
Parabéns pelo artigo.
TSANCHES
#5Comentá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
#6Comentário enviado por marcrock em 14/06/2007 - 16:07h
Excelente artigo!!!!
E seu site também é massa!!!
Parabéns pelo artigo.
#7Comentário enviado por fjunior em 18/06/2007 - 10:46h
Criar uma senha forte realmente vai dificultar ataques.
Parabéns,
seu artigo é 10
#8Comentário enviado por manomauricio em 26/10/2007 - 13:10h
#9Comentá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
#10Comentá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!
#11Comentá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?
#12Comentário enviado por mosoli em 08/10/2008 - 16:20h
Exelente... ja ta nos favoritos = )
#13Comentá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.
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.