So schreiben Sie benutzerdefinierte Systemüberwachungsregeln für CentOS 7

Einführung

Das Linux-Audit-System erstellt einen Audit-Trail, mit dem Sie alle Arten von Informationen auf Ihrem System nachverfolgen können. Es kann eine Vielzahl von Daten wie Ereignistypen, Datum und Uhrzeit, Benutzer-IDs, Systemaufrufe, Prozesse, verwendete Dateien, SELinux-Kontexte und Empfindlichkeitsstufen aufzeichnen. Es kann verfolgen, ob auf eine Datei zugegriffen, diese bearbeitet oder ausgeführt wurde. Es kann sogar nachverfolgen, ob Änderungen an Dateiattributen vorgenommen wurden. Es kann die Verwendung von Systemaufrufen, von einem Benutzer ausgeführten Befehlen, fehlgeschlagenen Anmeldeversuchen und vielen anderen Ereignissen protokollieren. Standardmäßig zeichnet das Prüfsystem nur einige wenige Ereignisse in den Protokollen auf, z. B. Benutzer, die sich anmelden, Benutzer, die sudo verwenden, und SELinux-bezogene Nachrichten. Mithilfe von Überwachungsregeln werden bestimmte Ereignisse überwacht und entsprechende Protokolleinträge erstellt. Es ist möglich, Überwachungsregeln zu erstellen.

In diesem Lernprogramm werden die verschiedenen Arten von Überwachungsregeln sowie das Hinzufügen oder Entfernen benutzerdefinierter Regeln auf Ihrem Server erläutert.

Voraussetzungen

Bevor Sie mit diesem Lernprogramm beginnen, sollten Sie Folgendes haben:

  • CentOS 7 Droplet (funktioniert auch mit CentOS 6)

  • Nicht-Root-Benutzer mit Sudo-Berechtigungen. Befolgen Sie zum Einrichten eines Benutzers dieses Typs das Initial Server Setup with CentOS 7 -Tutorial. Alle Befehle werden als dieser Benutzer ausgeführt.

  • Ein grundlegendes Verständnis des Linux-Audit-Systems. Weitere Informationen finden Sie unter Das Linux-Auditing-System unter CentOS 7.

Anzeigen von Überwachungsregeln

Sie können den aktuellen Satz von Überwachungsregeln mit dem Befehl + auditctl -l + anzeigen.

sudo auditctl -l

Es werden keine Regeln angezeigt, wenn keine vorhanden sind (dies ist die Standardeinstellung):

No rules

Wenn Sie in diesem Lernprogramm Regeln hinzufügen, können Sie mit diesem Befehl überprüfen, ob diese hinzugefügt wurden.

Der aktuelle Status des Audit-Systems kann wie folgt eingesehen werden:

sudo auditctl -s

Die Ausgabe wird ähnlich sein wie:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=320 lost=0 backlog=0

Der Wert "+ enabled = 1 " zeigt an, dass die Überwachung auf diesem Server aktiviert ist. Der Wert " pid " ist die Prozessnummer des Audit-Daemons. Eine PID von 0 gibt an, dass der Überwachungsdämon nicht ausgeführt wird. Der Eintrag " lost " gibt an, wie viele Ereignisdatensätze aufgrund des Überlaufs der Kernel-Überwachungswarteschlange + verworfen wurden. Das Feld " backlog +" zeigt an, wie viele Ereignisdatensätze derzeit in der Warteschlange stehen und darauf warten, dass auditd sie liest. Wir werden den Rest der Ausgabefelder im nächsten Abschnitt dieses Tutorials besprechen.

Hinzufügen von Überwachungsregeln

Sie können benutzerdefinierte Überwachungsregeln mit dem Befehlszeilentool + auditctl + hinzufügen. Standardmäßig werden Regeln am Ende der aktuellen Liste hinzugefügt, sie können jedoch auch am oberen Rand eingefügt werden. Um Ihre Regeln dauerhaft zu machen, müssen Sie sie der Datei "+ /etc/audit/rules.d/audit.rules " hinzufügen. Immer wenn der Dienst ` auditd +` gestartet wird, werden alle Regeln aus der Datei aktiviert. Weitere Informationen zum Audit-Daemon und zum Audit-System finden Sie in unserem anderen Artikel Understanding the Audit System unter CentOS 7. Prüfregeln werden auf der Basis von Siegen bei der ersten Übereinstimmung ausgeführt. Wenn eine Regel übereinstimmt, werden die Regeln nicht weiter unten ausgewertet. Die richtige Reihenfolge der Regeln ist wichtig.

