Workshop: Open Source-Tipp

Wachsamer Geist

Neben dem klassischen Syslog-Daemon und dem neueren systemd existiert mit dem Audit-Daemon ein weiterer Service, der Events auf einem Linux-System loggen kann. Wer sich für sicherheitsrelevante Meldungen interessiert, der sollte sich den Daemon etwas näher ansehen.
Der Trend zu Bring your own Device hat sich nicht selten zu einem Albtraum für IT-Abteilungen entwickelt. Zwar sind die Devices oft smart und einfach in der ... (mehr)

Das hier vorgestellte Audit-Framework ist Bestandteil des Linux-Kernels und daher in der Lage, Zugriffe auf einem Rechner bis auf Systemcall-Ebene zu kontrollieren. Dank der Integration in den Kernel entgeht dem Subsystem tatsächlich nichts. Sämtliche Zugriffe auf Dateien, Netzwerkports oder sonstige Ereignisse lassen sich hiermit überwachen. Auch das Security-Enhanced Linux (SELinux), das ebenfalls im Kernel integriert ist, greift zum Logging auf das Audit-Framework zurück.

Logging konfigurieren

Die Regeln für das Logging legen Sie mit dem Tool "auditctl" fest. Es ist, ebenso wie alle anderen hier erwähnten Tools, Bestandteil des "audit"-Pakets, das im Software-Repository Ihrer Linux-Distribution enthalten ist. Der im Userspace laufende "auditd" wird über das Netlink-Protokoll über aufgetretende Events benachrichtigt. Diese schreibt der Audit-Daemon dann in die Datei . Über "aureport" und "ausearch" können Sie sich die Ergebnisse anschließend anzeigen lassen und diese auswerten.

Teil des Frameworks ist ebenfalls ein Event-Dispatcher. Hierbei handelt es sich um eine Art Event-Multiplexer, der Audit-Events in Realtime an ein anderes Programm (Plug-In) weiterreichen kann. Diese Plug-Ins lassen sich über Dateien im Verzeichnis "/etc/audisp/plugins.d/" konfigurieren. Die Datei beispielsweise ist dafür verantwortlich, Audit-Events einfach an einen Unix-Domain-Socket weiterzureichen. Dieser Socket wird vom "setroubleshoot"-Daemon dazu verwendet, leicht lesbare Meldungen aus den rohen SELinux-Logs zu erzeugen. Auch Intrusion-Detection/Prevention-Systeme können auf diese Schnittstelle zurückgreifen, um auf Audit-Events entsprechend reagieren zu können.

Den "auditd"-Server konfigurieren Sie über zwei Dateien in "/etc/audit/": (siehe Listing) und "audit.rules". Erstere legt allgemeine Informationen über den Dienst fest, Letztere enthält die eigentlichen Regeln, die festlegen, was genau Sie auf dem System überwachen wollen. Regeln können Sie ebenfalls über mehrere Dateien trennen und diese dann im Verzeichnis "/etc/audit/rules.d/" ablegen. Dies ist dann sinnvoll, wenn Sie Regeln nach deren Einsatzzweck in eigenen Dateien verwalten wollen. Das Tool augenrules generiert aus allen Dateien in diesem Verzeichnis dann eine globale Datei . Diese wird dann beim Start des auditd eingelesen. Eine Beschreibung der einzelnen Anweisungen finden Sie in der sehr ausführlichen Manpage von "auditd.conf".

Listing: auditd.conf



log_file = /var/log/audit/audit.log
log_format = RAW
log_group = root
priority_boost = 3
flush = INCREMENTAL
freq = 20
num_logs = 5
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NONE
max_log_file = 6
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
enable_krb5 = no
krb5_principal = auditd

Überwachung einschalten

Um die eigentlichen Audit-Regeln zu bestimmen, greifen Sie entweder auf das Tool "auditctl" zurück oder hinterlegen sie in der Datei . Mittels "auditctl -R" lesen Sie die dort definierten Regeln dann ein. Möchten Sie beispielsweise die Datei überwachen, können Sie dafür den folgenden Befehl verwenden:

auditctl -w /etc/hosts -p war -k hosts-file

Die Option "-w" legt den Pfad zu der Datei fest, die Sie überwachen wollen (File-Watch). Mittels "-p" definieren Sie die zu überwachenden Operationen, wobei "r" für Lesen, "w" für Schreiben, "x" für Ausführen und "a" für Attribut-Änderungen steht. Schließlich setzt die Option "-k" einen Filter-Key. Mittels "au-search" können Sie sich später die Events der Datei anzeigen lassen.

Möchten Sie den gleichen Wert dauerhaft setzen, fügen Sie den folgenden Eintrag der Datei hinzu:

-w /etc/hosts -p war -k hosts-file

Alle aktuell aktiven Regeln zeigt das Tool "auditctl" an:

# auditctl -l
w /etc/hosts -p rwa -k hosts-file

Neben diesen einfachen File-Watches lassen sich auch komplexere Zugriffe überwachen. Hierfür stehen vier verschiedene Listen zur Verfügung: "task", "exit", "user" und "exclude". "task" wird für das Erzeugen neuer Prozesse mittels "fork()" oder "clone()" verwendet, "exit" bei jedem Syscall Aufruf, "user" filtert Meldungen aus dem Userspace und mittels "exclude" lassen sich bestimmte Meldungen unterdrücken. Das ist beispielsweise hilfreich, wenn Sie bestimmte Syscalls loggen, jedoch keine SELinux AVC (Access Vector Cache) Meldungen in den Logs sehen wollen.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023