Optimiser les performances de John the Ripper

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous explorerez diverses techniques pour optimiser les performances de John the Ripper, un puissant outil de cassage de mots de passe. Le cassage de mots de passe efficace nécessite souvent de tirer parti des ressources matérielles disponibles. Vous apprendrez à configurer John the Ripper pour utiliser plusieurs cœurs de processeur, à comprendre ses capacités de cassage par GPU, à ajuster les paramètres d'évaluation comparative pour une mesure précise des performances, à comparer ses performances GPU avec celles de Hashcat, et à surveiller les ressources système pendant les opérations de cassage. Ces compétences sont cruciales pour toute personne impliquée dans la cybersécurité, les tests d'intrusion ou l'administration système, leur permettant de maximiser l'efficacité de leurs tâches d'audit de mots de passe.

Utiliser plusieurs cœurs de processeur

Dans cette étape, vous apprendrez à configurer John the Ripper pour utiliser plusieurs cœurs de processeur, ce qui peut considérablement accélérer le processus de cassage sur les systèmes dotés de processeurs multi-cœurs. Par défaut, John the Ripper peut ne pas utiliser tous les cœurs disponibles. Vous pouvez spécifier le nombre de cœurs de processeur à utiliser avec l'option --fork.

Tout d'abord, exécutons une simple évaluation comparative sans spécifier le nombre de cœurs pour observer les performances par défaut.

john --test=0

Vous verrez une sortie similaire à celle-ci, indiquant les performances pour divers types de hachage :

Benchmarking: Traditional DES [32/32 BS SSE2-i]... DONE
Many calculations will be done, please be patient.
Raw:    100000 c/s real, 100000 c/s virtual
Benchmarking: BSDI DES [32/32 BS SSE2-i]... DONE
Raw:    100000 c/s real, 100000 c/s virtual
...

Maintenant, exécutons à nouveau l'évaluation comparative, en indiquant explicitement à John the Ripper d'utiliser plusieurs cœurs de processeur. Pour connaître le nombre de cœurs de processeur disponibles sur votre système, vous pouvez utiliser la commande nproc.

nproc

Cette commande affichera le nombre d'unités de traitement disponibles. Par exemple, si elle affiche 2, vous avez 2 cœurs de processeur.

Utilisez maintenant l'option --fork avec le nombre de cœurs que vous souhaitez utiliser. Remplacez $(nproc) par le nombre réel de cœurs si vous préférez, mais $(nproc) est dynamique.

john --test=0 --fork=$(nproc)

Comparez les chiffres de performance "Raw" des deux évaluations comparatives. Vous devriez observer une augmentation de la vitesse de cassage lors de l'utilisation de plusieurs cœurs, en particulier pour les types de hachage intensifs en CPU. L'option --fork crée des processus séparés, chacun travaillant sur une partie de la tâche de cassage, exploitant ainsi le traitement parallèle.

Enfin, essayons de casser un fichier de mots de passe en utilisant plusieurs cœurs. Nous avons un fichier passwords.txt dans votre répertoire ~/project.

john --wordlist=~/project/wordlist.txt --fork=$(nproc) ~/project/passwords.txt

Une fois le cassage terminé, vous pouvez afficher les mots de passe cassés :

john --show ~/project/passwords.txt

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

Configurer John the Ripper pour le cassage par GPU (si applicable)

Dans cette étape, nous aborderons la configuration de John the Ripper pour le cassage par GPU. Bien que l'environnement LabEx ne fournisse généralement pas de ressources GPU dédiées pour les laboratoires généraux, la compréhension de ce concept est cruciale pour optimiser John the Ripper sur les systèmes dotés de GPU compatibles. John the Ripper prend en charge le cassage par GPU via ses implémentations OpenCL et CUDA, qui peuvent offrir des accélérations significatives par rapport au cassage CPU pour certains types de hachage.

Pour vérifier si votre version de John the Ripper prend en charge OpenCL ou CUDA, vous pouvez exécuter la commande suivante :

john --list=opencl-devices

Si des périphériques OpenCL sont détectés, vous verrez une sortie similaire à celle-ci (bien que probablement vide dans cet environnement) :

No OpenCL devices found.

Si vous étiez sur un système avec un GPU compatible et les pilotes OpenCL installés, vous verriez une liste des périphériques GPU disponibles. Par exemple :

Device #0: NVIDIA GeForce RTX 3080, 10240MB, 1710MHz, 68CU

Pour utiliser un périphérique GPU spécifique pour le cassage, vous utiliseriez généralement l'option --format avec un format activé pour OpenCL (par exemple, raw-md5-opencl) et potentiellement l'option --device pour sélectionner un GPU spécifique si plusieurs sont présents.

Par exemple, sur un système avec un GPU, vous pourriez exécuter :

john --format=raw-md5-opencl --wordlist=~/project/wordlist.txt ~/project/passwords.txt

Remarque : Comme cet environnement LabEx ne dispose pas de GPU, la commande ci-dessus échouera probablement ou s'exécutera sur le repli CPU si disponible. Le but de cette étape est d'illustrer la commande et le concept, et non d'effectuer un véritable cassage par GPU dans cet environnement spécifique.

