John the Ripper et le Salting des Mots de Passe

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Dans le domaine de la cybersécurité, la protection des identifiants des utilisateurs est primordiale. Les mots de passe, lorsqu'ils sont stockés, sont rarement conservés en texte brut. Ils sont plutôt hachés, c'est-à-dire transformés en une chaîne de caractères de taille fixe à l'aide d'une fonction cryptographique unidirectionnelle. Cela empêche les attaquants d'accéder directement aux mots de passe, même s'ils parviennent à accéder à la base de données. Cependant, un simple hachage ne suffit pas. Les attaquants peuvent utiliser des tables de hachages précalculées (tables arc-en-ciel) ou des attaques par force brute pour casser les mots de passe.

C'est là qu'intervient le "salting". Le salting est une technique où une chaîne aléatoire unique (le "sel" ou "salt") est ajoutée à un mot de passe avant son hachage. Ce sel est ensuite stocké aux côtés du hachage. Lorsqu'un utilisateur tente de se connecter, le même sel est récupéré et combiné avec le mot de passe saisi avant le hachage, et le hachage résultant est comparé au hachage stocké.

Dans ce laboratoire, vous explorerez le concept de salting des mots de passe, comprendrez son importance pour renforcer la sécurité et observerez comment un outil puissant de cassage de mots de passe comme John the Ripper interagit avec les hachages salés. Vous apprendrez à identifier les hachages salés, verrez comment John the Ripper les gère et saisirez l'impact significatif du salting sur la difficulté de casser les mots de passe. Enfin, vous aurez un aperçu de la manière dont le salting est implémenté dans le stockage des mots de passe dans le monde réel.

Comprendre le concept de salting

Dans cette étape, vous apprendrez le concept fondamental du salting des mots de passe et pourquoi il est crucial pour améliorer la sécurité des mots de passe.

Lorsqu'un mot de passe est "salté", une chaîne aléatoire unique (le sel ou "salt") est ajoutée au mot de passe avant son hachage. Cela signifie que même si deux utilisateurs ont exactement le même mot de passe, leurs hachages stockés seront différents car un sel différent a été utilisé pour chacun. Cela rend inefficaces les tables arc-en-ciel précalculées, qui reposent sur un hachage fixe pour un mot de passe donné. Cela rend également les attaques par force brute plus difficiles, car un attaquant devrait calculer un hachage pour chaque mot de passe possible et chaque sel possible, plutôt que seulement chaque mot de passe possible.

Examinons un exemple de hachage salé. Ouvrez le fichier salted_passwords.txt qui a été créé dans votre répertoire ~/project.

cat ~/project/salted_passwords.txt

Vous verrez une sortie similaire à celle-ci :

user1:$6$salt12345$abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ./:user1password
user2:5f4dcc3b5aa765d61d8327deb882cf99
user3:$6$another_salt$zyxwuvtsrqponmlkjihgfedcba9876543210ZYXWVUTSRQPONMLKJIHGFEDCBA./:anotherpassword
user4:$6$short$abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ./:shortpass

Remarquez les lignes pour user1, user3 et user4. Elles contiennent une section comme $6$salt12345$ ou $6$another_salt$. Le $6$ indique l'algorithme de hachage utilisé (SHA-512 dans ce cas), et la chaîne entre le deuxième et le troisième signe $ (salt12345 ou another_salt) est le sel. Le reste de la chaîne après le troisième $ est le hachage réel du mot de passe combiné avec le sel. La ligne pour user2 est un hachage MD5 non salé, que nous utiliserons pour comparaison plus tard.

Le point essentiel est que chaque hachage salé possède un sel unique, ce qui rend plus difficile le cassage simultané de plusieurs mots de passe à l'aide des mêmes tables précalculées.

Identifier les hachages salés

Dans cette étape, vous apprendrez à identifier les hachages salés en fonction de leurs formats courants. Reconnaître ces formats est la première étape pour comprendre comment aborder le cassage ou la défense des mots de passe.

Différents algorithmes de hachage et systèmes utilisent divers formats pour stocker les hachages salés. Cependant, de nombreux formats courants, en particulier ceux utilisés dans les systèmes Linux, suivent un modèle où le sel est intégré directement dans la chaîne de hachage, souvent délimité par des caractères spéciaux comme $.

Réexaminons le fichier salted_passwords.txt et recherchons spécifiquement les motifs qui indiquent un salting.

cat ~/project/salted_passwords.txt

Comme vous l'avez observé à l'étape précédente :

  • user1:$6$salt12345$abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ./:user1password
  • user3:$6$another_salt$zyxwuvtsrqponmlkjihgfedcba9876543210ZYXWVUTSRQPONMLKJIHGFEDCBA./:anotherpassword
  • user4:$6$short$abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ./:shortpass

Ces lignes montrent clairement le préfixe $6$ (indiquant SHA-512 crypt) suivi de la chaîne de sel (par exemple, salt12345, another_salt, short), puis du hachage réel. Cette structure est un indicateur fort d'un hachage salé.

En revanche, la ligne pour user2 :

  • user2:5f4dcc3b5aa765d61d8327deb882cf99

Ceci est un simple hachage MD5. Il ne contient aucun délimiteur ni sel intégré, ce qui le rend facilement identifiable comme un hachage non salé.

La capacité de distinguer rapidement les hachages salés des hachages non salés est cruciale pour les professionnels de la sécurité et les testeurs d'intrusion, car elle dicte les stratégies de cassage qui peuvent être employées.

Observer la gestion des hachages salés par John the Ripper

Dans cette étape, vous utiliserez John the Ripper, un outil populaire de cassage de mots de passe, pour observer comment il gère les hachages salés et non salés. Cela démontrera les implications pratiques du salting.

Tout d'abord, essayons de casser les mots de passe dans salted_passwords.txt en utilisant une simple liste de mots (wordlist). Nous utiliserons une petite liste de mots personnalisée pour cette démonstration.

Créez un fichier de liste de mots nommé wordlist.txt dans votre répertoire ~/project avec quelques mots de passe courants :

echo "password" > ~/project/wordlist.txt
echo "user1password" >> ~/project/wordlist.txt
echo "anotherpassword" >> ~/project/wordlist.txt
echo "shortpass" >> ~/project/wordlist.txt
echo "123456" >> ~/project/wordlist.txt

Maintenant, exécutez John the Ripper sur votre fichier salted_passwords.txt en utilisant cette liste de mots :

john --wordlist=~/project/wordlist.txt ~/project/salted_passwords.txt

John the Ripper analysera les hachages. Vous devriez voir une sortie indiquant qu'il essaie de casser les mots de passe. Il trouvera probablement rapidement le mot de passe de user2 car il s'agit d'un hachage MD5 non salé et que "password" se trouve dans la liste de mots. Il trouvera également les mots de passe salés si leurs textes en clair correspondants sont dans la liste de mots.

Une sortie d'exemple pourrait ressembler à ceci :

Using default input encoding: UTF-8
Loaded 4 password hashes with no different salts to crack (crypt, generic crypt(3) [MD5/Blowfish/SHA1/SHA256/SHA512/XSHAa/XSHAab/bcrypt/scrypt])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (user2)
user1password    (user1)
anotherpassword  (user3)
shortpass        (user4)
4g 0:00:00:00 DONE (2023-10-27 10:30) ...
Session completed.

Une fois que John a terminé, vous pouvez afficher les mots de passe cassés en utilisant l'option --show :

john --show ~/project/salted_passwords.txt

Cette commande affichera tous les mots de passe que John a réussi à casser.

user2:password (user2)
user1:user1password (user1)
user3:anotherpassword (user3)
user4:shortpass (user4)

4 password hashes cracked, 0 left

John the Ripper est conçu pour gérer divers formats de hachage, y compris ceux avec des sels intégrés. Il extrait automatiquement le sel et l'utilise pendant le processus de cassage. Cependant, la présence de sels uniques pour chaque mot de passe augmente considérablement l'effort de calcul requis pour le cassage, en particulier lors d'attaques à grande échelle.

Comprendre l'impact du salting sur le cassage

Dans cette étape, vous consoliderez votre compréhension de la raison pour laquelle le salting rend le cassage de mots de passe considérablement plus difficile, en particulier pour les attaques à grande échelle.

Considérez l'entrée user2 de notre fichier salted_passwords.txt : user2:5f4dcc3b5aa765d61d8327deb882cf99. Il s'agit d'un hachage MD5 non salé pour le mot de passe "password". Si un attaquant obtient une base de données de hachages MD5 non salés, il peut :

  1. Utiliser des Rainbow Tables : Des tables précalculées de hachages pour les mots de passe courants. Si "password" se trouve dans la table, son hachage 5f4dcc3b5aa765d61d8327deb882cf99 y sera également, et le texte en clair pourra être récupéré instantanément.
  2. Casser plusieurs mots de passe simultanément : Si de nombreux utilisateurs ont le même mot de passe faible (par exemple, "123456"), leurs hachages non salés seront identiques. Un attaquant n'a besoin de casser qu'une seule instance de ce hachage pour connaître le mot de passe de tous les utilisateurs qui le partagent.

Maintenant, examinons les hachages salés :

  • user1:$6$salt12345$abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ./:user1password
  • user3:$6$another_salt$zyxwuvtsrqponmlkjihgfedcba9876543210ZYXWVUTSRQPONMLKJIHGFEDCBA./:anotherpassword

Même si user1 et user3 avaient exactement le même mot de passe, leurs hachages seraient différents car leurs sels (salt12345 et another_salt) sont différents. Cela a plusieurs implications critiques pour les attaquants :

  • Les Rainbow Tables sont inutiles : Étant donné que chaque hachage est unique en raison de son sel, les tables arc-en-ciel précalculées deviennent inefficaces. Un attaquant aurait besoin d'une table arc-en-ciel pour chaque sel possible, ce qui est informatiquement infaisable.
  • Cassage par hachage : Un attaquant doit casser chaque hachage salé individuellement. Si 100 utilisateurs ont le même mot de passe, mais que chacun a un sel unique, l'attaquant doit effectuer 100 opérations de cassage distinctes, une pour chaque paire hachage-sel unique. Cela augmente considérablement le temps et les ressources nécessaires pour une attaque réussie.
  • Difficulté du cassage par force brute : Pour une attaque par force brute, l'attaquant doit combiner chaque mot de passe potentiel avec son sel spécifique avant de le hacher et de le comparer. Cela ajoute une couche de complexité et ralentit considérablement le processus de cassage par rapport aux hachages non salés.

