Introduction
Dans ce laboratoire, vous acquerrez une compréhension pratique des attaques par dictionnaire à l'aide de John the Ripper, un puissant outil de craquage de mots de passe. Vous apprendrez à sélectionner et à combiner efficacement des dictionnaires, à comprendre les limites inhérentes à cette méthode d'attaque, et même à générer des dictionnaires personnalisés pour améliorer vos capacités de craquage. À la fin de ce laboratoire, vous serez en mesure d'analyser les taux de réussite des attaques par dictionnaire et d'apprécier leur rôle en cybersécurité.
Sélectionner des dictionnaires appropriés
Dans cette étape, vous apprendrez à sélectionner et à utiliser un fichier dictionnaire approprié pour une attaque par dictionnaire avec John the Ripper. Une attaque par dictionnaire tente de craquer des mots de passe en essayant chaque mot d'une liste prédéfinie (dictionnaire). L'efficacité de cette attaque dépend fortement de la qualité et de la pertinence du dictionnaire utilisé.
Tout d'abord, vérifions que John the Ripper est installé et que le fichier de mots de passe factice passwords.txt et le fichier dictionnaire rockyou.txt sont présents dans votre répertoire ~/project.
john --version
ls -l ~/project/passwords.txt ~/project/rockyou.txt
Vous devriez voir une sortie similaire à celle-ci, confirmant la présence des fichiers :
John the Ripper password cracker, version 1.9.0-jumbo-1 ...
-rw-r--r-- 1 labex labex XX Mar XX:XX /home/labex/project/passwords.txt
-rw-r--r-- 1 labex labex XX Mar XX:XX /home/labex/project/rockyou.txt
Maintenant, effectuons une attaque par dictionnaire de base en utilisant le dictionnaire rockyou.txt contre notre fichier passwords.txt. L'option --wordlist spécifie le fichier dictionnaire à utiliser.
john --wordlist=/home/labex/project/rockyou.txt /home/labex/project/passwords.txt
John the Ripper tentera de craquer les mots de passe. En cas de succès, il affichera les mots de passe craqués. Vous pourriez voir une sortie similaire à celle-ci :
Using default input encoding: UTF-8
Loaded 4 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
admin (user2)
123456 (user3)
labex (user4)
4g 0:00:00:00 DONE (2023-03-15 10:30) 100.0% (ETA: 2023-03-15 10:30) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.
Pour afficher les mots de passe craqués à tout moment, vous pouvez utiliser l'option --show :
john --show /home/labex/project/passwords.txt
Cette commande affichera les mots de passe craqués et les noms d'utilisateur correspondants.
user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)
4 password hashes cracked, 0 left
Ceci démontre comment sélectionner et utiliser un dictionnaire pour une attaque de base. Le fichier rockyou.txt est un exemple courant de dictionnaire contenant des mots de passe fréquemment utilisés.
Combiner des dictionnaires pour des attaques complètes
Dans cette étape, vous apprendrez à combiner plusieurs dictionnaires pour créer une liste de mots plus complète pour John the Ripper. La combinaison de dictionnaires peut augmenter considérablement les chances de craquer des mots de passe, surtout si les mots de passe cibles ne se trouvent pas dans un seul dictionnaire.
Tout d'abord, créons un autre petit fichier dictionnaire nommé common_words.txt dans votre répertoire ~/project.
echo "welcome" > ~/project/common_words.txt
echo "security" >> ~/project/common_words.txt
echo "network" >> ~/project/common_words.txt
Maintenant, nous allons combiner rockyou.txt et common_words.txt en un nouveau fichier appelé combined_dictionary.txt. Nous pouvons utiliser la commande cat pour concaténer les fichiers, puis trier et éliminer les doublons avec sort et uniq.
cat ~/project/rockyou.txt ~/project/common_words.txt | sort | uniq > ~/project/combined_dictionary.txt
Inspectons le contenu du nouveau fichier combined_dictionary.txt pour nous assurer qu'il contient des mots des deux dictionnaires d'origine et aucun doublon.
cat ~/project/combined_dictionary.txt
Vous devriez voir une liste triée de mots uniques provenant de rockyou.txt et common_words.txt.
123456
admin
labex
network
password
secret
security
test
welcome
Maintenant, utilisons ce fichier combined_dictionary.txt pour une attaque par dictionnaire. Pour cette démonstration, nous allons d'abord effacer la session de craquage précédente de John pour assurer un nouveau départ.
john --session=clear
Ensuite, lancez l'attaque en utilisant le dictionnaire combiné :
john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt
John the Ripper tentera de craquer les mots de passe en utilisant la liste de mots étendue. Si de nouveaux mots de passe avaient été ajoutés à passwords.txt et qu'ils étaient présents dans common_words.txt, ils seraient maintenant craqués. Comme notre passwords.txt ne contient que des mots de passe de rockyou.txt, la sortie sera similaire à celle de l'étape précédente, mais elle démontre le processus d'utilisation d'un dictionnaire combiné.
Using default input encoding: UTF-8
Loaded 4 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
admin (user2)
123456 (user3)
labex (user4)
4g 0:00:00:00 DONE (2023-03-15 10:35) 100.0% (ETA: 2023-03-15 10:35) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.
Ce processus souligne l'importance d'avoir un dictionnaire diversifié et complet pour un craquage de mots de passe efficace.
Comprendre les limitations des attaques par dictionnaire
Dans cette étape, vous allez explorer les limitations des attaques par dictionnaire. Bien qu'efficaces, les attaques par dictionnaire ne sont pertinentes que pour les mots de passe qui existent dans le dictionnaire. Elles sont inefficaces contre les mots de passe complexes, uniques ou générés aléatoirement qui ne sont pas présents dans la liste de mots.
Pour démontrer cette limitation, ajoutons un nouvel utilisateur avec un mot de passe fort et aléatoire à notre fichier passwords.txt. Nous utiliserons un mot de passe qui a très peu de chances de se trouver dans un dictionnaire standard. Par exemple, P@ssw0rd!23AbC. Nous allons générer son hash MD5.
echo "user5:$(echo -n 'P@ssw0rd!23AbC' | md5sum | awk '{print $1}')" >> /home/labex/project/passwords.txt
Maintenant, effaçons la session précédente de John et tentons de craquer à nouveau les mots de passe en utilisant notre combined_dictionary.txt.
john --session=clear
john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt
Observez la sortie. John the Ripper craquera probablement les quatre premiers mots de passe (user1, user2, user3, user4) mais ne parviendra pas à craquer le mot de passe de user5 car P@ssw0rd!23AbC ne se trouve pas dans notre dictionnaire.
Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
admin (user2)
123456 (user3)
labex (user4)
4g 0:00:00:00 DONE (2023-03-15 10:40) 80.0% (ETA: 2023-03-15 10:40) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.
Pour confirmer, utilisez l'option --show :
john --show /home/labex/project/passwords.txt
Vous verrez que le mot de passe de user5 reste non craqué.
user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)
4 password hashes cracked, 1 left
Ceci démontre que les attaques par dictionnaire sont limitées par le contenu du dictionnaire. Les mots de passe qui ne sont pas dans le dictionnaire, en particulier ceux qui sont forts et uniques, ne seront pas craqués par cette méthode. Cela souligne l'importance d'utiliser des mots de passe forts et imprévisibles.
Implémenter la génération de dictionnaires personnalisés
Dans cette étape, vous apprendrez à générer un dictionnaire personnalisé. Bien que les grands dictionnaires pré-faits comme rockyou.txt soient utiles, il est parfois nécessaire de créer un dictionnaire adapté à une cible ou à un scénario spécifique. Cela peut impliquer l'utilisation d'informations connues sur la cible (par exemple, noms d'entreprises, phrases courantes, dates) pour générer des mots de passe potentiels.
Nous utiliserons l'outil crunch, qui est excellent pour générer des listes de mots basées sur des ensembles de caractères et des modèles spécifiés. crunch n'est pas installé par défaut, installons-le donc d'abord.
sudo apt install -y crunch
Maintenant, générons un dictionnaire personnalisé simple. Par exemple, nous pouvons générer toutes les combinaisons possibles de lettres minuscules d'une longueur spécifique. Créons un dictionnaire de tous les mots de 4 caractères en minuscules.
crunch 4 4 -o ~/project/custom_4char_dictionary.txt -t @@@@
4 4: Spécifie la longueur minimale et maximale des mots à générer (ici, les deux sont à 4).-o ~/project/custom_4char_dictionary.txt: Spécifie le fichier de sortie.-t @@@@: Spécifie un modèle.@représente les lettres minuscules.
Cette commande générera un fichier volumineux. À des fins de démonstration, générons un dictionnaire personnalisé plus petit et plus gérable. Nous allons générer des mots de longueur 3 à 4, en utilisant uniquement des lettres minuscules, et en commençant par 'a'.
crunch 3 4 abcdefghijklmnopqrstuvwxyz -o ~/project/custom_small_dictionary.txt -t a%@
3 4: Longueur minimale 3, longueur maximale 4.abcdefghijklmnopqrstuvwxyz: Spécifie l'ensemble de caractères à utiliser.-o ~/project/custom_small_dictionary.txt: Fichier de sortie.-t a%@: Modèle.aest un 'a' littéral,%représente les chiffres,@représente les lettres minuscules. Corrigeons cela pour générer uniquement des lettres minuscules.
Essayons un exemple plus pertinent pour un dictionnaire personnalisé : générer des variations d'un mot connu, comme "labex", avec des chiffres ajoutés. Nous utiliserons les règles intégrées de John pour cela, ce qui est plus pratique pour les variations de mots de passe courantes.
Tout d'abord, créons une liste de mots de base avec seulement "labex".
echo "labex" > ~/project/base_word.txt
Maintenant, nous utiliserons l'option --rules de John avec un ensemble de règles courant (comme Wordlist) pour générer des variations. Ceci est souvent utilisé avec une liste de mots de base.
john --wordlist=/home/labex/project/base_word.txt --rules=Wordlist --stdout > ~/project/labex_variations.txt
--wordlist: La liste de mots de base.--rules=Wordlist: Applique les règles de liste de mots par défaut (par exemple, ajout de chiffres, changement de casse, etc.).--stdout: Affiche les mots générés sur la sortie standard.> ~/project/labex_variations.txt: Redirige la sortie vers un fichier.
Inspectons les variations générées :
head -n 10 ~/project/labex_variations.txt
Vous verrez des variations comme labex1, Labex, labex!, etc.
labex
Labex
LABEX
labex1
labex2
labex3
labex4
labex5
labex6
labex7
Ceci démontre comment générer des dictionnaires personnalisés ou des variations de mots, ce qui peut être crucial pour des attaques ciblées où des modèles spécifiques ou des informations connues sur la cible sont disponibles.
Analyser les taux de réussite des attaques par dictionnaire
Dans cette étape, vous analyserez les taux de réussite des attaques par dictionnaire en fonction des dictionnaires utilisés et de la complexité des mots de passe cibles. Comprendre les taux de réussite aide à évaluer l'efficacité de vos efforts de craquage et la posture de sécurité des systèmes.
Nous avons déjà vu que les mots de dictionnaire simples sont facilement craqués, tandis que les mots de passe complexes ne le sont pas. Quantifions cela en examinant le nombre de mots de passe craqués par rapport au nombre total de hachages.
Tout d'abord, assurez-vous que la session de John est effacée.
john --session=clear
Maintenant, exécutons à nouveau l'attaque avec notre combined_dictionary.txt contre passwords.txt (qui inclut maintenant user5 avec un mot de passe fort).
john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt
Une fois l'attaque terminée, utilisez l'option --show pour voir les résultats.
john --show /home/labex/project/passwords.txt
La sortie affichera les mots de passe craqués et le nombre de hachages craqués par rapport au total.
user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)
4 password hashes cracked, 1 left
À partir de cette sortie, nous pouvons calculer le taux de réussite : (Nombre de hachages craqués / Nombre total de hachages) _ 100 %. Dans ce cas, (4 / 5) _ 100 % = 80 %.
Ce taux de réussite de 80 % indique que si de nombreux mots de passe courants ont été craqués, le mot de passe fort de user5 est resté sécurisé contre cette attaque par dictionnaire. Cela souligne que les attaques par dictionnaire sont très efficaces contre les mots de passe faibles, courants ou basés sur des dictionnaires, mais échouent contre les mots de passe forts et uniques.
Pour analyser davantage, vous pourriez expérimenter avec différents dictionnaires (par exemple, un dictionnaire très petit et spécifique par rapport à un dictionnaire très grand et général) et observer comment le taux de réussite change. Plus le dictionnaire est grand et pertinent, plus le taux de réussite potentiel contre les mots de passe courants est élevé. Cependant, pour les mots de passe véritablement aléatoires et complexes, les attaques par dictionnaire auront toujours un faible taux de réussite, soulignant la nécessité d'autres techniques de craquage (comme la force brute) ou, plus important encore, de politiques de mots de passe robustes.
Cette analyse renforce l'importance d'utiliser des mots de passe forts et uniques qui ne sont pas facilement devinables ou trouvables dans les dictionnaires courants pour se protéger contre de telles attaques.
Résumé
Dans ce laboratoire, vous avez acquis une expérience pratique avec John the Ripper et les attaques par dictionnaire. Vous avez appris à sélectionner et à combiner des dictionnaires pour améliorer les efforts de craquage. Vous avez également compris les limitations inhérentes aux attaques par dictionnaire, en particulier contre les mots de passe forts et uniques. De plus, vous avez exploré des méthodes pour générer des dictionnaires personnalisés et analysé les taux de réussite de ces attaques. Ce laboratoire vous a fourni des aperçus pratiques d'une technique fondamentale de craquage de mots de passe et a renforcé l'importance de pratiques de sécurité de mots de passe robustes.


