John the Ripper Leistung optimieren

Kali LinuxBeginner
Jetzt üben

Einleitung

In diesem Lab werden Sie verschiedene Techniken zur Leistungsoptimierung von John the Ripper, einem leistungsstarken Tool zum Knacken von Passwörtern, untersuchen. Effizientes Passwortknacken erfordert oft die effektive Nutzung verfügbarer Hardware-Ressourcen. Sie lernen, wie Sie John the Ripper für die Nutzung mehrerer CPU-Kerne konfigurieren, seine GPU-Cracking-Fähigkeiten verstehen, Benchmarking-Einstellungen für eine genaue Leistungsmessung anpassen, seine GPU-Leistung mit Hashcat vergleichen und Systemressourcen während des Cracking-Vorgangs überwachen. Diese Fähigkeiten sind entscheidend für alle, die in den Bereichen Cybersicherheit, Penetrationstests oder Systemadministration tätig sind, und ermöglichen es ihnen, die Effizienz ihrer Passwort-Auditierungsaufgaben zu maximieren.

Mehrere CPU-Kerne nutzen

In diesem Schritt lernen Sie, wie Sie John the Ripper so konfigurieren, dass er mehrere CPU-Kerne nutzt, was den Cracking-Prozess auf Systemen mit Multi-Core-Prozessoren erheblich beschleunigen kann. Standardmäßig verwendet John the Ripper möglicherweise nicht alle verfügbaren Kerne. Sie können die Anzahl der zu verwendenden CPU-Kerne mit der Option --fork angeben.

Lassen Sie uns zunächst ein einfaches Benchmark ohne Angabe der Kernanzahl ausführen, um die Standardleistung zu sehen.

john --test=0

Sie sehen eine Ausgabe, die der folgenden ähnelt und die Leistung für verschiedene Hash-Typen zeigt:

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
...

Lassen Sie uns nun das Benchmark erneut ausführen und John the Ripper explizit anweisen, mehrere CPU-Kerne zu verwenden. Um die Anzahl der auf Ihrem System verfügbaren CPU-Kerne herauszufinden, können Sie den Befehl nproc verwenden.

nproc

Dieser Befehl gibt die Anzahl der verfügbaren Verarbeitungseinheiten aus. Wenn er beispielsweise 2 ausgibt, verfügen Sie über 2 CPU-Kerne.

Verwenden Sie nun die Option --fork mit der Anzahl der Kerne, die Sie nutzen möchten. Ersetzen Sie $(nproc) durch die tatsächliche Anzahl der Kerne, wenn Sie dies bevorzugen, aber $(nproc) ist dynamisch.

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

Vergleichen Sie die "Raw"-Leistungszahlen aus den beiden Benchmarks. Sie sollten eine Steigerung der Cracking-Geschwindigkeit bei der Verwendung mehrerer Kerne feststellen, insbesondere bei CPU-intensiven Hash-Typen. Die Option --fork erstellt separate Prozesse, von denen jeder einen Teil der Cracking-Aufgabe bearbeitet und somit parallele Verarbeitung nutzt.

Versuchen wir abschließend, eine Passwortdatei mit mehreren Kernen zu knacken. Wir haben eine Datei passwords.txt in Ihrem Verzeichnis ~/project.

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

Nach Abschluss des Crackings können Sie die geknackten Passwörter anzeigen:

john --show ~/project/passwords.txt

Dieser Befehl zeigt alle Passwörter an, die John the Ripper erfolgreich geknackt hat.

John the Ripper für GPU-Cracking konfigurieren (falls zutreffend)

In diesem Schritt besprechen wir die Konfiguration von John the Ripper für GPU-Cracking. Obwohl die LabEx-Umgebung in der Regel keine dedizierten GPU-Ressourcen für allgemeine Labs bereitstellt, ist das Verständnis dieses Konzepts entscheidend für die Optimierung von John the Ripper auf Systemen mit kompatiblen GPUs. John the Ripper unterstützt GPU-Cracking durch seine OpenCL- und CUDA-Implementierungen, die für bestimmte Hash-Typen erhebliche Geschwindigkeitssteigerungen gegenüber CPU-Cracking bieten können.