Essentiellement, le salting transforme un problème de cassage unique en de nombreux problèmes de cassage indépendants, rendant les violations de mots de passe à grande échelle beaucoup plus difficiles et plus longues pour les attaquants.

Implémenter le salting dans le stockage des mots de passe

Dans cette étape, vous acquerrez une compréhension conceptuelle de la manière dont le salting est implémenté dans les systèmes de stockage de mots de passe du monde réel. Bien que nous ne construisions pas un système complet, vous verrez les composants clés.

Lorsqu'un utilisateur définit ou modifie son mot de passe, un système sécurisé effectue généralement les étapes suivantes :

  1. Générer un sel aléatoire : Un sel aléatoire cryptographiquement sécurisé est généré. Ce sel doit être unique pour chaque utilisateur et chaque changement de mot de passe.
  2. Combiner le mot de passe et le sel : Le mot de passe en texte clair de l'utilisateur est concaténé avec le sel généré.
  3. Hacher la chaîne combinée : La chaîne combinant le mot de passe et le sel est ensuite passée à travers un algorithme de hachage fort et lent (par exemple, bcrypt, scrypt, Argon2, ou SHA-512 crypt comme vu dans nos exemples). Les algorithmes de hachage lents sont préférés car ils rendent les attaques par force brute encore plus longues.
  4. Stocker le hachage et le sel : Le hachage résultant et le sel sont stockés ensemble dans la base de données. Le sel n'a pas besoin d'être secret ; son but est d'assurer l'unicité du hachage.

Lorsqu'un utilisateur tente de se connecter :

  1. Récupérer le sel stocké : Le système récupère le sel associé au compte de l'utilisateur dans la base de données.
  2. Combiner le mot de passe saisi et le sel stocké : Le mot de passe saisi par l'utilisateur est combiné avec le sel récupéré.
  3. Hacher la chaîne combinée : Cette chaîne combinée est ensuite hachée en utilisant le même algorithme de hachage que celui utilisé lors de l'enregistrement.
  4. Comparer les hachages : Le nouveau hachage calculé est comparé au hachage stocké. S'ils correspondent, le mot de passe est correct.

Simulons la génération d'un hachage salé à l'aide de la commande mkpasswd, qui fait partie du paquet whois et peut générer des hachages de style crypt(3).

Tout d'abord, assurez-vous que whois est installé :

sudo apt install -y whois

Maintenant, générez un hachage salé SHA-512 pour le mot de passe "mysecretpassword" avec un sel personnalisé "mysalt" :

mkpasswd -m sha-512 "mysecretpassword" -s "mysalt"

Vous verrez une sortie similaire à celle-ci :

$6$mysalt$some_long_hash_string_here

La sortie $6$mysalt$some_long_hash_string_here est le hachage salé. $6$ indique SHA-512, mysalt est le sel que vous avez fourni, et le reste est le hachage réel. Dans un système réel, le sel serait généré aléatoirement, et non fourni manuellement.

Cela démontre le processus fondamental. Les applications modernes utilisent des bibliothèques et des frameworks qui abstraient ces détails, mais le principe sous-jacent de génération d'un sel unique, de sa combinaison avec le mot de passe, du hachage et du stockage des deux reste la pierre angulaire d'un stockage sécurisé des mots de passe.

Résumé

Dans ce laboratoire, vous avez acquis une compréhension approfondie du salting des mots de passe et de son rôle essentiel dans l'amélioration de la sécurité des mots de passe. Vous avez appris que le salting implique l'ajout d'une chaîne aléatoire unique (le sel) à un mot de passe avant son hachage, rendant chaque hachage unique même pour des mots de passe identiques.

Vous avez réussi à identifier les hachages salés grâce à leurs formats caractéristiques, incluant souvent des délimiteurs comme $ et une chaîne de sel intégrée. Grâce à une observation pratique avec John the Ripper, vous avez vu comment cet outil puissant gère les hachages salés et non salés, et surtout, comment le salting force le processus de cassage à être effectué sur une base par hachage, augmentant considérablement l'effort de calcul pour les attaquants.

Enfin, vous avez exploré l'implémentation conceptuelle du salting dans les systèmes de stockage de mots de passe, en comprenant les étapes impliquées dans la génération, la combinaison, le hachage et le stockage des sels et des mots de passe. Ces connaissances sont fondamentales pour toute personne impliquée dans la cybersécurité, que ce soit pour défendre des systèmes ou pour comprendre les méthodologies d'attaque.

En rendant chaque hachage de mot de passe unique, le salting atténue efficacement la menace des attaques par table arc-en-ciel et ralentit considérablement les tentatives de force brute, ce qui en fait une technique indispensable pour une sécurité robuste des mots de passe.