Installation und Erstkonfiguration

Workshop: Intrusion Detection und Intrusion Prevention mit Snort

11.09.2009 von Marco Rogge
Für die interne Sicherheit eines Netzwerks und die Analyse von Angriffen ist ein Intrusion-Detection-System (IDS) respektive ein Intrusion Prevention System (IPS) unverzichtbar. Was eine Firewall oder ein Anti-Virus-Programm nicht erkennt, ein IDS schlägt Alarm.

Eine der wohl bekanntesten IDS-Anwendungen ist das Open-Source-Tool Snort, das unter der Lizenz GNU GPL gestellt wurde. (Da die Grenzen zwischen einem IDS und einem IPS fließend sind, sprechen wir im weiteren Verlauf nur noch von IDS.) Dieser mehrteilige Workshop soll Ihnen dabei helfen, Snort besser zu verstehen und optimal zu konfigurieren. Bevor Sie allerdings ein IDS in Ihrem Netzwerk installieren, müssen Sie die Grundlagen kennen und Ihre Bedürfnisse analysieren. Damit beschäftigt sich der erste Teil unserer Artikelserie zu Snort. In weiteren Schritten beschäftigen wir uns dann mit den Themen Installation, Erstkonfiguration und Optimierung der Regeln sowie abschließend mit der Analyse der Meldungen.

Aufgaben eines IDS

Intrusion-Detection-Systeme sind inzwischen in vielen Netzwerken Standard. Sie können Angriffe im Regelfall bereits dann erkennen, wenn versucht wird, auf ein Netzwerk unautorisiert Zugriff zu bekommen. Ein IDS kann aber weitaus mehr: Es kann unter anderem den ordnungsgemäßem Login und Logout sowie die Zugriffe auf Dateien und Verzeichnisse innerhalb eines Netzwerks überwachen. Bei einem IDS unterscheidet man daher oft zwischen den host-basierten (HIDS) und den netzwerkbasierten (NIDS) Systemen.

Die Hauptaufgabe von Intrusion-Detection-Systemen besteht darin, Netzwerke zu analysieren und zu überwachen. Erkennen sie Anomalien im Datenverkehr, geben sie eine Warnung aus. Auf die dafür zuständigen Regeln gehen wir etwas später ein. Man unterscheidet dabei zwischen System-Ereignissen und User-Ereignissen. Dabei wird protokolliert und analysiert, was in einem System passiert oder welche Fehler User an einem Host oder in einem Netzwerk produzieren.

Grundsätzlich sollte ein IDS als zusätzliche Sicherheitsmaßnahme in ein bestehendes Netzwerk integriert werden. Häufig wird es eingesetzt, weil kein Vertrauen in die bestehenden Sicherheitsmaßnahmen vorhanden ist; so kann etwa eine Firewall durch eine Tunnelung über den stets offenen Port 80 unterlaufen werden. Des Weiteren kommen Intrusion-Detection-Systeme zum Einsatz, wenn sehr sensible Daten verarbeitet werden; der Zugriff darauf muss dann sehr restriktiv sein und engmaschig überwacht werden. Der Schutz vor Datenabfluss steht hier oft im Vordergrund, da Spionage heutzutage an der Tagesordnung ist.

Vor- und Nachteile eines IDS

Die Chance, einem Angreifer, gleich welcher Art, auf die Spur zu kommen, ist mit einem IDS deutlich größer. Nehmen wir „GhostNet“: Es ist ein Beispiel dafür, dass Spionagesoftware über einen langen Zeitraum unerkannt in Computern arbeiten konnte. Dass hier sogar Botschaften betroffen waren, zeigt, wie brisant das Thema ist und dass es ernst genommen werden sollte.

Da das IDS Verstöße im Netzwerk oder auf einem Host registriert, kann man es als Beweissicherung nutzen. Nach einem Alert ist meist ein Rückverfolgen des Vorgangs möglich. Aber ein IDS ist nicht frei von Fehlern. Beispielsweise kann es Fehlermeldungen produzieren, die zu einem Verlust der Produktivität führen, etwa wenn es einen Angriff oder Verstoß meldet, der sich im Nachhinein als falsch herausstellt. Diese Art von Fehlern bezeichnet man als False Positives. Lockert man die Regeln, wächst umgekehrt die Gefahr eines False Negatives: Ein tatsächlicher Angriff wird nicht als solcher bewertet und deshalb übersehen. False Negatives sind als die größere Gefahr zu sehen, da der Administrator einen Angriff nicht abwehrt, weil er ihn gar nicht erkennt.

