| Home Profil Fun |
#33 Linux 03.06.2007
SNORT durch Ansprechen einzelner Regeln testen
* Videotutorial (englisch)Nach der erfolgreichen Installation von SNORT sollte man einige präparierte TCP/IP-Pakete an dieses System senden, um sicherzustellen, dass SNORT einen Alarm auslöst. Man kann das Programm hping3 verwenden, um solche Pakete zu erstellen und an den Server abzuschicken wo SNORT läuft. Jedes Paket muss exakt auf eine Regel zugeschnitten sein und so einen entsprechenden Alaram auslösen. Dieser Artikel beschreibt einen einfachen Test für eine SNORT-Regel. Das Ziel ist sicherzustellen, dass SNORT grundsätzlich richtig arbeitet. Zuerst schauen wir uns die Konfigurationsdatei von SNORT an. vi /etc/snort/snort.conf Am bequemsten ist es natürlich die SNORT-Installation vom eigenen LAN aus zu testen. Damit dies funktioniert müssen zwei Variablen zu Testzwecken auf "any" gesetzt werden, falls sie es nicht schon sind. Sonst würden bei manchen Regeln keine Alarme ausgelöst werden, da die Pakete von außerhalb des LANs erwartet werden. Für den späteren Einsatz ist das natürlich so gewünscht. Jede SNORT-Regel hat individuelle Einstellungen für das Quell- und Zielnetzwerk der beschriebenen Pakete. var HOME_NET any var EXTERNAL_NET any Wie man am Ende der Datei /etc/snort/snort.conf sehen kann sind einige Regelsätze standardmäßig auskommentiert. Dies trifft zum Beispiel auf die Shellcode-Regeln zu. In diesem Test möchte ich jedoch eine Regel aus diesem Bereich verwenden. Also wird die entsprechende Zeile einfach einkommentiert: include $RULE_PATH/shellcode.rules Schließlich starten wir SNORT mit der Testkonfiguration als Dämon und lassen ihn nach /var/log/snorttest loggen. snort -c /etc/snort/snorttest.conf -l /var/log/snorttest -g snort -D tail -f /var/log/snorttest/alert Auf dem "angreifenden" Host wird nun hping3 benutzt um die gewünschten Pakete zu erzeugen. Vorher jedoch kann man kurz einen Portscan anstoßen, welcher SNORT auf jeden Fall aufwecken sollte. Ein nmap Portscan wird schon vom Präprozessor sfPortscan erkannt. Präprozessoren analysieren oder bereiten die Daten auf bevor sie zur detection engine weitergeleitet werden. nmap 192.168.1.37 Mit "tail -f /var/log/snorttest/alert" ist die Reaktion von SNORT zu sehen. Der Portscan wurde erkannt und ein entsprechender Logeintrag erzeugt. [**] [122:1:0] (portscan) TCP Portscan [**] [Priority: 3] 01/30-12:04:19.987193 192.168.1.34 -> 192.168.1.37 PROTO:255 TTL:0 TOS:0x0 ID:15626 IpLen:20 DgmLen:162 Als nächstes testen wir eine Regel aus der Datei shellcode.rules: alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"SHELLCODE x86 NOOP"; content:"AAAAAAAAAAAAAAAAAAAAAAAAA"; classtype:shellcode-detect; sid:1394; rev:8;) Diese Regel löst einen Alert aus für IP-Pakete die vom Netz $EXTERNAL_NET mit beliebigem Port ins $HOME_NET auch mit beliebigem Port gesendet werden. Weiterhin müssen diese Pakete den Inhalt "AAAAAAAAAAAAAAAAAAAAAAAAA" haben. Auf dem angreifenden System erzeugen wir ein solches Paket zuerst, indem wir den gewünschten String in eine Textdatei schreiben vi payload.txt AAAAAAAAAAAAAAAAAAAAAAAAA Dann erzeugen wir das Paket mit nachfolgenden Eigenschaften und schicken es an die IP 192.168.1.37: PUSH tcp flag setzen, Netzwerkinterface eth0, Quellport 2424, Zielport 81, Größe body 26 und Paketdaten aus der Datei payload.txt. hping3 -P -i eth0 -s 3434 -p 81 -d 26 -E ./payload.txt 192.168.1.37 Auf dem SNORT-Host erscheint dann in /var/log/snorttest/alert folgende Meldung und zeigt, dass SNORT das Paket mit Hilfe der ausgewählten Regel(sid 1394) erkannt hat und einen Alert erzeugt hat: [**] [1:1394:8] SHELLCODE x86 NOOP [**] [Classification: Executable code was detected] [Priority: 1] 01/30-12:58:06.080786 192.168.1.34:3424 -> 192.168.1.37:81 TCP TTL:64 TOS:0x0 ID:10170 IpLen:20 DgmLen:66 ****P*** Seq: 0x55AD333C Ack: 0x39FD9F2B Win: 0x200 TcpLen: 20 Härtung von Apache-Webservern IDS/IPS-Systeme mit Snort Anleitung zum Bau eines IPS mit Snort und Iptables |