IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Alert.png Aquesta wiki forma part dels materials d'un curs
Curs: SeguretatXarxesInformàtiques
Fitxers: EinesHacking.pdf (EinesHacking.odp)
Repositori SVN: https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/SeguretatXarxesInformàtiques
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas
Logo de John The Ripper

aka JtR, John the Ripper és una aplicació de criptografia que aplica tècniques de cerca per força bruta per desxifrar contrasenyes. Té capacitat per a trencar diferents algorismes de xifrat com DES, SHA-1 i altres.

Independentment de les obvies utilitats malicioses d'aquesta eina (Password Cracking), també esta considerada una eina molt popular per als administradors de sistema ja que permet comprovar que les contrasenyes dels usuaris són suficientment bones.

És capaç de detectar automàticament el tipus de xifrat i a més es pot personalitzar.

L'eina esta relacionada amb el projecte OpenWall.

Instal·lació

En sistemes Debian tenim un paquet amb els binaris precompilats:

$ sudo apt-get install john

Podem consultar els fitxers instal·lats amb:

$ sudo dpkg -L john

Instal·lació a Debian etch

Afegir a /etc/apt/sources.list:

deb http://archive.debian.org/backports.org etch-backports main
$ sudo apt-get update
$ sudo apt-get install john

Diccionaris

Consulteu:

https://svn.projectes.lafarga.cat/svn/iceupc/SeguretatXarxesInform%C3%A0tiques/moodle/sessio2/wordlists/

i també l'article wordlists.

John porta una llista senzilla:

/usr/share/john/password.lst

i ven per web una llista més completa amb diferents idiomes:

http://www.openwall.com/wordlists/

Vegeu també:

Cracklib

i

John_The_Ripper#Llistes_de_paraules

i

http://www.blackploit.com/2011/02/diccionarios-para-fuerza-bruta.html

Pegats

En la versió de repositoris molts dels pegats no venen incorporats:

  • OpenVMS and SYSUAF.DAT support (signature), by Jean-loup Gailly
     OpenVMS executables for Alpha and VAX (signature)
  • Hasefroch NT/2000/XP NTLM (MD4) hash support, by Olle Segerdahl
  • AFS/Kerberos v4 TGT support, by Dug Song
  • S/Key skeykeys files support, by Dug Song
  • Netscape LDAP server passwords support, by K Evangelinos
  • MySQL passwords support (signature), by Andrew Hintz (Drew)
  • Eggdrop userfile support, by Sun-Zero
  • BeOS port, by Adam Milner
  • MacOS X packages of 1.6.33 as dmg.gz (sig) and tar.gz / pkg (sig), by Deepquest

Més pegats a:

ftp://ftp.openwall.com/pub/projects/john/contrib/

Utilització

Hi han tres modes de funcionament de John The Ripper

