John the Ripper und Hardwarebeschleunigung (GPU)

Kali LinuxBeginner
Jetzt üben

Einleitung

In diesem Lab werden Sie die leistungsstarke Kombination von John the Ripper (JtR) und Grafikprozessoren (GPUs) für beschleunigtes Passwort-Cracking erkunden. Traditionelles CPU-basiertes Cracking kann langsam sein, insbesondere bei komplexen Passwörtern. GPUs können mit ihren massiven parallelen Verarbeitungskapazitäten die für das Knacken von Passwörtern erforderliche Zeit drastisch reduzieren.

Sie beginnen mit dem Verständnis der grundlegenden Prinzipien des GPU-Crackings und fahren dann mit den praktischen Schritten zur Einrichtung Ihrer Umgebung fort. Dazu gehört die Installation notwendiger GPU-Treiber und Frameworks wie CUDA oder OpenCL. Als Nächstes konfigurieren Sie John the Ripper für die Nutzung Ihrer GPU, benchmarken dessen Leistung und lernen gängige Fehlerbehebungstechniken. Am Ende dieses Labs werden Sie ein solides Verständnis dafür haben, wie Sie die GPU-Beschleunigung effektiv mit John the Ripper nutzen können.

GPU-Cracking-Prinzipien verstehen

In diesem Schritt lernen Sie die grundlegenden Prinzipien kennen, die es GPUs ermöglichen, das Passwort-Cracking zu beschleunigen.

GPUs sind für die parallele Verarbeitung konzipiert, d. h. sie können viele Berechnungen gleichzeitig durchführen. Diese Architektur ist ideal für Aufgaben wie das Passwort-Cracking, bei denen dieselbe Operation (z. B. das Hashing eines Passwortkandidaten) Millionen oder Milliarden von Malen ausgeführt werden muss.

Schlüsselkonzepte:

  • Parallelität: Im Gegensatz zu CPUs, die sich hervorragend für sequentielle Aufgaben eignen, verfügen GPUs über Tausende kleinerer Kerne, die gleichzeitig an unabhängigen Teilen eines Problems arbeiten können. Beim Passwort-Cracking kann jeder Kern einen anderen Passwortkandidaten testen.
  • Hashing-Algorithmen: Beim Passwort-Cracking werden wiederholt Passwortkandidaten gehasht und das Ergebnis mit einem bekannten Hash verglichen. Viele Hashing-Algorithmen (wie MD5, SHA-1, bcrypt, scrypt) sind rechenintensiv und eignen sich daher gut für die GPU-Beschleunigung.
  • CUDA/OpenCL: Dies sind parallele Computing-Plattformen und Programmiermodelle, die es Softwareentwicklern ermöglichen, eine GPU für allgemeine Verarbeitungszwecke zu nutzen.
    • CUDA (Compute Unified Device Architecture): Entwickelt von NVIDIA, ist es eine proprietäre Plattform für NVIDIA-GPUs.
    • OpenCL (Open Computing Language): Ein offener Standard für die parallele Programmierung über heterogene Plattformen (CPUs, GPUs, FPGAs usw.) verschiedener Anbieter hinweg. John the Ripper unterstützt beide.

Wie es funktioniert:

  1. Hashes laden: John the Ripper lädt die Ziel-Passworthashes in den Speicher der GPU.
  2. Kandidaten generieren: Die GPU generiert eine große Anzahl von Passwortkandidaten (z. B. aus einer Wortliste oder durch Brute-Force).
  3. Hashen und Vergleichen: Jeder GPU-Kern hasht gleichzeitig seine zugewiesenen Kandidaten und vergleicht den resultierenden Hash mit den Ziel-Hashes.
  4. Cracks melden: Wenn eine Übereinstimmung gefunden wird, wird das geknackte Passwort gemeldet.

Diese parallele Ausführung reduziert die Zeit, die benötigt wird, um ein übereinstimmendes Passwort zu finden, erheblich.

GPU-Treiber und CUDA/OpenCL installieren

In diesem Schritt bereiten Sie Ihre LabEx-Umgebung für die GPU-Beschleunigung vor, indem Sie die notwendigen Treiber und das OpenCL-Framework installieren. Da LabEx-Umgebungen virtualisiert sind und möglicherweise keinen direkten Zugriff auf physische GPUs haben, simulieren wir die Einrichtung durch die Installation der OpenCL-Entwicklungsbibliotheken, die für die GPU-Module von John the Ripper unerlässlich sind.

Aktualisieren Sie zuerst die Paketliste, um sicherzustellen, dass Sie die neuesten Softwareversionen erhalten.

sudo apt update

Installieren Sie als Nächstes das Paket ocl-icd-opencl-dev. Dieses Paket stellt den OpenCL Installable Client Driver (ICD) Loader und Entwicklungsdateien bereit, die für Anwendungen wie John the Ripper entscheidend sind, um mit OpenCL-kompatiblen Geräten zu interagieren.

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

