Verwendung des Linux-Auditing-Systems unter CentOS 7

Einführung

Das Linux-Auditing-System hilft Systemadministratoren beim Erstellen eines Audit-Trails, eines Protokolls für jede Aktion auf dem Server. Wir können sicherheitsrelevante Ereignisse nachverfolgen, die Ereignisse in einer Protokolldatei aufzeichnen und Missbrauch oder nicht autorisierte Aktivitäten erkennen, indem wir die Überwachungsprotokolldateien überprüfen. Wir können auswählen, welche Aktionen auf dem Server in welchem ​​Umfang überwacht werden sollen. Audit bietet Ihrem System keine zusätzliche Sicherheit, sondern hilft bei der Verfolgung von Verstößen gegen Systemrichtlinien und ermöglicht es Ihnen, zusätzliche Sicherheitsmaßnahmen zu ergreifen, um diese zu verhindern.

In diesem Lernprogramm wird das Prüfsystem erläutert, wie es konfiguriert wird, wie Berichte generiert werden und wie diese Berichte gelesen werden. Wir werden auch sehen, wie die Überwachungsprotokolle nach bestimmten Ereignissen durchsucht werden.

Voraussetzungen

Für dieses Tutorial benötigen Sie Folgendes:

  • 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.

Überprüfen der Überwachungsinstallation

Das Auditsystem besteht aus zwei Hauptteilen:

  1. Die Überwachungskernkomponente fängt Systemaufrufe von Benutzeranwendungen ab, zeichnet Ereignisse auf und sendet diese Überwachungsnachrichten an den Überwachungsdämon

  2. Der Dämon + auditd + sammelt die Informationen aus dem Kernel und erstellt Einträge in einer Protokolldatei

Das Auditsystem verwendet die folgenden Pakete: + audit und` + audit-libs`. Diese Pakete werden standardmäßig auf einem neuen CentOS 7-Droplet (und einem neuen CentOS 6-Droplet) installiert. Es ist gut zu überprüfen, ob Sie sie auf Ihrem Server installiert haben:

sudo yum list audit audit-libs

Sie sollten beide Pakete unter + Installierte Pakete + in der Ausgabe sehen:

Installed Packages
audit.x86_64
audit-libs.x86_64

Audit konfigurieren

Die Hauptkonfigurationsdatei für + auditd + ist + / etc / audit / auditd.conf +. Diese Datei besteht aus Konfigurationsparametern, die enthalten, wo Ereignisse protokolliert werden, wie mit vollständigen Datenträgern umgegangen wird und wie die Rotation protokolliert wird. Um diese Datei zu bearbeiten, müssen Sie sudo verwenden:

sudo nano /etc/audit/auditd.conf

Bearbeiten Sie beispielsweise die folgende Option, um die Anzahl der auf Ihrem Server gespeicherten Überwachungsprotokolldateien auf 10 zu erhöhen:

/etc/audit/auditd.conf

num_logs =

Sie können auch die maximale Größe der Protokolldatei in MB konfigurieren und festlegen, welche Aktion ausgeführt werden soll, sobald die Größe erreicht ist:

/etc/audit/auditd.conf

max_log_file =
max_log_file_action =

Wenn Sie Änderungen an der Konfiguration vornehmen, müssen Sie den auditd-Dienst neu starten:

sudo service auditd restart

Damit die Änderungen wirksam werden.

Die andere Konfigurationsdatei lautet "+ / etc / audit / rules.d / audit.rules". (Wenn Sie mit CentOS 6 arbeiten, lautet die Datei stattdessen "+ / etc / audit / audit.rules +".) Sie wird zum dauerhaften Hinzufügen von Überwachungsregeln verwendet.

Wenn "+ auditd " ausgeführt wird, werden Überwachungsnachrichten in der Datei " / var / log / audit / audit.log +" aufgezeichnet.

Grundlegendes zu Überwachungsprotokolldateien