Single: És el mode més simple però sovint és el que dona millors resultats. Utilitza la informació de login del usuari (nom d'usuari i dades) per intentar desxifrar la contrasenya. Exemple:

$ john -single fitxer_de_contrasenyes

En qualsevol moment podeu utilitzar

$ john -single -users:nom_usuari

per tal d'intentar obtenir la paraula de pas d'un usuari concret.

Si no indiqueu cap mode:

$ john fitxer_de_contrasenyes

Aleshores john utilitzarà primer single, després wordlist i finalment el mode incremental

Wordlist (arxiu de paraules o diccionari): S'utilitza un fitxer de contrasenyes per anar provant. El fitxer conté una paraula per línia.

$ john -wordlist:fitxer_diccionari fitxer_de_contrasenyes

Per exemple podeu provar amb el fitxer de passwords que porta per defecte john (/usr/share/john/password.lst):

$ john -wordlist:/usr/share/john/password.lst /etc/shadow

Es pot utilitzar la opció -rules per que faci variacions sobre les paraules del diccionari:

$ john -w:fitxer_diccionari -rules fitxer_de_contrasenyes

Incremental (força bruta): És l'opció més potent ja que provarà totes les combinacions de caràcters possibles. S'han d'indicar la longitud de la clau i el joc de caràcters a utilitzar:

$ john -i fitxer_de_contrasenyes

Més exemples:

$ john -i:Alpha fitxer_de_contrasenyes (a..z - 26 caracteres)
$ john -i:All fitxer_de_contrasenyes (todo - 95 caracteres)
$ john -i:Digits fitxer_de_contrasenyes (0..9 - 10caracteres)

Un cop s'acaba l'execució les claus obtingudes es guarden al fitxer john.pot que es troba a la HOME de l'usuari que ha executat john (~/.john/john.pot). Pots visualitzar-les utilitzant:

$ john -show fitxer_de_contrasenyes

Els temps d'execució són molt llargs i per aquesta raó disposem de les següents opcions:

  • En qualsevol moment podeu prémer qualsevol tecla per veure com va l'execució:
$ john fitxer_de_contrasenyes 
Loaded 3 passwords with 3 different salts (FreeBSD MD5 [32/32])
guesses: 0  time: 0:00:00:02 1% (2)  c/s: 6787  trying: bridge
guesses: 0  time: 0:00:00:04 5% (2)  c/s: 5652  trying: thunders

Podem aturar l'execució en qualsevol moment amb la combinació de tecles Ctrl+C. El punt on hem aturat l'atac de força bruta es guarda a ~/restore, així d'aquesta manera més endavant podem continuar l'execució amb l'opció:

$ john -restore fitxer_de_contrasenyes

Si coneixem el tipus de xifrate utilitzat la podem indicar amb l'opció -format:

$ john -i:alpha -format:NT fitxer_de_contrasenyes 

Amb aquesta combinació provaríem de trencar contrasenyes de Windows de 5 a 8 caràcters. Es necessari tenir el pegat de NT.

NOTA: Si tenim un fitxer de paraules de pas amb diferents sistemes de xifratge per a diferents usuaris, aleshores només es carregaran els usuaris que tinguin el sistema de xifratge indicat

Atac de diccionari

Podeu utilitzar la wordlist que porta per defecte /usr/share/john/password.lst :

$ sudo unshadow /etc/passwd /etc/shadow > passfile.txt
$ john -wordlist:/usr/share/john/password.lst passfile.txt
Loaded 2 password hashes with 2 different salts (generic crypt(3) [?/64])
Remaining 1 password hash
guesses: 0  time: 0:00:00:02 23%  c/s: 266  trying: cheese - junior
guesses: 0  time: 0:00:00:03 32%  c/s: 270  trying: 1996 - brutus
....

NOTA: unshadow és un executable que proporciona john the Ripper que permet mezclar en un sol fitxer la info dels fitxers /etc/passwd i /etc/shadow. Útil per al mode single

Mode single

Creeu dos usuaris:

$ sudo adduser pepita1
...
poseu com a password pepitaperez i indiqueu que el nom complet es pepita perez  martinez...
$ sudo adduser pepita2
Poseu com pasword un num de telèfon i poseu-lo també al GECOS.

I ara comproveu la feblesa:

$ sudo unshadow /etc/passwd /etc/shadow > passfile.txt
$ john --single passfile.txt 
Loaded 5 password hashes with 5 different salts (generic crypt(3) [?/64])
Remaining 4 password hashes with 4 different salts
pepitaperez      (pepita1)
645525437        (pepita2)

NOTA: unshadow és un executable que proporciona john the Ripper que permet mezclar en un sol fitxer la info dels fitxers /etc/passwd i /etc/shadow. Útil per al mode single

Vegeu com prova amb les meves dades d'usuari:

$ john --single passfile.txt 
Loaded 5 password hashes with 5 different salts (generic crypt(3) [?/64])
Remaining 2 password hashes with 2 different salts
guesses: 0  time: 0:00:00:01 2%  c/s: 248  trying: bsergI - turbadenassanedabrut
guesses: 0  time: 0:00:00:03 8%  c/s: 265  trying: bturb - tsergih
guesses: 0  time: 0:00:00:05 12%  c/s: 271  trying: bsergi, - tur<
guesses: 0  time: 0:00:00:07 14%  c/s: 286  trying: Sergisergi9 - Tbadenasc
guesses: 0  time: 0:00:00:08 16%  c/s: 285  trying: Sergio - Turbadenasu
guesses: 0  time: 0:00:00:09 18%  c/s: 284  trying: Btur' - Tsergi-
guesses: 0  time: 0:00:00:10 19%  c/s: 284  trying: Badenastur\ - Tursergi|
guesses: 0  time: 0:00:00:11 21%  c/s: 283  trying: ruts9 - BSERGI4
guesses: 0  time: 0:00:00:11 22%  c/s: 281  trying: TSERGI! - Ssergi!!!

Aplicar el diccionari de català

Veieu com obtenir un fitxer de llengua en català a l'apartat Llistes de paraules

$ john -wordlist:catala-wordlist.txt contrasenyes

En un Amd Athlon 64 bits 300+ i un fitxer de contrasenyes unix amb 5 contrasenyes de ha tardat 3 minuts i 9 segons

L'exemple seria similar per a qualsevol altre idioma.

Provant John the ripper amb el nostre sistema

Per comprovar la fortalesa de les nostres contrasenyes podem fer:

$ mkdir john
$ cd john
$ sudo unshadow /etc/passwd /etc/shadow > contrasenyes
$ john --single contrasenyes 
$ john -wordlist:/usr/share/john/password.lst contrasenyes
$ joth -i contrasenyes
$ john -wordlist:catala-wordlist.txt contrasenyes

Molt important que esborrem el fitxer contrasenyes a l'acabar:

$ sudo rm contrasenyes

Números com a contrasenyes

Les contrasenyes curtes formades per un conjunt de números no són les més ideals (per exemple números de pin):

$ john -i:Digits contrasenyes
Loaded 6 passwords with 6 different salts (FreeBSD MD5 [32/32])
3245             (pep)

Modes incrementals. Modes incrementals a mida

IMPORTANT: En versions més noves de john the ripper (per exemple la que porta ubuntu 14.04) hi ha més modes i diferents

Hi ha 4 modes incrementals predefinits:

  • All
  • Alpha
  • Digits
  • LanMan

Les seves característiques les podeu consultar al fitxer de configuració:

$ cat /etc/john/john.conf
...............
# Incremental modes
[Incremental:All]
File = /usr/share/john/all.chr
MinLen = 0
MaxLen = 8
CharCount = 95 

[Incremental:Alpha]
File = /usr/share/john/alpha.chr
MinLen = 1
MaxLen = 8
CharCount = 26

[Incremental:Digits]
File = /usr/share/john/digits.chr
MinLen = 1
MaxLen = 8
CharCount = 10 

[Incremental:LanMan]
File = /usr/share/john/lanman.chr
MinLen = 0
MaxLen = 7
CharCount = 69 
.............

Podem crear el nostre propi sistema incremental. Per exemple si sabem la mida mínima de les contrasenyes del sistema, podem especular amb que la gent és molt gàndula ;-). Afegim el següent al fitxer /etc/john/john.conf :

