
Sniffles: Paketmitschnitt-Generator für IDS und Auswertung von regulären Ausdrücken
Sniffles ist ein Werkzeug zum Erstellen von Paketerfassungen, die IDS testen, die feste Muster oder reguläre Ausdrücke zur Erkennung verdächtigen Verhaltens verwenden. Sniffles funktioniert sehr einfach. Es nimmt eine Reihe von regulären Ausdrücken oder Regeln und wählt zufällig einen regulären Ausdruck oder eine Regel aus. Es generiert dann Inhalt basierend auf dieser Regel oder diesem regulären Ausdruck. Bei festen Zeichenfolgen bedeutet dies, die Zeichenfolge direkt zu den Daten hinzuzufügen (möglicherweise mit Offsets oder anderen Optionen gemäß Snort-Regeln). Bei regulären Ausdrücken ist der Prozess etwas komplexer. Der reguläre Ausdruck wird in einen NFA umgewandelt und ein zufälliger Pfad wird durch den NFA gewählt (vom Anfang bis zum Ende). Die resultierenden Daten werden mit dem regulären Ausdruck übereinstimmen. Schließlich kann Sniffles auf vollständige Übereinstimmung oder teilweise Übereinstimmung eingestellt werden. Bei vollständiger Übereinstimmung stimmen die Paketdaten mit mindestens einer Regel oder einem regulären Ausdruck überein (obwohl einige Snort-Optionen nicht vollständig berücksichtigt werden). Eine teilweise Übereinstimmung löscht das letzte Zeichen einer übereinstimmenden Zeichensequenz zu einer Sequenz, die nicht übereinstimmen sollte (kann jedoch mit einer anderen Regel übereinstimmen). Übereinstimmende Regeln sollten die größte Belastung für ein IDS verursachen. Somit ist es möglich zu bestimmen, wie gut das IDS den Worst-Case-Verkehr bewältigt. Teilweise übereinstimmender Verkehr verursacht fast so viel Belastung wie übereinstimmender Verkehr. Schließlich kann Sniffles auch Verkehr generieren, der vollständig zufällige Daten enthält. Solche zufälligen Daten bieten ein Best-Case-Szenario, da zufällige Daten sehr unwahrscheinlich mit irgendwelchen Regeln übereinstimmen. Daher können sie mit maximaler Geschwindigkeit verarbeitet werden. Somit ermöglicht Sniffles die Erstellung von Paketerfassungen für den Best- und Worst-Case-Betrieb von IDS-Tiefenpaketinspektion.
Zusätzlich zu Obigem hat Sniffles auch die Fähigkeit, Bewertungspaketerfassungen zu erstellen. Es gibt zwei Arten von Bewertungspaketerfassungen. Die erste Bewertungspaketerfassung erstellt genau ein Paket für jede Regel oder jeden regulären Ausdruck, nacheinander. Somit ist es möglich zu testen und zu sehen, dass jede Regel wie erwartet übereinstimmt. Die vollständige Bewertung geht einen Schritt weiter und erstellt ein Paket für jeden möglichen Zweig in einem regulären Ausdruck. Ein einzelner regulärer Ausdruck könnte Tausende möglicher Zweige haben. Dies testet, um sicherzustellen, dass alle möglichen Zweige eines regulären Ausdrucks ordnungsgemäß behandelt werden. Bewertungspaketerfassungen sollten mit allen Paketen übereinstimmen. Nicht übereinstimmende Pakete stellen höchstwahrscheinlich einen Fehler des IDS dar und erfordern weitere Untersuchungen. Natürlich besteht immer die Möglichkeit, dass Sniffles nicht das richtige Paket für ein bestimmtes IDS erstellt oder eine bestimmte Option für eine Regel nicht erkennt. Überprüfen Sie die unterstützten Regelfunktionen für weitere Informationen.
Schließlich kann Sniffles auch viel für die Generierung von zufälligem Netzwerkverkehr tun. Standardmäßig ist zufälliger Verkehr TCP, UDP oder ICMP und unidirektional. Es kann jedoch auch TCP-Verkehr mit ACKs, Handshakes und Teardowns für jeden Stream generieren. Es wird korrekte Sequenznummern und Prüfsummen generieren. Weiterhin können MAC-Adressen gemäß gewünschten Verteilungen festgelegt werden, und IP-Netzwerkadressen können durch Heim- und externe Adressräume definiert werden. Darüber hinaus ist es möglich, Scans innerhalb einer Verkehrserfassung zu simulieren.
ERFORDERT: Python 3.3+ und das SortedContainers-Modul
Sniffles besteht aus den folgenden Dateien:
Zur Installation:
python3.x setup.py install ein.Installationshinweise:
python3.x setup.py build, um lokal zu bauen, gehen Sie dann zum Bibliotheksverzeichnis, finden Sie die lib und verwenden Sie python3.4 -c "from sniffles import sniffles; sniffles.main()", um lokal auszuführen.Snort: Snort-Alarmregeln (Regel sollte mit der Alert- Direktive beginnen). Content-Tags werden erkannt und korrekt geparst. PCRE- Tags werden ebenfalls korrekt geparst. HTTP-Tags werden nacheinander verarbeitet, sodass sie möglicherweise nicht das gewünschte Paket erstellen. Content (und PCRE- oder HTTP-Content) kann durch distance, within und offset modifiziert werden. Eine Regel kann eine Flusskontroll- Option verwenden, obwohl nur die Richtung der Daten daraus abgeleitet wird. Die nocase-Option wird ignoriert und die dargestellte Groß-/Kleinschreibung wird verwendet. Alle anderen Optionen werden ignoriert. Die Header-Werte werden geparst und ein Paket wird erstellt, das diese Werte erfüllt. Wenn Heim- und externe Netzwerkadressräume verwendet werden, wird der korrekte Raum für die jeweiligen Variablen $HOME_NET und $EXTERNAL_NET verwendet. Beispiel:
alert tcp $EXTERNAL_NET any -> $HOME_NET 8080 (msg:"SERVER-APACHE Apache Tomcat UNIX platform directory traversal"; flow:to_server; content:"/..|5C|/"; content:"/..|5C|/"; http_raw_uri;
Reguläre Ausdrücke: Rohe reguläre Ausdrücke, 1 pro Zeile, geschrieben als entweder abc oder /abc/i. Unterstützt derzeit die Optionen i, s und m. Andere Optionen werden ignoriert. Beispiel:
/ab*c(d|e)f/i
Sniffles-Regelformat, unten beschrieben.
-a TCP Ack: Senden Sie eine TCP-Bestätigung für jedes gesendete Datenpaket. Standardmäßig ausgeschaltet. Bestätigungspakete haben standardmäßig keine Daten.
-b Bidirektionale Daten: Daten werden in beide Richtungen eines TCP-Streams generiert. ACKs werden eingeschaltet. Diese Funktion ist standardmäßig ausgeschaltet.
-B [Hintergrundverkehrsprotokoll:Prozentsatz]: Setzen Sie mindestens ein Protokoll mit einem Wert zwischen 1 und 100, um Hintergrundverkehr zu erzeugen. Dieser Wert repräsentiert den Prozentsatz der Gesamtverkehrsmenge. Verfügbare Protokolle: FTP, HTTP, IMAP, POP und SMTP. Beispiel: "http:20,ftp:30,smtp:10". Geben Sie nur eine Zahl als Argumentwert ein, um zufälligen Verkehr zu generieren. Beispiel: "80".