SelfLinux Sicherheit Samhain Abschnitt 5 | SelfLinux-0.13.0

| Samhain | Autor Formatierung GFDL

#### 5 Konfiguration der Integritätseigenschaften innerhalb des Dateisystems

In Abschnitt 4 wurde besprochen, wie Samhain berichten soll. Natürlich muss man auch festlegen, worüber Samhain berichten soll. D. h., es muss angegeben werden, über welche Dateien-Änderungen man informiert werden möchte.

Samhain speichert die Prüfsumme des Dateiinhaltes (bei regulären Dateien), die Dateigröße, Zugriffsrechte, Besitzer und Gruppe, Zeiten, Anzahl von Hardlinks, die Nummer der Inode, und (bei Geräten) die Gerätenummer.

Nicht immer ist es sinnvoll, alle diese Eigenschaften zu prüfen. Z.B. ändern sich Größe, Prüfsumme und Zeitstempel von Logdateien fortwährend. Auch Größe und Zeitstempel einer Verzeichnis-Inode ändern sich, wenn Dateien in diesem Verzeichnis erzeugt und/oder gelöscht werden. Man beachte dabei den Unterschied zwischen den Dateien in einem Verzeichnis, und der Verzeichnis-Inode selbst, d. h. der speziellen Datei, die eine Liste der ersteren Dateien enthält. In der Regel ist es sinnvoll, manche Dateien nach anderen Policys (Grundsätzen) zu behandeln als andere.

Samhain bietet mehrere vordefinierte Policys, sowie die Möglichkeit, diese Policys nach eigenem Ermessen zu ändern. Eine Policy ist dabei ein Grundsatz, der besagt, welche Dateieigenschaften sich ändern dürfen, und welche nicht.

#### 5.1 Vordefinierte Policys

Die folgenden Policys sind vordefiniert:

ReadOnly | Nur die Zeit des letzten Zugriffs (access time) darf sich ändern.
Prelink | Wie ReadOnly, aber für Programme und Bibliotheken, die mit Hilfe von prelink verändert wurden, um einen schnelleren Programmstart zu ermöglichen.
LogFiles | Alle Zeitstempel, sowie Prüfsumme und Dateigröße dürfen sich ändern.
GrowingLogFiles | Sowohl Zeitstempel als auch Prüfsumme dürfen sich ändern. Die Dateigröße darf sich nicht verringern, aber erhöhen.
Attributes | Nur Veränderungen von Eigentümer/Gruppe oder Zugriffsrechten werden berichtet.
IgnoreAll | Alle Veränderungen werden ignoriert, aber die Existenz einer Datei wird geprüft.
IgnoreNone | Alle Veränderungen einschließlich der Zugriffszeit werden berichtet. Praktisch bedeutet dies allerdings, dass nun die Zeit der letzten Inode-Änderung anstelle der Zeit des letzten Zugriffs ignoriert wird.
User0, User1 | Diese Policys sind standardmäßig auf nichts darf sich ändern gesetzt und für benutzerdefinierte Policys gedacht.

#### 5.2 Wahl einer Policy

Jede Policy entspricht einer Sektion in der Konfigurationsdatei, deren Titel der Name der Policy ist. Ein Verzeichnis oder eine einzelne Datei wird unter diese Policy gestellt, indem man in der entsprechenden Sektion einen Eintrag der Form dir=/directory bzw. file=/file macht. Dabei sind immer absolute Pfade anzugeben; Jokerzeichen im Shell-Stil werden unterstützt:

/etc/samhainrc

    [ReadOnly]
    #
    dir=/bin
    dir=/usr/bin
    dir=/sbin
    dir=/usr/sbin
    #
    file=/etc/passwd*
    file=/etc/shadow*

#### 5.3 Rekursionstiefe

Standardmäßig werden Verzeichnisse nicht rekursiv geprüft. Dies kann global geändert werden mit dem Eintrag SetRecursionLevel = zahl in der [Misc]-Sektion, wobei zahl die Anzahl der Rekursionsebenen angibt (maximal 99).

Weiterhin ist es möglich, die Rekursionstiefe für ein Verzeichnis individuell zu konfigurieren, indem man die gewünschte Anzahl Rekursionsebenen dem Verzeichnis voranstellt:

/etc/samhainrc

    [ReadOnly]
    #
    dir=5/var

#### 5.4 Unterverzeichnisse ignorieren

Will man einen Verzeichnisbaum rekursiv prüfen, aber bestimmte Unterverzeichnisse (Teilbäume) komplett auslassen, so müssen diese Unterverzeichnisse mit einer Rekursionstiefe von -1 unter die Policy [IgnoreAll] gestellt werden:

/etc/samhainrc

    [IgnoreAll]
    #
    dir=-1/var/nicht/zuhause

#### 5.5 Keine Benachrichtigung über neue/gelöschte Dateien

