Intrusion-Detection und -Prevention mit Snort

Workshop: Snort konfigurieren und IDS-Regeln erstellen

17.09.2009 von Marco Rogge
Die wichtigste Aufgabe beim Betrieb eines Intrusion-Detection-Systems ist die Pflege der Erkennungsregeln. Unser Workshop zeigt, wie Sie diese Regeln an Ihre Bedürfnisse anpassen und eigene Signaturen für Angriffe erstellen.

Der erste Teil der Mini-Serie hat eine grundlegende Einführung in das Thema Intrusion-Detection-Systeme (IDS) gegeben und gezeigt, was sie können – und was nicht. Dort wurden für das wohl bekannteste Open Source IDS Snort die ersten Schritte wie Installation und erste Konfiguration vorgestellt. In diesem Artikel nun geht es um die erweiterte Konfiguration, mit der man Snort effektiv an die jeweiligen Bedürfnisse anpasst.

Snort kann nur mit einer individuellen Konfiguration seine volle Wirkung entfalten. Die hier beschriebenen Installationshinweise und die Konfigurationen stellen somit eher generelle Empfehlungen dar.

Nachdem eine erste Installation durchgeführt wurde, sollte man eine sogenannte reconfiguration durchführen und dabei die wichtigen Einstellungen im Terminal anpassen. Folgende Bilder zeigen die dafür notwendigen Schritte:

Bildergalerie: Snort konfigurieren
1. Schritt
Festlegen, wie Snort starten soll.
2. Schritt
An welcher Netzwerkschnittstelle soll Snort arbeiten. Meistens handelt es sich hier um eth0.
3. Schritt
Netzwerk von Snort einstellen, in dem Snort arbeiten soll. Hier sind mehrere Einträge möglich und durch Komma zu trennen.
4. Schritt
Ein- oder ausschalten, ob Snort im Promiscuous Modus arbeiten soll. Mehr dazu im ersten Teil dieser Workshop-Serie.
5. Schritt
Festlegen der Reihenfolge der Aktionen, die Snort ausführen soll.
6. Schritt
E-Mail Benachrichtigung einstellen. Snort kann eine Zusammenfassung an einen System-User senden.
7. Schritt
E-Mail-Adresse angeben.

Rule Header und Rule Options

Snort ist ein IDS, das fast ausschließlich auf Regeln basierend arbeitet. Bereits mit der ersten Installation werden zahlreiche Regeln mitgeliefert. Was aber besagen diese und wie passt man sie an?

Zunächst einmal ist es wichtig, dass die Rules in einer Zeile geschrieben stehen müssen, um von Snort als Rules erkannt zu werden. Man unterscheidet bei den Regeln zwischen zwei Teilen, einem allgemein gehaltenen „Rule Header“ und einer genaueren Spezifikation durch „Rule Options“. Im Header findet Snort die IP- und Port-Angaben von Netzwerkpaketen, die das IDS näher untersuchen soll. Zudem definiert man hier, was Snort als erste Reaktion durchführen soll, sofern eine Signatur erkannt wurde. Allgemein sieht der Header folgendermaßen aus:

action protocol source_ip_address port direction destination_ip_address port

Für action bieten sich folgende Reaktionen an: alert (alarmieren), pass (ignorieren) oder log (protokollieren). Anschließend ist definiert, welches Protokoll das zu untersuchende Paket verwendet. Normalerweise handelt es sich hierbei um TCP, UDP oder ICMP Traffic. Danach werden die IP Adressen, die Ports und die Richtung des Pakets angegeben, auf das Snort reagieren soll.

Konkret bedeutet dies etwa für eine Alarmmeldung bei Angriffen der Backdoor Trinity, die ihre Daten auf Port 33270 sendet:

alert tcp $EXTERNAL_NET any -> $HOME_NET 33270

Trifft die Grobklassifikation über den Rule Header zu, definieren die Rule Options weitere Details der Signatur und der eventuell auszulösenden Aktion. Die Rule Options werden durch einfache Klammern vom Rule Header getrennt. Schlüsselwort und die durch einen Doppelpunkt getrennten Werte bilden die einzelne Option, mehrere Options werden durch einen Strichpunkt voneinander getrennt:

(Keyword1 : value1 ; Keyword2 : value 2; …)

Im Detail sieht das dann etwa so aus:

(msg:"BACKDOOR trinity connection attempt"; flow:to_server,established; content:"!@|23|"; depth:3; reference:cve,2000-0138; reference:nessus,10501; classtype:attempted-admin; sid:1843; rev:6;)