Nach der Installation können Sie überprüfen, ob die OpenCL-Bibliotheken vorhanden sind. Obwohl Sie keine physische GPU haben, die Sie mit clinfo abfragen können, zeigt die Anwesenheit der Entwicklungsdateien an, dass das System für die Kompilierung und Ausführung von OpenCL-Anwendungen eingerichtet ist.

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

Sie sollten eine Ausgabe ähnlich dieser sehen, die bestätigt, dass die Bibliothek vorhanden ist:

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

Dieser Schritt stellt sicher, dass die grundlegenden OpenCL-Komponenten für John the Ripper verfügbar sind, um sie zu erkennen und zu nutzen.

John the Ripper für die GPU-Nutzung konfigurieren

In diesem Schritt installieren Sie John the Ripper und überprüfen dessen Fähigkeit, OpenCL zu erkennen. Obwohl die LabEx-Umgebung möglicherweise keine physische GPU hat, sind die OpenCL-Module von John the Ripper dennoch vorhanden und können konfiguriert werden.

Installieren Sie zuerst John the Ripper.

sudo apt install -y john

Nach der Installation können Sie die Fähigkeiten von John the Ripper überprüfen und insbesondere nach OpenCL-Unterstützung suchen. Der Befehl john --list=opencl-devices von John the Ripper wird verwendet, um erkannte OpenCL-Geräte aufzulisten. In einer virtualisierten Umgebung ohne physische GPU werden möglicherweise keine tatsächlichen Geräte aufgelistet, aber der Befehl selbst bestätigt, dass die OpenCL-Module in John the Ripper kompiliert wurden.

john --list=opencl-devices

Sie sehen möglicherweise eine Ausgabe, die "No OpenCL devices found" oder Ähnliches anzeigt, was in dieser virtuellen Umgebung zu erwarten ist. Wichtig ist, dass der Befehl ohne Fehler ausgeführt wird und die OpenCL-Fähigkeiten von JtR vorhanden sind.

No OpenCL devices found.

Erstellen wir als Nächstes eine Dummy-Hash-Datei zur Vorbereitung des Crackings. Wir verwenden für die Demonstration einen einfachen MD5-Hash.

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

Dies erstellt eine Datei hashes.txt in Ihrem Verzeichnis ~/project mit einem Hash für das Passwort "hello".

Versuchen Sie nun, den Hash mit John the Ripper zu knacken. Auch ohne physische GPU versucht John the Ripper, seine OpenCL-fähigen Module zu verwenden, falls verfügbar, und greift auf die CPU zurück, wenn keine Geräte gefunden werden.

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

Sie sollten eine Ausgabe sehen, die anzeigt, dass John the Ripper den Hash verarbeitet. Wenn das Passwort "hello" in der Standard-Wortliste enthalten ist, wird es geknackt.

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.

Dieser Schritt bestätigt, dass John the Ripper installiert ist, seine OpenCL-Komponenten erkannt werden und er Hashes verarbeiten kann.

Benchmark der GPU-Cracking-Leistung

In diesem Schritt lernen Sie, wie Sie die Leistung von John the Ripper benchmarken. Obwohl wir uns in einer virtualisierten Umgebung ohne physische GPU befinden, ist das Verständnis des Benchmark-Prozesses für reale Szenarien entscheidend. John the Ripper verfügt über ein integriertes Benchmark-Tool, das verschiedene Hash-Typen testen kann.

Um John the Ripper zu benchmarken, verwenden Sie die Option --test. Dieser Befehl führt eine Reihe von Tests gegen verschiedene Hash-Algorithmen durch und zeigt die Cracking-Geschwindigkeit (Schätzungen pro Sekunde) für jeden an.

john --test

Die Ausgabe wird umfangreich sein und die Leistung für verschiedene Hash-Typen anzeigen. Suchen Sie nach Zeilen, die "OpenCL" in ihrer Beschreibung enthalten, falls OpenCL-Geräte erkannt wurden. Selbst wenn keine physische GPU vorhanden ist, kann John the Ripper basierend auf seinen kompilierten Modulen möglicherweise immer noch theoretische OpenCL-Leistung melden.

Beispielausgabe (zur besseren Übersicht gekürzt):

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

Die Werte c/s (Kandidaten pro Sekunde) oder p/s (Passwörter pro Sekunde) geben die Cracking-Geschwindigkeit an. In einer realen Umgebung mit einer leistungsstarken GPU wären diese Zahlen für GPU-beschleunigte Algorithmen im Vergleich zu reinen CPU-Benchmarks deutlich höher.

Sie können auch einen bestimmten Hash-Typ benchmarken, z. B. raw-md5, um gezieltere Ergebnisse zu erhalten:

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

Dieser Befehl benchmarkt speziell das Format raw-md5. Die Option --test=0 führt den Benchmark für eine kurze Dauer aus, was für schnelle Überprüfungen nützlich ist.

Das Verständnis dieser Benchmark-Ergebnisse ist der Schlüssel zur Bewertung der Effektivität Ihrer GPU-Einrichtung und zum Vergleich verschiedener Hardwarekonfigurationen.

