Optimiser les performances du GPU avec les indicateurs OpenCL

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Hashcat est un outil de récupération de mots de passe de renommée mondiale, capable d'exploiter l'immense puissance de traitement des GPU pour casser des hachages à des vitesses incroyables. Cependant, pour tirer le meilleur parti de votre matériel, vous devez savoir comment le configurer et l'optimiser correctement. L'utilisation de paramètres incorrects peut entraîner des performances sous-optimales, voire une instabilité matérielle.

Dans ce laboratoire, vous apprendrez à utiliser plusieurs des indicateurs (flags) de Hashcat liés à OpenCL pour gérer et optimiser les performances de votre GPU. Vous vous entraînerez à lister les périphériques disponibles, à sélectionner un GPU spécifique pour une tâche, à mettre en œuvre des protections thermiques et à expérimenter des options d'optimisation des performances. Ces compétences sont essentielles pour quiconque souhaite utiliser Hashcat de manière efficace et sûre.

Lister les périphériques OpenCL disponibles avec --opencl-devices

Dans cette étape, vous apprendrez à identifier les périphériques de calcul que Hashcat peut utiliser. Avant de pouvoir assigner une tâche à un GPU ou à un CPU, vous devez savoir comment le système le reconnaît. Hashcat fournit un indicateur spécifique à cet effet.

L'indicateur --opencl-devices interroge le framework OpenCL (Open Computing Language) du système et liste tous les périphériques compatibles, tels que les GPU et les CPU. Chaque périphérique se voit attribuer un ID unique, que vous utiliserez dans les étapes ultérieures pour le cibler spécifiquement.

Exécutez la commande suivante dans votre terminal pour lister tous les périphériques OpenCL disponibles :

hashcat --opencl-devices

Vous verrez une sortie similaire à celle ci-dessous. Les détails exacts, en particulier les noms des périphériques et les informations sur la plateforme, varieront en fonction du matériel de l'environnement de laboratoire.

hashcat (v6.2.6) starting

OpenCL Info:

Platform ID #1
  Vendor  : The pocl project
  Name    : Portable Computing Language
  Version : OpenCL 3.0 PoCL 3.1+g3a94695b, LLVM 14.0.0, RELOC, SLEEF, DISTRO, POCL_DEBUG

  Device ID #1
    Type           : CPU
    Vendor ID      : 1024
    Vendor         : GenuineIntel
    Name           : 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
    Version        : OpenCL 3.0 PoCL 3.1+g3a94695b, LLVM 14.0.0, RELOC, SLEEF, DISTRO, POCL_DEBUG
    Processor(s)   : 8
    Clock          : 3000
    ...

Platform ID #2
  Vendor  : NVIDIA Corporation
  Name    : NVIDIA CUDA
  Version : OpenCL 3.0 CUDA 12.2.142

  Device ID #2
    Type           : GPU
    Vendor ID      : 4318
    Vendor         : NVIDIA Corporation
    Name           : NVIDIA T4
    Version        : OpenCL 3.0 CUDA
    Processor(s)   : 40
    Clock          : 1590
    ...

Notez le Device ID pour chaque entrée. Dans cet exemple, le Device ID #2 est le GPU NVIDIA T4, idéal pour le cracking de hachages.

Sélectionner un GPU spécifique pour le cracking avec -d

Dans cette étape, vous apprendrez à indiquer à Hashcat d'utiliser un périphérique spécifique pour une tâche de cracking. Ceci est particulièrement utile dans les systèmes dotés de plusieurs GPU ou lorsque vous souhaitez éviter d'utiliser le CPU, qui est généralement beaucoup plus lent pour ce type de travail.

L'indicateur -d (ou --devices) vous permet de spécifier quels ID de périphérique utiliser. Vous pouvez trouver l'ID correct dans la sortie de la commande de l'étape précédente.