Es gibt drei Arten von Prüfungsregeln:

  • Kontrollregeln: Diese Regeln werden zum Ändern der Konfiguration und Einstellungen des Auditsystems selbst verwendet.

  • Dateisystemregeln: Hierbei handelt es sich um Datei- oder Verzeichnisüberwachungen. Mit diesen Regeln können wir jede Art von Zugriff auf bestimmte Dateien oder Verzeichnisse überwachen.

  • Systemaufrufregeln: Diese Regeln werden zum Überwachen von Systemaufrufen verwendet, die von einem Prozess oder einem bestimmten Benutzer ausgeführt werden.

Kontrollregeln

Sehen wir uns einige der Kontrollregeln an, die wir hinzufügen können:

  • + auditctl -b <backlog> + - Maximale Anzahl ausstehender Prüfpuffer festlegen. Wenn alle Puffer voll sind, wird das Fehlerflag vom Kernel zur Ausführung abgefragt. Das auf einem CentOS-Server festgelegte Standard-Backlog-Limit beträgt 320. Sie können dies anzeigen mit:

sudo auditctl -s

In der Ausgabe sehen Sie den aktuellen * backlog_limit * -Wert:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0  lost=0 backlog=0

Wenn Ihr Backlog-Wert höher ist als der aktuell eingestellte Wert für * backlog_limit *, müssen Sie möglicherweise den Wert für * backlog_limit * erhöhen, damit die Überwachungsprotokollierung ordnungsgemäß funktioniert. Führen Sie beispielsweise Folgendes aus, um den Wert auf 1024 zu erhöhen:

sudo auditctl -b 1024

Der Ausgang zeigt den Status:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0  lost=0 backlog=0
  • + auditctl -f [0 1 2] + - Fehlerflag setzen (0 = still, 1 = druck. 2 = Panik). Mit dieser Option können Sie festlegen, wie der Kernel mit kritischen Fehlern umgehen soll. Wenn der Wert auf 0 gesetzt ist, werden Überwachungsnachrichten, die nicht protokolliert werden konnten, stillschweigend verworfen. Wenn der Wert auf 1 gesetzt ist, werden Nachrichten an das Kernelprotokoll-Subsystem gesendet. Wenn auf 2 gesetzt, wird eine Kernel-Panik ausgelöst. Beispielbedingungen, unter denen dieses Flag abgerufen wird, umfassen ein überschrittenes Rückstandslimit, einen zu geringen Kernelspeicher und ein überschrittenes Ratenlimit. Der Standardwert ist 1. Sofern Sie keine größeren Probleme mit dem Überwachungsdämon auf Ihrem Server haben, müssen Sie diesen Wert nicht ändern.

  • + auditctl -R <Dateiname> + - Prüfregeln aus der angegebenen Datei lesen. Dies ist nützlich, wenn Sie einige temporäre Regeln testen und die alten Regeln aus der Datei + audit.rules + erneut verwenden möchten.

