Utiliser John the Ripper pour casser des hachages SHA1

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous allez explorer le processus de cassage de hachages SHA1 à l'aide de John the Ripper, un puissant outil open-source de cassage de mots de passe. Comprendre comment les hachages sont cassés est crucial pour appréhender les vulnérabilités de sécurité des mots de passe et mettre en œuvre des mesures de sécurité plus robustes. Vous apprendrez à générer des hachages SHA1 à partir de mots de passe en texte clair, à préparer ces hachages pour John the Ripper, puis à utiliser l'outil pour récupérer les mots de passe d'origine. Cette expérience pratique vous donnera un aperçu de l'efficacité des algorithmes de hachage et de l'importance de mots de passe forts et uniques.

Générer des hachages SHA1 à partir de mots de passe

Dans cette étape, vous allez générer des hachages SHA1 à partir de quelques mots de passe d'exemple. SHA1 (Secure Hash Algorithm 1) est une fonction de hachage cryptographique qui prend une entrée et produit une valeur de hachage de 160 bits (20 octets), généralement représentée par un nombre hexadécimal de 40 chiffres. Bien que SHA1 soit considéré comme cryptographiquement cassé pour certaines applications en raison de vulnérabilités, il est toujours utile pour démontrer les principes du cassage de hachage.

Tout d'abord, créons un fichier nommé passwords.txt contenant quelques mots de passe simples.

echo -e "password123\nlabexuser\nsecretpass" > passwords.txt

Maintenant, nous allons utiliser la commande sha1sum pour générer le hachage SHA1 de chaque mot de passe dans le fichier passwords.txt. L'option -t indique à sha1sum de lire en mode texte, et l'option -b indique de lire en mode binaire. Nous utiliserons xargs pour passer chaque ligne du fichier comme argument à sha1sum.

cat passwords.txt | xargs -I {} sh -c 'echo -n "{}" | sha1sum' > hashes.txt

Cette commande lit chaque mot de passe de passwords.txt, le redirige vers sha1sum (en utilisant echo -n pour éviter d'ajouter un caractère de nouvelle ligne qui changerait le hachage), puis redirige la sortie (le hachage et le mot de passe d'origine) dans un nouveau fichier appelé hashes.txt.

Visualisons le contenu de hashes.txt :

cat hashes.txt

Vous devriez voir une sortie similaire à celle-ci, où chaque ligne contient un hachage SHA1 suivi du mot de passe d'origine :

5d41402abc4b2a76b9719d911017c592070b4783  password123
1234567890abcdef1234567890abcdef12345678  labexuser
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8  secretpass