Standardmäßig protokolliert das Prüfsystem Prüfnachrichten in der Datei "+ / var / log / audit / audit.log +". Audit-Protokolldateien enthalten viele nützliche Informationen, aber das Lesen und Verstehen der Protokolldateien kann für viele Benutzer aufgrund der Menge der bereitgestellten Informationen, der verwendeten Abkürzungen und Codes usw. schwierig sein. In diesem Abschnitt werden wir versuchen, einige der Felder in einer typischen Überwachungsnachricht in den Überwachungsprotokolldateien zu verstehen.

Für dieses Beispiel nehmen wir an, dass auf dem Server eine Überwachungsregel mit der Bezeichnung (+ key +) + sshconfigchange + konfiguriert ist, um jeden Zugriff oder jede Änderung an der Datei + / etc / ssh / sshd_config + zu protokollieren. Wenn Sie möchten, können Sie diese Regel vorübergehend hinzufügen:

sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshconfigchange

Wenn Sie den folgenden Befehl ausführen, um die Datei + sshd_config + anzuzeigen, wird ein neues * Ereignis * in der Überwachungsprotokolldatei erstellt:

sudo cat /etc/ssh/sshd_config

Dieses Ereignis in der Datei + audit.log + sieht folgendermaßen aus:

/var/log/audit/audit.log

type=SYSCALL msg=audit(1434371271.277:135496): arch=c000003e syscall=2 success=yes exit=3 a0=7fff0054e929 a1=0 a2=1fffffffffff0000 a3=7fff0054c390 items=1 ppid=6265 pid=6266 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=113 comm="cat" exe="/usr/bin/cat" key="sshconfigchange"

type=CWD msg=audit(1434371271.277:135496):  cwd="/home/sammy"

type=PATH msg=audit(1434371271.277:135496): item=0 name="/etc/ssh/sshd_config" inode=392210 dev=fd:01 mode=0100600 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL

Das obige Ereignis besteht aus drei Datensätzen (die jeweils mit dem Schlüsselwort "+ type = " beginnen), die denselben Zeitstempel (" 1434371271.277 ") und dieselbe ID (" 135496 +") aufweisen. Jeder Datensatz besteht aus mehreren name = value-Paaren, die durch ein Leerzeichen oder ein Komma getrennt sind. Wir werden im Detail sehen, wofür einige dieser Felder stehen.

In der ersten Aufzeichnung:

  • + type = SYSCALL +

Das Feld "+ Typ " enthält den Typ der Prüfnachricht. In diesem Fall zeigt der Wert " SYSCALL +", dass diese Nachricht durch einen Systemaufruf an den Kernel ausgelöst wurde.

  • + msg = audit (1434371271.277: 135496): +

Der Zeitstempel und die ID der Überwachungsnachricht in der Form "+ audit (time_stamp: ID) +". Mehrere Überwachungsnachrichten / -datensätze können denselben Zeitstempel und dieselbe ID verwenden, wenn sie als Teil desselben Überwachungsereignisses generiert wurden. In unserem Beispiel sehen wir denselben Zeitstempel (1434371271.277) und dieselbe ID (135496) für alle drei vom Überwachungsereignis generierten Nachrichten.

  • + arch = c000003e +

Das Feld "+ arch +" enthält Informationen zur CPU-Architektur des Systems. Der Wert c000003e ist hexadezimal und steht für x86_64.

  • + syscall = 2 +

Das Feld "+ syscall " gibt den Typ des Systemaufrufs an, der an den Kernel gesendet wurde. In diesem Fall ist 2 der " open " - Systemaufruf. Mit dem Hilfsprogramm " ausyscall +" können Sie Systemrufnummern in ihre lesbaren Entsprechungen konvertieren. Führen Sie beispielsweise den folgenden Befehl aus, um den Wert 2 in das für den Menschen lesbare Äquivalent zu konvertieren:

sudo ausyscall 2

Die Ausgabe zeigt:

open
  • + Erfolg = ja +