Nous allons maintenant exécuter une tâche de cracking simple ciblant le GPU. Nous utiliserons les fichiers hash.txt et wordlist.txt préparés dans votre répertoire ~/project. La commande spécifie le type de hachage (-m 0 pour MD5), le mode d'attaque (-a 0 pour une attaque par dictionnaire) et le périphérique cible. En supposant que le GPU est le Device ID #2 de notre exemple précédent, la commande serait :

hashcat -m 0 -a 0 ~/project/hash.txt ~/project/wordlist.txt -d 2

Si votre GPU a un ID différent, veuillez ajuster le numéro après -d en conséquence.

Après avoir exécuté la commande, Hashcat démarrera l'attaque exclusivement sur le périphérique spécifié et devrait rapidement trouver le mot de passe.

...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 5d41402abc4b2a76b9719d911017c592
Time.Started.....: ...
Time.Estimated...: ...
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#2.........:  104.6 kH/s (0.00ms) @ Accel:128 Loops:128 Thr:1024 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 2/2 (100.00%)
Rejected.........: 0/2 (0.00%)
Restore.Point....: 1/2 (50.00%)
Restore.Sub.#2...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#2....: wrongpass -> password
Hardware.Mon.#2..: Temp: 40c Fan: 30% Util: 13% Core:1410MHz Mem:5000MHz Bus:16

5d41402abc4b2a76b9719d911017c592:password

Started: ...
Stopped: ...

La sortie confirme que le hachage a été décrypté et que le mot de passe est password.

Comprendre l'indicateur --gpu-temp-retain

Dans cette étape, vous découvrirez une fonctionnalité de sécurité cruciale pour protéger votre matériel. L'utilisation d'un GPU à 100 % de sa capacité pendant de longues périodes génère une quantité de chaleur importante. Si elle n'est pas gérée, des températures élevées peuvent entraîner un étranglement thermique (thermal throttling, où le GPU ralentit pour se refroidir) voire des dommages permanents.

L'indicateur --gpu-temp-retain indique à Hashcat de surveiller la température du GPU et d'ajuster automatiquement la charge de travail pour la maintenir à ou en dessous d'une valeur spécifiée en degrés Celsius. C'est un excellent moyen d'assurer la stabilité et la longévité de votre matériel lors de longues sessions de cracking.

Exécutons la même attaque que précédemment, mais cette fois, nous ajouterons l'indicateur pour maintenir la température du GPU à 85°C ou moins. C'est une température généralement sûre pour la plupart des GPU sous charge.

hashcat -m 0 -a 0 ~/project/hash.txt ~/project/wordlist.txt -d 2 --gpu-temp-retain=85

Étant donné que notre tâche de cracking est très courte, vous ne verrez pas la gestion de la température en action. Cependant, la commande sera acceptée et Hashcat activera la fonctionnalité. Pour un travail de cracking de plusieurs heures ou plusieurs jours, cet indicateur fonctionnerait activement en arrière-plan, réduisant potentiellement légèrement la vitesse en échange de la sécurité thermique.

La sortie sera la même que lors de l'étape précédente, car le mot de passe est trouvé presque instantanément. L'essentiel est de savoir comment appliquer ce paramètre de protection.

Session..........: hashcat
Status...........: Cracked
...
5d41402abc4b2a76b9719d911017c592:password
...

Expérimenter avec --opencl-vector-width pour trouver le réglage optimal

Dans cette étape, vous allez explorer une option d'optimisation des performances. L'indicateur --opencl-vector-width contrôle le nombre de "threads" ou d'éléments de travail regroupés pour le traitement en une seule instruction. Ceci est également connu sous le nom de largeur SIMD (Single Instruction, Multiple Data).

La valeur optimale pour ce réglage dépend fortement de l'architecture spécifique du GPU et du type de hachage en cours de cracking. La seule façon de trouver le meilleur réglage est d'expérimenter. Les valeurs autorisées sont généralement des puissances de deux, telles que 1, 2, 4, 8 ou 16.

