Auditd¶
Siehe auch
- Verwandte Artikel
- Offizielle Dokumentation
man auditd,man auditd.conf,man auditctl,man audit.rulesman ausearch,man aureport,man augenrules
- Linuxfabrik
Das Linux Auditing System „auditd“ hilft SysAdmins bei der Erstellung eines „Audit-Trails“,
also eines Protokolls für jede Aktion auf dem Server. auditd protokolliert standardmässig
SELinux AVCs, Systemanmeldungen, Kontoänderungen und Authentifizierungsereignisse in
/var/log/audit/audit.log. Die Aufzeichnung der Ereignisse kann je nach Umfang und
Auslastung der Systeme einiges an Speicherplatz beanspruchen (mehrere GByte Textdateien
täglich).
Wichtig: auditd bietet keine zusätzliche Sicherheit, aber hilft dabei, Verstösse gegen Systemrichtlinien zu verfolgen und so zusätzliche Sicherheitsmassnahmen zu implementieren. Es ist zudem die einzige Möglichkeit, ohne Zusatzsoftware und Shell-unabhängig sauber und sicher Aktivitäten zu loggen.
- Begriffe
Audit Event: ein einzelner, im Kernel ausgelöster Eintrag, bestehend aus einem oder mehreren Datensätzen mit gleicher
msg=audit(<timestamp>:<id>)-Klammer.auid (audit UID): die UID, unter der der Benutzer ursprünglich eingeloggt war, unabhängig von späteren
su/sudo-Wechseln. Dadurch ist auditd die einzige Quelle, die „wer hat die Aktion wirklich veranlasst“ zuverlässig beantwortet.immutable / locked (``-e 2``): sperrt die Audit-Konfiguration bis zum Reboot. Ein Muss auf CIS-gehärteten Systemen.
Key / Filter-Key: frei gewählter Tag (
-k <name>) an einer Regel, der das Durchsuchen der Logs perausearch --keyermöglicht.Syscall-Rule: Regel, die beim Aufruf eines bestimmten Systemaufrufs (z.B.
unlink,execve) feuert. Architektur-abhängig (arch=b32,arch=b64), daher fast immer paarweise konfiguriert.Watch-Rule: Regel, die beim Zugriff auf eine Datei oder ein Verzeichnis feuert (
-w /pfad -p <permissions>). Watches sind intern Syscall-Rules mit Pfad-Filter.
Log-Format¶
auditd wird für seine kryptischen Eventlogs geliebt. Beispiel mit künstlichen Zeilenumbrüchen und Kommentaren:
type=CRYPTO_KEY_USER Was wurde auditiert?
msg=audit(1671611910.534:108057): Timestamp:Audit Event Number
pid=8940
uid=0
auid=299006 Audit-ID des Users, der die Meldung getriggert hat
ses=4305
subj=system_u:system_r:sshd_t:s0-s0:c0.c1023
msg='op=destroy kind=server fp=SHA256:de:3e:84:f7 direction=? spid=896440 suid=0 exe="/usr/sbin/sshd" hostname=? addr=? terminal=? res=success'
UID="root"
AUID="john.doe"
SUID="root"
Wichtige Event-Typen (Auswahl, vollständige Liste in der auditd(8)-Manpage):
ANOM_PROMISCUOUS: ein Interface wurde in den Promiscuous-Mode gesetzt (potenziell Sniffer).AVC: SELinux Access Vector Cache Denial.CRED_ACQ/CRED_DISP: Credential-Lifecycle (Acquire, Dispose).PATH: begleitet einenSYSCALL-Record und nennt den betroffenen Pfad.SYSCALL: ein Syscall hat eine Syscall-Rule ausgelöst.USER_AUTH: Authentifizierungsversuch.USER_LOGIN/USER_LOGOUT: Login-/Logout-Ereignisse (pam_loginuid).USYS_CONFIG: Audit-Config wurde geändert (-e 2 wäre dann eigentlich aktiv gewesen).
Für die Anzeige mit aufgelösten IDs (uid → Benutzername) log_format = ENRICHED in
der auditd.conf setzen oder ausearch --interpret verwenden.
Konfiguration¶
Die zentrale Datei ist /etc/audit/auditd.conf. Die wichtigsten Parameter (alphabetisch):
admin_space_left/admin_space_left_actionHärtere Schwelle (Default 50 MiB) mit typischerweise restriktiverer Aktion (
single,halt).flushnone,incremental,incremental_async,data,sync. Produktion zwischenincremental_async(schneller, Default) undsync(paranoid) entscheiden.log_filePfad des Audit-Logs. Default
/var/log/audit/audit.log.log_formatRAW(Kernel-Format, Default) oderENRICHED(UIDs, Syscalls und Socket-Adressen werden vor dem Schreiben aufgelöst). ENRICHED kostet Plattenplatz, erleichtert aber die nachträgliche Auswertung auf einem anderen Host.max_log_fileMaximalgrösse der Log-Datei in MiB, bevor
max_log_file_actiongreift.max_log_file_actionEine der folgenden Aktionen:
ignore,syslog,suspend,rotate,keep_logs, oderexec /pfad. Auf Produktivsystemen fast immerrotatemitnum_logs >= 5kombinieren.name_formatnone,hostname,fqd,numeric,user. Wichtig in zentralen Log-Collectors, damit aggregierte Logs ihre Herkunft behalten.num_logsAnzahl rotierter Dateien. Unter 2 findet keine Rotation statt, maximal 999. Ein vernünftiger Start ist
num_logs = 5.space_left/space_left_actionSchwellwert in MiB (Default 75) und die Aktion (
syslog,email,exec,halt,single,suspend), wenn die Platte langsam voll läuft.
Regeln¶
Regeln landen in /etc/audit/rules.d/*.rules und werden beim Start von
augenrules --load in der alphabetischen Dateien-Reihenfolge zusammengefügt. Die
Reihenfolge ist entscheidend („first-match wins“).
Syscall-Regeln feuern beim Aufruf eines Systemcalls. Beispiel: das Löschen oder Umbenennen von Dateien durch alle echten Benutzer (UID ab 1000) auf 64-Bit-Systemen protokollieren (32-Bit-Variante gleich darunter):
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
Tipp
-F auid!=4294967295 ignoriert Daemon-Events. Der Wert -1 / 4294967295
steht für „keine audit UID gesetzt“ und erscheint bei allen vom Kernel/Init direkt
gestarteten Prozessen.
Watch-Rules feuern beim Zugriff auf einen Pfad und sind kompakter als Syscall-Rules:
# log changes to the shadow file
-w /etc/shadow -p wa -k identity
# log changes to the sshd config
-w /etc/ssh/sshd_config -p wa -k sshd
# log kernel module load/unload
-w /usr/sbin/insmod -p x -k module-load
-w /usr/sbin/rmmod -p x -k module-load
Rechte-Flags bei -p:
r: readw: writex: executea: attribute change (chmod/chown/setxattr/…)
Konfiguration einfrieren (CIS-Vorgabe) in der letzten geladenen Datei (z.B.
99-finalize.rules):
-e 2
Nach Änderungen Regeln neu laden:
augenrules --load
# or
systemctl reload auditd
augenrules --check gibt aus, ob die zusammengesetzten Rules mit dem aktiven Kernel-Regelwerk übereinstimmen.
Abfrage¶
ausearchEreignisse nach verschiedenen Kriterien durchsuchen:
# last 10 minutes, all events with key "delete" ausearch --start recent --key delete --interpret # failed login attempts since this morning ausearch --start today --message USER_LOGIN --success no --interpret # all events for a given user ausearch --user-name alice --interpret # all events for a given PID ausearch --process 12345 --interpret
aureportZusammenfassungen:
# overall summary aureport --summary # failed login attempts aureport --login --failed # top executables that produced audit events aureport --executable --summary # anomalous events (promiscuous mode, abnormal termination, ...) aureport --anomaly
auditctlLaufzeit-Abfrage und temporäre Änderungen:
# current audit status auditctl --status # list all active rules auditctl -l # temporary rule (gone after next reboot) auditctl -w /etc/passwd -p wa -k identity
CIS-Benchmark-Regelsatz¶
Die CIS-Benchmark (Abschnitt System Auditing) schlägt einen umfangreichen, produktionstauglichen Satz von Regeln vor. Die Kategorien sind für viele Compliance-Vorgaben (PCI DSS, STIG, BSI IT-Grundschutz) der Referenzpunkt:
- Authentifizierung und Privilegien
/etc/sudoersund/etc/sudoers.d/(Änderungen überwachen), das sudo-Log, Privileged-Commands (Binaries mit SUID/SGID),usermod,/etc/security/opasswd.- Identität und Accounts
/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow,/etc/nsswitch.conf,/etc/pam.conf,/etc/pam.d/.- System- und Zeitkonfiguration
Datum/Zeit-Syscalls (
adjtimex,settimeofday,clock_settime),/etc/issue,/etc/issue.net,/etc/hosts,/etc/hostname,/etc/sysconfig/network,/etc/NetworkManager/,sethostname,setdomainname.- Dateisystem
Erfolgreiche Mounts, Löschungen per
unlink/unlinkat/rename/renameat, DAC-Änderungen (chmod,fchmod,fchmodat,chown,fchown,fchownat,lchown,setxattr,lsetxattr,fsetxattr,removexattr,lremovexattr,fremovexattr),chcon,setfacl,chacl.- Session und Audit selbst
/var/log/wtmp,/var/log/btmp,/var/log/lastlog(Session-Initiation, Login/Logout), SELinux / AppArmor MAC-Konfiguration, Kernel-Modul-Syscalls (init_module,finit_module,delete_module,query_module),/etc/audit/audit.rulesselbst und das Einfrieren der Config mit-e 2.
Die konkreten Regel-Zeilen stehen im CIS-Benchmark-PDF bzw. in den automatisierten
Hardening-Playbooks wie dem linuxfabrik.lfops.audit-Rollen-Beispiel. Beim Ausrollen
darauf achten, dass die Regeln am Ende einer Datei 99-finalize.rules mit -e 2
gesperrt werden und die Backlog-Grösse ausreichend ist, sonst verwirft der Kernel
Events (lost in auditctl --status).
Best Practices¶
Keine Regel-Inflation. Jede zusätzliche Regel kostet Platz und Performance. Typische Server brauchen keine hundert Regeln; die CIS-Benchmark-Profile oder die STIG-Regelsätze sind ein sinnvoller Startpunkt.
Keys verwenden. Jede Regel sollte ein
-k <name>haben - das machtausearchbrauchbar.``log_format = ENRICHED`` auf Systemen, die Logs an einen zentralen Collector weitergeben (z.B. Graylog). Die UID-Auflösung auf dem aggregierenden Host ist sonst nicht möglich.
Log-Rotation mit space-Aktionen absichern.
space_left_action = syslog+ eine adäquate Monitoring-Alarmierung verhindert überraschende Vollplatten.``-e 2`` am Ende der Regeln. Verhindert, dass ein kompromittiertes root-Konto die Regeln zur Laufzeit deaktiviert. Nachteil: Regeln lassen sich bis zum nächsten Reboot nicht mehr ändern.
RHEL/Debian-Unterschiede¶
- Paketnamen
RHEL:
audit,audit-libs(out-of-the-box installiert)Debian/Ubuntu:
auditd(nicht per Default installiert)
- Tools
ausearch,aureport,auditctl,augenrules: identisch auf beiden Plattformen.
- Default-Regeln
RHEL: ab RHEL 9 sind keine Default-Regeln mehr in
/etc/audit/rules.d/aktiv; Red Hat liefert Beispiel-Regelsätze unter/usr/share/audit/sample-rules/.Debian/Ubuntu: ebenfalls keine Default-Regeln, Beispiele unter
/usr/share/doc/auditd/examples/.
Troubleshooting¶
auditctl --statusmeldetlost> 0Der Kernel-Backlog ist übergelaufen; einzelne Events wurden verworfen. Ursache ist meist eine zu niedrige
backlog_limitoder ein langsames Log-Target. Werte zeitweise hochziehen (auditctl --backlog_limit 8192) und die Regel-Menge durchforsten.failure 1loggt in syslog,failure 2macht einen Kernel-Panic (nur für Umgebungen, in denen das gewollt ist).augenrules --loadgibtrule existszurückDie Regel ist bereits aktiv. Bei Config-Änderungen zuerst
auditctl -Dausführen, dannaugenrules --load.- Regel wird beim Boot nicht aktiv
Die Datei in
/etc/audit/rules.d/wurde vermutlich aus der Alphabet-Reihenfolge gekippt.augenruleskonkateniert die Dateien in Reihenfolge der Namen; numerische Präfixe (10-,50-,99-) sind Standard.- Enorme Log-Menge nach Aktivierung
Entweder ist eine zu breite Syscall-Rule konfiguriert (z.B.
-S execveohne Filter) oder das System ist stark ausgelastet.aureport --executable --summaryzeigt die Top-Verursacher.