Das Feld "+ Erfolg " zeigt an, ob der Systemaufruf in diesem bestimmten Ereignis erfolgreich war oder fehlgeschlagen ist. In diesem Fall war der Anruf erfolgreich. Der Benutzer sammy konnte die Datei " sshd_config " öffnen und lesen, als der Befehl " sudo cat / etc / ssh / sshd_config +" ausgeführt wurde.

  • + ppid = 6265 +

Das Feld "+ ppid " zeichnet die Parent Process ID (PPID) auf. In diesem Fall war " 6265 " die PPID des " bash +" - Prozesses.

  • + pid = 6266 +

Das Feld "+ pid " zeichnet die Prozess-ID (PID) auf. In diesem Fall war " 6266 " die PID des " cat +" - Prozesses.

  • + auid = 1000 +

+ auid + ist die Audit-UID oder die ursprüngliche UID des Benutzers, der diese Audit-Nachricht ausgelöst hat. Das Audit-System speichert Ihre ursprüngliche UID auch dann, wenn Sie nach der ersten Anmeldung die Berechtigungen über su oder sudo erhöhen.

  • + uid = 0 +

Das Feld "+ uid " enthält die Benutzer-ID des Benutzers, der den analysierten Prozess gestartet hat. In diesem Fall wurde der Befehl ` cat +` vom Benutzer root mit der UID 0 gestartet.

  • + comm =" cat "+

+ comm + zeichnet den Namen des Befehls auf, der diese Prüfnachricht ausgelöst hat.

  • + exe =" / usr / bin / cat "+

Das Feld "+ exe +" zeichnet den Pfad zu dem Befehl auf, der zum Auslösen dieser Prüfnachricht verwendet wurde.

  • + key =" sshconfigchange "+

Das Feld "+ key +" zeichnet die vom Administrator festgelegte Zeichenfolge auf, die der Überwachungsregel zugeordnet ist, die dieses Ereignis im Protokoll generiert hat. Schlüssel werden normalerweise beim Erstellen benutzerdefinierter Überwachungsregeln festgelegt, um die Suche nach bestimmten Ereignistypen in den Überwachungsprotokollen zu vereinfachen.

Für den zweiten Datensatz:

  • + type = CWD +

Im zweiten Datensatz lautet der Typ "+ CWD +" - Aktuelles Arbeitsverzeichnis. Dieser Typ wird verwendet, um das Arbeitsverzeichnis aufzuzeichnen, von dem aus der Prozess ausgeführt wurde, der den im ersten Datensatz angegebenen Systemaufruf ausgelöst hat.

  • + cwd =" / home / sammy "+

Das Feld "+ cwd " enthält den Pfad zu dem Verzeichnis, von dem aus der Systemaufruf aufgerufen wurde. In unserem Fall wurde der Befehl " cat ", der den " open " - Systemaufruf im ersten Datensatz auslöste, aus dem Verzeichnis " / home / sammy +" ausgeführt.

Für den dritten Datensatz:

  • + type = PATH +

Im dritten Datensatz ist der Typ "+ PATH ". Ein Überwachungsereignis enthält einen " PATH " - Datensatz für jeden Pfad, der als Argument an den Systemaufruf übergeben wird. In unserem Audit-Ereignis wurde nur ein Pfad (` / etc / ssh / sshd_config +`) als Argument verwendet.

  • + msg = audit (1434371271.277: 135496): +

Das Feld "+ msg +" zeigt dieselbe Kombination aus Zeitstempel und ID wie im ersten und zweiten Datensatz, da alle drei Datensätze Teil desselben Überwachungsereignisses sind.

  • + name =" / etc / ssh / sshd_config "+

Das Feld "+ name " zeichnet den vollständigen Pfad der Datei oder des Verzeichnisses auf, die bzw. das als Argument an den Systemaufruf (open) übergeben wurde. In diesem Fall war es die Datei " / etc / ssh / sshd_config".

  • + ouid = 0 +

Das Feld "+ ouid " enthält die Benutzer-ID des Objektbesitzers. Hier ist das Objekt die Datei " / etc / ssh / sshd_config +".

Durchsuchen der Überwachungsprotokolle nach Ereignissen

