AIDE - Advanced Intrusion Detection System

#Dateisysteme #Hash #Integrität #IDS

Table of Contents

Wozu AIDE?

AIDE dient der hostbasierten Intrusion Detection (HIDS), d.h. es gegneriert einen Fingerabdruck des Systems. Diese Datenbank kann dann gegen das System abgeglichen werden um Veränderungen in Dateien anzuzeigen und daraus Rückschlüsse auf z.B.Hacks, Würmer oder Rootkits zu ziehen. Damit die erzeugte Datenbank zuverlässig eingesetzt werden kann sollte sie erzeugt werden bevor der Rechner in ein Netzwerk eingebunden wird.

Wie?

AIDE durchläuft die vorher definierten Verzeichnisse und erstellt besagte Datenbank mit verschiedenen ebenfalls übergebenen Optionen / Dateiattributen.

Diese Optionen sind : (Regelzeichen und Bedeutung )

  • p : Dateirechte
  • i : INODE
  • n : Anzahl der Links
  • u : Nutzer
  • g : Group
  • s : Size
  • b : Block
  • m : mtime, Erstellzeitpunkt
  • a : atime, Zugriffszeitpunkt
  • c : ctime, Veränderungszeitpunkt
  • S : auf wachsende Größe prüfen
  • md5 : MD5 Checksumme
  • sha1 : SHA1 Checksumme
  • rmd160 :rmd160 Checksumme
  • tiger : Tiger Checksumme
  • R : p+i+n+u+g+s+m+c+md5
  • L : p+i+n+u+g
  • E : Empty group
  • > : Growing logfile p+u+g+i+n+S

die ersten Optionen p - S sind selbsterklärend, da es aber möglich ist diese Daten zu fälschen, (z.B. mittels Kernelmodifikation oder Rootkit) verwendet AIDE noch weitere Möglichkeiten, nämlich 4 verschiedene Prüfsummenverfahren (md5, sha1, rmd160, tiger). Diese Prüfsummenverfahren bestehen aus verschiedenen mathematischen Methoden die eine eindeutige Summe über die Attribute einer Datei erzeugen, daher können Manipulationen nahezu ausgeschlossen werden.

Ein Beispiel an MD5

MD5 ist ein kryptographischer Alghoritmus, der zwar in der Kryptologie als veraltet gilt (SHA1 wird empfohlen),als Prüfsumme aber ausreicht. Das Grundprinzip ist recht einfach, wenn man einen Text verschlüsseln will, muß der Algorithmus bijektiv sein, d.h. man muß einen Text codieren können und natürlich auch wieder rückwärts aus dem Code den Originaltext entschlüsseln können. Das bedeutet das es zu jedem Text einen eindeutigen Code und umgekehrt (bijektiv) gibt. Also lassen sich damit Daten verifizieren wie z.B. bei der PGP-Signatur. MD5 bildet eine 128 Bit Prüfsumme, also gibt es exakt 2^128 (ca. 1x10^39) verschiedene Prüfsummen, dies bedeutet das bei mehr als 1x10^39 Dateien Menge an eindeutigen Prüfsummen erschöpft ist und mehrere identische Prüfsummen vergeben werden. Bis heute ist es allerdings nicht gelungen zu einer vorgegebenen MD5 Summe die passende Datei zu rekonstruieren, trotzdem wurde bereits 1996 eine Kollision in der MD5 Komprimierungsmethode von Hans Dobbertin gefunden. SHA-1 (auch SHS genannt) ist ein Algorithmus der von der US Regierung herausgebracht wurde. Er generiert einen 160 Bit Hashaus einem beliebigen String.

Siehe auch: http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html

RMD-160 produziert einen 160 Bit Hash, läuft ziemlich schnell (ca. 45 MB/S auf einem PI/100) und ist Public Domain. Tiger von Anderson und Biham. Die Geschwindigskeitunterschiede der Algorithmen sollten sich auf normalen Heimsystemen in Grenzen halten, hier einige Vergleichswerte für das Initiieren der Datenbank

  • P1/100 32MB RAM, SuSE 7.2, /usr Verzeichnis, 160MB, 993 Dateien
    • RMD160 : 18 sek - Tiger : 19 sek
    • MD5 : 20 sek - SHA1 : 17 sek
  • DEC Alpha 21066, 48MB RAM, NetBSD 1.5.2 Alpha, /usr Verzeichnis,
    • RMD160 : 12 sek - Tiger : 11 sek
    • MD5 : 11 sek - SHA1 : 10 sek

