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 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.
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.
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.
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
.
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.
-
"disable_decode_alerts": Alarmmeldungen werden nicht ausgegeben; Meldungen des Decoders sind abgestellt.
-
"disable_tcpopt_experimental_alerts": Experimentelle Optionen von TCP-Paketen werden nicht als Warnung und Alarm ausgegeben.
-
"disable_tcpopt_obsolete_alerts": Bei veralteten Optionen werden hier keine Warnungen ausgegeben.
-
"disable_tcpopt_ttcp_alerts": Beim Eintreffen von TCP-Paketen wird eine Warnung ausgegeben.
-
"disable_tcpopt_alerts": Warnungen oder Alarme, die generell durch TCP-Optionen hervorgerufen werden, sind abgestellt.
-
"disable_ipopt_alerts": IP-Pakete, die eine Anomalie aufweisen, werden mit einer entsprechenden Warnung versehen.
-
"set_gid" oder "set_uid": Hier wird die entsprechenden Gruppen-ID oder die User-ID geändert, unter der Snort laufen soll.
-
"daemon": Snort wird in den Daemon-Modus versetzt und läuft dann als Hintergrundprozess.
-
"interface": Hier wird die Netzwerkschnittstelle festgelegt, auf der Snort arbeiten soll.
-
"logdir": Damit wird spezifiziert, welches Verzeichnis Snort verwenden soll, um die Logfiles von Meldungen und Warnungen zu speichern. Normalerweise werden Logfiles im Ordner "/var/log/snort" gespeichert. Achten Sie darauf, dass ausreichend Speicherplatz zur Verfügung steht, da die Logfiles sehr groß werden können.
-
"no_promisc": Mit dieser Option deaktiviert man den Promiscuous-Modus der Netzwerkschnittstelle. Dadurch werden nur noch Pakete ausgewertet, die an den PC selbst gerichtet sind. Dieser Modus ist in der Regel nicht von Bedeutung, ausgenommen beim Sniffing von WLANs; hier ist die Option weit verbreitet.
-
"chroot": chroot steht für change root und kann das root-Verzeichnis ändern, um etwas mehr Schutz für Snort zu bieten. Dabei ändern sich nur der aktuelle Prozess und die dazugehörigen Unterprozesse zu dem Zweck, diese in einer sichereren Umgebung ablaufen zu lassen. Im Fachjargon heißt das: Eine Software oder ein Programm befindet sich in einer Sandbox befindet und kann keinen Schaden anrichten.
-
"checksum_mode": Dieser Modus erlaubt es Snort, Prüfsummen von Netzwerkpaketen zu kontrollieren. Allerdings benötigt dieser Modus mehr Maschinen-Performance, weshalb Besitzer schwacher Geräte schlechte Karten haben. Wer mit einem IDS arbeiten will, sollte sich dafür einen leistungsstarken Rechner anschaffen.
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)