Das Linux Auditing System wird mit einem leistungsstarken Tool namens "+ ausearch " zum Durchsuchen von Audit-Protokollen ausgeliefert. Mit ` ausearch +` können Sie Ereignistypen filtern und suchen. Sie können Ereignisse auch interpretieren, indem Sie numerische Werte in lesbare Werte wie Systemaufrufe oder Benutzernamen übersetzen.

Schauen wir uns einige Beispiele an.

Der folgende Befehl durchsucht die Überwachungsprotokolle nach allen Überwachungsereignissen des Typs LOGIN von heute und interpretiert Benutzernamen.

sudo ausearch -m LOGIN --start today -i

Der folgende Befehl sucht nach allen Ereignissen mit der Ereignis-ID 27020 (sofern es ein Ereignis mit dieser ID gibt).

sudo ausearch -a 27020

Dieser Befehl sucht nach allen Ereignissen (falls vorhanden), die die Datei "+ / etc / ssh / sshd_config +" berühren, und interpretiert sie:

sudo ausearch -f /etc/ssh/sshd_config -i

Prüfberichte generieren

Anstatt die unformatierten Überwachungsprotokolle zu lesen, können Sie mit dem Tool "+ aureport " eine Zusammenfassung der Überwachungsnachrichten abrufen. Es bietet Berichte in lesbarem Format. Diese Berichte können als Bausteine ​​für komplexere Analysen verwendet werden. Wenn " aureport +" ohne Optionen ausgeführt wird, wird eine Zusammenfassung der verschiedenen Ereignistypen in den Überwachungsprotokollen angezeigt. Bei Verwendung mit Suchoptionen wird die Liste der Ereignisse angezeigt, die den Suchkriterien entsprechen.

Versuchen wir ein paar Beispiele für "+ aureport +". Wenn Sie einen zusammenfassenden Bericht über alle Befehlsausführungen auf dem Server erstellen möchten, führen Sie Folgendes aus:

sudo aureport -x --summary

Die Ausgabe sieht ungefähr so ​​aus, mit unterschiedlichen Werten:

Executable Summary Report
=================================
total  file
=================================
117795  /usr/sbin/sshd
1776  /usr/sbin/crond
210  /usr/bin/sudo
141  /usr/bin/date
24  /usr/sbin/autrace
18  /usr/bin/su

Die erste Spalte gibt an, wie oft der Befehl ausgeführt wurde, und die zweite Spalte gibt an, welcher Befehl ausgeführt wurde. Bitte beachten Sie, dass nicht alle Befehle standardmäßig protokolliert werden. Es werden nur sicherheitsrelevante protokolliert.

Mit dem folgenden Befehl erhalten Sie die Statistik aller fehlgeschlagenen Ereignisse:

sudo aureport --failed

Die Ausgabe sieht ungefähr so ​​aus:

Failed Summary Report
======================
Number of failed logins: 11783
Number of failed authentications: 41679
Number of users: 3
Number of terminals: 4
Number of host names: 203
Number of executables: 3
Number of files: 4
Number of AVC's: 0
Number of MAC events: 0
Number of failed syscalls: 9

So generieren Sie einen Bericht über Dateien, auf die mit Systemaufrufen und Benutzernamen zugegriffen wird:

sudo aureport -f -i

Beispielausgabe:

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. Monday 15 June 2015 08:27:51 /etc/ssh/sshd_config open yes /usr/bin/cat sammy 135496
2. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147481
3. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config lgetxattr yes /usr/bin/ls root 147482
4. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147483
5. Tuesday 16 June 2015 00:40:15 /etc/ssh/sshd_config getxattr no /usr/bin/ls root 147484
6. Tuesday 16 June 2015 05:40:08 /bin/date execve yes /usr/bin/date root 148617

Um dasselbe im Zusammenfassungsformat anzuzeigen, können Sie Folgendes ausführen:

sudo aureport -f -i --summary

Analysieren eines Prozesses mit autrace