Pour tester l'effet de cet indicateur, nous pouvons utiliser le mode benchmark intégré de Hashcat (-b). Exécutons un benchmark pour MD5 (-m 0) et définissons la largeur vectorielle à 4.

hashcat -m 0 -b --opencl-vector-width 4

Hashcat exécutera un benchmark et affichera la vitesse pour chaque périphérique. Portez attention à la ligne Speed pour votre GPU.

...
Hashtype: MD5

Speed.#2.........:   480.3 MH/s (94.38ms) @ Accel:256 Loops:1024 Thr:256 Vec:4
...

Maintenant, essayez d'exécuter le benchmark à nouveau avec une largeur vectorielle différente, par exemple, 8 :

hashcat -m 0 -b --opencl-vector-width 8

Comparez la Speed de cette exécution à la précédente. En testant différentes valeurs, vous pouvez déterminer la largeur vectorielle optimale pour votre combinaison spécifique de matériel et de hachage, vous permettant ainsi de maximiser vos performances de cracking. Pour ce laboratoire, il suffit d'expérimenter avec la commande.

Surveiller la température et la vitesse du ventilateur du GPU pendant une attaque

Dans cette dernière étape, vous apprendrez à surveiller les signes vitaux de votre GPU en temps réel pendant que Hashcat est en cours d'exécution. Ceci est essentiel pour diagnostiquer les problèmes de performance et s'assurer que vos réglages thermiques fonctionnent comme prévu.

Nous utiliserons l'utilitaire nvidia-smi (NVIDIA System Management Interface), un outil puissant en ligne de commande pour gérer et surveiller les GPU NVIDIA. Pour voir les statistiques se mettre à jour en direct, nous l'exécuterons avec la commande watch.

Tout d'abord, vous devez ouvrir une deuxième fenêtre de terminal. Vous pouvez le faire en cliquant sur l'icône "+" dans la barre d'onglets du terminal en bas de l'écran.

Dans votre nouveau (deuxième) terminal, exécutez la commande suivante. Elle exécutera nvidia-smi chaque seconde et rafraîchira l'écran avec les dernières données.

watch -n 1 nvidia-smi

Vous verrez un tableau de bord affichant le nom du GPU, sa température, la vitesse de son ventilateur, sa consommation d'énergie et son utilisation de la mémoire.

Maintenant, retournez à votre terminal d'origine (premier). Démarrez un benchmark intensif pour soumettre le GPU à une charge importante. Nous utiliserons l'indicateur -w 4 (profil de charge de travail 4, pour "Insane") pour maximiser la charge.

hashcat -m 0 -b -w 4

Revenez à votre deuxième terminal exécutant watch. Vous devriez voir les valeurs Temp, Pwr et GPU-Util augmenter considérablement pendant que le GPU travaille intensivement sur le benchmark. Cela vous donne une vue en direct de l'état de votre matériel.

Une fois que vous avez terminé l'observation, appuyez sur Ctrl+C dans le premier terminal pour arrêter le benchmark Hashcat, puis appuyez sur Ctrl+C dans le second terminal pour arrêter la commande watch.

Résumé

Dans ce laboratoire, vous avez acquis une expérience pratique avec plusieurs indicateurs clés de Hashcat pour gérer et optimiser les performances du GPU.

Vous avez appris à :

  • Lister tous les périphériques compatibles OpenCL disponibles en utilisant --opencl-devices.
  • Cibler un GPU spécifique pour une tâche avec l'indicateur -d.
  • Protéger votre matériel contre la surchauffe en définissant une limite thermique avec --gpu-temp-retain.
  • Expérimenter avec l'indicateur --opencl-vector-width en mode benchmark pour trouver les réglages de performance optimaux.
  • Surveiller les statistiques en temps réel de votre GPU en utilisant nvidia-smi et watch pendant une charge de travail intensive.

La maîtrise de ces commandes vous permet de passer d'un utilisateur de base à un praticien avancé, capable de maximiser la vitesse de cracking tout en assurant la sécurité et la stabilité de votre matériel.