Fehlerbehebung bei GPU-Cracking-Problemen

In diesem Schritt lernen Sie gängige Fehlerbehebungstechniken für John the Ripper und GPU-Beschleunigung. Obwohl die LabEx-Umgebung keine physische GPU hat, ist das Verständnis dieser Schritte für reale Anwendungen von entscheidender Bedeutung.

Häufige Probleme und Lösungen:

  1. "No OpenCL devices found" oder "CUDA error":

    • Ursache: Falsche oder fehlende GPU-Treiber oder nicht korrekt installierte OpenCL/CUDA SDKs.
    • Lösung: Stellen Sie sicher, dass Ihre GPU-Treiber aktuell und korrekt installiert sind. Für NVIDIA-GPUs installieren Sie das CUDA Toolkit. Für AMD/Intel-GPUs stellen Sie sicher, dass die OpenCL-Treiber installiert sind. In einer virtuellen Umgebung ist diese Meldung zu erwarten, wenn keine virtuelle GPU bereitgestellt wird.
    • Prüfen: Führen Sie john --list=opencl-devices oder nvidia-smi (für NVIDIA) aus, um die Geräteerkennung zu überprüfen.
  2. Schlechte Leistung:

    • Ursache: Veraltete Treiber, unzureichender GPU-Speicher oder Verwendung eines für die CPU optimierten Hash-Typs auf der GPU.
    • Lösung: Aktualisieren Sie die Treiber. Stellen Sie sicher, dass Ihre GPU über genügend Speicher für den gewählten Hash-Typ und die Wortliste verfügt. Einige Hash-Typen (z. B. bcrypt, scrypt) sind absichtlich langsam und speicherintensiv konzipiert, was sie auf GPUs im Vergleich zu einfacheren Hashes wie MD5 weniger effizient macht.
    • Prüfen: Verwenden Sie john --test, um die Leistung zu benchmarken und mit den erwarteten Werten für Ihre GPU zu vergleichen.
  3. Abstürze oder Einfrieren:

    • Ursache: Überhitzung, instabiles Overclocking oder Treiberkonflikte.
    • Lösung: Überwachen Sie die GPU-Temperatur. Reduzieren Sie das Overclocking, falls angewendet. Installieren Sie die Treiber sauber neu.
    • Prüfen: Verwenden Sie watch -n 1 nvidia-smi (für NVIDIA), um die GPU-Auslastung und -Temperatur zu überwachen.
  4. John the Ripper verwendet die GPU nicht:

    • Ursache: JtR wurde nicht mit GPU-Unterstützung kompiliert oder das spezifische Hash-Format wird vom GPU-Modul nicht unterstützt.
    • Lösung: Stellen Sie sicher, dass Sie die richtige JtR-Version installiert haben (z. B. john-opencl oder john-cuda, falls verfügbar, oder einen Build aus dem Quellcode mit GPU-Flags). Überprüfen Sie, ob das Hash-Format, das Sie knacken, eine OpenCL/CUDA-Implementierung in JtR hat.
    • Prüfen: Führen Sie john --list=formats aus und suchen Sie nach Formaten mit OpenCL oder CUDA in ihrer Beschreibung.

Simulation eines Fehlerbehebungsschritts:

Stellen wir uns vor, Sie sind auf ein Problem gestoßen und müssen die Version von John the Ripper überprüfen, um sicherzustellen, dass sie OpenCL unterstützt.

john --version

Dieser Befehl gibt die installierte Version von John the Ripper aus, was hilfreich sein kann, um festzustellen, ob Sie eine Version haben, die GPU-Unterstützung enthält.

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

Das Verständnis dieser häufigen Probleme und ihrer Lösungen hilft Ihnen, Probleme bei der Verwendung von John the Ripper mit GPU-Beschleunigung in realen Szenarien effektiv zu beheben.

Zusammenfassung

In diesem Lab haben Sie ein umfassendes Verständnis dafür entwickelt, wie Sie John the Ripper mit GPU-Hardwarebeschleunigung für schnelleres Passwort-Cracking nutzen können. Sie haben mit der Erforschung der grundlegenden Prinzipien der GPU-Parallelität und der Rolle von Frameworks wie OpenCL begonnen.

Anschließend haben Sie die praktischen Schritte zur Einrichtung Ihrer Umgebung durchgeführt, einschließlich der Installation der erforderlichen OpenCL-Entwicklungsbibliotheken. Sie haben gelernt, wie Sie John the Ripper installieren, seine OpenCL-Fähigkeiten überprüfen und grundlegendes Hash-Cracking durchführen. Darüber hinaus haben Sie die integrierten Benchmark-Tools von John the Ripper zur Leistungsbewertung erkundet und gängige Fehlerbehebungstechniken für GPU-Cracking-Probleme besprochen.

Durch den Abschluss dieses Labs sind Sie nun mit dem Wissen ausgestattet, die GPU-Beschleunigung mit John the Ripper effektiv zu nutzen und Ihre Passwort-Cracking-Fähigkeiten in realen Szenarien erheblich zu verbessern.