Einleitung
In diesem Lab werden Sie den Prozess der Extraktion, Vorbereitung und des Knackens von Linux-Passwort-Hashes mit einem leistungsstarken Tool namens John the Ripper untersuchen. Das Verständnis, wie Passwort-Cracking funktioniert, ist entscheidend für die Implementierung robuster Sicherheitsmaßnahmen. Sie lernen die Datei /etc/shadow kennen, wie Sie sie mit /etc/passwd kombinieren, um eine knackbarre Datei zu erstellen, und verwenden dann John the Ripper, um schwache Passwörter zu finden. Abschließend erhalten Sie Einblicke in die Struktur der Shadow-Datei und Best Practices zur Sicherung von Benutzerpasswörtern auf Linux-Systemen.
Extrahieren der Datei /etc/shadow
In diesem Schritt lernen Sie, wie Sie auf die Datei /etc/shadow zugreifen und deren Inhalt extrahieren. Die Datei /etc/shadow speichert verschlüsselte Benutzerpasswörter und andere sicherheitsrelevante Informationen. Aufgrund ihrer sensiblen Natur hat nur der Root-Benutzer Lesezugriff auf diese Datei. Für dieses Lab haben wir in Ihrem Verzeichnis ~/project Dummy-Dateien passwd_dummy und shadow_dummy erstellt, um die realen Dateien zu simulieren, ohne Root-Privilegien für den direkten Zugriff auf /etc/shadow zu benötigen.
Zuerst betrachten wir den Inhalt der Dummy-Datei passwd_dummy. Diese Datei enthält grundlegende Benutzerkontoinformationen, jedoch nicht die Passwort-Hashes.
cat ~/project/passwd_dummy
Sie sollten eine Ausgabe ähnlich dieser sehen:
root:x:0:0:root:/root:/bin/bash
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/bash
testuser:x:1001:1001:Test User,,,:/home/labex/testuser:/bin/bash
Als Nächstes betrachten wir den Inhalt der Dummy-Datei shadow_dummy. Diese Datei enthält die tatsächlichen Passwort-Hashes.
cat ~/project/shadow_dummy
Sie sollten eine Ausgabe ähnlich dieser sehen, wobei das zweite Feld der gehashte Passwort ist:
root:$6$rounds=40000$abcdefghijklmnop$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./:18000:0:99999:7:::
labex:$6$rounds=40000$fedcba9876543210$ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./:18000:0:99999:7:::
testuser:$6$rounds=5000$testsalt$testpasswordhash:18000:0:99999:7:::
In einem realen Szenario würden Sie normalerweise sudo cat /etc/shadow verwenden, um die Shadow-Datei zu extrahieren, aber für dieses Lab verwenden wir die Dummy-Dateien.
Entschlüsseln der Passwortdatei
In diesem Schritt verwenden Sie das Dienstprogramm unshadow, das Teil der John the Ripper-Suite ist, um die Dateien passwd_dummy und shadow_dummy zu einer einzigen Datei zu kombinieren, die John the Ripper verarbeiten kann. Das Tool unshadow führt die Benutzerinformationen aus der Passwortdatei mit den Passwort-Hashes aus der Shadow-Datei zusammen und erstellt ein einheitliches Format, das für das Knacken geeignet ist.
Führen Sie den folgenden Befehl aus, um passwd_dummy und shadow_dummy in einer neuen Datei namens unshadowed.txt in Ihrem Verzeichnis ~/project zu kombinieren:
unshadow ~/project/passwd_dummy ~/project/shadow_dummy > ~/project/unshadowed.txt
Betrachten wir nun den Inhalt der neu erstellten Datei unshadowed.txt, um deren Format zu verstehen.
cat ~/project/unshadowed.txt
Sie sollten eine Ausgabe sehen, bei der jede Zeile mit einem Benutzernamen beginnt, gefolgt vom Passwort-Hash und dann weiteren Benutzerinformationen. Zum Beispiel:
root:$6$rounds=40000$abcdefghijklmnop$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./:0:0:root:/root:/bin/bash
labex:$6$rounds=40000$fedcba9876543210$ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./:1000:1000:LabEx User,,,:/home/labex:/bin/bash
testuser:$6$rounds=5000$testsalt$testpasswordhash:1001:1001:Test User,,,:/home/labex/testuser:/bin/bash
Diese Datei unshadowed.txt ist nun bereit für die Verwendung durch John the Ripper zum Knacken von Passwörtern.
Knacken von Shadow-Hashes mit John the Ripper
In diesem Schritt verwenden Sie John the Ripper, um die Passwort-Hashes in der Datei unshadowed.txt zu knacken. John the Ripper kann verschiedene Arten von Angriffen durchführen, einschließlich Wörterbuchangriffen, bei denen Wörter aus einer vordefinierten Liste ausprobiert werden. Wir haben während des Setups bereits eine einfache Wortliste namens wordlist.txt in Ihrem Verzeichnis ~/project erstellt.
Führen Sie den folgenden Befehl aus, um mit dem Knacken der Passwörter unter Verwendung der Datei wordlist.txt zu beginnen:
john --wordlist=~/project/wordlist.txt ~/project/unshadowed.txt
John the Ripper wird versuchen, die Hashes zu knacken. Wenn er eine Übereinstimmung findet, wird er das geknackte Passwort anzeigen. In unseren Dummy-Dateien hat testuser ein schwaches Passwort, das in wordlist.txt vorhanden ist.
Sie sollten eine Ausgabe ähnlich dieser sehen, die ein geknacktes Passwort anzeigt:
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts to test (sha512crypt, crypt(3) $6$)
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
testpassword (testuser)
3g 0:00:00:00 DONE (2024-01-01 12:00) 100.0% (ETA: 00:00:00) 3.000g/s 180.0p/s 180.0c/s 180.0C/s testpassword
Session completed.
Nach dem Knacken können Sie die von John the Ripper gefundenen geknackten Passwörter anzeigen, indem Sie die Option --show verwenden:
john --show ~/project/unshadowed.txt
Dieser Befehl zeigt alle erfolgreich geknackten Passwörter aus der Sitzung an.
testuser:testpassword
1 password hash cracked, 2 left
Dies zeigt, wie einfach schwache Passwörter mit leicht verfügbaren Tools und Wortlisten geknackt werden können.
Verständnis des Shadow-Datei-Formats
In diesem Schritt werden Sie sich eingehender mit der Struktur und Bedeutung der Felder in der Datei /etc/shadow befassen. Das Verständnis dieses Formats ist entscheidend, um zu verstehen, wie Linux Benutzerpasswortinformationen sicher speichert und verwaltet.
Die Datei /etc/shadow enthält eine Zeile pro Benutzer, wobei jede Zeile aus neun durch Doppelpunkte getrennten Feldern besteht. Betrachten wir erneut eine Zeile aus unserer Datei shadow_dummy:
testuser:$6$rounds=5000$testsalt$testpasswordhash:18000:0:99999:7:::
Hier ist eine Aufschlüsselung jedes Feldes:
- Benutzername:
testuser- Der Anmeldename des Benutzers. - Verschlüsseltes Passwort:
$6$rounds=5000$testsalt$testpasswordhash- Dies ist das wichtigste Feld. Es enthält das gehashte Passwort.$6gibt den verwendeten Hashing-Algorithmus an (in diesem Fall SHA-512). Andere gängige Typen sind$1(MD5),$2a(Blowfish),$5(SHA-256).rounds=5000gibt die Anzahl der Hashing-Runden an, was die Rechenkosten für das Knacken erhöht.testsaltist der Salt, eine zufällige Zeichenkette, die dem Passwort vor dem Hashing hinzugefügt wird, um Rainbow-Table-Angriffe zu verhindern.testpasswordhashist das eigentliche gehashte Passwort.
- Letzte Passwortänderung:
18000- Die Anzahl der Tage seit dem 1. Januar 1970, an denen das Passwort zuletzt geändert wurde. - Mindestalter für Passwort:
0- Die minimale Anzahl von Tagen, die zwischen Passwortänderungen erforderlich sind. Ein Wert von0bedeutet, dass der Benutzer sein Passwort jederzeit ändern kann. - Maximales Alter für Passwort:
99999- Die maximale Anzahl von Tagen, für die das Passwort gültig ist. Nach diesem Zeitraum wird der Benutzer gezwungen, sein Passwort zu ändern.99999bedeutet typischerweise, dass das Passwort niemals abläuft. - Passwort-Warnzeitraum:
7- Die Anzahl der Tage vor dem Ablauf des Passworts, an denen der Benutzer gewarnt wird. - Passwort-Inaktivitätszeitraum: (leer) - Die Anzahl der Tage nach Ablauf des Passworts, an denen das Konto deaktiviert wird. Wenn leer, wird das Konto aufgrund von Passwort-Inaktivität nie deaktiviert.
- Kontoablaufdatum: (leer) - Das Datum (in Tagen seit dem 1. Januar 1970), an dem das Konto deaktiviert wird. Wenn leer, läuft das Konto nie ab.
- Reserviertes Feld: (leer) - Dieses Feld ist für zukünftige Verwendung reserviert.
Das Verständnis dieser Felder hilft bei der Konfiguration von Passwortrichtlinien und der Verbesserung der Systemsicherheit.
Implementierung von Best Practices für die Sicherheit der Shadow-Datei
In diesem Schritt lernen Sie Best Practices für die Sicherung der Datei /etc/shadow und von Benutzerpasswörtern auf Linux-Systemen kennen und verstehen. Angesichts der sensiblen Natur der Shadow-Datei ist deren Schutz für die Systemsicherheit von größter Bedeutung.
Hier sind einige wichtige Best Practices:
Starke Passwortrichtlinien:
- Komplexität: Erzwingen Sie starke Passwortkomplexitätsanforderungen (z. B. Mindestlänge, Mischung aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen).
- Einzigartigkeit: Verhindern Sie, dass Benutzer alte Passwörter wiederverwenden.
- Regelmäßige Änderungen: Implementieren Sie Richtlinien für regelmäßige Passwortänderungen, obwohl moderne Sicherheitsempfehlungen für Nicht-Privilegierte Konten manchmal lange, starke, eindeutige Passwörter gegenüber häufigen Änderungen bevorzugen.
- Passphrasen: Ermutigen Sie zur Verwendung langer Passphrasen anstelle von kurzen, komplexen Passwörtern, da diese oft leichter zu merken und schwerer zu knacken sind.
Dateiberechtigungen:
- Die Datei
/etc/shadowsollte sehr strenge Berechtigungen haben:0640(-rw-r-----). Das bedeutet, nurrootkann sie lesen und schreiben, und Mitglieder der Gruppeshadowkönnen sie lesen. Keine anderen Benutzer sollten Zugriff haben. - Überprüfen Sie die Berechtigungen mit
ls -l /etc/shadow(in einem echten System, nicht in unserer Dummy-Datei).
- Die Datei
Hashing-Algorithmen:
- Verwenden Sie immer moderne, starke Hashing-Algorithmen wie SHA-512 (
$6) oder Blowfish ($2a,$2b,$2y). Vermeiden Sie ältere, schwächere Algorithmen wie MD5 ($1) oder DES. - Stellen Sie sicher, dass die
PAM(Pluggable Authentication Modules)-Konfiguration Ihres Systems so eingestellt ist, dass starke Hashing-Algorithmen verwendet werden.
- Verwenden Sie immer moderne, starke Hashing-Algorithmen wie SHA-512 (
Salting:
- Verwenden Sie immer eindeutige Salts für jedes Passwort. Dies wird automatisch von modernen Hashing-Algorithmen gehandhabt und verhindert Rainbow-Table-Angriffe.
Account-Sperrrichtlinien:
- Implementieren Sie Account-Sperrrichtlinien, um Brute-Force-Angriffe zu verhindern. Nach einer bestimmten Anzahl fehlgeschlagener Anmeldeversuche sollte das Konto vorübergehend gesperrt werden.
Überwachung auf verdächtige Aktivitäten:
- Überwachen Sie regelmäßig Systemprotokolle auf ungewöhnliche Anmeldeversuche oder Änderungen an der Datei
/etc/shadow. Tools wieAIDEoderTripwirekönnen Änderungen der Dateiintegrität erkennen.
- Überwachen Sie regelmäßig Systemprotokolle auf ungewöhnliche Anmeldeversuche oder Änderungen an der Datei
Benutzer schulen:
- Schulen Sie Benutzer über die Bedeutung von starken, eindeutigen Passwörtern und die Risiken von Phishing und Social Engineering.
Durch die Implementierung dieser Best Practices können Sie die Sicherheit von Benutzerkonten erheblich verbessern und sensible Passwortinformationen auf Ihren Linux-Systemen schützen.
Zusammenfassung
In diesem Labor haben Sie praktische Erfahrungen mit dem Prozess des Passwort-Crackings auf Linux-Systemen unter Verwendung von John the Ripper gesammelt. Sie haben gelernt, wie die Dateien /etc/passwd und /etc/shadow mit unshadow extrahiert und kombiniert werden, und dann John the Ripper mit einer Wortliste verwendet, um schwache Passwort-Hashes zu knacken. Darüber hinaus haben Sie das detaillierte Format der Datei /etc/shadow untersucht und die Bedeutung jedes Feldes verstanden, insbesondere des Hashing-Algorithmus und des Salts. Abschließend haben Sie wesentliche Best Practices zur Sicherung von Benutzerpasswörtern und der Shadow-Datei überprüft, darunter starke Passwortrichtlinien, korrekte Dateiberechtigungen und die Verwendung robuster Hashing-Algorithmen. Dieses Wissen ist sowohl für die offensive Sicherheit (Verständnis, wie Systeme kompromittiert werden können) als auch für die defensive Sicherheit (Implementierung von Maßnahmen zum Schutz vor solchen Angriffen) von entscheidender Bedeutung.