Gelegentlich möchte man es vermeiden, über bestimmte Dateien informiert zu werden, die ständig neu erzeugt und/oder gelöscht werden. Hierzu dienen die Optionen IgnoreAdded = regexp (neu erzeugt ignorieren) und/oder IgnoreMissing = regexp (gelöscht ignorieren) in der [Misc]-Sektion der Konfigurationsdatei. Das Argument ist jeweils ein regulärer Ausdruck für den absoluten Pfad.

#### 5.6 Hardlink Test

Unter UNIX oder Linux hat eine Directory üblicherweise ebensoviele Hardlinks wie sie Unterverzeichnisse hat (einschließlich . und ..). Samhain testet dies - die Idee dabei ist, dass ein Rootkit ein Unterverzeichnis verbergen kann, aber in der Regel nicht die Zahl der Hardlinks des darüberliegenden Verzeichnisses korrigiert. Dieser Test lässt sich ausschalten mit der Option UseHardlinkCheck = no in der [Misc]-Sektion.

Das Wurzelverzeichnis einer ReiserFS-Partition hat zwei zusätzliche Hardlinks. Für solche Fälle ist es möglich, mit der Option HardlinkOffset = N:/directory in der [Misc]-Sektion eine Korrektur anzugeben. Dabei ist N gleich (tatsächliche - erwartete) Hardlinks.

#### 5.7 Test auf seltsame Dateinamen

Samhain prüft Dateinamen auf unübliche Zeichen, z. B. Zeilenvorschub, Tabulator o. ä. Mit der Option AddOKChars = N1, N2, .. in der [Misc]-Sektion lässt sich die Menge der guten Zeichen erweitern; dabei ist N1 ... der vorzeichenlose Byte-Wert des Zeichen in hexadezimaler (0xNN), oktaler (0NNN) oder dezimaler Notation.

Mit AddOKChars = all lässt sich dieser Test komplett ausschalten.

#### 5.8 Änderung einer Policy

Möchte man eine Policy ändern, so geschieht dies in der [Misc]-Sektion mit Anweisungen der Form: RedefPOLICYNAME = +XXX -YYY ..., wobei die Liste der +/-XXX die Tests sind, die man hinzufügen oder streichen möchte. Mögliche Tests sind: CHK (Prüfsumme), LNK (Name eines Links), HLN (Anzahl Hardlinks), INO (Inode-Nummer), USR (Besitzer), GRP (Gruppe), MTM (Zeit der letzten Änderung), ATM (Zeit des letzten Zugriffs), CTM (Zeit der letzten Inode-Änderung), SIZ (Dateigröße), RDEV (Gerätenummer) und/oder MOD (Zugriffsrechte und Dateityp).

Dabei ist zu beachten, dass eine Policy in der Konfigurationsdatei geändert werden muss, bevor sie benutzt wird, d.h. im nachfolgenden Beispiel wäre es falsch, die [Misc]-Sektion hinten anzustellen:

/etc/samhainrc

    [Misc]
    #
    # ReadOnly Policy ändern: Inode-Nummer, Besitzer und Gruppe nicht prüfen
    #
    RedefReadOnly = -INO -USR -GRP
    #
    # ... und geänderte Policy benutzen:
    #
    [ReadOnly]
    #
    # nicht ganz sinnvoll, aber ist ja nur ein Beispiel
    #
    dir = /usr/bin

#### 5.9 Zeiten der Integritätsprüfung

Wenn Samhain als Dämon läuft, so gibt es zwei verschiedene Möglichkeiten, in der [Misc]-Sektion die Zeiten der Integritätsprüfung festzulegen:

- erste Möglichkeit: mit SetFilecheckTime = Sekunden ein Intervall festlegen
- zweite Möglichkeit: mit FileCheckScheduleOne = Zeitplan einen Zeitplan im crontab-Stil festlegen. Dabei sind folgende Abweichungen zu crontab zu beachten: (a) Listen sind nicht erlaubt, und (b) Bereiche mit Namen (z. B. Mon-Fri) sind erlaubt. Es ist möglich, die Option FileCheckScheduleOne = Zeitplan mehrmals zu verwenden, um dadurch eine Liste zu konstruieren.

Wenn die zweite Möglichkeit genutzt wird, so gibt es zusätzlich die Möglichkeit, mit FileCheckScheduleTwo = Zeitplan einen weiteren Zeitplan zu definieren für Verzeichnisse (keine einzelnen Dateien), die seltener geprüft werden sollen. Die entsprechenden Verzeichnisse müssen mit %SCHEDULE_TWO ... !%SCHEDULE_TWO geklammert werden:

/etc/samhainrc

    [Misc]
    #
    # Alle 5 Minuten
    #
    FileCheckScheduleOne = */5 * * * *
    #
    # Einmal täglich
    #
    FileCheckScheduleTwo = 37 0 * * *
    #
    [ReadOnly]
    #
    dir = /Pfad/oft/prüfen
    #
    %SCHEDULE_TWO
    dir = /Pfad/seltener/prüfen
    !%SCHEDULE_TWO
    #