Passwortrichtlinien und Angriffsdetektion in Linux

CompTIABeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie wesentliche Techniken zur Verbesserung der Sicherheit eines Linux-Systems durch die Implementierung und Durchsetzung robuster Passwortrichtlinien. Sie konfigurieren systemweite Regeln, um die Passwortkomplexität zu erzwingen, eine Mindestlänge und eine Mischung aus verschiedenen Zeichentypen wie Großbuchstaben, Kleinbuchstaben und Ziffern zu verlangen. Sie richten auch Passwort-Aging-Richtlinien ein, um sicherzustellen, dass Anmeldeinformationen regelmäßig geändert werden, wodurch das Risiko im Zusammenhang mit kompromittierten Passwörtern durch Änderung zentraler Systemkonfigurationsdateien reduziert wird.

Über die Festlegung der Richtlinie hinaus stellen Sie sicher, dass diese starken Passwortanforderungen auf neue Benutzerkonten angewendet werden. Das Lab verlagert sich dann von proaktiven Sicherheitsmaßnahmen zur reaktiven Erkennung und lehrt Sie, wie Sie Systemauthentifizierungs-Logs überwachen. Durch die Analyse dieser Protokolle können Sie verdächtige Aktivitäten identifizieren, wie z. B. wiederholte fehlgeschlagene Anmeldeversuche, die ein Indikator für einen Brute-Force-Angriff oder andere unbefugte Zugriffsversuche sein können.

Lokale Linux-Passwortrichtlinie für Komplexität und Alter konfigurieren

In diesem Schritt erfahren Sie, wie Sie die Sicherheit eines Linux-Systems durch die Konfiguration einer robusten Passwortrichtlinie erhöhen können. Eine starke Passwortrichtlinie ist eine grundlegende Sicherheitsmaßnahme, die zwei kritische Aspekte erzwingt: Komplexität und Alter. Komplexitätsregeln stellen sicher, dass Passwörter nicht leicht erraten werden können, indem sie eine Mischung von Zeichentypen erfordern, während Altersregeln Benutzer zwingen, ihre Passwörter regelmäßig zu ändern, wodurch das Risiko kompromittierter Anmeldeinformationen verringert wird. Sie verwenden Standard-Linux-Dienstprogramme, um systemweite Konfigurationsdateien zu ändern und diese Richtlinien anzuwenden.

Zuerst betrachten wir die Passwortkomplexität. Auf modernen Debian-basierten Systemen wie Ubuntu wird die Passwortqualität durch das Modul pam_pwquality verwaltet. Dessen Konfiguration ist in der Datei /etc/security/pwquality.conf gespeichert.

Beginnen wir mit der Überprüfung der Standardeinstellungen. Verwenden Sie den Befehl cat, um den Inhalt der Konfigurationsdatei anzuzeigen. Wir verwenden grep, um auskommentierte Zeilen und leere Zeilen herauszufiltern, um die Ausgabe übersichtlicher zu gestalten.

grep -vE '^#|^$' /etc/security/pwquality.conf

Möglicherweise sehen Sie einige Standardeinstellungen, oder die Datei ist leer von aktiven Konfigurationen. Nun erzwingen wir eine strengere Richtlinie. Wir müssen diese Datei mit Administratorrechten bearbeiten, daher verwenden wir sudo mit dem Editor nano.

sudo nano /etc/security/pwquality.conf

Fügen Sie die folgenden Zeilen zur Datei hinzu, um unsere neue Richtlinie durchzusetzen. Diese Einstellungen erfordern, dass das Passwort mindestens 10 Zeichen lang ist und mindestens eine Ziffer, einen Großbuchstaben und einen Kleinbuchstaben enthält.

minlen = 10
dcredit = -1
ucredit = -1
lcredit = -1

Lassen Sie uns diese Optionen aufschlüsseln:

  • minlen = 10: Legt die minimal akzeptable Länge für das Passwort auf 10 Zeichen fest.
  • dcredit = -1: Erfordert mindestens eine Ziffer. Die negative Zahl bedeutet „mindestens eins“.
  • ucredit = -1: Erfordert mindestens einen Großbuchstaben.
  • lcredit = -1: Erfordert mindestens einen Kleinbuchstaben.

Nachdem Sie diese Zeilen hinzugefügt haben, speichern Sie die Datei und beenden Sie nano, indem Sie Ctrl+X, dann Y und Enter drücken.

Als Nächstes konfigurieren wir das Passwortalter (Aging). Diese Einstellungen definieren die maximale und minimale Gültigkeitsdauer eines Passworts. Die Standardwerte für neu erstellte Benutzerkonten sind in /etc/login.defs gespeichert.

