Einbrüche erkennen mit Integrit

Linux Einbrüche erkennen mit Integrit

Wenn ein Angreifer in ein System eindringt, sind die primären Aktionen das Verwischen von Spuren und die Sicherung des Zugriffs auf diesen Rechner. Letzteres wird meist erledigt, indem ein so genanntes [GLOSS:rootkit] installiert wird. Dabei werden Programme auf das System eingespielt, die am Netzwerk lauschen und den Angreifer zu einem späteren Zeitpunkt wieder ins System rein lassen. Wichtig ist dabei, dass die Änderungen am System nicht sichtbar sind. Also werden ggf. auch System Programme wie top ausgetauscht, um einige Prozesse zu verstecken. Manche rootkits benutzen auch Kernel-Module, um Prozesse zu verstecken.

Wenn also alle anderen Sicherheitsmaßnahmen gescheitert sind, ist es sinnvoll, zumindest die Möglichkeit zu haben, die Installation eines solchen rootkits zu erkennen, um ein angegriffenes System abzuschalten, zu untersuchen und neu aufzusetzen. Dafür benötigt man eine Software, die [GLOSS:IDS] genannt wird. Also eine Einbruchs-Erkennung. Das hier vorgestellte Integrit ist ein so genannter SIV (System Integrity Verifier) und dient somit als rechnerbasiertes IDS.

Das Programm arbeitet wie das altbekannte Tripwire mit einer Datenbanken, die Informationen über schützenswerte Dateien und Verzeichnisse enthalten. So kann zu einem späteren Zeitpunkt festgestellt werden, ob wichtige Programme ausgetauscht wurden. Auf diese Art kann beispielsweise ein rootkit oder Trojanisches Pferd entdeckt werden.

Integrit kennt zwei Datenbanken:

known.cdb - Das ist die Datenbank mit den Informationen über den gesicherten Zustand des Systems und
current.cdb - Hier werden die Informationen über den aktuellen Zustand des Systems abgelegt, um ihn mit dem bekannten, gesicherten Zustand zu vergleichen.

Installation

apt-get install integrit

Ggf. fallen bei der Installation die folgenden Tätigkeiten an:

1.) Es wird nach dem Pfad zur Konfigurationsdatei gefragt. Dieser kann übernommen werden. Genauso wie der Name der Datei selbst. So hat man zumindest eine Datei mit auskommentierten Anweisungen und Hinweisen auf vorhandene Dokumentation.

2.) Es wird gefragt, ob Integrit die Datenbanken nun im Hintergrund anlegen soll. Hier sollte der Vorschlag "No" übernommen werden, da die initiale Konfiguration nichts Enthält und zu einer Fehlermeldung führen würde.

3.) Die nächste Frage ist dem Empfänger der automatisch generierten Reports gerichtet. Es wird ein funktionierendes Mail System auf dem lokalen Rechner vorausgesetzt und die eMail Adresse des Empfängers ist hier anzugeben. "root" kann ruhig übernommen werden, wenn man sich zumindest regelmäßig mal als root einloggt. Ansonsten können die Nachrichten auch an einen normalen User gesendet werden.

4.) Nun geht es darum, festzulegen, wie viele Backups von den Datenbank Dateien angelegt werden sollen. Dieser Wert ist individuell, da dies nicht unwesentlich von vorhandenem Platz und der Größe der Datenbanken abhängt.

Im Zweifelsfall können diese Konfigurationen auch direkt in der Datei /etc/integrit/integrit.debian.conf vorgenommen werden. Wer kein Debian benutzt, der muss sich im Zweifelsfall auf der [LINK:START:380]Homepage[LINK:END] des Projektes umsehen.

Konfiguration

Prinzipiell besteht jede Anweisung in der Konfigurationsdatei aus drei Teilen:

[PREFIX][Datei oder Verzeichnis mit Pfad] [OPTIONEN]

Dabei gibt es zwischen dem Prefix und dem Datei- oder Verzeichnisnamen kein Leerzeichen. Prefixe sind einzelne Zeichen mit einer jeweils bestimmten Bedeutung:

 

Prefix Bedeutung
! Diese Datei/Verzeichnis ignorieren
= Dieses Verzeichnis prüfen, aber nicht weiter absteigen.
$ Diese Regel wird nicht wie sonst von den Unterverzeichnissen übernommen.

 

Dank dieser Regeln kann man verhindern, dass die Prüfung mit unsinnigen Fehlermeldungen überflutet wird, die nicht von Interesse sind. So ist es zum Beispiel klar, dass man nicht immer die gleiche CD-Rom im Laufwerk hat, so dass man ruhigen Gewissens den Mountpunkt für das CD-Rom Laufwerk von der Prüfung ausschließen kann. Andererseits kann man die Datenbanken auch deutlich verkleinern, wenn man beispielsweise Verzeichnisse wie das für die Dokumentation unter /usr/doc von der Prüfung ausschließt.

