Hashcat Grundlagen des Hashings

LinuxBeginner
Jetzt üben

Einführung

Willkommen in der Welt des Hashing und des Passwort-Crackings! Hashing ist ein fundamentales Konzept in der Cybersicherheit, das zur Überprüfung der Datenintegrität und zur sicheren Speicherung von Passwörtern verwendet wird. Eine Hash-Funktion nimmt eine Eingabe (wie ein Passwort) entgegen und gibt eine Zeichenfolge von Bytes fester Größe zurück, den Hash. Dieser Prozess ist so konzipiert, dass er unidirektional (One-Way) ist, was bedeutet, dass man ihn nicht einfach umkehren kann, um die ursprüngliche Eingabe zu erhalten.

Hashcat ist ein weltweit bekanntes, leistungsstarkes Werkzeug zur Passwortwiederherstellung. Bevor Sie es effektiv nutzen können, müssen Sie die Grundlagen verstehen, was Hashes sind und wie man mit ihnen umgeht.

In diesem Lab lernen Sie die grundlegenden Konzepte des Hashing kennen. Sie werden gängige Hash-Typen erkunden, Ihren eigenen Hash generieren, ihn für die Verwendung mit Hashcat vorbereiten und den entscheidenden Unterschied zwischen einem Passwort und seinem Hash verstehen. Dieses Wissen ist der erste wesentliche Schritt auf Ihrem Weg zur Beherrschung von Hashcat.

Gängige Hash-Typen verstehen – MD5, SHA1 und NTLM

In diesem Schritt lernen Sie drei gängige Hash-Typen kennen, denen Sie im Bereich der Cybersicherheit häufig begegnen werden: MD5, SHA1 und NTLM. In diesem Schritt sind keine Befehle auszuführen; das Ziel ist es, diese Kernkonzepte zu verstehen.

  • Was ist ein Hash?
    Ein Hash ist eine eindeutige Zeichenfolge fester Länge, die aus einem Datenstück generiert wird. Hashing-Algorithmen sind als Einwegfunktionen (One-Way Functions) konzipiert, was bedeutet, dass es rechnerisch unmöglich ist, den Prozess umzukehren und die ursprünglichen Eingabedaten allein aus dem Hash zu ermitteln.

  • MD5 (Message Digest 5)
    MD5 ist einer der ältesten und bekanntesten Hashing-Algorithmen. Er erzeugt einen 128-Bit-Hashwert (32 hexadezimale Zeichen). Obwohl er früher häufig zur Passwortspeicherung verwendet wurde, gilt er heute aufgrund von Schwachstellen, die ihn anfällig für „Kollisionen“ machen (wenn zwei unterschiedliche Eingaben denselben Hash erzeugen), als unsicher für diesen Zweck. Heute wird er hauptsächlich zur Überprüfung der Dateiintegrität verwendet, um sicherzustellen, dass eine Datei während der Übertragung nicht verändert wurde.

  • SHA-1 (Secure Hash Algorithm 1)
    SHA-1 wurde als Nachfolger von MD5 entwickelt. Er erzeugt einen 160-Bit-Hash (40 hexadezimale Zeichen). Wie MD5 gilt auch SHA-1 aufgrund entdeckter Schwächen kryptografisch nicht mehr als sicher. Sie werden ihn jedoch immer noch in älteren Systemen und Legacy-Anwendungen finden.

  • NTLM (NT LAN Manager)
    NTLM ist ein Hashing-Algorithmus, den Microsoft Windows zur Speicherung von Benutzerpasswörtern verwendet. Wenn Sie ein Passwort auf einem Windows-System festlegen, wird es in einen NTLM-Hash umgewandelt und gespeichert. Diese Hashes sind ein häufiges Ziel bei Penetrationstests, die Windows-Umgebungen betreffen.

