Analysieren von Linux-Audit-Logs auf Einbrüche
Wann verwenden
- Untersuchung von vermutetem unbefugtem Zugriff oder Privilegienerweiterung auf Linux-Hosts
- Suche nach Beweisen für Exploits, Backdoor-Installationen oder Persistenzmechanismen
- Überprüfung der Einhaltung von Sicherheitsbaselines (CIS, STIG, PCI-DSS), die System-Call-Überwachung erfordern
- Rekonstruktion einer Zeitleiste von Angreiferaktionen während der Incident-Response
- Erkennung von Dateimanipulationen an kritischen Systemdateien wie
/etc/passwd,/etc/shadowoder SSH-Keys
Nicht verwenden für die Netzwerk-Einbruchserkennung; verwenden Sie Suricata oder Zeek für die Netzwerkverkehrsanalyse. Auditd arbeitet auf Kernel-Ebene auf einzelnen Hosts.
Voraussetzungen
- Linux-System mit installiertem
auditd-Paket und laufendem Audit-Daemon (systemctl status auditd) - Root- oder sudo-Zugriff zum Konfigurieren von Audit-Regeln und Abfragen von Logs
- Audit-Regeln bereitgestellt über
/etc/audit/rules.d/*.rulesoder geladen mitauditctl - Empfohlen: Neo23x0/auditd-Regelset von GitHub für umfassende Basisabdeckung
- Vertrautheit mit Linux-Syscalls (
execve,open,connect,ptrace, usw.) - Ausreichende Log-Aufbewahrung (Standardort:
/var/log/audit/audit.log)
Arbeitsablauf
Schritt 1: Überprüfen des Status und der Konfiguration des Audit-Daemons
Stellen Sie sicher, dass das Audit-System läuft, und überprüfen Sie den aktuellen Regelsatz:
# Status des auditd-Dienstes prüfen
systemctl status auditd
# Aktuelle im Kernel geladene Audit-Regeln anzeigen
auditctl -l
# Audit-Daemon-Konfiguration anzeigen
cat /etc/audit/auditd.conf | grep -E "log_file|max_log_file|num_logs|space_left_action"
# Prüfen, ob der Audit-Rückstau überschritten wird (verlorene Ereignisse)
auditctl -s
Wenn die Rückstau-Grenze erreicht wird, erhöhen Sie sie:
auditctl -b 8192
Schritt 2: Bereitstellen einbruchsorientierter Audit-Regeln
Fügen Sie Regeln hinzu, die auf gängige Einbruchsindikatoren abzielen. Platzieren Sie diese in /etc/audit/rules.d/intrusion.rules:
# Überwachung von Credential-Dateien auf unbefugte Lese- oder Änderungszugriffe
-w /etc/passwd -p wa -k credential_access
-w /etc/shadow -p rwa -k credential_access
-w /etc/gshadow -p rwa -k credential_access
-w /etc/sudoers -p wa -k privilege_escalation
-w /etc/sudoers.d/ -p wa -k privilege_escalation
# Überwachung der SSH-Konfiguration und autorisierter Schlüssel
-w /etc/ssh/sshd_config -p wa -k sshd_config_change
-w /root/.ssh/authorized_keys -p wa -k ssh_key_tampering
# Überwachung von Benutzer- und Gruppenverwaltungsbefehlen
-w /usr/sbin/useradd -p x -k user_management
-w /usr/sbin/usermod -p x -k user_management
-w /usr/sbin/groupadd -p x -k user_management
# Erkennung von Prozessinjektion via ptrace
-a always,exit -F arch=b64 -S ptrace -F a0=0x4 -k process_injection
-a always,exit -F arch=b64 -S ptrace -F a0=0x5 -k process_injection
-a always,exit -F arch=b64 -S ptrace -F a0=0x6 -k process_injection
# Überwachung der Ausführung von Programmen aus ungewöhnlichen Verzeichnissen
-a always,exit -F arch=b64 -S execve -F exe=/tmp -k exec_from_tmp
-a always,exit -F arch=b64 -S execve -F exe=/dev/shm -k exec_from_shm
# Erkennung des Ladens von Kernel-Modulen (Rootkit-Installation)
-a always,exit -F arch=b64 -S init_module -S finit_module -k kernel_module_load
-a always,exit -F arch=b64 -S delete_module -k kernel_module_remove
-w /sbin/insmod -p x -k kernel_module_tool
-w /sbin/modprobe -p x -k kernel_module_tool
# Überwachung der Netzwerk-Socket-Erstellung für Reverse Shells
-a always,exit -F arch=b64 -S socket -F a0=2 -k network_socket_created
-a always,exit -F arch=b64 -S connect -F a0=2 -k network_connection
# Erkennung von Cron-Job-Änderungen (Persistenz)
-w /etc/crontab -p wa -k cron_persistence
-w /etc/cron.d/ -p wa -k cron_persistence
-w /var/spool/cron/ -p wa -k cron_persistence
# Überwachung von Log-Löschungen oder -Manipulationen
-w /var/log/ -p wa -k log_tampering
Laden Sie die Regeln nach dem Bearbeiten neu:
augenrules --load
auditctl -l | wc -l # Regelanzahl bestätigen
Schritt 3: Suchen nach Einbruchsindikatoren mit ausearch
Verwenden Sie ausearch, um das Audit-Log nach bestimmten Ereignissen zu durchsuchen:
# Suche nach allen fehlgeschlagenen Anmeldeversuchen der letzten 24 Stunden
ausearch -m USER_LOGIN --success no -ts recent
# Suche nach Befehlen, die von einem bestimmten Benutzer ausgeführt wurden
ausearch -ua 1001 -m EXECVE -ts today
# Suche nach allen Dateizugriffsereignissen auf /etc/shadow
ausearch -f /etc/shadow -ts this-week
# Suche nach Privilegienerweiterung via sudo
ausearch -m USER_CMD -ts today
# Suche nach Ereignissen zum Laden von Kernel-Modulen
ausearch -k kernel_module_load -ts this-month
# Suche nach Prozessen, die aus /tmp ausgeführt wurden (häufige Angriffsstaging)
ausearch -k exec_from_tmp -ts this-week
# Suche nach SSH-Schlüssel-Änderungen
ausearch -k ssh_key_tampering -ts this-month
# Suche nach einem bestimmten Ereignis anhand der Audit-Ereignis-ID
ausearch -a 12345
# Suche nach Ereignissen in einem bestimmten Zeitbereich
ausearch -ts 15.03.2026 08:00:00 -te 15.03.2026 18:00:00
# Syscall-Nummern interpretieren und Ausgabe lesbar formatieren
ausearch -k credential_access -i -ts today
Schritt 4: Erstellen von Zusammenfassungsberichten mit aureport
Verwenden Sie aureport, um aggregierte Zusammenfassungen für die Triage zu erstellen:
# Zusammenfassung aller Authentifizierungsereignisse
aureport -au -ts this-week --summary
# Bericht aller fehlgeschlagenen Ereignisse (Anmeldung, Zugriff usw.)
aureport --failed --summary -ts today
# Bericht über ausgeführte Programme
aureport -x --summary -ts today
# Bericht aller Anomalie-Ereignisse (Segfaults, promiskuitiver Modus usw.)
aureport --anomaly -ts this-week
# Bericht über Dateizugriffsereignisse
aureport -f --summary -ts today
# Bericht aller Ereignisse nach Schlüssel (entspricht Ihren benutzerdefinierten Regelschlüsseln)
aureport -k --summary -ts this-month
# Bericht aller Systemaufrufe
aureport -s --summary -ts today
# Bericht der Ereignisse gruppiert nach Benutzer
aureport -u --summary -ts this-week
# Detaillierter zeitbasierter Ereignisbericht zur Zeitleistenerstellung
aureport -ts 15.03.2026 08:00:00 -te 15.03.2026 18:00:00 --summary
Schritt 5: Rekonstruieren der Angriffszeitleiste
Kombinieren Sie ausearch-Abfragen, um eine chronologische Erzählung zu erstellen:
# Schritt 5a: Identifizieren des Zeitstempels des ersten Zugriffs
ausearch -m USER_LOGIN -ua 0 --success yes -ts this-week -i | head -50
# Schritt 5b: Verfolgen, was der Angreifer nach dem Zugriff getan hat
# Alle Ereignisse des kompromittierten Kontos innerhalb des Vorfallzeitfensters abrufen
ausearch -ua <UID> -ts "15.03.2026 14:00:00" -te "15.03.2026 18:00:00" -i \
| aureport -f -i
# Schritt 5c: Alle während des Vorfallzeitfensters ausgeführten Befehle extrahieren
ausearch -m EXECVE -ts "15.03.2026 14:00:00" -te "15.03.2026 18:00:00" -i
# Schritt 5d: Prüfen auf installierte Persistenzmechanismen
ausearch -k cron_persistence -ts "15.03.2026 14:00:00" -i
ausearch -k ssh_key_tampering -ts "15.03.2026 14:00:00" -i
# Schritt 5e: Prüfen auf laterale Bewegung (ausgehende Verbindungen)
ausearch -k network_connection -ts "15.03.2026 14:00:00" -i
Schritt 6: Weiterleiten von Audit-Logs an SIEM
Konfigurieren Sie audisp-remote oder auditbeat, um Logs zur Korrelation an ein zentrales SIEM zu senden:
# Option A: Verwendung des audisp-remote-Plugins
# Bearbeiten Sie /etc/audit/plugins.d/au-remote.conf
active = yes
direction = out
path = /sbin/audisp-remote
type = always
# Konfigurieren Sie das Remote-Ziel in /etc/audit/audisp-remote.conf
remote_server = siem.internal.corp
port = 6514
transport = tcp
# Option B: Verwendung von Elastic Auditbeat
# Installieren Sie auditbeat und konfigurieren Sie /etc/auditbeat/auditbeat.yml
# Auditbeat liest direkt aus dem Kernel-Audit-Framework
Schlüsselkonzepte
| Begriff | Definition |
|---|---|
| auditd | Der Linux-Audit-Daemon, der Audit-Ereignisse vom Kernel empfängt und in /var/log/audit/audit.log schreibt |
| auditctl | Befehlszeilentool zur Steuerung des Audit-Systems: Regeln hinzufügen/entfernen, Status prüfen, Rückstau-Größe festlegen |
| ausearch | Abfragetool, das Audit-Logs nach Nachrichtentyp, Benutzer, Datei, Schlüssel, Zeitbereich oder Ereignis-ID durchsucht |
| aureport | Berichtstool, das aggregierte Zusammenfassungen von Audit-Ereignissen für Triage und Compliance erstellt |
| Audit-Regelschlüssel (-k) | Ein benutzerdefiniertes Label, das einer Audit-Regel zugeordnet wird, und das schnelles Filtern verwandter Ereignisse mit ausearch und aureport ermöglicht |
| Syscall-Überwachung | Überwachung von Systemaufrufen auf Kernel-Ebene (execve, open, connect, ptrace), die Prozess- und Dateiaktivitäten erfasst |
| augenrules | Dienstprogramm, das alle Dateien in /etc/audit/rules.d/ zu /etc/audit/audit.rules zusammenführt und in den Kernel lädt |
Überprüfung
- auditd läuft und Regeln sind geladen (
auditctl -lgibt die erwartete Regelanzahl zurück) - Kein Audit-Rückstau-Überlauf (
auditctl -szeigtbacklog: 0oder niedrigen Wert, lost: 0) - ausearch gibt für jeden benutzerdefinierten Schlüssel Ereignisse zurück (
ausearch -k <key> -ts todayliefert Ergebnisse) - aureport erzeugt nicht leere Zusammenfassungen für Authentifizierungs-, Ausführungs- und Dateiereignisse
- Zeitleisten-Rekonstruktion erzeugt eine kohärente chronologische Abfolge von Angreiferaktionen
- Überwachungen kritischer Dateien lösen bei Teständerungen Warnungen aus (
touch /etc/shadowerzeugt ein Ereignis) - Logs werden an das zentrale SIEM weitergeleitet (mit einem Testereignis überprüfen und den Empfang bestätigen)
- Audit-Regeln bleiben über Neustarts hinweg bestehen (Regeln in
/etc/audit/rules.d/, nicht nur viaauditctl)