Eine weitere Gefahr besteht in Angriffen auf Snort selbst. Immer wieder tauchen Meldungen zu Attacken auf, bei denen etwa die Logfiles von Snort kompromittiert werden könnten oder Snort durch einen Überlauf außer Gefecht gesetzt wird. Daher ist es ratsam, regelmäßig die Sicherheitswarnungen und Updates auf der Snort-Website zu beachten.

Pflege und Wartung

Wer sich entscheidet, ein IDS einzusetzen, sollte sich tunlichst darüber im Klaren sein, dass er Zeit in die Pflege der Regeln und in Updates investieren muss. Bei Snort sorgt eine große Community dafür, dass neue Angriffe schnell den Weg in die Regeln finden und somit auch von Snort erkannt werden. Aber der administrative Aufwand für die Pflege der Regeln ist nicht zu unterschätzen. Auch das aufkommende Datenvolumen für die Logfiles und die Auswertung ist nicht gerade klein. Daher scheuen sich viele Administratoren, ein IDS einzusetzen.

Es gibt aber auch viele Vorteile, die für ein IDS sprechen. So kann der Entscheidungsweg bei einem Alarm deutlich verkürzt werden. Ist ein IDS mit einer verbindlichen Policy ausgestattet, kann man in einem Alarmfall handeln, ohne sich zusätzliche Genehmigungen vom Management einholen zu müssen. Die zu ergreifenden Maßnahmen sind bereits bei der Einführung beschlossen worden, und es geht keine wertvolle Zeit verloren. Im Vorfeld muss allerdings sichergestellt sein, dass eine eindeutige Identifikation zwischen einem Angriff und einer normalen Aktivität gegeben ist.

Für den Einsatz eines Intrusion-Detection-Systems spricht zudem, dass es über Möglichkeiten verfügt, aktiv den Netzwerkverkehr zu unterbrechen. Wie sinnvoll das ist, muss jeder Administrator mit der Geschäftsleitung absprechen, da hier kaufmännische Überlegungen eine Rolle spielen. Bei Snort besteht die Option, über das libnet-API auf einen Angriff zu antworten. Snort kann darüber beispielsweise bestehende TCP-Verbindungen unterbrechen, indem es RST- oder ICMP-Pakete versendet. Net-, Host- oder Port-unreachable wären dann potenzielle ICMP-Meldungen.

Snort installieren und konfigurieren

Snort ist wohl das bekannteste Intrusion-Detection- und Intrusion-Prevention-System auf Open-Source-Basis, das für unterschiedliche Betriebssysteme erhältlich ist. Ins Leben gerufen wurde Snort von Martin Roesch. Seit der Gründung ist es fast vier Millionen Mal heruntergeladen worden. Wir wollen uns im Folgenden auf den häufigsten Einsatz konzentrieren: Snort im Zusammenspiel mit Linux.

Im Terminal-Fenster: der Startscreen von Snort

Im Bereich Open Source hat man den Vorteil, das die erste Investition deutlich niedriger ausfällt als bei einer fertigen Appliance. Bei der Hardware genügt zunächst ein handelsüblicher PC. Wer Wert auf einen zuverlässigen Betrieb legt, sollte aber besser zu einem kleinen Server greifen. Selbst dann sind die Kosten deutlich niedriger als bei einer fertigen Hardwarelösung. Zwar gibt es ausreichend Hersteller, die Snort in einer Appliance verbauen und diese dann anbieten. Im Workshop konzentrieren wir uns jedoch auf die reine Softwarelösung, deren Installation und Wartung sowie die Pflege der Regeln.

Snort kann von der Homepage geladen werden, um es dann auf einer Maschine zu installieren. Die aktuellste Version bekommt man immer direkt vom Anbieter der Software, wenngleich viele Linux-Distributionen fertige Pakete bereitstellen. So ist im Server-Bereich Debian GNU/Linux stark vertreten. Die Paketverwaltung apt bietet meist sehr zeitnah das aktuelle Paket von Snort an. Damit werden zugleich alle Abhängigkeiten mit aufgelöst und zusätzlich notwendige Pakete mit installiert.

Installation mit dem Paketmanager