Das Verständnis dieser Typen ist der erste Schritt, um einen Hash zu identifizieren und die richtige Methode zu seiner Entschlüsselung (Cracken) auszuwählen.

Erstellen eines MD5-Hashs aus einem String mit 'echo' und 'md5sum'

In diesem Schritt generieren Sie einen MD5-Hash aus einem einfachen Textstring. Dies ist eine gängige Aufgabe, um schnell ein Stück Daten über die Kommandozeile zu hashen. Wir verwenden zwei Standard-Linux-Dienstprogramme: echo und md5sum.

Zuerst verstehen wir die Werkzeuge:

  • echo: Dieser Befehl wird verwendet, um eine Textzeile anzuzeigen.
  • md5sum: Dieser Befehl berechnet und überprüft MD5-Message-Digests.
  • | (Pipe): Dieser Operator leitet die Ausgabe des Befehls links davon als Eingabe an den Befehl rechts davon weiter.

Wir werden den String password123 hashen. Es ist wichtig, das Flag -n mit echo zu verwenden. Dies weist echo an, das abschließende Zeilenumbruchzeichen (newline character) nicht auszugeben, da dieses sonst in die Hash-Berechnung einbezogen würde und ein anderes Ergebnis liefern würde.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

echo -n "password123" | md5sum

Sie werden die folgende Ausgabe sehen. Die lange Zeichenfolge ist der MD5-Hash von "password123", und das - zeigt an, dass md5sum seine Eingabe von der Standardeingabe (der Pipe) anstatt von einer Datei gelesen hat.

482c811da5d5b4bc6d497ffa98491e38  -

Sie haben nun erfolgreich Ihren ersten Hash erstellt!

Vorbereiten einer Textdatei mit einem einzelnen Ziel-Hash

In diesem Schritt erstellen Sie eine Datei, um den von Ihnen generierten Hash zu speichern. Hashcat und andere Passwort-Cracking-Tools arbeiten typischerweise mit Dateien, die einen oder mehrere Hashes enthalten, und nicht mit direkter String-Eingabe. Dies ermöglicht es Ihnen, viele Hashes gleichzeitig ins Visier zu nehmen.

Wir verwenden den MD5-Hash für password123, den Sie im vorherigen Schritt generiert haben: 482c811da5d5b4bc6d497ffa98491e38.

Wir können den Befehl echo erneut verwenden, aber dieses Mal verwenden wir den Ausgabeumleitungsoperator > (Redirection Operator), um den String in eine neue Datei namens target_hash.txt zu schreiben. Dieser Befehl erstellt die Datei in Ihrem aktuellen Verzeichnis (~/project).

Führen Sie den folgenden Befehl aus, um die Datei zu erstellen:

echo "482c811da5d5b4bc6d497ffa98491e38" > target_hash.txt

Nun überprüfen wir, ob die Datei korrekt erstellt wurde und den Hash enthält. Verwenden Sie den Befehl cat, um den Inhalt der Datei anzuzeigen:

cat target_hash.txt

Die Ausgabe sollte der Hash selbst sein:

482c811da5d5b4bc6d497ffa98491e38

Sie verfügen nun über eine korrekt formatierte Zieldatei, die für ein Cracking-Tool wie Hashcat bereit ist.

Identifizieren des korrekten Hash-Modus für MD5 mithilfe der Hashcat-Hilfe

In diesem Schritt erfahren Sie, wie Sie den korrekten Modus für einen bestimmten Hash-Typ in Hashcat finden. Hashcat unterstützt Hunderte verschiedener Hashing-Algorithmen, und Sie müssen ihm genau mitteilen, welchen Hash-Typ Sie knacken möchten. Dies geschieht mithilfe eines numerischen "Hash-Modus".

Um den korrekten Modus zu finden, können Sie das integrierte Hilfemenü von Hashcat verwenden. Die Ausführung von hashcat --help zeigt eine sehr lange Liste aller unterstützten Hash-Typen und ihrer entsprechenden Modi an. Um schnell zu finden, was wir benötigen, können wir diese Ausgabe an den grep-Befehl weiterleiten, um nach "md5" zu suchen.

