Einleitung
In der heutigen digitalen Landschaft sind starke Passwortrichtlinien entscheidend für den Schutz sensibler Informationen. Selbst mit bestehenden Richtlinien können jedoch Schwachstellen bestehen. Dieses Lab führt Sie durch den Prozess der Verwendung von John the Ripper, einem leistungsstarken Tool zum Knacken von Passwörtern, um die Wirksamkeit bestehender Passwortrichtlinien zu bewerten. Sie lernen, wie Sie Schwachstellen identifizieren, stärkere Richtlinien empfehlen und verstehen, wie Sie automatisierte Compliance-Prüfungen implementieren, um die Gesamtsicherheit zu verbessern. Diese praktische Erfahrung vermittelt Ihnen praktische Fähigkeiten in der Überprüfung und Durchsetzung der Passwortsicherheit.
Analyse bestehender Passwortrichtlinien
In diesem Schritt beginnen Sie damit, zu verstehen, wie bestehende Passwortrichtlinien auf einem Linux-System analysiert werden. Obwohl wir in diesem Lab keine systemweiten Richtlinien direkt ändern werden, ist das Verständnis, wo diese Richtlinien konfiguriert sind, für die Überprüfung entscheidend. Wir werden uns darauf konzentrieren, gängige Konfigurationsdateien zu untersuchen, die die Passwortkomplexität, das Alter und die Sperreinstellungen festlegen.
Untersuchen wir zunächst die Datei /etc/login.defs, die globale Konfigurationseinstellungen für die Shadow-Passwort-Suite enthält. Diese Datei definiert Parameter wie die Passwortalterung, die minimale Passwortlänge und das maximale Passwortalter.
Verwenden Sie den Befehl grep, um nach passwortbezogenen Einstellungen in /etc/login.defs zu suchen:
grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE|ENCRYPT_METHOD" /etc/login.defs
Sie sollten eine Ausgabe ähnlich der folgenden sehen, obwohl die Werte variieren können:
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
ENCRYPT_METHOD SHA512
Als Nächstes betrachten wir /etc/pam.d/common-password, eine PAM (Pluggable Authentication Modules)-Konfigurationsdatei, die die Regeln für die Passwortkomplexität steuert. Diese Datei enthält oft Module wie pam_cracklib.so oder pam_pwquality.so, die Regeln wie die Anforderung von Groß- und Kleinschreibung, Ziffern und Sonderzeichen erzwingen.
Verwenden Sie cat, um den Inhalt von /etc/pam.d/common-password anzuzeigen:
cat /etc/pam.d/common-password
Sie werden viele Zeilen sehen, aber achten Sie auf Zeilen, die pam_pwquality.so oder pam_cracklib.so und deren Parameter (z. B. minlen, difok, ucredit, lcredit, dcredit, ocredit) enthalten.
password [success=1 default=ignore] pam_unix.so obscure sha512 shadow
password requisite pam_pwquality.so retry=3 minlen=8 difok=3 reject_username enforce_for_root
password optional pam_gnome_keyring.so
password optional pam_kwallet.so
password optional pam_systemd.so
Schließlich überprüfen wir die Datei /etc/security/pwquality.conf, die eine detailliertere Kontrolle über die Einstellungen der Passwortqualität bietet, wenn pam_pwquality.so verwendet wird.
cat /etc/security/pwquality.conf
Sie sehen möglicherweise Einstellungen wie minlen, dcredit, ucredit, lcredit, ocredit, maxrepeat usw.
## Configuration for the pam_pwquality module
#
## The setting of the PAM module is usually in /etc/pam.d/common-password
#
## minlen = 8
## difok = 3
## dcredit = -1
## ucredit = -1
## lcredit = -1
## ocredit = -1
## minclass = 0
## maxrepeat = 0
## maxsequence = 0
## gecoscheck = 0
## dictcheck = 1
## usercheck = 1
## enforce_for_root
Durch die Untersuchung dieser Dateien können Sie ein gutes Verständnis der aktuellen Passwortrichtlinieneinstellungen auf dem System gewinnen.
Verwendung von John the Ripper zum Testen der Richtlinienwirksamkeit
In diesem Schritt verwenden Sie John the Ripper (JtR), um die Wirksamkeit von Passwortrichtlinien zu testen. Wir simulieren ein Szenario, in dem Sie Zugriff auf eine Passwort-Hash-Datei haben und versuchen, schwache Passwörter zu knacken.
Erstellen wir zunächst eine Dummy-Passwortdatei zu Demonstrationszwecken. Wir erstellen eine Datei namens passwords.txt mit einigen schwachen Passwörtern.
echo "user1:password123" > ~/project/passwords.txt
echo "user2:welcome" >> ~/project/passwords.txt
echo "user3:labexrocks" >> ~/project/passwords.txt
Nun müssen wir diese Klartextpasswörter in ein Format konvertieren, das John the Ripper verstehen kann. Wir verwenden unshadow (eine Komponente von JtR), um eine Dummy-Datei /etc/passwd und /etc/shadow zu kombinieren. Der Einfachheit halber verwenden wir die Datei passwords.txt direkt mit dem stdin-Modus von JtR zum Knacken.
Erstellen wir eine einfache Wortlisten-Datei namens wordlist.txt, die John the Ripper zum Versuch des Passwortknackens verwendet.
echo "password123" > ~/project/wordlist.txt
echo "welcome" >> ~/project/wordlist.txt
echo "labexrocks" >> ~/project/wordlist.txt
echo "secret" >> ~/project/wordlist.txt
echo "123456" >> ~/project/wordlist.txt
Verwenden Sie nun John the Ripper, um die Passwörter aus passwords.txt mithilfe von wordlist.txt zu knacken.
john --format=raw-md5 --wordlist=~/project/wordlist.txt ~/project/passwords.txt
Sie sehen möglicherweise eine Ausgabe ähnlich der folgenden, die geknackte Passwörter anzeigt:
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (Raw-MD5 [MD5])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (user1)
welcome (user2)
labexrocks (user3)
3g 0:00:00:00 DONE (2023-10-27 08:30) 100.0% 3g/s 100.0p/s 100.0c/s 100.0C/s password123 welcome labexrocks
Session completed.
Um die geknackten Passwörter anzuzeigen, können Sie die Option --show verwenden:
john --show ~/project/passwords.txt
Ausgabe:
user1:password123
user2:welcome
user3:labexrocks
3 password hashes cracked, 0 left
Dies zeigt, wie einfach schwache Passwörter mit einer einfachen Wortliste geknackt werden können.
Identifizierung von Lücken in Passwortrichtlinien
In diesem Schritt identifizieren Sie die Lücken in den simulierten Passwortrichtlinien basierend auf den Knack-Ergebnissen aus dem vorherigen Schritt. Die Tatsache, dass John the Ripper die Passwörter leicht knacken konnte, deutet auf erhebliche Schwächen hin.
Basierend auf den geknackten Passwörtern (password123, welcome, labexrocks) sind hier einige gängige Lücken, die ihr Knacken ermöglichten:
- Fehlende Komplexitätsanforderungen: Die Passwörter
welcomeundlabexrockssind einfache Wörter aus dem Wörterbuch oder leicht zu erratende Phrasen.password123ist ein gängiges Muster. Eine starke Richtlinie sollte eine Mischung aus Großbuchstaben, Kleinbuchstaben, Zahlen und Sonderzeichen erzwingen. - Unzureichende Länge: Obwohl
password123undlabexrocksmit 11 bzw. 10 Zeichen relativ lang sind, sind sie aufgrund ihrer Einfachheit immer noch anfällig. Richtlinien sollten eine Mindestlänge erzwingen, typischerweise 12 Zeichen oder mehr, um den Suchraum für Angreifer zu vergrößern. - Keine Überprüfung von Wörterbuchwörtern: Die Richtlinie verhinderte nicht, dass Benutzer gängige Wörterbuchwörter oder einfache Variationen wählten.
- Keine Überprüfung gängiger Muster: Passwörter wie
password123folgen vorhersagbaren Mustern, die oft in Wortlisten für das Knacken enthalten sind. - Fehlende Passwortverlauf-/Wiederverwendungsschutz: Wenn Benutzer alte Passwörter wiederverwenden dürfen, werden sie selbst dann anfällig, wenn diese alten Passwörter einmal stark waren und dann durchgesickert sind.
Um die Identifizierung dieser Lücken zu simulieren, überlegen wir, wie eine stärkere Passwortrichtlinie aussehen könnte. Wenn unsere aktuelle Richtlinie beispielsweise minlen=8 und keine spezifischen Zeichenklassenanforderungen zulässt, würde welcome (7 Zeichen) fehlschlagen, aber password123 (11 Zeichen, keine Sonderzeichen) würde bestehen. Die Knack-Ergebnisse verdeutlichen, dass selbst wenn ein Passwort eine grundlegende Längenanforderung erfüllt, es immer noch schwach sein kann, wenn Komplexitäts- und Wörterbuchprüfungen nicht durchgesetzt werden.
Überlegen Sie, wie die Parameter des pam_pwquality.so-Moduls (wie minlen, dcredit, ucredit, lcredit, ocredit, dictcheck) angepasst werden könnten, um solche schwachen Passwörter zu verhindern. Beispielsweise würde das Setzen von dcredit=-1 mindestens eine Ziffer erfordern, ucredit=-1 für Großbuchstaben usw.
Dieser Schritt ist hauptsächlich konzeptionell und konzentriert sich auf die Analyse der Ergebnisse der vorherigen Knack-Übung, um Richtlinienmängel zu verstehen.
Empfehlung stärkerer Passwortrichtlinien
In diesem Schritt formulieren Sie Empfehlungen für stärkere Passwortrichtlinien basierend auf den identifizierten Lücken. Effektive Passwortrichtlinien stellen ein Gleichgewicht zwischen Sicherheit und Benutzerfreundlichkeit her.
Hier sind einige Empfehlungen für eine robustere Passwortrichtlinie:
- Mindestlänge: Erhöhen Sie die Mindestpasswortlänge auf mindestens 12-14 Zeichen. Längere Passwörter sind exponentiell schwerer zu knacken.
- Beispiel PAM-Einstellung:
minlen=12in/etc/security/pwquality.confoderpam_pwquality.so minlen=12in/etc/pam.d/common-password.
- Beispiel PAM-Einstellung:
- Komplexitätsanforderungen: Erzwingen Sie die Verwendung einer Mischung aus Zeichentypen:
- Großbuchstaben (A-Z)
- Kleinbuchstaben (a-z)
- Zahlen (0-9)
- Sonderzeichen (!@#$%^&*()_+-=[]{}|;':",./<>?)
- Beispiel PAM-Einstellung:
dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1in/etc/security/pwquality.confoderpam_pwquality.so dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1in/etc/pam.d/common-password.
- Überprüfung von Wörterbuchwörtern und gängigen Mustern: Verhindern Sie die Verwendung gängiger Wörterbuchwörter, gängiger Namen und leicht zu erratender Muster (wie
password123,qwerty,123456).- Beispiel PAM-Einstellung:
dictcheck=1 usercheck=1in/etc/security/pwquality.confoderpam_pwquality.so dictcheck=1 usercheck=1in/etc/pam.d/common-password.
- Beispiel PAM-Einstellung:
- Passworthistorie/Wiederverwendungsschutz: Verhindern Sie, dass Benutzer eine bestimmte Anzahl ihrer vorherigen Passwörter wiederverwenden. Dies mindert das Risiko, falls ein altes Passwort kompromittiert wird.
- Beispiel PAM-Einstellung:
remember=5mitpam_unix.soin/etc/pam.d/common-password(z. B.password required pam_unix.so obscure sha512 shadow remember=5).
- Beispiel PAM-Einstellung:
- Richtlinie zur Kontosperrung: Implementieren Sie eine Richtlinie zur Kontosperrung nach einer bestimmten Anzahl fehlgeschlagener Anmeldeversuche, um Brute-Force-Angriffe abzuschrecken.
- Beispiel PAM-Einstellung: Verwendung von
pam_tally2.sooderpam_faillock.soin/etc/pam.d/common-auth(z. B.auth required pam_faillock.so deny=3 unlock_time=600).
- Beispiel PAM-Einstellung: Verwendung von
- Regelmäßige Passwortänderungen (mit Vorsicht): Obwohl traditionell empfohlen, können häufige obligatorische Passwortänderungen dazu führen, dass Benutzer einfachere, vorhersagbarere Passwörter wählen. Ein besserer Ansatz ist die Durchsetzung starker Komplexität und Länge und nur dann eine Änderung zu verlangen, wenn ein Verstoß vermutet wird.
Um eine konzeptionelle Änderung zu demonstrieren, stellen wir uns vor, wir aktualisieren eine Richtlinie. Wir werden keine Systemdateien tatsächlich ändern, aber Sie können sehen, wie die Datei pwquality.conf bearbeitet werden könnte.
Öffnen Sie eine Dummy-Datei, um die Richtlinienempfehlungen zu simulieren:
nano ~/project/recommended_policy.txt
Fügen Sie den folgenden Inhalt in die Datei ein:
## Recommended Password Policy Settings
minlen = 14
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
dictcheck = 1
usercheck = 1
maxrepeat = 3
maxsequence = 3
Speichern und beenden Sie nano (Strg+S, Strg+X).
Diese Einstellungen würden eine Mindestlänge von 14 Zeichen erzwingen, mindestens eine Ziffer, einen Großbuchstaben, einen Kleinbuchstaben und ein Sonderzeichen verlangen und Wörterbuchwörter sowie Benutzernamen verhindern.
Implementierung automatisierter Richtlinien-Compliance-Prüfungen
In diesem Schritt lernen Sie die Implementierung automatisierter Richtlinien-Compliance-Prüfungen kennen. Während die systemweite Durchsetzung von Richtlinien über PAM und andere Konfigurationsdateien erfolgt, können automatisierte Prüfungen verwendet werden, um Benutzerpasswörter oder Systemkonfigurationen regelmäßig gegen definierte Richtlinien zu auditieren.
Für dieses Labor simulieren wir eine einfache Compliance-Prüfung mit einem Shell-Skript. Dieses Skript prüft, ob das Passwort eines Dummy-Benutzers eine grundlegende Längenanforderung erfüllt. In einem realen Szenario wären solche Skripte komplexer und würden potenziell mit Tools wie OpenSCAP oder benutzerdefinierten Skripten integriert, um tatsächliche Passwort-Hashes (falls erlaubt und ethisch vertretbar) oder Konfigurationsdateien zu auditieren.
Erstellen wir zunächst einen Dummy-Benutzer und eine Dummy-Passwort-Hash-Datei, um einen Systemzustand zu simulieren. Wir werden keine tatsächlichen Systembenutzer erstellen.
echo "testuser:\$6\$salt\$hashedpassword" > ~/project/dummy_shadow.txt
Erstellen Sie nun ein einfaches Shell-Skript namens check_password_compliance.sh, das prüft, ob die Passwortlänge für testuser in dummy_shadow.txt einen bestimmten Wert (z. B. 10 Zeichen) überschreitet.
nano ~/project/check_password_compliance.sh
Fügen Sie den folgenden Inhalt in das Skript ein:
#!/bin/bash
## Dieses Skript simuliert eine grundlegende Prüfung der Passwortlänge.
## In einem realen Szenario würden Sie tatsächliche Shadow-Datei-Einträge parsen
## oder ausgefeiltere Tools verwenden.
MIN_LENGTH=10
PASSWORD_HASH=$(grep "testuser" ~/project/dummy_shadow.txt | cut -d':' -f2)
## Zu Demonstrationszwecken prüfen wir nur die Länge eines Platzhalter-Hashes.
## In Wirklichkeit müssten Sie den tatsächlichen Hash knacken oder analysieren.
## Hier prüfen wir nur, ob der Hash-String selbst lang genug ist,
## was NICHT der Funktionsweise echter Passwortlängenprüfungen entspricht,
## aber als Platzhalter für eine Compliance-Prüfung dient.
if [ ${#PASSWORD_HASH} -ge $MIN_LENGTH ]; then
echo "Compliance Check: Die Länge des Passwort-Hashes von testuser erfüllt die Mindestanforderung ($MIN_LENGTH Zeichen)."
exit 0
else
echo "Compliance Check: Die Länge des Passwort-Hashes von testuser erfüllt die Mindestanforderung NICHT ($MIN_LENGTH Zeichen)."
exit 1
fi
Speichern und beenden Sie nano (Strg+S, Strg+X).
Machen Sie das Skript ausführbar:
chmod +x ~/project/check_password_compliance.sh
Führen Sie nun das Compliance-Check-Skript aus:
~/project/check_password_compliance.sh
Sie sollten eine Ausgabe sehen, die die Compliance basierend auf der Länge des Dummy-Hashes anzeigt:
Compliance Check: Die Länge des Passwort-Hashes von testuser erfüllt die Mindestanforderung (10 Zeichen).
Dieses einfache Beispiel veranschaulicht das Konzept einer automatisierten Compliance-Prüfung. In einer Produktionsumgebung könnten solche Skripte periodisch mit cron ausgeführt werden, um die kontinuierliche Einhaltung von Passwortrichtlinien sicherzustellen. Fortgeschrittenere Prüfungen würden das Parsen tatsächlicher Passwort-Hashes (falls erlaubt und unter Berücksichtigung angemessener Sicherheitsaspekte), die Überprüfung gegen Wörterbuchlisten oder die Integration mit Sicherheits-Compliance-Frameworks umfassen.
Zusammenfassung
In diesem Labor haben Sie praktische Erfahrungen in der Überprüfung und Durchsetzung von Passwortrichtlinien gesammelt. Sie haben gelernt, wie bestehende Passwortrichtlinienkonfigurationen auf einem Linux-System analysiert werden, indem Sie wichtige Dateien wie /etc/login.defs, /etc/pam.d/common-password und /etc/security/pwquality.conf untersucht haben. Anschließend haben Sie mit John the Ripper demonstriert, wie leicht schwache Passwörter geknackt werden können, und damit die Bedeutung robuster Richtlinien hervorgehoben. Basierend auf diesen Erkenntnissen haben Sie Empfehlungen für stärkere Passwortrichtlinien formuliert, die sich auf Länge, Komplexität und Wörterbuchprüfungen konzentrieren. Abschließend haben Sie das Konzept automatisierter Compliance-Prüfungen durch die Erstellung eines einfachen Skripts zur Überprüfung der Einhaltung von Passwortrichtlinien erkundet. Dieses Labor vermittelt ein grundlegendes Verständnis der Passwortsicherheitsüberprüfung und stattet Sie mit Fähigkeiten zur Identifizierung und Minderung von passwortbezogenen Schwachstellen aus.


