26 décembre 2013

Ubuntu: compiler et installer le cracker de mot de passe John The Ripper Jumbo pour utilisation multi-cœur

John The ripper est un cracker de mot de passe très connu, il permet de casser des algorithmes de chiffrement / hachage comme: MD5, Blowfish, Kerberos, AFS etc. Le gros problème de John quand vous l'installez à partir des dépôts sur Ubuntu / Debian et dérivés, c'est qu'il n'utilise qu'un cœur de votre processeur. Casser un mot de passe demande déjà beaucoup de temps, alors si en plus on est limité à l'utilisation d'un seul cœur, c'est la cata. Comme j'ai 4 cœurs à ma disposition sur mon ordinateur, j'ai donc cherché une méthode pour choisir pouvoir le nombre de cœurs que je souhaite utiliser pour tester la solidité de mes mots de passe, et j'ai trouvé une version modifiée de John The ripper qui permet d'utiliser MPI. Grâce à cela, on peut choisir le nombre de cœur à utiliser. Voici donc comment compiler, installer et utiliser John The Ripper Jumbo (Jumbo est une version plus complète de John The Ripper).

Préparation

Il faut commencer par installer les bons paquets, donc ouvrez un terminal et tapez:

sudo apt-get install libssl-dev libopenmpi-dev openmpi-bin

Compilation

Téléchargez le fichier sur la page officielle, ou directement avec la commande suivante:

wget http://www.openwall.com/john/g/john-1.7.9-jumbo-7.tar.gz

Décompressez l'archive en tapant:

tar -xvf john-1.7.9-jumbo-7.tar.gz

Se placer dans le répertoire /src:

cd john-1.7.9-jumbo-7/src/

Maintenant, on va dé-commenter deux lignes dans le Makefile pour le support MPI (utilisation multi-core). Donc ouvrez un terminal et tapez:

gedit Makefile

Dans le fichier qui s'ouvre, recherchez ces quelques lignes (les lignes 20 à 24 normalement):

## Uncomment the TWO lines below for MPI (can be used together with OMP as well)
## For experimental MPI_Barrier support, add -DJOHN_MPI_BARRIER too.
## For experimental MPI_Abort support, add -DJOHN_MPI_ABORT too.
#CC = mpicc -DHAVE_MPI
#MPIOBJ = john-mpi.o

Et dé-commentez les deux dernières, ("dé-commenter" dans ce cas, revient à supprimer le # dièse en début de ligne) donc ça donne :

## Uncomment the TWO lines below for MPI (can be used together with OMP as well)
## For experimental MPI_Barrier support, add -DJOHN_MPI_BARRIER too.
## For experimental MPI_Abort support, add -DJOHN_MPI_ABORT too.
CC = mpicc -DHAVE_MPI
MPIOBJ = john-mpi.o

Enregistrez et fermez Gedit. Maintenant tapez make et choisissez la version adaptée à votre architecture. Pour moi par exemple c'est linux-x86-64-native. Une fois que vous avez choisi, tapez:

make clean <version-choisie>

Pour moi ça donne donc:

make clean linux-x86-64-native

Ensuite, ça devrait compiler, attendez la fin, puis, si tout s'est bien passé, vous devriez avoir l'exécutable de john dans le dossier /run, donc placez-vous dans le dossier /run en tapant:

cd ../run

Et on lance le test pour voir si tout marche bien:

./john --test

Si vous lancez john seul comme dans le test du dessus, il prendra 100% d'un cœur de votre processeur pour travailler. Maintenant, admettons que votre processeur possède 4 cœurs, vous pouvez indiquer le nombre de cœurs à utiliser de cette façon:

mpirun -np <nombre de coeur à utiliser> ./john --test

Regardez la différence quand je lance le test sur du MD5 avec 1, 2 et puis 3 coeurs:

napoleon@r00t:~/john-1.7.9-jumbo-7/run$ ./john --test --format:raw-MD5
Benchmarking: Raw MD5 [128/128 AVX intrinsics 12x]... DONE
Raw: 40946K c/s real, 40946K c/s virtual

2 coeurs:

napoleon@r00t:~/john-1.7.9-jumbo-7/run$ mpirun -np 2 ./john --test --format:raw-MD5
Benchmarking: Raw MD5 [128/128 AVX intrinsics 12x]... (2xMPI) DONE
Raw: 81108K c/s real, 81108K c/s virtual

3 coeurs:

napoleon@r00t:~/john-1.7.9-jumbo-7/run$ mpirun -np 3 ./john --test --format:raw-MD5
Benchmarking: Raw MD5 [128/128 AVX intrinsics 12x]... (3xMPI) DONE
Raw: 119535K c/s real, 118352K c/s virtual

Une capture d'écran du Moniteur système avec 3 cœurs, on voit bien que 3 sur les 4 sont à 100% d'utilisation:

Vous l'avez compris, si vous avez 4 cœurs, vous diviserez le temps de travail de John par 4, si vous en avez 8, vous le divisez par 8, ce qui est plus qu'intéressant.

Pour faire des petits tests, vous pouvez par exemple créer un fichier avec un couple user/password de cette façon:

echo -n "passe" | md5sum

Vous récupérez le hash MD5 produit par la commande ci-dessus, et vous le coller dans un fichier de cette façon:

echo "user:b89f7a5ff3e3a225d572dac38b2a67f7" > pass.txt

Puis vous lancez John dessus :

mpirun -np <nombre de coeur> ./john --format:raw-MD5 pass.txt

Quelques secondes suffisent ...

1 commentaire:

  1. ~# mpirun -np 2 ./john --format:raw-MD5 pass.txt--------------------------------------------------------------------------
    mpirun was unable to launch the specified application as it could not access
    or execute an executable:

    Executable: ./john
    Node: martin-Aspire-E5-571

    while attempting to start process rank 0.
    --------------------------------------------------------------------------
    2 total processes failed to start
    root@martin-Aspire-E5-571:~# mpirun -np 2 ./martin --format:raw-MD5 pass.txt
    --------------------------------------------------------------------------
    J'ai fais une fausse manip si j'obtiens ce message ? merci d'avance :)

    RépondreSupprimer