Desxifrar hash MD5(raw-MD5) mitjançant John the Ripper

25-04-2007 > Mique Casanovas


Mostrar o escribir comentarios (dudas) sobre este artículo

Sistema:
SO Ubuntu Feisty Fawn 7.04
Acer Aspire 5620 (Intel Centrino Duo Core 1.6GHz)
Programari John the Ripper 1.7.2


INTRODUCCIÓ:
En alguna ocasió necessitem recuperar informació que ha estat codificada mitjançant algun algoritme de codificació i que en disposem del seu hash. Però un segon, tinc un col·lega que diu el hash és el resultat d'un procés de xifrat de una sola direcció, és a dir, que no hi ha l'operació inversa. Això no és del tot cert, ja que s'han trobat diversos casos en que s'ha pogut desxifrar hashos utilitzant enginyeria inversa. Aquest per exemple és el cas del conegut dèbil algoritme LM que s'ha utilitzat en les velles versions de Windows 9x i s'ha convertit en el talo de Aquil·les ja que permet la deducció de contrasenyes en text clar a partir dels hashos. A les noves versions de Windows s'ha substituït pel NTLM però encara s'utilitza per mantenir la compatibilitat amb ordinadors antics.

No obstant la manera més utilitzada per rebentar hash és mitjançant un sofisticat sistema de descobriment de contrasenyes. Un cop es coneix l'algoritme de hash, es pot utilitzar per obtenir el hash d'un conjunt de possibles contrasenyes (per exemple, les paraules d'un diccionari anglès o de noms de persones) i anar-los comparant amb el hash que en volem descobrir la contrasenya. Per tant, revelar una contrasenya és una senzilla qüestió de conjunt de paraules i temps de CPU (Amb els algoritmes de xifrat actuals i suposant que existissin els ordinadors quàntics, es podria rebentar més de la meitat de contrasenyes de tot el món).

OBJECTIUS:

Per realitzar aquest procés de comparació de hashos utilitzarem un veterana eina anomenada John de Ripper (Juan el destripador). Aquesta utilitat és una eina de Solar Designer y és una de les millors que hi ha en l'actualitat per realitzar aquesta tasca. Destacar que és multi plataforma, gratuïta i que permet rebentar diversos tipus de hashos... No obstant s'han creat diversos scripts per ampliar les funcionalitats i convertir-la en una eina molt ràpida i robusta..

Tot i que John the Ripper permet trencar hashos de Unix, WindowsNT/2000/XP/2003, MD4/NTLM/DES/BSDI/MD5/BF/AFS/LM/IPB2 etc... En el meu cas, intentaré recuperar les claus en text pla d'una meva aplicació web, en què les contrasenyes han estat codificades mitjançant la funció md5() de PHP-5.0.1.

PROCEDIMENT:
Per començar posarem tots els hashos en un fitxer de text estructurats de la següent manera. Primer hi haurà un identificador del hash, en el nostre cas serà el nom de l'usuari, després afegirem “:” seguit del hash corresponent a la contrasenya de l'usuari. El fitxer resultat quedarà semblant al següent:

> vim arxiu_hash
torres:38f4888e1604926afrf3d069c6400225
woodry:4762a8779b8dfc92399f66e77c148f9b
sardurni:6f3e68a2a11cb9bf3ef40994a59e6b58
roger73:86fa89ca141671e001379d06636fafb9
technorip:35db2342bb179cd6fb783bf2780f5420
ferran:4a3f3283a0d3a59c783dcfa847d3356a
irene:e9632e954e14029acb292ef744a19434
etc ...


Per què el John the Ripper pugui llegir un fitxer de hashos md5 amb aquest format haurem d'utilitzar un patch anomenat raw-MD5. Així que procedim a la compilació i instal·lació del John amb raw-MD5.

En baixem l'ultima versió del John del programari i el descomprimim en una carpeta.
> mkdir john
> cd john
> wget http://www.openwall.com/john/f/john-1.7.2.tar.bz2
> bunzip2 john-1.7.2.tar.bz2
> tar -xvf john-1.7.2.tar

(visualitzar snapshot 1)

Ara ens descarreguem el patch raw-MD5 corresponent a la versió 1.7 i l'apliquem a les fonts del paquet:
> cd john-1.7.2
> wget ftp://ftp.openwall.com/pub/projects/john/contrib/john-1.7-rawmd5-ipb2-4.diff.gz
> gzip -d john-1.7-rawmd5-ipb2-4.diff.gz
> patch -p1 < john-1.7-rawmd5-ipb2-4.diff

(visualitzar snapshot 2)

Compilem el programari segons l'arquitecura del nostre ordinador. En el meu cas és Linux x86 i tinc la sort que suporta SSE2
> cd src
> make
> make clean linux-x86-sse2

(visualitzar snapshot 3)

Si la compilació ha anat bé s'hauria de haver creat l'executable john a ../src/ Podeu fer un test per comprovar-ho.
> cd ../src/
> ./john --test

(visualitzar snapshot 4)

Veiem els diferents tipus de xifrats que suporta i les claus que compara per segon (c/s):
Benchmarking: Traditional DES [128/128 BS SSE2]... DONE
Many salts:     630802 c/s real, 633330 c/s virtual
Only one salt:  571417 c/s real, 577189 c/s virtual

Benchmarking: BSDI DES (x725) [128/128 BS SSE2]... DONE
Many salts:     21444 c/s real, 21487 c/s virtual
Only one salt:  21026 c/s real, 21068 c/s virtual

Benchmarking: FreeBSD MD5 [32/32]... DONE
Raw:    4252 c/s real, 4252 c/s virtual

Benchmarking: Raw MD5 [raw-md5]... DONE
Raw:    1811K c/s real, 1808K c/s virtual

Benchmarking: IPB2 MD5 [Invision Power Board 2.x salted MD5]... DONE
Raw:    1310K c/s real, 1315K c/s virtual

Benchmarking: OpenBSD Blowfish (x32) [32/32]... DONE
Raw:    284 c/s real, 284 c/s virtual

Benchmarking: Kerberos AFS DES [48/64 4K MMX]... DONE
Short:  230963 c/s real, 231426 c/s virtual
Long:   679038 c/s real, 679038 c/s virtual

Benchmarking: NT LM DES [128/128 BS SSE2]... DONE
Raw:    5051K c/s real, 5051K c/s virtual


Ara ja només és qüestió de posar en funcionament el john i esperar a que vagi trobant les claus. El programa primer proba les paraules d'un diccionari que porta per defecte. Després combina les paraules del diccionari i diverses permutacions del nom de l'usuari. Per últim realitza l'atac de força bruta.. Com ja he mencionat les contrasenyes fortes és necessita molta CPU i molt de temps per revelar-les ;)
> ./john --format=raw-MD5 /home/gurx/arxiu_hash
(visualitzar snapshot 5)

RESULTATS:
En el meu experiment, on hi havien 1100 hashos de claus d'usuaris:
Als 5 minuts: 147 contrasenyes trobades.
Als 30 minuts: 182 contrasenyes trobades.
A les 10 hores: 217 claus trobades.

Recomano jugar amb les diferents opcions d'aquest programari ja que podem millorar el número de claus trobades.

PD: Sobre John the Ripper hi ha bastant informació. Visiteu la seva pàgina oficial (http://www.openwall.com/john/) o la documentació adjunta al programari ja que és un programa amb immenses possibilitats.

Mostrar o escribir comentarios (dudas) sobre este artículo