Pour vérifier que John the Ripper est configuré pour tenter le cassage par GPU, vous rechercherez des messages indiquant l'initialisation d'OpenCL ou de CUDA lors de l'exécution d'une commande de cassage avec un format activé pour GPU.

Ajuster les paramètres d'évaluation comparative de John the Ripper

Dans cette étape, vous apprendrez à ajuster les paramètres d'évaluation comparative de John the Ripper pour obtenir des métriques de performance plus précises et pertinentes. L'évaluation comparative par défaut (john --test=0) exécute un test rapide sur divers types de hachage. Cependant, vous pouvez spécifier un type de hachage particulier ou une durée spécifique pour l'évaluation comparative. Ceci est utile lorsque vous souhaitez mesurer les performances pour un scénario de cassage spécifique.

Tout d'abord, listons tous les formats de hachage disponibles que John the Ripper prend en charge. Cela peut vous aider à identifier le format spécifique que vous souhaitez évaluer.

john --list=formats

Cette commande affichera une longue liste de formats de hachage pris en charge, par exemple :

raw-md5
raw-sha1
raw-sha256
...

Maintenant, évaluons un format de hachage spécifique, par exemple raw-md5. Vous pouvez spécifier le format en utilisant l'option --format.

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

Vous verrez les résultats de l'évaluation comparative spécifiquement pour le format raw-md5.

Pour obtenir une évaluation comparative plus stable et précise, en particulier pour les comparaisons de performances, vous pouvez augmenter la durée du test en utilisant l'option --max-run-time. Cette option spécifie le temps maximum en secondes pendant lequel l'évaluation comparative doit s'exécuter.

Exécutons une évaluation comparative de raw-md5 pendant 10 secondes :

john --test=0 --format=raw-md5 --max-run-time=10

Observez comment les chiffres de performance "Raw" peuvent se stabiliser ou fournir une moyenne plus cohérente sur une durée d'exécution plus longue. Ceci est particulièrement utile lors de la comparaison de différentes configurations matérielles ou de différentes versions de John the Ripper.

Vous pouvez également combiner cela avec l'option --fork de l'étape 1 pour évaluer les performances multi-cœurs pour un type de hachage spécifique sur une durée définie.

john --test=0 --format=raw-md5 --fork=$(nproc) --max-run-time=10

En ajustant ces paramètres d'évaluation comparative, vous pouvez obtenir des données de performance plus précises et pertinentes pour vos besoins spécifiques de cassage, vous aidant ainsi à prendre des décisions éclairées concernant les mises à niveau matérielles ou les changements de configuration.

Comprendre Hashcat vs. John the Ripper pour le GPU

Dans cette étape, nous allons discuter des différences entre Hashcat et John the Ripper, en particulier concernant leurs capacités de cassage par GPU. Bien que tous deux soient de puissants outils de cassage de mots de passe, ils ont des forces et des faiblesses différentes, surtout lorsqu'il s'agit d'exploiter les GPU.

John the Ripper (JtR) :

  • Forces : Excellent pour le cassage basé sur CPU, très polyvalent avec de nombreux formats intégrés, bon pour les systèmes mono-utilisateur, et met fortement l'accent sur les attaques par dictionnaire et par force brute. Son support GPU (OpenCL/CUDA) est intégré mais historiquement moins optimisé que Hashcat pour la puissance brute du GPU.
  • Faiblesses : Les performances GPU, bien que présentes, peuvent ne pas toujours égaler la vitesse brute de Hashcat pour certains types de hachage. La configuration pour le GPU peut parfois être moins directe.

Hashcat :

  • Forces : Largement considéré comme le craqueur de mots de passe basé sur GPU le plus rapide et le plus efficace. Il est hautement optimisé pour le traitement parallèle sur GPU (NVIDIA CUDA et AMD OpenCL). Prend en charge un vaste éventail de types de hachage et de modes d'attaque.
  • Faiblesses : Principalement axé sur le GPU, donc les performances CPU ne sont pas sa principale force. Peut être plus complexe à apprendre pour les débutants en raison de ses options et modes d'attaque étendus.

Différences clés pour le cassage par GPU :

  1. Optimisation : Hashcat est spécialement conçu pour l'accélération GPU et atteint souvent des taux de hachage par seconde (H/s) plus élevés sur les GPU par rapport à John the Ripper pour le même type de hachage.
  2. Facilité d'utilisation : Les options GPU de John the Ripper sont intégrées à son interface en ligne de commande existante. Hashcat a sa propre syntaxe et ses propres options distinctes, qui peuvent être plus granulaires pour le contrôle du GPU.
  3. Orientation communautaire : Le développement et la communauté de Hashcat sont fortement axés sur la maximisation des performances de cassage GPU.

Quand utiliser l'un ou l'autre :

  • Utilisez John the Ripper pour le cassage CPU à usage général, lorsque vous avez besoin d'un outil polyvalent avec de nombreuses fonctionnalités intégrées, ou lorsque vous travaillez sur des systèmes sans GPU puissants.
  • Utilisez Hashcat lorsque vous avez accès à des GPU puissants et que vous avez besoin des vitesses de cassage les plus rapides pour une large gamme de types de hachage, en particulier dans les scénarios de tests d'intrusion professionnels ou d'audit.