Die Regeln, die wir mit + auditctl s hinzufügen, sind nicht permanent. Um sie über Neustarts hinweg persistent zu machen, können Sie sie der Datei "+ /etc/audit/rules.d/audit.rules " hinzufügen. Diese Datei verwendet dieselbe Befehlszeilensyntax wie " auditctl ", um die Regeln anzugeben, jedoch ohne den Befehl " auditctl +". Leerzeilen oder Text nach einem Hash-Zeichen (#) werden ignoriert. Die Standardregeldatei sieht folgendermaßen aus:

/etc/audit/rules.d/audit.rules

# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.

# First rule - delete all
-D

# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320

# Feel free to add below this line. See auditctl man page

Um den Backlog-Wert auf 8192 zu ändern, können Sie * -b 320 * in * -b 8192 * ändern und den Audit-Daemon neu starten.

sudo service auditd restart

Wenn Sie den Daemon nicht neu starten, wird beim nächsten Neustart des Servers der neue Wert aus der Konfiguration festgelegt.

Dateisystemregeln

Dateisystemüberwachungen können für Dateien und Verzeichnisse festgelegt werden. Wir können auch angeben, auf welche Art von Zugriff Sie achten müssen. Die Syntax für eine Dateisystemregel lautet:

auditctl -w  -p  -k

wo

+ path_to_file + ist die Datei oder das Verzeichnis, die bzw. das geprüft wird. + Berechtigungen + sind die Berechtigungen, die protokolliert werden. Dieser Wert kann einer oder eine Kombination aus r (Lesen), w (Schreiben), x (Ausführen) und a (Attributänderung) sein. + key_name + ist eine optionale Zeichenfolge, mit der Sie identifizieren können, welche Regel (n) einen bestimmten Protokolleintrag generiert haben.

Schauen wir uns einige Beispiele an.

sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

Die obige Regel fordert das Prüfsystem auf, auf Schreibzugriff oder Attributänderungen in der Datei "+ / etc / hosts " zu achten und diese mit der von uns angegebenen benutzerdefinierten Schlüsselzeichenfolge - " hosts_file_change +" - im Prüfprotokoll zu protokollieren.

Wenn Sie diese Regel permanent machen möchten, fügen Sie sie der Datei "+ /etc/audit/rules.d/audit.rules +" unten wie folgt hinzu:

/etc/audit/rules.d/audit.rules

-w /etc/hosts -p wa -k hosts_file_change

Um sicherzustellen, dass die Regel erfolgreich hinzugefügt wurde, können Sie Folgendes ausführen:

sudo auditctl -l

Wenn alles gut geht, sollte die Ausgabe Folgendes anzeigen:

LIST_RULES: exit,always watch=/etc/hosts perm=wa key=hosts_file_change

Wir können auch Watches zu Verzeichnissen hinzufügen.

sudo auditctl -w /etc/sysconfig/ -p rwa -k configaccess

Die obige Regel fügt dem Verzeichnis "+ / etc / sysconfig +" und allen darunter befindlichen Dateien und Verzeichnissen eine Überwachung für Lese-, Schreib- oder Attributänderungszugriffe hinzu. Außerdem werden Protokollnachrichten mit einem benutzerdefinierten Schlüssel * configaccess * gekennzeichnet.

So fügen Sie eine Regel hinzu, die auf die Ausführung des Befehls "+ / sbin / modprobe +" überwacht (dieser Befehl kann Kernelmodule zum Server hinzufügen / daraus entfernen):

sudo auditctl -w /sbin/modprobe -p x -k kernel_modules

Um die Überwachungsprotokolle nach bestimmten Ereignissen zu durchsuchen, können Sie den Befehl + ausearch + verwenden. Um beispielsweise in den Überwachungsprotokollen nach allen Ereignissen zu suchen, die mit dem Schlüssel "+ configaccess +" gekennzeichnet sind, können Sie Folgendes ausführen:

sudo ausearch -k configaccess

+ ausearch + wird in unserem anderen Tutorial unter Understanding the Audit System on CentOS 7 ausführlich beschrieben .

Systemaufrufregeln

Durch die Überwachung von Systemaufrufen können Sie Aktivitäten auf dem Server weit über die Anwendungsebene hinaus verfolgen. Die Syntax für Systemaufrufregeln lautet:

auditctl -a  -S  -F  -k `

wo:

  • Wenn Sie im obigen Befehl "+ -a " durch " -A +" ersetzen, wird die Regel oben und nicht unten eingefügt.

  • + action + und + filter + geben an, wann ein bestimmtes Ereignis protokolliert wird. + action kann entweder` + always` oder + never sein. + filter + gibt an, welcher Filter für die Kernel-Regelübereinstimmung auf das Ereignis angewendet wird. Der Regel-Matching-Filter kann einer der folgenden sein: "+ task ", " exit ", " user " und " exclude ". " Aktion, Filter " ist in den meisten Fällen " immer vorhanden", was "+ auditctl s" mitteilt, dass Sie diesen Systemaufruf beim Beenden prüfen möchten.

  • + system_call + spezifiziert den Systemaufruf anhand seines Namens. Mehrere Systemaufrufe können zu einer Regel zusammengefasst werden, die jeweils nach einer "+ -S " - Option angegeben wird. Das Wort " all " kann auch verwendet werden. Sie können den Befehl ` sudo ausyscall --dump +` verwenden, um eine Liste aller Systemaufrufe mit ihren Nummern anzuzeigen.

  • + field = value + gibt zusätzliche Optionen an, mit denen die Regel so geändert wird, dass sie Ereignissen basierend auf einer angegebenen Architektur, Benutzer-ID, Prozess-ID, Pfad usw. entspricht.

  • + key_name + ist eine optionale Zeichenfolge, mit deren Hilfe Sie später identifizieren können, welche Regel oder ein Satz von Regeln einen bestimmten Protokolleintrag generiert hat.

Schauen wir uns nun einige Beispielregeln für Systemaufrufe an.

Gehen Sie wie folgt vor, um eine Überwachungsregel zu definieren, die jedes Mal, wenn eine Datei von einem Benutzer mit einer ID von 1000 oder höher umbenannt wird, einen Protokolleintrag mit der Bezeichnung "+ Umbenennen +" erstellt:

sudo auditctl -a always,exit -F arch=b64 -F "auid>=1000" -S rename -S renameat -k rename

Das + -F arch = b64 + sagt, dass die 64-Bit-Version der Systemaufrufe in der Regel überprüft werden soll.

So definieren Sie eine Regel, die protokolliert, auf welche Dateien ein bestimmter Benutzer (mit UID 1001) zugegriffen hat, und die Protokolleinträge mit + userfileaccess + beschriftet:

sudo auditctl -a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

Wenn Sie diese Regel permanent machen möchten, fügen Sie sie der Datei "+ /etc/audit/rules.d/audit.rules +" unten wie folgt hinzu:

/etc/audit/rules.d/audit.rules

-a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

Sie können eine Dateisystemregel auch mithilfe der Syntax von Systemaufrufregeln definieren. Zum Beispiel die folgende Regel:

sudo auditctl -a always,exit -F path=/etc/hosts -F perm=wa -k hosts_file_change

erledigt den gleichen Job wie die Dateisystemregel, die wir im vorherigen Abschnitt gesehen haben:

sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

Um ein Verzeichnis mithilfe einer Systemaufrufregel rekursiv zu überwachen, können Sie die Option "+ -F" dir = / path / to / dir "+" verwenden.

Überwachungsregeln entfernen

Um alle aktuellen Überwachungsregeln zu entfernen, können Sie den Befehl + auditctl -D + verwenden. Um Überwachungsregeln für das Dateisystem zu entfernen, die mit der Option "+ -w " hinzugefügt wurden, können Sie " -w " in der ursprünglichen Regel durch " -W " ersetzen. Systemaufrufregeln, die mit den Optionen " -a " oder " -A " hinzugefügt wurden, können mit der Option " -d +" in Verbindung mit der ursprünglichen Regel gelöscht werden. Angenommen, wir haben die folgende Regel hinzugefügt:

sudo auditctl -w /etc/passwd -p wa -k passwdaccess

Zeigen Sie den Regelsatz an mit:

sudo auditctl -l

Die Ausgabe sollte Folgendes enthalten:

LIST_RULES: exit,always watch=/etc/passwd perm=wa key=passwdaccess

Um diese Regel zu entfernen, können wir den folgenden Befehl verwenden, indem wir einfach + -w + durch + -W + ersetzen:

sudo auditctl -W /etc/passwd -p wa -k passwdaccess

Zeigen Sie nun den Regelsatz an, indem Sie Folgendes verwenden:

sudo auditctl -l

Die Regel sollte jetzt nicht in der Liste sein.

Überwachungsregeln sperren

Es ist möglich, das Audit-System zu deaktivieren oder zu aktivieren und die Audit-Regeln mit + auditctl -e [0 1 2] + zu sperren. Führen Sie beispielsweise Folgendes aus, um die Überwachung vorübergehend zu deaktivieren:

auditctl -e 0

Wenn "+ 1 " als Argument übergeben wird, wird die Überwachung aktiviert. Übergeben Sie als Argument ` 2 `, um die Überwachungskonfiguration zu sperren, damit sie nicht geändert werden kann. Dies macht den aktuellen Satz von Prüfungsregeln unveränderlich. Regeln können nicht mehr hinzugefügt, entfernt oder bearbeitet werden, und der Überwachungsdämon kann nicht mehr gestoppt werden. Das Sperren der Konfiguration ist der letzte Befehl in " audit.rules +" für alle, die diese Funktion aktivieren möchten. Jeder Versuch, die Konfiguration in diesem Modus zu ändern, wird geprüft und abgelehnt. Die Konfiguration kann nur durch einen Neustart des Servers geändert werden.

Fazit

Die vom Linux-Auditing-System bereitgestellten Informationen sind sehr nützlich für die Aufdeckung von Eindringlingen. Sie sollten jetzt in der Lage sein, benutzerdefinierte Überwachungsregeln hinzuzufügen, damit Sie bestimmte Ereignisse protokollieren können.

Denken Sie daran, dass Sie beim Hinzufügen benutzerdefinierter Protokollierungsregeln immer auf die Manpage + auditctl + verweisen können. Es bietet eine vollständige Liste der Befehlszeilenoptionen, Leistungstipps und Beispiele. Das Verzeichnis "+ / usr / share / doc / audit - / +" enthält Dateien mit vorkonfigurierten Prüfungsregeln, die auf einigen gängigen Zertifizierungsstandards basieren.