Die Options sind sehr vielfältig und in der Dokumentation von Snort eingehend erklärt. Im Beispiel ist als Erstes die Option msg zu sehen. Sie definiert in ihrem Value-Teil die Meldung, die in das Logfile geschrieben wird. Das Keyword flow definiert im Beispiel, dass das Paket über eine bereits aufgebaute Verbindung zu einem Server unterwegs ist. Die Option depth stellt eine Besonderheit dar: Sie ist ein Modifier für das vorangegangene content-Keyword. depth weist hier Snort an, nur die ersten drei Bytes des Pakets zu inspizieren. Über reference können weitere Informationen externer Quellen in das Logfile eingebunden werden. So wird im Beispiel oben ein Link zu nessus.org in das Log eingebunden, der auf ein Dokument mit der ID 10501 verweist.

Rules: Einblick in die Snort Rules DoS von der Community.

Output-Module

Oft besteht der Wunsch, dass Snort nach dem Erkennen eines Angriffs auf eine komplexe Weise reagiert und etliche Aktionen durchführt. Dazu bieten sich sogenannte Output-Module an, mit denen man individuelle Meldungen und Reaktionen definieren kann. Dazu ein Beispiel:

ruletype ActionServerList
{
type alert
output alert_smb: server-intern.list
output log_tcpdump: user-action.log
}

Das Beispiel definiert eine Aktion vom Typ „alert“ mit dem Namen „ActionServerList“. Die Warnmeldung wird durch das Output-Modul an eine in der Datei „server-intern.list“ angegebene Gruppe an Rechnern geschickt. Zudem schreibt Snort die Meldung im tcpdump-Format auch noch in die Logdatei „user-action.log“.

Snort starten

Die wesentlichen Möglichkeiten, Snort individuell zu konfigurieren, sind nun beschrieben. Jetzt muss noch Snort mit den richtigen Paramtern gestarte und überwacht werden. Dazu dient ein kleines Skript, das Snort mit den notwendigen Parametern versorgt. Beispielsweise kann man Snort wie folgt starten:

snort -D -o -i eth0 -l /var/log/snort -c /etc/snort/snort.conf

Die Optionen haben dabei folgende Funktion:

Snort startet nun als Daemon mit entsprechender Regelreihenfolge, lauscht im Sniffermodus auf der Netzwerkschnittstelle eth0, schreibt die Logfiles in /var/log/snort und bezieht die Konfiguration aus /etc/snort/snort.conf. Hiermit sind die Grundlagen zum Einsatz von Snort gelegt, und das IDS verrichtet seine Arbeit.

Check: Ob Snort aktiviert ist, überprüft man mit htop.

Zusatz-Tools

Um das Arbeiten mit Snort zu vereinfachen, gibt es diverse Zusatzsoftware. Einige Programme werten die Logdateien aus und stellen die Meldungen übersichtlich dar. Andere erlauben das Management der Regeln. Zu den beliebtesten Analyse-Tools zählt ACID (Analyse Console for Intrusion Database). Die PHP-basierte Analysesoftware bietet einfache und interaktive Funktionen zur Filterung der Daten und erlaubt auch die grafische Darstellung der Ergebnisse.

oinkmaster dient zur Verwaltung der Regeln. Inzwischen gibt es für oinkmaster ebenfalls eine grafische Oberfläche, mit der viele Aktionen auch per Mausklick erledigt werden können.

Je umfangreicher ein Netzwerk ist, desto komplexer werden normalerweise die Regeln und desto größer wird der Aufwand, diese zu verwalten. Der praktische Einsatz von Snort macht daher vor allem in kleinen bis mittleren Netzwerken Sinn. In großen Netzwerken steigt die Anzahl der Warnmeldungen oft so stark an, dass eine Auswertung nur noch mit hohem Zeitaufwand zu bewerkstelligen ist.

Kritisch wird in großen Netzwerken zudem die Analyse des kompletten Netzwerkverkehrs. Will man ein Netzwerk mit 1Gbit/s überwachen, sind spezielle Netzwerkkarten sinnvoll. Diese werden von einem eigenen Prozessor unterstützt, der einen Großteil der Regeln bereits intern verarbeitet. Diverse Anbieter haben sich darauf spezialisiert und bieten entsprechende Hardware für große Netzwerke an.

Fazit

Für den Start mit Snort reichen die Regeln, die standardmäßig mitgeliefert werden, zunächst vollkommen aus. Snort bietet viele Möglichkeiten, das eigene Netzwerk zu beobachten. Einige konnten hier aufgezeigt werden, andere ergeben sich aus dem laufenden Betrieb und der eigenen Erfahrung im Umgang mit dem IDS Snort. (ala)