Um zu überprüfen, ob Ihr John the Ripper-Build OpenCL oder CUDA unterstützt, können Sie den folgenden Befehl ausführen:

john --list=opencl-devices

Wenn OpenCL-Geräte erkannt werden, sehen Sie eine Ausgabe, die der folgenden ähnelt (wahrscheinlich jedoch in dieser Umgebung leer):

No OpenCL devices found.

Wenn Sie sich auf einem System mit einer kompatiblen GPU und installierten OpenCL-Treibern befänden, würden Sie eine Liste der verfügbaren GPU-Geräte sehen. Zum Beispiel:

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

Um ein bestimmtes GPU-Gerät für das Cracking zu nutzen, würden Sie typischerweise die Option --format mit einem OpenCL-fähigen Format (z. B. raw-md5-opencl) und möglicherweise die Option --device verwenden, um eine bestimmte GPU auszuwählen, falls mehrere vorhanden sind.

Zum Beispiel könnten Sie auf einem System mit einer GPU Folgendes ausführen:

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

Hinweis: Da diese LabEx-Umgebung keine GPU hat, wird der obige Befehl wahrscheinlich fehlschlagen oder auf die CPU-Fallback-Option zurückgreifen, falls verfügbar. Der Zweck dieses Schritts ist es, den Befehl und das Konzept zu veranschaulichen und nicht, tatsächliches GPU-Cracking in dieser spezifischen Umgebung durchzuführen.

Um zu überprüfen, ob John the Ripper für GPU-Cracking konfiguriert ist, suchen Sie nach Meldungen, die auf die OpenCL- oder CUDA-Initialisierung hinweisen, wenn Sie einen Cracking-Befehl mit einem GPU-fähigen Format ausführen.

John the Ripper Benchmark-Einstellungen anpassen

In diesem Schritt lernen Sie, wie Sie die Benchmark-Einstellungen von John the Ripper anpassen, um genauere und relevantere Leistungskennzahlen zu erhalten. Der Standard-Benchmark (john --test=0) führt einen schnellen Test für verschiedene Hash-Typen durch. Sie können jedoch einen bestimmten Hash-Typ oder eine bestimmte Dauer für den Benchmark angeben. Dies ist nützlich, wenn Sie die Leistung für ein bestimmtes Cracking-Szenario messen möchten.

Lassen Sie uns zunächst alle verfügbaren Hash-Formate auflisten, die John the Ripper unterstützt. Dies kann Ihnen helfen, das spezifische Format zu identifizieren, das Sie benchmarken möchten.

john --list=formats

Dieser Befehl gibt eine lange Liste unterstützter Hash-Formate aus, zum Beispiel:

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

Lassen Sie uns nun ein spezifisches Hash-Format benchmarken, zum Beispiel raw-md5. Sie können das Format mit der Option --format angeben.

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

Sie sehen die Benchmark-Ergebnisse speziell für das Format raw-md5.

Um einen stabileren und genaueren Benchmark zu erhalten, insbesondere für Leistungsvergleiche, können Sie die Testdauer mit der Option --max-run-time erhöhen. Diese Option gibt die maximale Zeit in Sekunden an, für die der Benchmark ausgeführt werden soll.

Lassen Sie uns einen raw-md5-Benchmark für 10 Sekunden ausführen:

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

Beobachten Sie, wie sich die "Raw"-Leistungszahlen über eine längere Laufzeit stabilisieren oder einen konsistenteren Durchschnitt liefern. Dies ist besonders nützlich beim Vergleich verschiedener Hardwarekonfigurationen oder John the Ripper-Builds.

Sie können dies auch mit der Option --fork aus Schritt 1 kombinieren, um die Multi-Core-Leistung für einen bestimmten Hash-Typ über eine festgelegte Dauer zu benchmarken.

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

Durch die Anpassung dieser Benchmark-Einstellungen können Sie präzisere Leistungsdaten erhalten, die für Ihre spezifischen Cracking-Anforderungen relevant sind, und so fundierte Entscheidungen über Hardware-Upgrades oder Konfigurationsänderungen treffen.

Hashcat vs. John the Ripper für GPU verstehen