Verwenden Sie grep, um die relevanten Einstellungen in dieser Datei zu finden.

grep -E 'PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE' /etc/login.defs

Sie werden die Standardwerte sehen, die oft für PASS_MAX_DAYS auf einen sehr hohen Wert gesetzt sind, wodurch die Ablaufsteuerung effektiv deaktiviert wird.

##       PASS_MAX_DAYS   Maximum number of days a password may be used.
PASS_MAX_DAYS   99999
##       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
PASS_MIN_DAYS   0
##       PASS_WARN_AGE   Number of days warning is given before a password expires.
PASS_WARN_AGE   7

Lassen Sie uns eine Ablaufrichtlinie von 9000 Tagen erzwingen. Öffnen Sie die Datei mit sudo nano.

sudo nano /etc/login.defs

Suchen Sie die Zeile PASS_MAX_DAYS und ändern Sie ihren Wert von 99999 auf 9000. Sie können auch PASS_MIN_DAYS auf 7 setzen, um zu verhindern, dass Benutzer ihr Passwort zu häufig ändern.

##       PASS_MAX_DAYS   Maximum number of days a password may be used.
PASS_MAX_DAYS   9000
##       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
PASS_MIN_DAYS   7
##       PASS_WARN_AGE   Number of days warning is given before a password expires.
PASS_WARN_AGE   14

Speichern Sie die Datei und beenden Sie nano. Diese Einstellungen in /etc/login.defs gelten für Benutzer, die nach dieser Änderung erstellt werden. Um die Richtlinie auf einen bestehenden Benutzer, wie unseren Benutzer labex, anzuwenden, verwenden wir den Befehl chage.

Überprüfen Sie zunächst die aktuellen Alterungsinformationen für den Benutzer labex.

sudo chage -l labex

Die Ausgabe zeigt, dass das Passwort niemals abläuft.

Last password change                                    : Jul 22, 2023
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

Wenden Sie nun chage mit dem Flag -M an, um die maximale Anzahl von Tagen auf 9000 für den Benutzer labex festzulegen.

sudo chage -M 9000 labex

Überprüfen Sie die Änderung, indem Sie die Alterungsinformationen des Benutzers erneut überprüfen.

sudo chage -l labex

Sie werden nun sehen, dass das Datum für Password expires aktualisiert wurde und die maximale Anzahl von Tagen auf 9000 gesetzt ist, wodurch die Alterungsrichtlinie erfolgreich angewendet wurde.

Last password change                                    : Jul 22, 2023
Password expires                                        : Jan 01, 2048
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 9000
Number of days of warning before password expires       : 7

Sie haben nun erfolgreich sowohl die Passwortkomplexitäts- als auch die Alterungsrichtlinien auf Ihrem Linux-System konfiguriert.

Starke Passwörter für neue Benutzerkonten erzwingen

In diesem Schritt überprüfen Sie, ob die in der vorherigen Phase konfigurierten Richtlinien für Passwortkomplexität und -alterung für neue Benutzerkonten durchgesetzt werden. Der beste Weg, dies zu testen, besteht darin, einen neuen Benutzer zu erstellen und zu versuchen, ein Passwort festzulegen, das gegen die Regeln verstößt. Dies demonstriert, wie das Modul pam_pwquality und die Standardeinstellungen des Systems zusammenarbeiten, um neue Konten von dem Moment ihrer Erstellung an zu sichern.

Wir verwenden den Befehl adduser, ein benutzerfreundliches, interaktives Skript zur Erstellung von Benutzern in Debian-basierten Systemen. Erstellen wir einen neuen Benutzer namens testuser.

sudo adduser testuser

Das System fordert Sie sofort auf, ein Passwort für den neuen Benutzer festzulegen. Hier wird unsere Richtlinie getestet.

Versuchen wir zunächst, ein einfaches, schwaches Passwort festzulegen, das gegen unsere Richtlinie verstößt. Geben Sie bei der Aufforderung für das neue Passwort password ein und drücken Sie Enter.