Führen Sie den folgenden Befehl aus, um nach dem MD5-Hash-Modus zu suchen:

hashcat --help | grep -i "md5"

Das Flag -i in grep macht die Suche nicht-case-sensitiv (case-insensitive). Sie werden viele Ausgaben sehen, da es viele Variationen von MD5 gibt. Suchen Sie nach der grundlegendsten Variante.

...
      0 | MD5                                            | Raw Hash
...
   2410 | Cisco-ASA MD5                                  | Operating System
...

Wie Sie in der Ausgabe sehen können, ist der Hash-Modus für einen standardmäßigen, reinen (raw) MD5-Hash 0. Dies ist die Zahl, die Sie Hashcat mit dem Flag -m (z. B. -m 0) übergeben würden, um ihm mitzuteilen, dass Sie einen MD5-Hash knacken.

Unterscheidung zwischen einem Hash und einem Passwort

In diesem letzten Schritt festigen wir den kritischen Unterschied zwischen einem Passwort und seinem Hash. Dies ist ein fundamentales Konzept beim Passwort-Cracking.

  • Das Passwort ist der geheime, für Menschen lesbare String. In unserem Beispiel ist dies password123.
  • Der Hash ist der verschlüsselte (scrambled), fest definierte String, der aus dem Passwort generiert wird. In unserem Beispiel ist dies 482c811da5d5b4bc6d497ffa98491e38.

Passwort-Cracking kehrt den Hash nicht um (reverses the hash). Stattdessen funktioniert es, indem eine Liste potenzieller Passwörter (eine Wortliste/Wordlist) genommen, jedes einzelne gehasht und das Ergebnis mit dem Ziel-Hash verglichen wird. Wenn sie übereinstimmen, wurde das Passwort gefunden.

Um dies zu veranschaulichen, erstellen wir eine einfache Wortlistendatei. In einem realen Szenario würde diese Datei Millionen von Passwort-Vermutungen enthalten. Für dieses Lab enthält sie nur das eine korrekte Passwort.

Erstellen Sie eine Datei namens potential_passwords.txt mit dem ursprünglichen Passwort:

echo "password123" > potential_passwords.txt

Nun betrachten wir die beiden vorbereiteten Dateien. Verwenden Sie den Befehl ls, um sie in Ihrem Verzeichnis anzuzeigen.

ls
potential_passwords.txt  target_hash.txt

Sie haben target_hash.txt, das den zu knackenden Hash enthält, und potential_passwords.txt, das das zu testende Passwort enthält. Diese Trennung ist der Schlüssel zur Funktionsweise von Passwort-Cracking-Tools.

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss dieses Labs! Sie haben die wesentlichen Grundlagen des Hashing erlernt, die erforderlich sind, bevor Sie ein Tool wie Hashcat verwenden.

In diesem Lab haben Sie:

  • Die Konzepte hinter gängigen Hash-Typen wie MD5, SHA-1 und NTLM kennengelernt.
  • Einen MD5-Hash aus einem String mithilfe der Befehle echo und md5sum generiert.
  • Eine Ziel-Hash-Datei vorbereitet, was das Standardformat für Cracking-Tools ist.
  • Den Befehl hashcat --help verwendet, um den korrekten Hash-Modus für MD5 zu identifizieren.
  • Ihr Verständnis des entscheidenden Unterschieds zwischen einem Passwort und seinem entsprechenden Hash gefestigt.

Mit dieser Grundlage sind Sie nun besser darauf vorbereitet, mit fortgeschritteneren Labs fortzufahren, in denen Sie diese Dateien und Konzepte verwenden werden, um einen tatsächlichen Passwort-Cracking-Angriff mit Hashcat durchzuführen.