Note : La deuxième colonne (le mot de passe d'origine) est incluse par défaut par sha1sum. Pour le cassage, John the Ripper n'a généralement besoin que du hachage lui-même. Nous préparerons le fichier pour John dans l'étape suivante.

Préparer un fichier de hachages pour SHA1

Dans cette étape, vous allez préparer le fichier hashes.txt afin qu'il ne contienne que les hachages SHA1, ce qui est le format attendu par John the Ripper pour le cassage. Le fichier hashes.txt contient actuellement à la fois le hachage et le mot de passe d'origine, ce qui n'est pas idéal pour l'entrée de John.

Nous allons extraire uniquement les valeurs de hachage de hashes.txt et les enregistrer dans un nouveau fichier appelé sha1_hashes_for_john.txt. Nous pouvons utiliser la commande awk pour y parvenir, car elle nous permet de sélectionner facilement des colonnes spécifiques d'un fichier.

awk '{print $1}' hashes.txt > sha1_hashes_for_john.txt

Cette commande demande à awk d'imprimer le premier champ ($1) de chaque ligne de hashes.txt et de rediriger la sortie vers sha1_hashes_for_john.txt.

Maintenant, inspectons le contenu du nouveau fichier pour nous assurer qu'il ne contient que les hachages :

cat sha1_hashes_for_john.txt

Vous devriez voir une sortie similaire à celle-ci, avec uniquement les hachages SHA1 listés :

5d41402abc4b2a76b9719d911017c592070b4783
1234567890abcdef1234567890abcdef12345678
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

Ce fichier est maintenant prêt à être utilisé comme entrée pour John the Ripper.

Casser des hachages SHA1 avec John the Ripper

Dans cette étape, vous utiliserez John the Ripper pour casser les hachages SHA1 stockés dans sha1_hashes_for_john.txt. John the Ripper est un outil rapide de cassage de mots de passe, disponible pour de nombreux systèmes d'exploitation. Son objectif principal est de détecter les mots de passe Unix faibles. Il prend en charge divers types de hachages, y compris SHA1.

Nous utiliserons John the Ripper en mode "wordlist" (liste de mots) pour tenter de casser les hachages. Ce mode essaie des mots de passe à partir d'une liste prédéfinie (une "wordlist"). Pour ce laboratoire, nous allons créer une liste de mots simple contenant les mots de passe d'origine. Dans un scénario réel, vous utiliseriez une liste de mots beaucoup plus grande et plus complète.

Tout d'abord, créez un fichier de liste de mots simple nommé wordlist.txt :

echo -e "password123\nlabexuser\nsecretpass\nwrongpass\notherpass" > wordlist.txt

Maintenant, exécutez John the Ripper avec le fichier de hachages préparé et la liste de mots :

john --format=raw-sha1 --wordlist=wordlist.txt sha1_hashes_for_john.txt

Décomposons la commande :

  • john : La commande pour invoquer John the Ripper.
  • --format=raw-sha1 : Spécifie que les hachages d'entrée sont des hachages SHA1 bruts. John prend en charge de nombreux formats, et la spécification du bon format l'aide à casser efficacement.
  • --wordlist=wordlist.txt : Indique à John d'utiliser wordlist.txt comme dictionnaire pour le cassage.
  • sha1_hashes_for_john.txt : Le fichier contenant les hachages à casser.

Après avoir exécuté la commande, John tentera de casser les hachages. En cas de succès, il affichera les mots de passe cassés.

Vous devriez voir une sortie similaire à celle-ci, indiquant les mots de passe cassés :

Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (Raw-SHA1 [SHA1])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (5d41402abc4b2a76b9719d911017c592070b4783)
labexuser        (1234567890abcdef1234567890abcdef12345678)
secretpass       (5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8)
3g 0:00:00:00 DONE (2023-10-27 10:30) 100.0% (ETA: 00:00:00) 3.000g/s 100.0p/s 100.0c/s 100.0C/s password123..secretpass
Session completed.

Pour afficher à nouveau les mots de passe cassés, vous pouvez utiliser l'option --show :

john --show sha1_hashes_for_john.txt

Cette commande affichera tous les hachages que John a réussi à casser et à stocker dans son fichier "pot" interne.

password123:5d41402abc4b2a76b9719d911017c592070b4783
labexuser:1234567890abcdef1234567890abcdef12345678
secretpass:5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

3 password hashes cracked, 0 left

Analyser les performances de cassage SHA1

Dans cette étape, vous allez analyser brièvement les performances de John the Ripper dans le cassage des hachages SHA1. Bien que notre exemple utilise une liste de mots très petite et des mots de passe simples, dans un scénario réel, les performances de cassage sont un facteur critique.

John the Ripper fournit quelques métriques de performance dans sa sortie, telles que "g/s" (guesses per second - tentatives par seconde) et "p/s" (passwords per second - mots de passe par seconde). Ces métriques indiquent combien de tentatives de mots de passe John peut effectuer par seconde.

Relançons la commande de cassage et observons attentivement la sortie :

john --format=raw-sha1 --wordlist=wordlist.txt sha1_hashes_for_john.txt

Recherchez des lignes similaires à celle-ci dans la sortie :

3g 0:00:00:00 DONE (2023-10-27 10:30) 100.0% (ETA: 00:00:00) 3.000g/s 100.0p/s 100.0c/s 100.0C/s password123..secretpass

Ici, 3.000g/s indique que John a traité 3 tentatives par seconde, et 100.0p/s indique 100 mots de passe par seconde. Pour un ensemble de hachages aussi petit et une liste de mots minuscule, le cassage est presque instantané.

Facteurs affectant les performances de cassage :

  • Complexité du mot de passe : Les mots de passe simples et courants sont cassés beaucoup plus rapidement que les mots de passe complexes et uniques.
  • Taille et qualité de la liste de mots : Une liste de mots plus grande et plus pertinente augmente les chances de cassage mais augmente également le temps nécessaire.
  • Algorithme de hachage : Certains algorithmes de hachage sont conçus pour être gourmands en calcul (par exemple, bcrypt, scrypt) afin de ralentir les tentatives de cassage, tandis que d'autres comme le SHA1 brut sont relativement rapides.
  • Matériel : La puissance de traitement (CPU/GPU) de la machine de cassage a un impact significatif sur les performances.

Cette brève analyse souligne que même avec un outil puissant comme John the Ripper, la robustesse du mot de passe d'origine et l'algorithme de hachage jouent un rôle crucial dans le temps nécessaire pour casser un hachage.

Comprendre les caractéristiques du hachage SHA1

Dans cette étape, vous acquerrez une compréhension plus approfondie des caractéristiques du hachage SHA1 et de l'importance d'utiliser des algorithmes de hachage plus robustes pour le stockage des mots de passe.

Caractéristiques clés du SHA1 :

  1. Taille de sortie fixe : SHA1 produit toujours une valeur de hachage de 160 bits (20 octets), quelle que soit la taille de l'entrée. C'est pourquoi vous voyez une chaîne hexadécimale de 40 caractères.
  2. Fonction unidirectionnelle : Il est informatiquement infaisable d'inverser le processus de hachage pour obtenir l'entrée d'origine à partir du hachage. C'est pourquoi le cassage repose sur des attaques par force brute ou par dictionnaire.
  3. Déterministe : La même entrée produira toujours le même hachage SHA1. Cette propriété est essentielle pour vérifier l'intégrité des données.
  4. Effet d'avalanche : Un petit changement dans l'entrée (même un seul bit) entraîne une sortie de hachage radicalement différente. Cela rend difficile la devinette des entrées basées sur des similarités de hachage.

Pourquoi le SHA1 est considéré comme non sécurisé pour le stockage des mots de passe :

  • Attaques par collision : En 2017, une attaque par collision pratique contre SHA1 a été démontrée. Une collision se produit lorsque deux entrées différentes produisent la même sortie de hachage. Bien que trouver une collision ne révèle pas directement le mot de passe d'origine, cela mine l'intégrité de la fonction de hachage et peut être exploité dans diverses attaques.
  • Vitesse : Le SHA1 est relativement rapide à calculer. Cette vitesse, combinée à la puissance de calcul moderne, le rend vulnérable aux attaques par force brute et par dictionnaire, en particulier pour les mots de passe courants ou faibles.
  • Absence de salage (Salting) : Les hachages SHA1 bruts, comme démontré dans ce laboratoire, n'incluent pas intrinsèquement le "salage". Le salage consiste à ajouter une chaîne unique et aléatoire à chaque mot de passe avant le hachage. Cela empêche l'efficacité des tables arc-en-ciel pré-calculées et garantit que deux mots de passe identiques ont des hachages différents, même s'ils sont stockés dans la même base de données.

Pour un stockage sécurisé des mots de passe aujourd'hui, des algorithmes de hachage plus robustes, plus lents et salés comme bcrypt, scrypt ou Argon2 sont recommandés. Ces algorithmes sont conçus pour être gourmands en calcul, rendant les attaques par force brute beaucoup plus longues et coûteuses.

Ce laboratoire a démontré les principes fondamentaux du cassage de hachage à l'aide de SHA1. Il sert de rappel de l'importance d'utiliser des algorithmes de hachage robustes et des mots de passe forts et uniques pour protéger les informations sensibles.

Résumé

Dans ce laboratoire, vous avez appris avec succès à générer des hachages SHA1 à partir de mots de passe en texte clair et à les préparer pour le cassage. Vous avez ensuite utilisé John the Ripper en mode liste de mots pour casser ces hachages SHA1, récupérant ainsi les mots de passe d'origine. De plus, vous avez acquis des connaissances sur les facteurs affectant les performances de cassage de hachage et compris les caractéristiques clés du SHA1, y compris pourquoi il n'est plus considéré comme sécurisé pour le stockage des mots de passe en raison de sa vitesse et de sa susceptibilité aux attaques par collision. Cette expérience pratique renforce l'importance d'utiliser des mots de passe forts et uniques, ainsi que des algorithmes de hachage modernes et robustes tels que bcrypt, scrypt ou Argon2 pour une gestion sécurisée des mots de passe.