[Incremental:MinimEsfors]
File = /usr/share/john/alpha.chr
MinLen = 6
MaxLen = 6
CharCount = 69

I executem:

$ john -i:MinimEsfors contrasenyes
Loaded 6 passwords with 6 different salts (FreeBSD MD5 [32/32])
Warning: only 26 characters available
guesses: 0  time: 0:00:00:05  c/s: 5848  trying: mickll
guesses: 0  time: 0:00:00:07  c/s: 5568  trying: sendin
guesses: 0  time: 0:00:00:09  c/s: 5414  trying: moteau
guesses: 0  time: 0:00:00:10  c/s: 5354  trying: corsen
guesses: 0  time: 0:00:00:11  c/s: 5308  trying: mastie
guesses: 0  time: 0:00:00:13  c/s: 5246  trying: pillie
guesses: 0  time: 0:00:00:15  c/s: 5199  trying: protck

Sistema amb nombre mínim de caràcters a la contrasenya

Com hem comentat a l'apartat anterior podem especular amb la llei del mínim esforç:

Afegim el següent al fitxer /etc/john/john.conf :

[Incremental:MinimEsfors]
File = /usr/share/john/alpha.chr
MinLen = 6
MaxLen = 6
CharCount = 69

I executem:

$ john -i:MinimEsfors contrasenyes
Loaded 6 passwords with 6 different salts (FreeBSD MD5 [32/32])
Warning: only 26 characters available
guesses: 0  time: 0:00:00:05  c/s: 5848  trying: mickll
guesses: 0  time: 0:00:00:07  c/s: 5568  trying: sendin

