John the Ripper sur Ubuntu 22.04

Dans ce tutoriel, je montre pas à pas comment installer John the Ripper sur Ubuntu 22.04. Bien sûr, on peut utiliser Kali Linux — il inclut John par défaut et sert de « couteau suisse » en infosecurité. Cependant, je présente l’installation sur Ubuntu pour les cas où Kali n’est pas approprié (politiques d’entreprise, environnements pédagogiques, restrictions d’accès ou compatibilité des paquets).

John the Ripper est un outil d’audit de mots de passe : il prend des hachages et tente de les retrouver par différentes méthodes (listes de mots, règles, recherche incrémentale) pour évaluer la solidité des mots de passe et repérer les comptes faibles. Je vais installer John, créer deux comptes de test (un avec un mot de passe faible et l’autre avec un mot de passe fort), générer le fichier monpass.l contenant les hachages et lancer une attaque par dictionnaire simple avec analyse des résultats. Pour exploiter des fonctions plus avancées (masques, GPU/OpenCL, formats supplémentaires), il faut du matériel plus puissant.

Prérequis : pour le test, j’ai utilisé Ubuntu 22.04 sur Proxmox (4 vCPU, 8 Go de RAM). Je travaillerai avec l’utilisateur oleks, qui fait partie du groupe sudo. Après le test, si la VM n’est pas dédiée uniquement à ces essais comme dans mon cas, supprimez ou effacez de façon sécurisée le fichier monpass.l, car il contient des hachages de mots de passe.

Installation de John et du dictionnaire

Installation de John

sudo apt update
sudo apt install -y john

Création du répertoire de travail

mkdir -p ~/lab_john && cd ~/lab_john

J’utilise un répertoire séparé ~/lab_john pour garder tous les fichiers du labo au même endroit et pouvoir nettoyer rapidement la machine après les tests ; c’est aussi plus simple pour accéder aux dictionnaires et aux résultats de John. N’oubliez pas de supprimer ou de protéger monpass.l, car il contient des hachages.

Pour éviter de télécharger une grosse archive directement, je clone le dépôt avec un historique minimal ; c’est beaucoup plus rapide et plus stable.

sudo apt install -y git
git clone --depth 1 https://github.com/danielmiessler/SecLists.git ~/tmp/SecLists || { echo "git clone failed"; exit 1; }

Cette commande crée une copie locale de la collection de listes de mots SecLists. L’option –depth 1 réduit la quantité de données et accélère le clonage en ne récupérant que l’état actuel du dépôt. Si git n’est pas installé, il faut l’installer avant ; ici j’inclus la commande pour plus de commodité.

On passe dans le sous-répertoire des bases de mots de passe (là où se trouve généralement l’archive rockyou). Vérifiez que le clone s’est bien fait — sinon le dossier n’existera pas.

cd ~/tmp/SecLists/Passwords/Leaked-Databases

Vérifiez le nom exact du fichier (il devrait s’appeler rockyou.txt.tar.gz ou similaire) :

ls -lh rockyou*

Si le fichier est trouvé, utilisez le nom exact affiché par ls à l’étape suivante ; sinon revenez à l’étape de clonage et vérifiez les erreurs.

On extrait maintenant l’archive dans ~/lab_john.
Il est important d’utiliser le nom exact du fichier vu à l’étape précédente :

tar -xzf rockyou.txt.tar.gz -C ~/lab_john
# ou pour être précis :
tar -xzf ~/tmp/SecLists/Passwords/Leaked-Databases/rockyou.txt.tar.gz -C ~/lab_john

Cette commande extrait l’archive dans le dossier de travail, où John pourra accéder au dictionnaire. Assurez-vous que l’extraction se termine sans erreurs — le fichier est volumineux et cela peut prendre quelques minutes.

Vérifiez ensuite que le fichier est bien présent :

ls -lh ~/lab_john/rockyou.txt
wc -l ~/lab_john/rockyou.txt

La première commande affiche la taille du fichier, la seconde compte le nombre de lignes dans le dictionnaire (le nombre approximatif de mots de passe possibles).

 

 Création des comptes de test et mots de passe

Je crée deux comptes : un avec un mot de passe faible, l’autre avec un mot de passe fort.
Exemples de mots de passe :
test1pass123 (faible)
testfort2Gt2hM4Hd6da$ (fort)
Commandes :