Bei den Optionen geht es nun darum, dass man festlegen kann, was nun genau wie gesprüft wird. Für jeden Test gibt es einen Buchstaben. Ein Großbuchstabe signalisiert, dass der Test deaktiviert wird und ein Kleinbuchstabe aktiviert diesen Test.

 

Abkürzung Prüfung
s Prüfsumme
i Inode
p Zugriffsrechte
l Anzahl der Links
u User ID
g Gruppen ID
z Dateigröße (überflüssig, wenn die Prüfsummen aktiviert sind)
a Zugriffszeit
m Äderungszeit
c Zeitpunkt der letzten Änderung der Dateiinfos (ctime)
r Rücksetzen der Zugriffszeit (mit Vorsicht benutzen)

 

Dabei ist es wichtig, dass standardmäßig alle Tests bis auf Dateigröße, Zugriffszeit, Zeitpunkt der letzten Änderung der Dateiinfos (ctime) und Rücksetzen der Zugriffszeit auf alle Verzeichnisse und Dateien unterhalb der angegebenen Wurzel "root" angewandt werden. Die Zeile

$/root/ SIMCa

würde also beispielsweise die Tests s,i,m und c deaktivieren, den Test a aktivieren und dabei nicht die Tests der Unterverzeichnisse beeinflussen. So kann man sich nun ans Werk machen und eine Konfigurationsdatei schreiben:

# /etc/integrit/integrit.conf : Konfigurationsdatei für 
# Integrit

# Das ist das Wurzel-Verzeichnis in dem die 
# Verzeichnisse
# und Dateien erfasst werden:
root=/
# Diese Datenbank wird als gesicherter System Zustand 
# angesehen:
known=/var/lib/integrit/known.cdb
# Diese Datenbank spiegelt den aktuellen Zustand wieder:
current=/var/lib/integrit/current.cdb

# Diese Verzeichnisse werden ignoriert, weil
# sie sich praktisch laufend ändern und somit zu
# ständigen Meldungen führen würden, die die Sicht
# auf die wirklichen Probleme vernebeln:
!/cdrom
!/dev
!/etc/mtab
!/floppy
!/home
!/lost+found
!/mnt
!/proc
!/tmp
!/var
!/var/lib/integrit/known.cdb
!/var/lib/integrit/current.cdb

# Hier nicht weiter absteigen:
=/usr/doc

ENDE der Konfigurationsdatei

Kommandos

Hat man nun eine Konfigurationsdatei unter /etc/integrit/integrit.conf abgelegt, so kann man integrit mit

integrit -C /etc/integrit/integrit.conf -u

veranlassen, die current-Datenbank zu aktualisieren. Diese speichert man zusammen mit der Integrit Binärdatei /usr/sbin/integrit und der Konfigurationsdatei auf einem sicheren Medium. Dabei ist es wichtig, dass man die Checksumme überprüft. Das kann man mit

md5sum /var/lib/integrit/current.cdb

tun. Hat man nun sichergestellt, dass der aktuelle Zustand gesichert ist, kann man die Datei nach /var/lib/integrit/known.cdb kopieren und einen Test durchführen:

integrit -C /etc/integrit/integrit.conf -u -c

Dabei werden alle Unterschiede im Dateisystem ausgeben, die Integrit feststellen konnte.

Möchte man zu einem späteren Zeitpunkt einen zuverlässigen Test durchführen, ist es wichtig sicherzustellen, dass man immer nur dann die known-Datenbank ersetzt, nachdem man die Prüfsumme der current-Datenbankdatei verglichen hat. Man würde dann die integrit Binärdatei nach /usr/sbin und die Konfiguration sowie die Datenbank von dem sicheren Medium zurückkopieren. Allerdings verwendet man dann die gespeicherte current-Datenbank als known-Datenbank, da ja gegen diese verglichen werden soll. Man startet Integrit mit den optionen -u und -c und bekommt alle Änderungen im Dateisystem angezeigt.

Debian stellt in dem Programmpaket gleich noch eine [DOC:START:45]cron[DOC:END]-Datei zur Verfügung, um die Integritätstests über cron gesteuert regelmäßig durchzuführen. Hierzu setzt man die Variable CONFIGS in der Datei /etc/integrit/integrit.debian.conf auf die zu benutzende Konfigurationsdatei. Eine weitere Möglichkeit, rootkits zu finden, bietet das Tool [DOC:START:228]chkrootkit[DOC:END].

Artikelbewertung: 
No votes yet
War dieser Artikel hilfreich?