In diesem Schritt werden wir die Unterschiede zwischen Hashcat und John the Ripper diskutieren, insbesondere im Hinblick auf ihre GPU-Cracking-Fähigkeiten. Obwohl beides leistungsstarke Passwort-Cracking-Tools sind, haben sie unterschiedliche Stärken und Schwächen, insbesondere wenn es darum geht, GPUs zu nutzen.

John the Ripper (JtR):

  • Stärken: Hervorragend für CPU-basiertes Cracking, sehr vielseitig mit vielen integrierten Formaten, gut für Einzelbenutzersysteme und konzentriert sich stark auf Wörterbuch- und Brute-Force-Angriffe. Seine GPU-Unterstützung (OpenCL/CUDA) ist integriert, aber historisch gesehen weniger optimiert als Hashcat für reine GPU-Leistung.
  • Schwächen: Die GPU-Leistung, obwohl vorhanden, erreicht möglicherweise nicht immer die rohe Geschwindigkeit von Hashcat für bestimmte Hash-Typen. Die Konfiguration für GPUs kann manchmal weniger unkompliziert sein.

Hashcat:

  • Stärken: Weithin als der schnellste und effizienteste GPU-basierte Passwort-Cracker angesehen. Er ist hochgradig für parallele Verarbeitung auf GPUs (sowohl NVIDIA CUDA als auch AMD OpenCL) optimiert. Unterstützt eine riesige Anzahl von Hash-Typen und Angriffsmodi.
  • Schwächen: Hauptsächlich auf GPUs fokussiert, daher ist die CPU-Leistung nicht seine Hauptstärke. Kann für Anfänger aufgrund seiner umfangreichen Optionen und Angriffsmodi komplexer zu erlernen sein.

Wesentliche Unterschiede für GPU-Cracking:

  1. Optimierung: Hashcat ist speziell für GPU-Beschleunigung konzipiert und erzielt bei GPUs oft höhere Hashes pro Sekunde (H/s) als John the Ripper für denselben Hash-Typ.
  2. Benutzerfreundlichkeit: Die GPU-Optionen von John the Ripper sind in seine bestehende Kommandozeilenschnittstelle integriert. Hashcat hat seine eigene, eindeutige Syntax und Optionen, die für die GPU-Steuerung granularer sein können.
  3. Community-Fokus: Die Entwicklung und Community von Hashcat konzentrieren sich stark auf die Maximierung der GPU-Cracking-Leistung.

Wann welches Tool verwenden:

  • Verwenden Sie John the Ripper für allgemeines CPU-Cracking, wenn Sie ein vielseitiges Tool mit vielen integrierten Funktionen benötigen oder wenn Sie auf Systemen ohne leistungsstarke GPUs arbeiten.
  • Verwenden Sie Hashcat, wenn Sie Zugang zu leistungsstarken GPUs haben und die absolut schnellsten Cracking-Geschwindigkeiten für eine breite Palette von Hash-Typen benötigen, insbesondere in professionellen Penetrationstests oder Audit-Szenarien.

Zur Veranschaulichung, wenn Sie Hashcat installiert hätten (was in dieser Umgebung nicht standardmäßig der Fall ist), würde ein typischer Befehl zum Knacken von MD5-Hashes mit einer GPU wie folgt aussehen:

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

Wobei -m 0 den MD5-Hash-Typ und -a 0 einen Wörterbuchangriff angibt.

Das Verständnis dieser Unterschiede hilft Ihnen, das richtige Werkzeug für die jeweilige Aufgabe auszuwählen und Ihre Effizienz bei Passwort-Auditierungsaufgaben basierend auf der verfügbaren Hardware zu maximieren.

Systemressourcen während des Crackings überwachen

In diesem Schritt lernen Sie, wie Sie die Systemressourcen überwachen, während John the Ripper Cracking-Operationen durchführt. Die Überwachung der CPU-Auslastung, des Speichers und der Festplatten-I/O kann Ihnen helfen, Engpässe zu identifizieren und sicherzustellen, dass Ihr System effizient genutzt wird. Dies ist entscheidend für die Optimierung der Leistung und die Fehlerbehebung.

Lassen Sie uns zunächst einen John the Ripper-Cracking-Prozess im Hintergrund starten. Wir verwenden einen einfachen Wörterbuchangriff auf unsere Datei passwords.txt.

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