sudo adduser --gecos "" --disabled-password test1
echo "test1:pass123" | sudo chpasswd

De même pour testfort2 :

sudo adduser --gecos "" --disabled-password testfort2
echo "testfort2:Gt2hM4Hd6da$" | sudo chpasswd

Le mot de passe fort est utilisé ici uniquement pour la démonstration — on ne le retrouvera probablement pas dans le dictionnaire en un temps raisonnable.

Vérification des hachages dans /etc/shadow

sudo grep -E '^(test1|testfort2):' /etc/shadow

Le résultat affichera des lignes du type user:$6$…:... — ce sont les hachages des mots de passe. Ubuntu utilise en général l’algorithme sha512crypt (marqué $6$). Le fichier /etc/shadow n’est lisible que par l’utilisateur root, donc la commande nécessite sudo. Cela confirme que les mots de passe sont stockés sous forme de hachages, et non en clair.

Création du fichier monpass.l (unshadow)

sudo unshadow /etc/passwd /etc/shadow > ~/lab_john/monpass.l
ls -l ~/lab_john/monpass.l
head -n 5 ~/lab_john/monpass.l

unshadow rassemble les noms d’utilisateurs de /etc/passwd et les mots de passe hachés correspondants de /etc/shadow au format user:hash:… lisible par John the Ripper. La commande doit être exécutée avec sudo, car /etc/shadow n’est lisible que par root. Le fichier monpass.l contient des hachages de mots de passe — gardez-le en sécurité (restreignez les droits) et supprimez-le dès la fin du laboratoire si la VM n’est pas isolée.

Si vous ne prévoyez pas de supprimer la VM immédiatement après le test ou si vous utilisez un serveur de production, restreignez les droits sur le fichier :

sudo chmod 600 ~/lab_john/monpass.l
ls -l ~/lab_john/monpass.l

Cela donne l’accès au fichier uniquement au propriétaire, réduisant le risque de fuite des hachages. Après l’exercice, supprimez le fichier.

Vérifier que monpass.l contient les utilisateurs de test :

grep -E '^(test1|testfort2):' ~/lab_john/monpass.l || echo "test users not found in monpass.l"

Cette commande confirme que les hachages nécessaires sont présents dans le fichier avant de lancer John.

 

Test de performance de John

john --test

Cette commande lance le test de performance intégré de John the Ripper.
Il mesure le nombre de hachages par seconde que le processeur peut traiter pour différents algorithmes (DES, MD5, bcrypt, etc.).
Les résultats donnent une idée des performances de votre système et aident à estimer le temps nécessaire pour des attaques réelles.
Sur des processeurs moins puissants, les algorithmes simples sont traités rapidement, tandis que les algorithmes plus résistants (par exemple bcrypt) sont beaucoup plus lents.

 Attaque par dictionnaire (rockyou + règles)

Avant de lancer l’attaque, assurez-vous d’être dans le dossier ~/lab_john.

john --wordlist=rockyou.txt --rules monpass.l

Sur la machine virtuelle avec 4 vCPU, l’attaque par dictionnaire (rockyou.txt + –rules) a trouvé le mot de passe de l’utilisateur test1 (pass123) en moins d’une minute. En revanche, le mot de passe plus complexe testfort2 (Gt2hM4Hd6da$) n’a pas été trouvé après ~30 minutes de fonctionnement — il n’est pas présent dans le dictionnaire et ne correspond pas aux transformations standards, donc le retrouver est beaucoup moins probable dans un délai raisonnable. Pour arrêter l’attaque, j’ai appuyé sur Ctrl+C.

Consultons les mots de passe trouvés :

john --show monpass.l
cat ~/.john/john.pot

john –show affiche les paires trouvées user:password, et john.pot est le fichier qui stocke les mots de passe découverts.
Après l’expérience, supprimez john.pot et monpass.l si la machine reste en service :

rm -f ~/.john/john.pot
shred -u ~/lab_john/monpass.l # ou rm -f si la VM est temporaire

Voilà — nous avons installé et testé John the Ripper.

Remarque éthique : cet exercice est strictement pédagogique et réalisé dans un environnement contrôlé et autorisé. Toutes les opérations de test doivent être effectuées uniquement sur des machines dont vous avez la permission explicite, dans le but d’évaluer la robustesse des mots de passe et d’améliorer la sécurité.

Bonne chance!