Auditd: Syscall Auditing Deep Dive (Artikel 337)
Tiefgehende Analyse der System-Call-Überwachung unter Linux. Erfahren Sie alles über die Protokollierung von Prozess-Starts, Privilege-Escalation-Versuchen und den Schutz der Audit-Integrität.
# Auditd Masterclass: System Calls unter der Lupe
TL;DR / Management Summary Während die Dateiüberwachung (Artikel 030) zeigt, was geändert wurde, zeigt das Syscall-Auditing, wie ein Prozess mit dem Kernel kommuniziert. Jede Aktion (Befehl ausführen, Netzwerk-Socket öffnen, Memory-Mapping) ist ein System-Call. Ein Senior Admin nutzt
auditd, um verdächtiges Verhalten wie den Missbrauch vonptrace(Process Injection) oder unautorisierteexecve-Aufrufe zu erkennen. Dies ist das ultimative Werkzeug für die Post-Mortem-Analyse nach einem Einbruch.
# 1. Einführung & Architektur
Die Kernel-Schnittstelle.
Jeder System-Call durchläuft den Kernel. Auditd klinkt sich in diesen Fluss ein und prüft jedes Event gegen die geladenen Regeln.
# Der Auditing-Stack (Mermaid)
graph TD
A[User Space: malicious script] -->|Syscall: execve| B[Linux Kernel]
B --> C{Audit Filter}
C -->|Match: Rule 101| D[Audit Dispatcher]
D --> E[/var/log/audit/audit.log]
D --> F[audisp-plugins: Real-time Alert]
G[Admin: ausearch] --> E
subgraph "Rule Types"
H[Watch: File access]
I[Syscall: Kernel function]
end
I --> C
# 2. Fortgeschrittene Syscall-Regeln
Den Angreifer entlarven.
Die Regeln liegen in /etc/audit/rules.d/audit.rules.
# 1. Ausführung von Befehlen (execve)
Überwacht jeden Prozessstart im System.
-a always,exit -F arch=b64 -S execve -k proc_exec
# 2. Prozess-Manipulation (ptrace)
Wird oft für Code-Injection in andere laufende Prozesse genutzt.
-a always,exit -F arch=b64 -S ptrace -k process_injection
# 3. Laden von Kernel-Modulen
Angreifer versuchen oft, Rootkits als Kernel-Module zu laden.
-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit -F arch=b64 -S init_module,delete_module -k modules
# 3. Analyse der Rohdaten
Die Wahrheit in den Logs.
Ein Audit-Event ist komplex. Nutzen Sie ausearch mit dem Tag-Filter (-k).
# Suche nach Prozess-Injektionen
sudo ausearch -k process_injection -i
Das Flag -i (interpret) übersetzt numerische UIDs und Syscall-IDs in menschenlesbare Namen (z.B. root statt 0).
# 4. Day-2 Operations: Integrität der Logs
Den Wächter schützen.
Ein Angreifer wird als erstes versuchen, auditd zu stoppen oder die Logs zu löschen.
# Unveränderliche Regeln (Immutable)
Setzen Sie diese Zeile am Ende Ihrer Rules-Datei:
-e 2
Wichtig: Nach dem Setzen von -e 2 können die Regeln bis zum nächsten Reboot nicht mehr geändert oder gelöscht werden (auch nicht von Root!).
# 5. Troubleshooting & “War Stories”
Wenn das Auditing den Server bremst.
# Story 1: “Der Performance-Killer fork()”
Symptom: Ein Compile-Server oder ein hochfrequentes Build-System wird nach Aktivierung von Auditd extrem langsam.
Ursache: Der Admin überwacht den fork und exit Syscall. Da das System tausende Prozesse pro Sekunde startet, wird der Kernel zum Flaschenhals bei der Protokollierung.
Lösung: Überwachen Sie nur execve (echte Programmstarts) statt jedes fork. Nutzen Sie Filter, um bekannte Build-Pfade von der Überwachung auszuschließen.
# Story 2: “Die Log-Injection Verschleierung”
Symptom: Ein Angreifer führt Befehle aus, aber in den Logs erscheinen keine Einträge.
Ursache: Der Angreifer nutzt statisch gelinkte Binaries, die System-Calls direkt aufrufen, ohne Standard-Binaries wie /bin/bash zu nutzen.
Lösung: Verlassen Sie sich nicht auf Pfad-Watches (-w /bin/ls). Nutzen Sie immer Syscall-Watches (-S execve), da diese auf Kernel-Ebene greifen, egal wie das Binary heißt.
# 6. Fazit & Empfehlung
- Pflicht: Aktivieren Sie Auditing für
execveundptrace. - Wahl: Nutzen Sie Go-Audit (von Slack) oder Auditbeat, wenn Sie die Daten direkt in ein ELK-System streamen wollen.
- Wartung: Nutzen Sie
augenrules --check, um sicherzustellen, dass die Dateien inrules.d/konsistent sind.
# Anhang: Cheatsheet für Forensiker
| Aufgabe | Befehl |
|---|---|
| Status prüfen | auditctl -s |
| Regeln auflisten | auditctl -l |
| Befehle eines Users | ausearch -ua <uid> -i |
| Alle fehlgeschlagenen Dateizugriffe | ausearch -m AVC,USER_AVC -i |
| Report nach Zeit | aureport -ts 08:00 -te 10:00 |
| Top ausführbare Programme | aureport -x --summary |
| Integrität der Rules | augenrules --load |
| Sudo-Aufrufe suchen | ausearch -m USER_AUTH,USER_START -i |