Adding user `testuser' ...
Adding new group `testuser' (1001) ...
Adding new user `testuser' (1001) with home directory `/home/testuser' ...
Copying files from `/etc/skel' ...
New password:

Da password gegen unsere Regeln verstößt (es ist zu kurz und enthält keine Großbuchstaben oder Ziffern), lehnt das System es ab. Sehen wir uns den Grund an, den es angibt.

BAD PASSWORD: The password contains less than 1 digits

Das System lehnt es ab und weist auf das Fehlen von Ziffern hin. Es verstößt gegen mehrere Richtlinien, aber dies ist die erste, die es meldet.

Das System fordert Sie erneut auf. Versuchen wir nun ein Passwort, das die Längenanforderung erfüllt, aber immer noch gegen die Komplexitätsregeln verstößt. Geben Sie 12345 ein und drücken Sie Enter.

BAD PASSWORD: The password contains less than 1 uppercase letters
New password:

Tipps: Wenn Sie versehentlich einen Benutzer erstellen, können Sie sudo deluser testuser verwenden, um den Benutzer zu löschen und es erneut zu versuchen.

Das System lehnt es erneut ab. Dieses Mal liegt es daran, dass dem Passwort eine Ziffer fehlt. Es fehlt auch ein Großbuchstabe, sodass es unsere Komplexitätsanforderungen nicht erfüllt. Geben wir nun ein Passwort ein, das alle unsere Kriterien erfüllt. Geben Sie bei der Aufforderung StrongPass2025 ein und drücken Sie Enter. Sie werden aufgefordert, es zur Bestätigung erneut einzugeben.

New password:
Retype new password:
passwd: password updated successfully

Erfolg! Das System hat das starke Passwort akzeptiert. Es wird Sie nun nach zusätzlichen Informationen über den Benutzer fragen. Sie können für jede Eingabeaufforderung einfach Enter drücken, um die Standardwerte zu übernehmen.

Changing the user information for testuser
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y

Der Benutzer testuser wurde nun erstellt. Sie können überprüfen, ob der Benutzer existiert, indem Sie den Befehl id verwenden.

id testuser

Dies zeigt die Benutzer-ID, Gruppen-ID und Gruppenmitgliedschaften an.

uid=1001(testuser) gid=1001(testuser) groups=1001(testuser)

Als Nächstes bestätigen wir, dass die von uns in /etc/login.defs festgelegte Richtlinie für die Passwortalterung automatisch auf diesen neuen Benutzer angewendet wurde. Verwenden Sie den Befehl chage, um die Alterungsinformationen für testuser anzuzeigen.

sudo chage -l testuser

Die Ausgabe zeigt, dass die Maximum number of days between password change auf 9000 gesetzt ist, genau wie wir es konfiguriert haben.

Last password change                                    : Jul 22, 2023
Password expires                                        : Jan 01, 2048
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 9000
Number of days of warning before password expires       : 14

Um unser System sauber zu halten, entfernen wir zum Schluss den Testbenutzer. Der Befehl deluser entfernt das Benutzerkonto.

sudo deluser testuser

Das System bestätigt, dass der Benutzer entfernt wurde.

Removing user `testuser' ...
Warning: group `testuser' has no more members.
Done.

Sie haben erfolgreich einen neuen Benutzer erstellt, die Durchsetzung der Passwortrichtlinie getestet und bestätigt, dass die standardmäßigen Alterungsregeln angewendet wurden.

Authentifizierungsprotokolle auf fehlgeschlagene Anmeldeversuche überwachen

In diesem Schritt lernen Sie, wie Sie Systemauthentifizierungsprotokolle überwachen, um potenzielle Sicherheitsbedrohungen wie Brute-Force-Angriffe zu erkennen. Ein wichtiger Teil der Systemadministration ist die regelmäßige Überprüfung von Protokollen auf verdächtige Aktivitäten. Fehlgeschlagene Anmeldeversuche sind ein kritischer Indikator für unbefugte Zugriffsversuche. Sie simulieren eine fehlgeschlagene Anmeldung und verwenden dann Standard-Linux-Befehle, um die entsprechenden Protokolleinträge zu finden und zu analysieren.

Auf Debian-basierten Systemen wie Ubuntu werden Authentifizierungsereignisse (sowohl erfolgreiche als auch fehlgeschlagene) typischerweise in der Datei /var/log/auth.log aufgezeichnet. Diese Datei erfordert Administratorrechte zum Lesen.

Generieren wir zunächst einen fehlgeschlagenen Anmeldeversuch. Wir können dies sicher tun, indem wir den Befehl su (substitute user) verwenden, um zu unserem eigenen Benutzerkonto labex zu wechseln, aber absichtlich das falsche Passwort eingeben.

su labex

Das System fordert Sie zur Eingabe eines Passworts auf. Geben Sie ein beliebiges falsches Passwort ein, z. B. wrongpassword, und drücken Sie Enter.

Password:
su: Authentication failure

Machen wir das noch einmal, um ein Muster von Fehlern zu erstellen.

su labex

Geben Sie erneut ein falsches Passwort ein. Da wir nun einige Protokolldaten generiert haben, lassen Sie uns die Authentifizierungsprotokolldatei untersuchen. Wir verwenden den Befehl tail mit sudo, um die letzten Zeilen von /var/log/auth.log anzuzeigen, wo die neuesten Ereignisse aufgezeichnet werden.

sudo tail /var/log/auth.log

Sie sehen mehrere neue Zeilen, die sich auf Ihre fehlgeschlagenen su-Versuche beziehen. Die Ausgabe sieht ähnlich wie folgt aus und zeigt den Zeitstempel, den Prozess (su) und die Fehlermeldung.

Jul 22 16:45:01 labex-vm su[12345]: pam_unix(su:auth): authentication failure; logname=labex uid=1000 euid=0 tty=/dev/pts/0 ruser=labex rhost=  user=labex
Jul 22 16:45:01 labex-vm su[12345]: FAILED SU (to labex) labex on /dev/pts/0
Jul 22 16:45:15 labex-vm su[12346]: pam_unix(su:auth): authentication failure; logname=labex uid=1000 euid=0 tty=/dev/pts/0 ruser=labex rhost=  user=labex
Jul 22 16:45:15 labex-vm su[12346]: FAILED SU (to labex) labex on /dev/pts/0

Das manuelle Durchsuchen von Protokollen kann zeitaufwendig sein. Eine effizientere Methode ist die Verwendung von grep, um nach bestimmten Schlüsselwörtern zu filtern. Suchen wir nach allen Zeilen, die "authentication failure" enthalten.

sudo grep "authentication failure" /var/log/auth.log

Dieser Befehl zeigt nur die Zeilen an, die dem Muster entsprechen, sodass die von Ihnen gerade erstellten fehlgeschlagenen Versuche leicht zu erkennen sind.

Erstellen wir nun ein einfaches Shell-Skript, um diesen Überwachungsprozess zu automatisieren. Dieses Skript prüft das Protokoll auf Fehler und gibt eine Zusammenfassung aus. Erstellen Sie in Ihrem Verzeichnis ~/project eine neue Datei namens log_monitor.sh mit nano.

nano log_monitor.sh

Geben Sie das folgende Bash-Skript in den Editor ein. Dieses Skript verwendet grep mit dem Flag -c, um die Anzahl der fehlgeschlagenen Anmeldeversuche zu zählen und dann eine Statusmeldung auszugeben.

#!/bin/bash

LOG_FILE="/var/log/auth.log"
FAILURE_COUNT=$(sudo grep -c "authentication failure" $LOG_FILE)

echo "--- Authentication Log Monitor ---"
if [ "$FAILURE_COUNT" -gt 0 ]; then
  echo "WARNING: Found $FAILURE_COUNT failed login attempts."
else
  echo "OK: No failed login attempts found."
fi
echo "--------------------------------"

Speichern Sie die Datei und beenden Sie nano, indem Sie Strg+X, dann Y und Enter drücken.

Machen Sie Ihr neues Skript als Nächstes mit dem Befehl chmod ausführbar.

chmod +x log_monitor.sh

Führen Sie schließlich Ihr Überwachungsskript aus, um das Ergebnis zu sehen.

./log_monitor.sh

Da Sie fehlgeschlagene Anmeldungen generiert haben, erkennt das Skript diese und zeigt eine Warnmeldung mit der genauen Anzahl an.

--- Authentication Log Monitor ---
WARNING: Found 2 failed login attempts.
--------------------------------

Sie haben nun gelernt, wie Sie fehlgeschlagene Authentifizierungsversuche simulieren, erkennen und ein grundlegendes Überwachungsskript erstellen, was eine entscheidende Fähigkeit für die Aufrechterhaltung der Systemsicherheit ist.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie die Sicherheit von Linux-Systemen durch die Konfiguration einer robusten lokalen Passwortrichtlinie verbessern können. Sie haben die Datei /etc/security/pwquality.conf modifiziert, um Passwortkomplexitätsregeln mithilfe des Moduls pam_pwquality durchzusetzen. Dies beinhaltete die Festlegung einer Mindestpasswortlänge und die Anforderung, mindestens eine Ziffer, einen Großbuchstaben und einen Kleinbuchstaben einzuschließen, um leicht zu erratende Anmeldeinformationen zu schützen.

Darüber hinaus haben Sie untersucht, wie sichergestellt wird, dass diese starken Passwortrichtlinien bei der Erstellung neuer Benutzerkonten angewendet werden. Das Lab deckte auch die entscheidende Fähigkeit ab, Systemauthentifizierungsprotokolle zu überwachen, um Sicherheitsereignisse wie wiederholte fehlgeschlagene Anmeldeversuche zu erkennen und zu analysieren, die auf einen potenziellen Angriff hindeuten können.