Das & am Ende sendet den Prozess in den Hintergrund, sodass Sie das Terminal weiterhin verwenden können. Beachten Sie die angezeigte Prozess-ID (PID), zum Beispiel: [1] 12345.

Nun überwachen wir die CPU- und Speicherauslastung des Systems mit dem Befehl top. top bietet eine dynamische Echtzeitansicht eines laufenden Systems.

top

Suchen Sie in der top-Ausgabe nach dem john-Prozess. Sie sehen seine CPU-Auslastung (%CPU) und Speicherauslastung (%MEM). Wenn John the Ripper aktiv crackt, sollten Sie einen hohen %CPU-Wert sehen, insbesondere wenn Sie mehrere Kerne verwenden (er kann für Multi-Core-Prozesse über 100 % liegen). Drücken Sie q, um top zu beenden.

Ein weiterer nützlicher Befehl zur Prozessüberwachung ist htop. Wenn htop nicht installiert ist, können Sie es installieren:

sudo apt install -y htop

Nach der Installation führen Sie htop aus:

htop

htop bietet eine benutzerfreundlichere und interaktivere Ansicht als top und zeigt die CPU-Auslastung pro Kern, die Speicherauslastung und Prozessbäume an. Sie können Prozesse einfach nach CPU- oder Speicherauslastung sortieren. Suchen Sie nach dem john-Prozess und beobachten Sie seinen Ressourcenverbrauch. Drücken Sie F10 oder q, um htop zu beenden.

Zur Überwachung der Festplatten-I/O können Sie den Befehl iotop verwenden. Dies ist besonders nützlich, wenn Ihre Wörterbücher oder Hash-Dateien sehr groß sind, da der Festplattenzugriff zu einem Engpass werden kann. Wenn iotop nicht installiert ist, installieren Sie es:

sudo apt install -y iotop

Führen Sie dann iotop aus:

sudo iotop

iotop zeigt die Festplatten-I/O-Aktivität in Echtzeit an. Suchen Sie nach john oder verwandten Prozessen, um zu sehen, ob sie stark von der Festplatte lesen oder auf die Festplatte schreiben. Drücken Sie q, um iotop zu beenden.

Schließlich holen wir den Hintergrundprozess john wieder in den Vordergrund und stoppen ihn oder beenden ihn einfach, wenn er noch läuft.

fg
## Drücken Sie Strg+C, um den Prozess zu stoppen

Wenn fg nicht funktioniert oder Sie ihn per PID beenden möchten:

killall john

Durch regelmäßige Überwachung der Systemressourcen können Sie feststellen, ob John the Ripper Ihre Hardware vollständig auslastet oder ob andere Prozesse Ressourcen verbrauchen, die dem Cracking zugewiesen werden könnten. Dies hilft bei der Feinabstimmung Ihrer Cracking-Konfiguration für optimale Leistung.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit der Optimierung der Leistung von John the Ripper gesammelt. Sie haben gelernt, wie Sie mehrere CPU-Kerne mit der Option --fork nutzen, um das Cracking zu beschleunigen. Wir haben die Prinzipien des GPU-Crackings mit John the Ripper diskutiert, auch in Umgebungen ohne dedizierte GPUs, und die Bedeutung der OpenCL/CUDA-Unterstützung hervorgehoben. Sie haben auch die Anpassung von Benchmarking-Einstellungen gemeistert, um präzise Leistungsmetriken für spezifische Hash-Typen und Zeitdauern zu erhalten. Darüber hinaus haben Sie die Hauptunterschiede zwischen John the Ripper und Hashcat für GPU-beschleunigtes Cracking verstanden, was es Ihnen ermöglicht, das am besten geeignete Werkzeug für verschiedene Szenarien auszuwählen. Schließlich haben Sie gelernt, Systemressourcen wie CPU, Speicher und Festplatten-I/O während des Crackings zu überwachen, was für die Identifizierung von Engpässen und die Sicherstellung einer effizienten Hardware-Auslastung unerlässlich ist. Diese Fähigkeiten sind grundlegend für jeden, der die Effizienz von Passwort-Audits und Sicherheitstests maximieren möchte.