Dates de naixement o altres dates

També es força comú especular amb les dates de naixament. Suposem que la gent posa contrasenyes de l'estil.

Data de naixement: 22/10/1978
Contrasenya: 22101978

Podríem provar:

[Incremental:DatesNaixament]
File = /usr/share/john/digits.chr
MinLen = 8
MaxLen = 8
CharCount = 10 

Tenim diferents combinacions a provar realment (dies o mesos en una xifra, els anys en 2 dígits, etc...)

Fer cerques a un sol usuari

$ john -i:Digits8 shadow -users:sergi2
Loaded 1 password hash (FreeBSD MD5 [32/64 X2])

O l'usuari root (pel seu uid que sempre és zero):

$ john --users=0

NOTA: Una opció "cutre" és quedar-se només amb la línia que us interessa de shadow.

DES. Sistema obsolet

Usuari pepiton amb paraula de pas des:

Configuració:

$ sudo joe /etc/pam.d/common-password

Poseu des:

password        [success=2 default=ignore]      pam_unix.so obscure des

Creeu un nou usuari pepiton.

resultat:

$ john -i:Digits8 shadow -users:pepiton
Loaded 1 password hash (Traditional DES [128/128 BS SSE2-16])
guesses: 0  time: 0:00:00:06  c/s: 2127K  trying: 40562172 - 40564084
guesses: 0  time: 0:00:00:08  c/s: 2127K  trying: 65970912 - 65971589
guesses: 0  time: 0:00:00:09  c/s: 2131K  trying: 98566612 - 98562534

IMPORTANT: Observeu la quantitat de combinacions que prova per segon és molt superior a md5:

$ john -i:Digits8 shadow -users:sergi2
Loaded 1 password hash (FreeBSD MD5 [32/64 X2])
guesses: 0  time: 0:00:00:01  c/s: 12292  trying: 22825060 - 22825061
guesses: 0  time: 0:00:00:02  c/s: 12511  trying: 46358750 - 46358752
guesses: 0  time: 0:00:00:38  c/s: 12911  trying: 02272045 - 02272047

I amb el valor per defecte de crypt (al exemple SHA-512, Ubuntu 12.04:)

$ john -i:Digits8 shadow -users:sergi
Loaded 1 password hash (generic crypt(3) [?/64])
guesses: 0  time: 0:00:00:01  c/s: 257  trying: 49376089 - 48666035

Benchmarking

Consulteu:

http://openwall.info/wiki/john/benchmarks

podeu executar un test al vostre ordinador:

$ john -test
Benchmarking: Traditional DES [128/128 BS SSE2-16]... DONE
Many salts:	2364K c/s real, 2417K c/s virtual
Only one salt:	2073K c/s real, 2111K c/s virtual

