Aller au contenu
← Retour aux projets
Cracker de mots de passe : hashing, salage et stretching — image de couverture
Projet personnel

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

  1. 1
    Génération de hashs de test
    J'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.
  2. 2
    Cassage avec John the Ripper
    J'ai lancé une attaque par dictionnaire (rockyou.txt, 14,3 millions d'entrées) sur des hashs MD5 de test.
  3. 3
    Cassage avec Hashcat
    J'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.
  4. 4
    Dépannage environnement sans GPU
    J'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.
  5. 5
    Cas pratique multi-utilisateurs
    J'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

Cracker de mots de passe : hashing, salage et stretching — capture d'écran 1 sur 5