auf einem “großen” Produktionsserver können sich natürlich durchaus Unterschiede bemerkbar machen, es empfiehlt sich hier einfach einen Testlauf zu machen und zu sehen welcher Algorithmus am schnellsten ist (ich tendiere in Richtung SHA1 und RMD 160).

Man kann die Prüfverfahren natürlich beliebig kombinieren und so mehrere Prüfsummendatenbanken erstellen, welche zu fälschen unmöglich sein sollte, oder verschiedene Konfigurationen erstellen, die per cron durchlaufen, z.B. einen einfachen Dateiattributecheck bei jedem Start und nachts oder am Wochenende einen Durchlauf mit allem Prüfsummen. Probleme und Gefahren AIDE soll dazu dienen Backdoors und Rootkits zu entdecken, Rootkits sind Scripts die auf einem penetrierten System installiert werden um die Anwesenheit des Einbrechers zu vertuschen. Dazu gehören Kernelmodifikationen, austauschen verschiedener Systemprogramme wie ls, md5 oder lsof und natürlich auch die Gefahr der Modifikation der AIDE Datenbank oder gar des AIDE Binary. Daher sollte die AIDE Datenbank auf einem hardwaremäßig schreibgeschützten Medium (CD, Floppy mit Schreibschutz) liegen. In der Regel sollte die DB auf eine Floppy passen oder nach Verzeichnissen getrennt auf mehrere Disketten verteilt werden, man kann auch das Binary und conf-File auf eine Diskette bannen und das Paket mittels pkg_delete aide-x.x (oder dem rpm-Pendant) deinstallieren, so erfährt ein Einbrecher nicht unmittelbar von der Existenz AIDEs.

Initiieren der Datenbank:

$aide -i generiert eine neue Datenbank, welche standardmäßig unter /usr/pkg/etc/aide.db.new liegt. Vorgaben entnimmt Aide der Konfigurationstdatei /usr/pkg/etc/aide.conf

$aide -C Überprüft die Datenbank, erzeugt einen Report $aide -u Überprüfen der Datenbank und automatisches Update $aide -c foo.bar Konfigurationsdatei foo.bar soll verwendet werden

Optionen in aide.conf sind unter anderem:

database = file:///etc/aide.db
 # Speicherort der Datenbank im URL-Format (also %
file:///pfad/zur/datei) 
database_new = file:///etc/aide.db.new
 # Speicherort der zu erstellenden Datenbank 
report_url = file:///root/aide.report
 # Speicherort des generierten Reports, kann auch per -r
übergeben werden
heavy = p+i+n+g+u+s+S+rmd160+md5
 # Definition des "Makros" heavy, es können beliebige Optionen
übergeben werden
/bin heavy
 # Das Verzeichnis /bin soll mit den Optionen heavy geprüft
werden
/dev u+g+i+s+S
 # Das Verzeichnis /bin soll mit den Optionen u g i s S
geprüft werden
!/var/spool/
 # Das Verzeichnis /var/spool soll nicht geprüft werden
 # Es bietet sich an Verzeichnisse die sich oft ändern nicht
(zu paranoid) zu prüfen. 

Kleines Beispiel aus einer Datenbank:

	# This file was generated by Aide, version 0.6
	# Time of generation was 2002-03-01 16:21:17
	@@db_spec name uid gid size inode perm count md5 rmd160
 	/* verwendete Attribute */ 
	/usr 0 0 512 2 40755 14 0 0
	/usr/bin 0 0 4608 26368 40755 2 0 0
	/usr/bin/Mail 0 0 110880 26369 100555 3 imGFDbIE2vmgcor1KxliHg==	wnBz4gYF68eNgR5v0whfRt2+BJM=
	/usr/bin/apply 0 0 10416 26370 100555 1 Cm8vqBULhAszAtgvD2idAQ==	oGh2RGqujlh1Hm1sU2VjAs+HZgg=
	/usr/bin/apropos 0 0 13040 26371 100555 1 K2mwO7ixww/UHU7l245QZA==	kDPnhB+TE3bLj5/aTssurDBx2t8=
	/usr/bin/at 0 0 32216 26372 104555 4 NowA6KW8osFIQ5sivNVShA==	Hpi7dZJpLWPygcu9U0fwxplapPQ=
	/usr/bin/atq 0 0 32216 26372 104555 4 NowA6KW8osFIQ5sivNVShA==	Hpi7dZJpLWPygcu9U0fwxplapPQ=
	/usr/bin/atrm 0 0 32216 26372 104555 4 NowA6KW8osFIQ5sivNVShA==	Hpi7dZJpLWPygcu9U0fwxplapPQ=