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.
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.
|
|
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*
|
|
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
|
|
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
|
|
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.
|
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.
|
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.
|
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
|
|
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
#
|
|
|