Benchmarking: BSDI DES (x725) [128/128 BS SSE2-16]... DONE
Many salts:	69671 c/s real, 72871 c/s virtual
Only one salt:	66841 c/s real, 71259 c/s virtual

Benchmarking: FreeBSD MD5 [32/64 X2]... DONE
Raw:	11365 c/s real, 12769 c/s virtual

Benchmarking: OpenBSD Blowfish (x32) [32/64 X2]... DONE
Raw:	709 c/s real, 834 c/s virtual

Benchmarking: Kerberos AFS DES [48/64 4K]... DONE
Short:	311747 c/s real, 405676 c/s virtual
Long:	1095K c/s real, 1208K c/s virtual
Benchmarking: LM DES [128/128 BS SSE2-16]... DONE
Raw:	12177K c/s real, 12275K c/s virtual

Benchmarking: generic crypt(3) [?/64]... DONE
Many salts:	253555 c/s real, 260859 c/s virtual
Only one salt:	245529 c/s real, 261201 c/s virtual

Benchmarking: dummy [N/A]... DONE
Raw:	100195K c/s real, 103082K c/s virtual

Executables

unshadow

$ sudo unshadow /etc/passwd /etc/shadow > passfile.txt

NOTA: unshadow és un executable que proporciona john the Ripper que permet mezclar en un sol fitxer la info dels fitxers /etc/passwd i /etc/shadow. Útil per al mode single

Utilitzant altres diccionaris

Aquí podeu trobar una llista de les paraules de pas més habituals i Leaked passwords;

https://wiki.skullsecurity.org/Passwords

Hi ha llistes de pagament com uniqpass: http://dazzlepod.com/site_media/txt/passwords.txt

Com podeu consultar a l'apartat Fitxer de configuració la versió de john com a paquet Debian utilitza un diccionari en angles i de poques paraules. Podem obtenir diccionaris en altres llengües i més potents a la web:

http://www.openwall.com/wordlists/

La llista per defecte:

http://www.openwall.com/passwords/wordlists/password-2011.lst

Hi han diccionaris que es poden obtenir comprant un CD i hi han versions més reduïdes gratuïtes a mirrots FTP:

http://www.openwall.com/mirrors/

Per exemple es pot aconseguir un diccionari castellà amb :

$ wget ftp://ftp.ibiblio.org/pub/linux/distributions/openwall/wordlists/languages/Spanish/lower.gz
$ gunzip lower

Aquest diccionari ja te més paraules

$ wc -l lower 
86060 lower

També es pot obtenir:

$ wget ftp://ftp.ibiblio.org/pub/linux/distributions/openwall/wordlists/passwords/lower.gz
$ wget ftp://ftp.ibiblio.org/pub/linux/distributions/openwall/wordlists/passwords/password.gz

Llistes de paraules

aka wordlist

NOTA: moltes de les llistes que trobareu per internet són de pagament però també n'hi ha de lliures.

Les eines aspell i ispell ens poden oferir llistes de paraules en diferents idiomes.

Per exemple amb aspell podem generar una llista amb la comanda

$ aspell --lang=ca dump master

Per qualsevol altre idioma només cal canviar ca per el codi d'idioma.

Recursos:

Fitxer de configuració

El fitxer de configuració de John The Ripper és:

/etc/john/john.conf

Paràmetres importants:

Wordfile: Llista de paraules a provar

Wordfile = /usr/share/john/password.lst

Si consulteu el fitxer veureu que esta en Angles i que són només 2290 paraules:

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

Contrasenyes de Windows

TODO

Vegeu també:

Criptoanàlisi_de_contrasenyes_de_Windows

Linux Command:

bkhive-linux /mnt/hda1/WINDOWS/system32/config/system saved-syskey.txt


Step 8. Now that we have the system key we can use it to undo SysKey on the SAM, extract the hashes and place them into a PWDump format file:

Linux Command:

samdump2-linux /mnt/hda1/WINDOWS/system32/config/sam saved-syskey.txt>password-hashes.txt


Step 9. At this point we have a PWDump format file called password-hashes.txt that we could copy off of the system and import into L0phtcrack [7] or Cain [8] (see the old tutorial for details). Since I said we were going to do it all with the Auditor CD and Open Source tools we will use John the Ripper to crack the hashes, but before we can use John we have to extract one of the many wordlists that comes with Auditor. Take a look on the CD in /opt/auditor/full/share/wordlists/ for all of the different wordlists you can use, I'll use english.txt for this tutorial. To extract english.txt to the ramdisk use the following command:

Linux Command:

gunzip -c /opt/auditor/full/share/wordlists/english/english.txt.gz> /ramdisk/eng.txt


Step 10. Now that everything is in place we can run John with a simple dictionary attack to see if we can crack any of the hashes:

john password-hashes.txt -w:eng.txt


       John detects that the dump file has LM (LAN Manager) hashes in it and chooses the format "NT LM DES [32/32 BS]" automatically. If I had disabled the storing of LM hashes in the SAM I might want to use the –f option to specify the NT hash format and try to crack the NT hashes instead. To do that I would use the following command:

Linux Command:

john password-hashes.txt -f:NT -w:eng.txt


       If dictionary attacks aren't working and you have a lot of time (as well as a fast computer) you can try John's incremental (brute force) mode and see if it gives you better results:

Linux Command:

john password-hashes.txt -i:all


       Incremental mode is limited to only eight characters unless you change the source before you compile it, but at more than eight characters you will likely be waiting a very long time for John to finish. Doing more that eight characters is pointless anyway if you have the LM hashes since there are stored as two seven byte parts (NT hashes are a different story and can be harder to crack).
       In case you were wondering what all of these commands would look like along with their output here is a copy of my session log that may help you understand how they all work together (notice that the password for the Administrator account is "monkey"):


Troubleshooting. Resolució de problemes

No carrega nous usuaris a Debian

Ho solucionem posant el paràmetre -user:login.

No password hashes loaded. Ubuntu i sha-512

Si us fixeu en el fitxer /etc/shadow:

$ cat /etc/shadow
... 
pepe:$6$i3acm6nl$ssfc9yfjqsK1pPsNFy2ZgbFBiVxBLAFVw4pCzbYJDL3hwN/HJ7gauL3cbbBeeKmnXkcnzdAFt2Oyxf.bHP.dX.:14497:0:99999:7:::

Veureu que els hash comencen per $6$ que és el codi del sistema de xifratge hash sha-512 i John the Ripper no suporta per defecte hashes sha 512. Els números són:

$1$ == md5
$5$ == sha256
$6$ == sha512

Una opció per tal de poder fer pràctiques és modificar PAM per tal que els nous usuaris utilitzin un xifratge suportat per John:

$ sudo joe /etc/pam.d/common-password

Busqueu la línia:

password        [success=1 default=ignore]      pam_unix.so obscure sha-512

IMPORTANT: Aneu em molt de compte! Una modificació incorrecta dels fitxers de PAM pot provocar el malfuncionament de tot el sistema.

I la canvieu per:

password        [success=1 default=ignore]      pam_unix.so obscure md5

Si ara creeu un nou usuari:

$ sudo adduser pep
...

Poseu-li com a paraula de pas pep.

I consulteu el fitxer /etc/shadow:

$ cat /etc/shadow
...
pepe:$1$e.H0Vv6y$KZwjLwq4yYcn1BK82DjoQ/:14686:0:99999:7:::

Ara com podeu veure l'usuari utilitza MD5 ($1$). Si executeu:

$ sudo john -single /etc/shadow 
Created directory: /root/.john
Loaded 1 password hash (FreeBSD MD5 [32/32])
pepe             (pepe)
guesses: 1  time: 0:00:00:00 100%  c/s: 9.09  trying: pepe


Recursos

Vegeu també

Enllaços externs