
Cracker de mots de passe : hashing, salage et stretching
De la théorie cryptographique à la démonstration chiffrée, sur un lab isolé
Contexte
Ce projet complète le lab honeypot par la dimension « mot de passe compromis » : comment un mot de passe est réellement stocké, pourquoi il ne peut pas être « déchiffré », et comment les outils standards du métier (John the Ripper, Hashcat) automatisent le test de milliers de candidats par seconde.
L'ensemble a été mené sur la machine attaquante du lab (Kali Linux), sans réseau ni cible externe : uniquement des hashs générés localement pour la démonstration.
Objectifs
- Comprendre et démontrer les propriétés d'une fonction de hachage cryptographique (déterminisme, effet avalanche, irréversibilité).
- Comparer concrètement la vitesse de cassage entre un algorithme rapide (MD5) et un algorithme volontairement lent (bcrypt).
- Mettre en œuvre les quatre grandes familles d'attaque : dictionnaire, dictionnaire + règles de mutation, masque, force brute pure.
- Exécuter un cas pratique multi-utilisateurs réaliste (type fichier /etc/shadow) avec des mots de passe de robustesse variable.
Méthodologie
- 1Génération de hashs de testJ'ai généré des hashs MD5 / SHA1 / SHA256 non salés, puis un SHA-512 salé via mkpasswd, en vérifiant personnellement l'effet avalanche et le rôle du sel.
- 2Cassage avec John the RipperJ'ai lancé une attaque par dictionnaire (rockyou.txt, 14,3 millions d'entrées) sur des hashs MD5 de test.
- 3Cassage avec HashcatJ'ai exécuté un benchmark MD5 vs bcrypt, puis des attaques par dictionnaire, par règles de mutation (best64) et par masque / force brute avec calcul de l'espace de recherche.
- 4Dépannage environnement sans GPUJ'ai résolu une chaîne de pannes OpenCL sur une VM sans carte graphique dédiée : pilote logiciel manquant, variable d'environnement mal placée, RAM insuffisante.
- 5Cas pratique multi-utilisateursJ'ai soumis trois comptes de robustesse croissante (mot du dictionnaire, mot complexifié, passphrase de cinq mots) à la même attaque combinée.
Résultats chiffrés
- MD5 vs bcrypt (benchmark)
- 3 087 100 H/s contre 119 H/s
- Facteur de ralentissement bcrypt
- environ 25 900 fois
- Mot de passe faible (dictionnaire)
- cassé
- Passphrase de 5 mots
- non cassée (dictionnaire + règles épuisés)
Dépannage technique
Hashcat nécessite un backend OpenCL fonctionnel même pour un usage CPU pur, absent par défaut sur cette VM sans GPU. La résolution m'a demandé plusieurs étapes successives : le paquet attendu (pocl-opencl-icd) n'existant pas dans les dépôts Kali, j'ai installé l'alternative mesa-opencl-icd (rendu logiciel llvmpipe).
La plateforme OpenCL restait ensuite invisible pour Hashcat (0 device exposé) jusqu'à ce que je l'active explicitement via la variable d'environnement RUSTICL_ENABLE. Ma première tentative de persistance a échoué car je l'avais placée dans ~/.bashrc, alors que le shell par défaut de Kali est Zsh, qui ne lit pas ce fichier.
Une fois le device détecté, le benchmark échouait encore avec une erreur d'allocation mémoire, que j'ai résolue en portant la RAM allouée à la VM de ~2 Go à 8 Go dans les paramètres VMware.
Stack et outils
- Kali Linux sous VMware Workstation Pro 17
- John the Ripper (attaque par dictionnaire, formats MD5 et SHA-512crypt)
- Hashcat (dictionnaire, règles best64, masque, force brute, benchmark GPU/CPU)
- mkpasswd / OpenSSL (génération de hashs de test)
- Mesa OpenCL (rendu logiciel llvmpipe, environnement sans GPU dédié)
Captures d'écran
