Ein SYSCALL tritt immer dann auf, wenn ein Benutzer einen Befehl ausführt, der den Linux-Kernel auffordert, einen Dienst bereitzustellen. Es gibt mehrere SYSCALLs wie mount, umount, kill, open usw. Diese SYSCALLs können mit dem auditd-System überwacht werden. Nehmen wir als Beispiel „kill“ SYSCALL.
Der Benutzer möchte erfassen, wer einen bestimmten Prozess auf dem System beendet hat. Dies kann leicht erreicht werden, indem eine auditd-Regel geschrieben wird, die den SYSCALL-Kill jedes Mal erfassen kann, wenn er aufgerufen wird.
Auditd installieren und konfigurieren
auditd ist meistens auf Linux-Distributionen vorinstalliert. Falls es nicht verfügbar ist, können Sie es mit dem Paketmanager des jeweiligen Betriebssystems installieren. Zum Beispiel im Fall von CentOS/RHEL:
# yum install auditd
Aktivieren Sie den auditd-Dienst so, dass er beim Booten startet, und starten Sie ihn mit dem Befehl „service“.
# systemctl enable auditd # service start auditd
Auditd-Regel konfigurieren, um SYSCALL zu überwachen
Lassen Sie uns eine Regel erstellen, um den „Kill“-SYSCALL zu überwachen, der verwendet werden kann, um alle Prozesse zu finden, die einen Prozess beenden.
1. Fügen Sie die folgende Regel zur Konfigurationsdatei für auditd-Regeln /etc/audit/rules.d/audit.rules hinzu :
# vi /etc/audit/rules.d/audit.rules -a exit,always -F arch=b64 -S kill -k kill_ruleUnter CentOS/RHEL 6 ist die Konfigurationsdatei /etc/audit/audit.rules statt /etc/audit/rules.d/audit.rules.
Hier
-immer ein Ausgang – Hier haben wir die Aktion und die Liste. Immer wenn das Betriebssystem einen Systemaufruf beendet, wird anhand der Exit-Liste bestimmt, ob ein Audit-Ereignis generiert werden muss.
-F arch=b64 – Die Option -F wird verwendet, um ein Regelfeld zu erstellen. Das b64 bedeutet, dass der Computer mit einer x86_64-CPU läuft. (Ob Intel oder AMD spielt keine Rolle.)
-S kill – Die Option -S gibt den Systemaufruf an, den wir überwachen möchten.
-k – Dies ist ein benutzerdefinierter Regelname.
2. Starten Sie den auditd-Dienst neu, damit die neue Regel wirksam wird.
# service restart auditd
3. Sie können überprüfen, ob die definierten Regeln aktiv sind, indem Sie den Befehl „auditctl -l“ verwenden.
# auditctl -l -a always,exit -F arch=b64 -S kill -F key=kill_rule
Bestätigen
Sehen wir uns ein Beispiel an, ob die gerade erstellte Regel tatsächlich funktioniert oder nicht. Wir werden einfach einen „Sleep 500“-Prozess initiieren und ihn beenden. Dies sollte ein Prüfprotokoll mit allen Details erzeugen, wie z. B. wer den Prozess (uid) mit welchem Programm/Befehl usw. beendet hat.
1. Spawnen Sie einen einfachen Sleep-Prozess im Hintergrund.
# sleep 600 &
2. Suchen Sie nach der Prozess-ID des Sleep-Prozesses und beenden Sie ihn.
# ps -ef | grep sleep root 2089 1784 0 15:12 pts/0 00:00:00 sleep 600
# kill -9 2089
3. Suchen Sie nach der Audit-Protokolldatei /var/log/audit/audit.log für die Kill-Audit-Logs. Das Protokoll sollte ähnlich aussehen wie unten gezeigt.
# tail -f /var/log/audit/audit.log type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule" type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep" type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash"
4. Manchmal kann es schwierig sein, im Überwachungsprotokoll nach den Protokollen zu suchen, an denen wir interessiert sind. In diesem Fall können Sie auch den Befehl „ausearch“ mit dem Schlüssel verwenden, der mit der Regel definiert ist. Zum Beispiel:
# ausearch -k kill_rule ... time->Wed Jun 20 15:13:11 2018 type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash" type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep" type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule"