Intrusion Detection am Beispiel von Snort (Teil 3)
6.2.3 Variablen
Snort erlaubt die Benutzung von Variablen zur bequemeren Wartung der rule-Files. var MYVAR myval
deklariert die Variable MYVAR
und initialisiert sie mit dem Wert myval
. Dereferenziert werden Variablen nach alter Shellmanier mit dem $
-Operator, zusätzlich steht hier auch noch der !
-Negationsoperator zur Verfügung. Die Deklaration von Meta-Variablen ist ebenfalls mäglich zu kontrollieren, so initialisiert $(MYVAR:-defaultval)
die Variable MYVAR
mit dem Wert defaultval
, falls MYVAR
bis dahin noch nicht gesetzt ist. $(MYVAR:?message)
gibt den Wert von MYVAR
zurück oder beendet Snort mit der Fehlermeldung message, je nachdem, ob MYVAR
gesetzt ist oder nicht.
6.2.4 Die Kommandozeilenoptionen
Die diversen Kommandozeilenoptionen von Snort erleichtern das »Debugging« der Rules in der Anfangsphase, später kännen die diversen Optionen ein wenig zur Sicherheit des System beitragen, so dass Snort ungestärt seine Arbeit verrichten kann.
Zu Begin empfiehlt es sich, Snort mit -i
das Interface mitzuteilen, auf welchem es die Pakete aus dem Netz beziehen soll. -v
läßt Snort etwas gesprächiger werden und mit -c
wird Snort die Konfigurationsdatei angegeben, in der es die rules vorfindet. Zum Interface sei noch angemerkt, dass Snort auf einem Host laufen sollte, dessen Interfaces keine IP-Adresse zugewiesen wurden, um zwar den Empfang der Pakete zu gewährleisten, aber den Host keinen direkt an ihn adressierten Paketen auszusetzen.
Um immer auf dem neuesten Stand der Dinge zu sein, zumindest was die Signaturen betrifft, ist es ratsam, sich täglich die Datei vision.conf von White Hats 22 zu besorgen. Diese läßt sich mit wenigen Handgriffen an das eigene Netzwerk anpassen. Dazu bedarf es dreier Konfigurationsdateien, der vision.conf, einer Datei für die lokalen Anpassungen local.conf und einer Hauptkonfigurationsdatei snort.conf. In der local.conf werden die Regeln mit einem pass versehen und eingetragen, die nicht im lokalen Netzwerk eingehalten werden sollen. In der snort.conf wird die local.conf vor der vision.conf mittels dem include-Statement geladen, und die Reihenfolge der Regelabarbeitung mit der Kommandozeilenoption -o
auf pass, alert, log gesetzt. Das include
-Statement funktioniert ähnlich dem aus C bekannten include
, es fügt den Inhalt der include-Datei in die aktuelle ein. So lassen sich eigene Bibliotheken von Signaturen erstellen, die dann entsprechend von der Hauptkonfigurationsdatei eingebunden werden.
Um Snort nun im tagtäglichen Betrieb laufen zu lassen, ist es ratsam, sich ein kleines Skript23 zu schreiben, welches Snort mit den entsprechenden Optionen aufruft.
snort -D -o -i eth0 -l /var/log/snort -c /etc/snort/snort.conf
startet Snort als Daemon im Hintergrund, der auf dem Interface eth0 »snifft«, seine Logdateien unter /var/log/snort ablegt und die Konfiguration aus /etc/snort/snort.conf liest. Die Optionen -u 505 -g 505 -t directory
lassen den Snort-Prozess mit der Benutzer- und Gruppenkennung 505 in einer change root-Umgebung in directory laufen. Was die Zugriffsrechte des Prozesses angeht, sollte dies eine ausreichende Sicherheit sicherstellen.
Referenzen
- [12]
- Martin Roesch: Writing Snort Rules, http://www.snort.org/writing_snort_rules.htm
- [22]
- W. Richard Stevens: TCP/IP Illustrated Vol. 1: The Protocols, Addison Wesley 1994
Fußnoten
18eine passendere Übersetzung des englischen malicious ließ sich nicht finden
19Daher leitet sich auch die Bezeichnung regelbasiertes IDS ab.
20Classless Internet Domain Routing
21Filenameangaben sind hier meist relativ zum Snort-Logverzeichnis angegeben
23ähnlich einem rc-script