John the Ripper et l'accélération matérielle (GPU)

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous explorerez la combinaison puissante de John the Ripper (JtR) et des unités de traitement graphique (GPU) pour un déchiffrement de mots de passe accéléré. Le déchiffrement traditionnel basé sur le CPU peut être lent, surtout pour les mots de passe complexes. Les GPU, avec leurs capacités massives de traitement parallèle, peuvent réduire considérablement le temps nécessaire au déchiffrement des mots de passe.

Vous commencerez par comprendre les principes fondamentaux du déchiffrement par GPU, puis vous passerez aux étapes pratiques de configuration de votre environnement. Cela inclut l'installation des pilotes GPU et des frameworks nécessaires comme CUDA ou OpenCL. Ensuite, vous configurerez John the Ripper pour utiliser votre GPU, mesurerez ses performances (benchmark) et apprendrez les techniques courantes de dépannage. À la fin de ce laboratoire, vous aurez une solide compréhension de la manière d'utiliser efficacement l'accélération GPU avec John the Ripper.

Comprendre les principes du déchiffrement par GPU

Dans cette étape, vous apprendrez les principes fondamentaux qui permettent aux GPU d'accélérer le déchiffrement de mots de passe.

Les GPU sont conçus pour le traitement parallèle, ce qui signifie qu'ils peuvent effectuer de nombreux calculs simultanément. Cette architecture est idéale pour des tâches telles que le déchiffrement de mots de passe, où la même opération (par exemple, le hachage d'un mot de passe candidat) doit être effectuée des millions ou des milliards de fois.

Concepts clés :

  • Parallélisme : Contrairement aux CPU, qui excellent dans les tâches séquentielles, les GPU possèdent des milliers de cœurs plus petits qui peuvent travailler sur des parties indépendantes d'un problème de manière concurrente. Dans le déchiffrement de mots de passe, chaque cœur peut tester un mot de passe candidat différent.
  • Algorithmes de hachage : Le déchiffrement de mots de passe implique le hachage répété de mots de passe candidats et la comparaison du résultat avec un hash connu. De nombreux algorithmes de hachage (comme MD5, SHA-1, bcrypt, scrypt) sont gourmands en calculs, ce qui en fait de bons candidats pour l'accélération par GPU.
  • CUDA/OpenCL : Ce sont des plateformes de calcul parallèle et des modèles de programmation qui permettent aux développeurs de logiciels d'utiliser un GPU pour le traitement à usage général.
    • CUDA (Compute Unified Device Architecture) : Développé par NVIDIA, c'est une plateforme propriétaire pour les GPU NVIDIA.
    • OpenCL (Open Computing Language) : Une norme ouverte pour la programmation parallèle sur des plateformes hétérogènes (CPU, GPU, FPGA, etc.) de différents fournisseurs. John the Ripper prend en charge les deux.