Um einen einzelnen Prozess zu prüfen, können wir das Tool + autrace + verwenden. Dieses Tool verfolgt die Systemaufrufe, die von einem Prozess ausgeführt werden. Dies kann bei der Untersuchung eines mutmaßlichen Trojaners oder eines problematischen Prozesses hilfreich sein. Die Ausgabe von "+ autrace " wird in " / var / log / audit / audit.log " geschrieben und ähnelt den Standardeinträgen für das Audit-Protokoll. Nach der Ausführung zeigt Ihnen " autrace " einen Beispielbefehl " ausearch ", um die Protokolle zu untersuchen. Verwenden Sie immer den vollständigen Pfad zur Binärdatei, um mit autrace zu verfolgen, zum Beispiel ` sudo autrace / bin / ls / tmp +`.

Angenommen, wir möchten den Prozess "+ date +" verfolgen und die von ihm verwendeten Dateien und Systemaufrufe anzeigen. Führen Sie Folgendes aus:

sudo autrace /bin/date

Sie sollten etwas Ähnliches wie das Folgende sehen:

Waiting to execute: /bin/date
Wed Jun 17 07:22:03 EDT 2015
Cleaning up...
Trace complete. You can locate the records with 'ausearch -i -p 27020'

Sie können den Befehl "+ ausearch " aus der obigen Ausgabe verwenden, um die zugehörigen Protokolle anzuzeigen, oder ihn sogar an " aureport +" übergeben, um eine gut formatierte, lesbare Ausgabe zu erhalten:

sudo ausearch -p 27020 --raw | aureport -f -i

Dieser Befehl sucht nach dem Ereignis mit der Ereignis-ID "+ 27020 " aus den Überwachungsprotokollen, extrahiert es im Rohprotokollformat und übergibt es an " aureport +", das seinerseits die Ergebnisse interpretiert und in einem besseren Format anzeigt, um das Lesen zu erleichtern .

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. Wednesday 17 June 2015 07:22:03 /bin/date execve yes /usr/bin/date sammy 169660
2. Wednesday 17 June 2015 07:22:03 /etc/ld.so.preload access no /usr/bin/date sammy 169663
3. Wednesday 17 June 2015 07:22:03 /etc/ld.so.cache open yes /usr/bin/date sammy 169664
4. Wednesday 17 June 2015 07:22:03 /lib64/libc.so.6 open yes /usr/bin/date sammy 169668
5. Wednesday 17 June 2015 07:22:03 /usr/lib/locale/locale-archive open yes /usr/bin/date sammy 169683
6. Wednesday 17 June 2015 07:22:03 /etc/localtime open yes /usr/bin/date sammy 169691

Fazit

In diesem Tutorial haben wir die Grundlagen des Linux-Auditing-Systems behandelt. Sie sollten nun ein gutes Verständnis für die Funktionsweise des Prüfsystems, das Lesen der Prüfprotokolle und die verschiedenen verfügbaren Tools haben, um die Prüfung Ihres Servers zu vereinfachen.

Standardmäßig zeichnet das Prüfsystem nur einige wenige Ereignisse in den Protokollen auf, z. B. Benutzer, die sich anmelden, und Benutzer, die sudo verwenden. SELinux-bezogene Nachrichten werden ebenfalls protokolliert. Der Überwachungsdämon verwendet Regeln, um bestimmte Ereignisse zu überwachen und zugehörige Protokolleinträge zu erstellen. Es ist möglich, benutzerdefinierte Überwachungsregeln zu erstellen, um die Protokolle nach Belieben zu überwachen und aufzuzeichnen. Hier wird das Audit-System für einen Systemadministrator leistungsfähig. Wir können Regeln entweder mit dem Befehlszeilentool "+ auditctl " oder dauerhaft in der Datei " /etc/audit/regeln.d/audit.rules +" hinzufügen. Das Schreiben von benutzerdefinierten Regeln und die Verwendung vordefinierter Regelsätze werden ausführlich unter Writing Custom System Audit Rules on erläutert CentOS 7 Tutorial.

Sie können auch die folgenden Ressourcen prüfen, um weitere Informationen zum Audit-System zu erhalten: