Curs: | SeguretatXarxesInformàtiques |
Fitxers: | EinesHacking.pdf (EinesHacking.odp) |
Repositori SVN: | https://[email protected]/svn/iceupc/SeguretatXarxesInformàtiques |
Usuari: | anonymous |
Paraula de pas: | sense paraula de pas |
Autors: | Sergi Tur Badenas |
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.
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
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
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
En la versió de repositoris molts dels pegats no venen incorporats:
OpenVMS executables for Alpha and VAX (signature)
Més pegats a:
ftp://ftp.openwall.com/pub/projects/john/contrib/
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:
$ 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
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
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!!!
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.
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
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)
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:
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
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
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...)
$ 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.
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
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
$ 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
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
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:
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
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"):
Ho solucionem posant el paràmetre -user:login.
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