Pour illustrer, si vous aviez Hashcat installé (ce qui n'est pas le cas par défaut dans cet environnement), une commande typique pour casser des hachages MD5 en utilisant un GPU ressemblerait à ceci :

## This command is for illustration only and will not work without Hashcat installed
## hashcat -m 0 -a 0 ~/project/passwords.txt ~/project/wordlist.txt

-m 0 spécifie le type de hachage MD5 et -a 0 spécifie une attaque par dictionnaire.

Comprendre ces différences vous aide à choisir le bon outil pour la tâche, maximisant ainsi votre efficacité dans les tâches d'audit de mots de passe en fonction du matériel disponible.

Surveiller les ressources système pendant le cassage

Dans cette étape, vous apprendrez à surveiller les ressources système pendant que John the Ripper effectue des opérations de cassage. La surveillance de l'utilisation du CPU, de l'utilisation de la mémoire et des entrées/sorties disque peut vous aider à identifier les goulots d'étranglement et à garantir que votre système est utilisé efficacement. Ceci est crucial pour optimiser les performances et résoudre les problèmes.

Tout d'abord, lançons un processus de cassage John the Ripper en arrière-plan. Nous utiliserons une simple attaque par dictionnaire sur notre fichier passwords.txt.

john --wordlist=~/project/wordlist.txt ~/project/passwords.txt &

Le & à la fin envoie le processus en arrière-plan, vous permettant de continuer à utiliser le terminal. Notez l'ID de processus (PID) qui est affiché, par exemple : [1] 12345.

Maintenant, surveillons l'utilisation du CPU et de la mémoire du système à l'aide de la commande top. top fournit une vue dynamique en temps réel d'un système en cours d'exécution.

top

Dans la sortie de top, recherchez le processus john. Vous verrez son utilisation du CPU (%CPU) et son utilisation de la mémoire (%MEM). Lorsque John the Ripper casse activement, vous devriez voir sa valeur %CPU élevée, surtout si vous utilisez plusieurs cœurs (elle peut dépasser 100 % pour les processus multi-cœurs). Appuyez sur q pour quitter top.

Une autre commande utile pour surveiller les processus est htop. Si htop n'est pas installé, vous pouvez l'installer :

sudo apt install -y htop

Une fois installé, exécutez htop :

htop

htop offre une vue plus conviviale et interactive que top, affichant l'utilisation du CPU par cœur, l'utilisation de la mémoire et les arbres de processus. Vous pouvez facilement trier les processus par utilisation du CPU ou de la mémoire. Recherchez le processus john et observez sa consommation de ressources. Appuyez sur F10 ou q pour quitter htop.

Pour surveiller les entrées/sorties disque, vous pouvez utiliser la commande iotop. Ceci est particulièrement utile si vos listes de mots ou vos fichiers de hachage sont très volumineux, car l'accès disque peut devenir un goulot d'étranglement. Si iotop n'est pas installé, installez-le :

sudo apt install -y iotop

Puis exécutez iotop :

sudo iotop

iotop affiche l'activité des entrées/sorties disque en temps réel. Recherchez john ou les processus associés pour voir s'ils lisent ou écrivent intensivement sur le disque. Appuyez sur q pour quitter iotop.

Enfin, ramenons le processus john en arrière-plan au premier plan et arrêtons-le, ou tuons-le simplement s'il est toujours en cours d'exécution.

fg
## Appuyez sur Ctrl+C pour arrêter le processus

Si fg ne fonctionne pas ou si vous souhaitez le tuer par PID :

killall john

En surveillant régulièrement les ressources système, vous pouvez identifier si John the Ripper utilise pleinement votre matériel ou si d'autres processus consomment des ressources qui pourraient être allouées au cassage. Cela aide à affiner votre configuration de cassage pour des performances optimales.

Résumé

Dans ce laboratoire, vous avez acquis une expérience pratique dans l'optimisation des performances de John the Ripper. Vous avez appris à exploiter plusieurs cœurs de CPU en utilisant l'option --fork pour accélérer le cassage. Nous avons discuté des principes du cassage par GPU avec John the Ripper, même dans des environnements sans GPU dédiés, en soulignant l'importance du support OpenCL/CUDA. Vous avez également maîtrisé l'ajustement des paramètres de benchmarking pour obtenir des métriques de performance précises pour des types de hachage et des durées spécifiques. De plus, vous avez compris les différences clés entre John the Ripper et Hashcat pour le cassage accéléré par GPU, vous permettant de choisir l'outil le plus adapté à divers scénarios. Enfin, vous avez appris à surveiller les ressources système telles que le CPU, la mémoire et les entrées/sorties disque pendant les opérations de cassage, ce qui est essentiel pour identifier les goulots d'étranglement et garantir une utilisation efficace du matériel. Ces compétences sont fondamentales pour quiconque cherche à maximiser l'efficacité de l'audit de mots de passe et des tests de sécurité.