Die Softwarepakete sind auch in den Paketquellen von RedHat, Fedora, Suse Linux, Mandriva oder Ubuntu enthalten und können bequem über die entsprechende Paketverwaltung installiert werden. Zum Beispiel installiert man Snort unter Debian und Ubuntu Linux direkt über die Paketverwaltung mittels apt-get install snort. Dabei sind root-Rechte erforderlich. Diese erhält man, indem man im Terminal mit „sudo apt-get install snort“ agiert. Alternativ verschafft man sich mit su - root-Rechte und installiert Snort dann. Alle nötigen Pakete werden dann mit ihren Abhängigkeiten aufgelöst und mitinstalliert. Da Snort als IDS sehr weit verbreitet ist, sollte es über jede Distribution aus den entsprechenden Paketquellen installierbar sein. Dies gilt für Pakete über apt in Form von *.deb-Paketen oder über RPM dann als *.rpm-Pakete.

Debian: aktuelle Snort-Pakete im experimentellen Zweig von Debian

Zunächst zur direkten Installation für den Fall, dass man sich das Paket von der Website des Snort-Projektes als Tarball (tar.gz) heruntergeladen hat. Auf der Download-Seite (http://www.snort.org/downloads) findet man Pakete, die erforderlich sind, um Snort als Intrusion-Detection- und Intrusion-Prevention-System zum Laufen zu bringen. Der direkte Download bietet derzeit die Version 2.8.4.x. Zum Vergleich: Über die Ubuntu-Paketverwaltung ist erst die Version 2.7.0 erhältlich (sudo apt-cache search snort).

Nach dem Download wechselt man im Terminal in das Verzeichnis, in dem das Tarball abgelegt wurde, und kann mit der Installation beginnen. Die Tarball-Datei entpackt man mit dem Befehl tar -xzvf snort-2.8.4.1.tar.gz. Der Dateiname kann je nach Version natürlich abweichend sein und ist, wie bei Linux üblich, case-sensitive.

Ausgabe von ls -la: Die Installationsdateien liegen im Verzeichnis /artikel/tecchannel/snort-2.8.4.1.

Manuelle Installation

Anschließend installieren Sie als „root“-User Snort durch einen Aufruf von ./configure aus dem Verzeichnis mit den entpackten Dateien heraus. Dann führen Sie make aus, um dann die Installation mit make install abzuschließen.

Sofern die Installation erfolgreich war, wechseln Sie in das Verzeichnis ./etc/snort/, um mit vi /etc/snort/snort.conf einen Blick in die jetzt installierte Default-Konfiguration zu werfen. Diese Datei regelt im Wesentlichen die Arbeit und Funktion von Snort. Da es sich hierbei um Systemdateien handelt, können Änderungen der Konfiguration auch nur als „root“ vorgenommen werden.

vi /etc/snort/snort.conf: Der Editor gibt einen Einblick in die Konfigurationsdatei.

Man kann natürlich auch einen grafischen Editor bemühen, um einen Einblick in snort.conf zu bekommen, beispielsweise unter Ubuntu Linux mit sudo gedit /etc/snort/snort.conf im Terminal unter Gnome mit dem Editor gedit.

Grafisch: Einblick in die Konfiguration mittels Gnome Editor gedit

Nun ist die grundlegende Installation von Snort, dem Intrusion-Detection-System auf Open-Source-Basis, durchgeführt. Jetzt kann man beginnen, entsprechende Preprocessoren und Sensoren zu konfigurieren, um Snort effektiv arbeiten zu lassen.

Konfiguration und Regeln von Snort

Betrachten Sie nun die Konfiguration von Snort etwas genauer, um sich mit der Arbeitsweise vertraut zu werden. Wie auch in Shell Skripten ist es hier üblich, Zeilen mittels Raute „#“ zu kommentieren oder auszukommentieren. Variablen, die zu verarbeiten sind, werden mit einem „$“ gekennzeichnet (Beispiel: $HOME_NET). Zunächst einmal ist es wichtig, Snort das eigene, vertrauenswürdige Netz mitzuteilen. In der snort.conf, wo HOME_NET steht, sollte dann das eigene Netzwerk zunächst eingetragen werden. Weitere Variablen und Decoder sind in der snort.conf zu sehen, die konfiguriert werden müssen. Die folgende Auflistung zeigt, welche Parameter, Decoder und Variablen vorgefunden werden und welche Bedeutung sie haben.

Preproccessors

Sicherheitshinweis
Grundsätzlich kann Snort nur mit einer individuellen Konfiguration seine volle Wirkung entfalten. Folglich sind die hier genannten Installationshinweise und Konfigurationen lediglich praxisnahe Empfehlungen. Auch die entsprechenden Handlungsweisen unterliegen immer einer individuellen Policy, die im Unternehmen eingeführt und gelebt werden sollte. Das gilt für alle Systeme, die für die Sicherheit in der IT verantwortlich sind.

Im nächsten Schritt betrachten wir die Preprocessoren von Snort, die ebenfalls in der snort.conf editiert werden können. Entsprechende, jeweils für das Netzwerk spezifizierte Optionen sollten gut überlegt sein. Preprocessoren sind Extensions, also Erweiterungen von Snort, die dazu dienen, zusätzliche Module einzubinden und Snort leistungsfähiger zu machen.

Ein Intrusion-Detection-System dient dazu, Angriffe frühzeitig zu erkennen. So hat man die Möglichkeit, als Preprocessor zu definieren, wie viele TCP- oder UDP-Ports eine Quelle innerhalb einer definierten Zeit anfragen muss, um als Portscan deklariert zu werden. Damit kann sichergestellt werden, dass ein gezielter Portscan innerhalb eines Netzwerkes oder von außen rechtzeitig erkannt wird.

Wichtig für Administratoren: Man muss die genauen Ports der Applikationen kennen, die sich innerhalb des Netzwerkes befinden. Andernfalls kann es zu Ausfällen kommen, wenn Snort fälschlicherweise von einem Angriff ausgeht und Gegenmaßnahmen ergreift.

Portscanns

Häufige Scanmuster etwa von nmap wie X-Mas-, NULL-, FIN- und Stealth-Scan werden von Snort erkannt; sie können auf einen bevorstehenden Angriff hindeuten. Sofern kein Scan für einen Penetration-Test angeordnet wurde, sollte der Administrator hier wachsam sein. Ereignisse und Meldungen dieser Art stehen im Alert-Bericht, und der Administrator wird informiert.

Ein möglicher Preprocessor ist folgendermaßen aufgebaut:
preprocessor portscan: <Netzwerk> <Anzahl der Ports> <Zeitlimit> <Logdatei>.
Ein Beispiel könnte so aussehen:
preprocessor portscan: 192.168.5.100/24 3 15 /var/log/snort/portscan

Ein Angreifer kann demnach im Netzwerk 192.168.5.100 maximal drei Ports innerhalb von 15 Sekunden scannen, bevor dies als Portscan gewertet wird. Doch Vorsicht: Einige Portscanner wie etwa nmap scannen sehr langsam mit der Folge, dass die Angriffe nicht erkannt werden.

Da es ratsam ist, gelegentlich die Sicherheit des Netzwerkes selbst zu überprüfen, empfiehlt es sich, die eigenen Hosts auszutragen, die einen Scan durchzuführen dürfen. Dies erreicht man mit der Option preprocessor portscan-ignorehosts: 192.168.5.25 für die angegebene IP-Adresse.

Weitere Preprocessors

Es gibt sehr viele Preprocessoren, etwa für arpspoof oder smtp. Je nach Einsatzgebiet sind diese mehr oder weniger sinnvoll. Die passenden auszuwählen ist Aufgabe des Administrators. Die Möglichkeiten sind mehr als vielfältig, da für jedes Protokoll und jeden Dienst ein Preprocessor angelegt und aktiviert werden kann. Dazu muss mit der korrekten IP-Adresse des Dienstanbieters (z.B. interner Mail-Server, 192.168.5.110) gearbeitet werden.

Ein wenig veraltet ist der Preprocessor bo, der allerdings nach wie vor aktiviert werden kann. Er zielt auf den bekannten Trojaner Back Orifice ab und unterscheidet dabei zwischen Traffic, Client, Server und Angriffsversuchen auf Snort selbst.

# The Back Orifice detector uses Generator ID 105 and uses the
# following SIDS for that GID:
# SID Event description
# ----- -------------------
# 1 Back Orifice traffic detected
# 2 Back Orifice Client Traffic Detected
# 3 Back Orifice Server Traffic Detected
# 4 Back Orifice Snort Buffer Attack

preprocessor bo

Im Beispiel ist der Preprocessor bo in Snort aktiviert. In den Logfiles tauchen daher Meldungen auf, sofern Back Orifice Pakete im Netzwerk verschickt. Zum Deaktivieren dieses Preprocessor fügt man eine # ein und kommentiert die Zeile #preprocessor bo somit aus.

Fazit

Die grundlegenden ersten Konfigurationsschritte von Snort sind nun vollzogen. Bisher stand die Arbeit mit Snort und dem Terminal im Mittelpunkt, doch es gibt noch weit mehr Möglichkeiten, Snort auszureizen und zu erweitern. Im nächsten Teil erfahren Sie, wie Sie mit den Regeln von Snort arbeiten und wie diese zu interpretieren sind. (ala)