Comment ça marche :

  1. Chargement des hashes : John the Ripper charge les hashes de mots de passe cibles dans la mémoire du GPU.
  2. Génération des candidats : Le GPU génère un grand nombre de candidats mots de passe (par exemple, à partir d'une liste de mots ou par force brute).
  3. Hachage et comparaison : Chaque cœur de GPU hache simultanément ses candidats assignés et compare le hash résultant avec les hashes cibles.
  4. Rapport des cracks : Si une correspondance est trouvée, le mot de passe déchiffré est rapporté.

Cette exécution parallèle réduit considérablement le temps nécessaire pour trouver un mot de passe correspondant.

Installation des pilotes GPU et de CUDA/OpenCL

Dans cette étape, vous préparerez votre environnement LabEx pour l'accélération GPU en installant les pilotes nécessaires et le framework OpenCL. Étant donné que les environnements LabEx sont virtualisés et peuvent ne pas avoir un accès direct aux GPU physiques, nous allons simuler la configuration en installant les bibliothèques de développement OpenCL, qui sont essentielles pour les modules GPU de John the Ripper.

Tout d'abord, mettez à jour la liste des paquets pour vous assurer d'obtenir les dernières versions des logiciels.

sudo apt update

Ensuite, installez le paquet ocl-icd-opencl-dev. Ce paquet fournit le chargeur et les fichiers de développement du pilote client installable OpenCL (ICD), qui sont cruciaux pour que des applications comme John the Ripper puissent interagir avec les périphériques compatibles OpenCL.

sudo apt install -y ocl-icd-opencl-dev

Après l'installation, vous pouvez vérifier la présence des bibliothèques OpenCL. Bien que vous n'ayez pas de GPU physique à interroger avec clinfo, la présence des fichiers de développement indique que le système est configuré pour compiler et exécuter des applications OpenCL.

ls -l /usr/lib/x86_64-linux-gnu/libOpenCL.so

Vous devriez voir une sortie similaire à celle-ci, confirmant l'existence de la bibliothèque :

lrwxrwxrwx 1 root root 19 Mar 28  2023 /usr/lib/x86_64-linux-gnu/libOpenCL.so -> libOpenCL.so.1.0.0

Cette étape garantit que les composants OpenCL fondamentaux sont disponibles pour que John the Ripper puisse les détecter et les utiliser.

Configuration de John the Ripper pour l'utilisation du GPU

Dans cette étape, vous installerez John the Ripper et vérifierez sa capacité à détecter OpenCL. Bien que l'environnement LabEx puisse ne pas disposer d'un GPU physique, les modules OpenCL de John the Ripper seront toujours présents et pourront être configurés.

Tout d'abord, installez John the Ripper.

sudo apt install -y john

Après l'installation, vous pouvez vérifier les capacités de John the Ripper, en recherchant spécifiquement le support d'OpenCL. La commande john --list=opencl-devices de John the Ripper est utilisée pour lister les périphériques OpenCL détectés. Dans un environnement virtualisé sans GPU physique, elle pourrait ne pas lister de périphériques réels, mais la commande elle-même confirme que les modules OpenCL sont compilés dans John the Ripper.

john --list=opencl-devices

Vous pourriez voir une sortie indiquant "No OpenCL devices found" (Aucun périphérique OpenCL trouvé) ou similaire, ce qui est attendu dans cet environnement virtuel. L'important est que la commande s'exécute sans erreur, confirmant la présence des capacités OpenCL de JtR.

No OpenCL devices found.

Ensuite, créons un fichier de hash factice pour nous préparer au déchiffrement. Nous utiliserons un simple hash MD5 pour la démonstration.

echo "testuser:5d41402abc4b2a76b9719d911017c592" > ~/project/hashes.txt

Ceci crée un fichier hashes.txt dans votre répertoire ~/project avec un hash pour le mot de passe "hello".

Maintenant, tentez de déchiffrer le hash en utilisant John the Ripper. Même sans GPU physique, John the Ripper tentera d'utiliser ses modules compatibles OpenCL s'ils sont disponibles, en se rabattant sur le CPU si aucun périphérique n'est trouvé.

john --format=raw-md5 ~/project/hashes.txt --wordlist=/usr/share/john/password.lst

Vous devriez voir une sortie indiquant que John the Ripper traite le hash. Si le mot de passe "hello" se trouve dans la liste de mots par défaut, il sera déchiffré.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (iteration count) is 1 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
hello            (testuser)
1g 0:00:00:00 DONE (2024-01-01 12:00) 100.0% 1000000g/s 1000000p/s 1000000c/s 1000000C/s testuser
Session completed.

Cette étape confirme que John the Ripper est installé, que ses composants OpenCL sont reconnus et qu'il peut traiter les hashes.

Benchmark des performances de déchiffrement GPU

Dans cette étape, vous apprendrez comment évaluer les performances de John the Ripper. Bien que nous soyons dans un environnement virtualisé sans GPU physique, la compréhension du processus de benchmark est cruciale pour les scénarios réels. John the Ripper dispose d'un outil de benchmark intégré qui peut tester divers types de hash.

Pour évaluer John the Ripper, utilisez l'option --test. Cette commande exécutera une série de tests sur différents algorithmes de hash, affichant la vitesse de déchiffrement (conversions par seconde) pour chacun.

john --test

La sortie sera détaillée, montrant les performances pour divers types de hash. Recherchez les lignes qui incluent "OpenCL" dans leur description, si des périphériques OpenCL ont été détectés. Même si aucun GPU physique n'est présent, John the Ripper pourrait toujours rapporter des performances OpenCL théoriques basées sur ses modules compilés.

Exemple de sortie (tronquée pour plus de concision) :

Benchmarking: Raw-MD5 [MD5]... DONE
Many salts:     1000000 c/s real, 1000000 c/s virtual

Benchmarking: bcrypt ($2*$, $2a$, $2x$, $2y$, $2b$) [Blowfish OpenCL]... DONE
Many salts:     1000000 c/s real, 1000000 c/s virtual
Only one salt:  1000000 c/s real, 1000000 c/s virtual

Les valeurs c/s (candidats par seconde) ou p/s (mots de passe par seconde) indiquent la vitesse de déchiffrement. Dans un environnement réel avec un GPU puissant, ces chiffres seraient considérablement plus élevés pour les algorithmes accélérés par GPU par rapport aux benchmarks CPU uniquement.

Vous pouvez également évaluer un type de hash spécifique, par exemple raw-md5, pour obtenir des résultats plus ciblés :

john --test=0 --format=raw-md5

Cette commande évalue spécifiquement le format raw-md5. L'option --test=0 exécute le benchmark pendant une courte durée, ce qui est utile pour des vérifications rapides.

Comprendre ces résultats de benchmark est essentiel pour évaluer l'efficacité de votre configuration GPU et comparer différentes configurations matérielles.

Dépannage des problèmes de déchiffrement GPU

Dans cette étape, vous apprendrez les techniques courantes de dépannage pour John the Ripper et l'accélération GPU. Bien que l'environnement LabEx ne dispose pas d'un GPU physique, la compréhension de ces étapes est cruciale pour les applications réelles.

Problèmes courants et solutions :

  1. "No OpenCL devices found" (Aucun périphérique OpenCL trouvé) ou "CUDA error" :

    • Cause : Pilotes GPU incorrects ou manquants, ou SDK OpenCL/CUDA non correctement installé.
    • Solution : Assurez-vous que vos pilotes GPU sont à jour et correctement installés. Pour les GPU NVIDIA, installez le CUDA Toolkit. Pour les GPU AMD/Intel, assurez-vous que les pilotes OpenCL sont installés. Dans un environnement virtuel, ce message est attendu si aucun GPU virtuel n'est exposé.
    • Vérification : Exécutez john --list=opencl-devices ou nvidia-smi (pour NVIDIA) pour vérifier la détection du périphérique.
  2. Performances médiocres :

    • Cause : Pilotes obsolètes, mémoire GPU insuffisante, ou utilisation d'un type de hash optimisé pour CPU sur GPU.
    • Solution : Mettez à jour les pilotes. Assurez-vous que votre GPU dispose de suffisamment de mémoire pour le type de hash et la liste de mots choisis. Certains types de hash (par exemple, bcrypt, scrypt) sont intentionnellement conçus pour être lents et gourmands en mémoire, ce qui les rend moins efficaces sur GPU par rapport à des hashs plus simples comme MD5.
    • Vérification : Utilisez john --test pour évaluer les performances et les comparer aux valeurs attendues pour votre GPU.
  3. Plantages ou blocages :

    • Cause : Surchauffe, overclocking instable, ou conflits de pilotes.
    • Solution : Surveillez la température du GPU. Réduisez l'overclocking s'il est appliqué. Réinstallez proprement les pilotes.
    • Vérification : Utilisez watch -n 1 nvidia-smi (pour NVIDIA) pour surveiller l'utilisation et la température du GPU.
  4. John the Ripper n'utilise pas le GPU :

    • Cause : JtR non compilé avec le support GPU, ou format de hash spécifique non pris en charge par le module GPU.
    • Solution : Assurez-vous d'avoir installé la version correcte de JtR (par exemple, john-opencl ou john-cuda si disponible, ou une compilation à partir des sources avec les drapeaux GPU). Vérifiez que le format de hash que vous déchiffrez possède une implémentation OpenCL/CUDA dans JtR.
    • Vérification : Exécutez john --list=formats et recherchez les formats avec OpenCL ou CUDA dans leur description.

Simulation d'une étape de dépannage :

Imaginons que vous ayez rencontré un problème et que vous deviez vérifier la version de John the Ripper pour vous assurer qu'elle prend en charge OpenCL.

john --version

Cette commande affichera la version de John the Ripper installée, ce qui peut aider à identifier si vous avez une version qui inclut le support GPU.

John the Ripper 1.9.0-jumbo-1 (linux-gnu)
Copyright (c) 1996-2023 by Solar Designer and others
...

Comprendre ces problèmes courants et leurs solutions vous aidera à résoudre efficacement les problèmes lors de l'utilisation de John the Ripper avec l'accélération GPU dans des scénarios réels.

Résumé

Dans ce laboratoire, vous avez acquis une compréhension approfondie de la manière d'utiliser John the Ripper avec l'accélération matérielle GPU pour un déchiffrement de mots de passe plus rapide. Vous avez commencé par explorer les principes fondamentaux du parallélisme GPU et le rôle de frameworks tels qu'OpenCL.

Vous avez ensuite procédé aux étapes pratiques de configuration de votre environnement, y compris l'installation des bibliothèques de développement OpenCL nécessaires. Vous avez appris à installer John the Ripper, à vérifier ses capacités OpenCL et à effectuer un déchiffrement de hash de base. De plus, vous avez exploré les outils de benchmark intégrés de John the Ripper pour évaluer les performances et discuté des techniques courantes de dépannage pour les problèmes de déchiffrement GPU.

En terminant ce laboratoire, vous êtes désormais équipé des connaissances nécessaires pour utiliser efficacement l'accélération GPU avec John the Ripper, améliorant ainsi considérablement vos capacités de déchiffrement de mots de passe dans des scénarios réels.