
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".
-c Count: Anzahl der zu erstellenden Streams. Jeder Stream enthält mindestens 1 Paket. Pakete werden zwischen zwei Endpunkten sein, wie durch die Regel definiert oder zufällig gewählt. tcp_handshake, tcp_teardown und packets_per_stream erhöhen die Anzahl der Pakete pro Stream. Derzeit fließen Daten in einem Stream nur in eine Richtung. Wenn die Option -b verwendet wird, sollten Daten in beide Richtungen fließen. Außerdem können Sniffles-Regeln Daten für beide Richtungen festlegen.
-C Gleichzeitige Flows: Anzahl der Flows, die zu einem Zeitpunkt geöffnet sein werden. Best-Effort, falls es weniger Flows gibt als die Anzahl der festgelegten gleichzeitigen Flows, werden alle aktuellen Flows verwendet. Wenn es beispielsweise nur 1000 Flows gibt, aber die Anzahl der gleichzeitigen Flows auf 10000 gesetzt ist, werden dennoch nur 1000 Flows zu diesem Zeitpunkt ausgegeben. Der Standardwert ist 1000. Bei Verwendung mit Dauer werden die -C Flows während der gesamten Dauer aufrechterhalten, was letztlich jede Eingabe von -c außer Kraft setzt. Beachten Sie, dass der Zweck darin besteht, eine vielfältige pcap zu erstellen, bei der Pakete desselben Flows verteilt sind und nicht direkt nebeneinander liegen, und um die Illusion vieler gleichzeitiger Flows zu erzeugen. In unseren Tests haben wir bis zu 2-3 Millionen gleichzeitige Flows erreicht, bevor der Speicher zum Problem wird. Außerdem sollten wir erwähnen, dass unterschiedliche Latenzen zwischen Streams dazu führen können, dass einige Flows früher enden als andere.
-d Rules Directory: Pfad zu einem Verzeichnis mit Regeldateien. Liest jede aktivierte Regel in allen Regeldateien im Verzeichnis. Geht davon aus, dass alle Regeln mit der Erweiterung .rules enden. Verwenden Sie diese Option oder -f, aber nicht beide. Das #-Symbol wird verwendet, um eine Regel zu deaktivieren (d. h. auszukommentieren).
-D Duration: Generierung basierend auf Dauer statt auf Anzahl. Die Dauer wird in Sekunden angegeben. Beachten Sie, dass die Standard- Latenz zwischen Paketen durchschnittlich 1-200 Mikrosekunden beträgt. Bei niedrigen Latenzen könnte eine große Dauer zu Millionen von Paketen führen, deren Erstellung lange dauern kann. Auch die Dauer ist Best-Effort. Im Wesentlichen werden nach Erreichen der Dauer keine neuen Streams mehr erstellt, es können jedoch Streams vorhanden sein, die noch nicht abgeschlossen sind. Diese werden weiterhin ausgegeben, sodass die tatsächliche Dauer länger sein kann als angegeben, aber nicht kürzer. Setzen Sie schließlich eine größere Latenz, wenn Sie wünschen, dass während der Generierung weniger Streams erstellt werden.
HINWEIS: Alle Beispiele gehen davon aus, dass Sie das Sniffles-Paket installiert haben.
Um eine pcap aus einer einzelnen Datei mit regulären Ausdrücken mit 10 Streams zu generieren, bei der jedes Paket mit einer Regel übereinstimmt
sniffles -c 10 -f myre.re -m
Um eine pcap aus einer einzelnen Snort-Regeldatei zu generieren, bei der jedes Paket fast mit einer Regel übereinstimmt
sniffles -c 10 -f myrules.rules
Um eine pcap aus mehreren Snort-Regeldateien in einem einzelnen Verzeichnis zu generieren, bei der jedes Paket mit einer Regel übereinstimmt.
sniffles -c 10 -d myrulesdir -m
Um die gleiche pcap wie oben zu generieren, unter Verwendung derselben Regeln, aber mit zufälligem Inhalt (Inhalt ist zufällig, Header folgen weiterhin den Regeln – funktioniert nicht mit Regex- oder Sniffles-Regeln):
sniffles -c 10 -d myrulesdir -r
Um eine pcap mit 10 Streams (je 1 Paket) und mit zufälligen Daten zu generieren:
sniffles -c 10
Um eine pcap mit 10 Streams zu generieren, bei der 50 % der Streams Hintergrundverkehr sind und die restlichen Streams Pakete enthalten, die mit einer Regel übereinstimmen:
sniffles -c 10 -B 50 myrules.rules
Um eine pcap mit 10 Streams zu generieren, jeder Stream mit 5 Paketen, mit ACKs und Handshake und Teardown sowie einer festen Länge von 50 für die Daten in jedem datentragenden Paket:
sniffles -c 10 -p 5 -l 50 -t -T -a
Um eine pcap mit 20 zufälligen Streams mit einem Heimnetzwerk von 192.168.1-2.x zu generieren:
sniffles -c 20 -h 192.168.1,192.168.2
Um eine pcap mit 20 zufälligen Streams mit einem Heimnetzwerk von 192.168.1.x für IPv4 und 2001:8888:8888 für IPv6 zu generieren, mit 50 % des Verkehrs IPv6:
sniffles -c 20 -h 192.168.1 -H 2001:8888:8888 -i 50
Um eine 5-Sekunden-Paketerfassung von zufälligen Paketen mit einer durchschnittlichen Verzögerung zwischen den Paketen von 100 Mikrosekunden zu generieren:
sniffles -D 5 -L 100
Um eine pcap zu generieren, die ein Paket erstellt, das nacheinander mit jeder Regel in einer Regeldatei (oder Regex-Datei) übereinstimmt:
sniffles -f myrules.rules -e
Um eine pcap zu generieren, die für jeden möglichen Zweig eines Regex für jedes Regex in einem Satz von Regex ein Paket erstellt und diese Datei dann in einer pcap namens everything.pcap speichert, wie unten. Diese Funktion kann jedoch in exponentieller Zeit laufen, wenn der Regex eine große Anzahl von Min-Max-Zählungen hat, sodass es lange dauern kann. Ferner werden alle anderen Optionen außer den beiden unten gezeigten ignoriert.
sniffles -f myrules.rules -o everything.pcap -E
Um zufälligen Verkehr mit einem Scan-Angriff zu generieren, der nach 2 Sekunden beginnt und 2 Sekunden dauert, mit 1000 Scan-Paketen pro Sekunde und mit der gesamten Erfassung einer Dauer von 5 Sekunden und einer Verzögerungszeit von 50 µs und mit Start-Port 80 (sequentielle Suche nach Ports ab 80):
sniffles -D 5 -O 2 -W 2 -I 1000 -L 50 -s 192.168.1.2 -P 80
Ähnlich wie oben, erstellt jedoch mehrere Scan-Angriffe, jeweils mit einer Dauer von 1 Sekunde und einem durchschnittlichen Offset zwischen den Angriffen von 2 Sekunden. Ferner werden nur die angegebenen Ports gescannt. Ziel-IP-Adressen werden zufällig im Bereich 192.168.1.0-255 ausgewählt.
sniffles -D 8 -O 2 -W 1 -I 10 -L 50 -s 192.168.1 -P 80,8080,8000,8001
Sniffles unterstützt mehrere Regelformate. Erstens kann Sniffles Snort-Regeln und reguläre Ausdrücke (einen pro Zeile) parsen. Darüber hinaus hat Sniffles auch ein eigenes Regelformat, das verwendet werden kann, um den Verkehr explizit zu steuern. Dies geschieht durch die Verwendung von XML-Dateien, die den Verkehr beschreiben. Wenn dieses Format verwendet wird, können die anderen Optionen für Sniffles irrelevant sein. Beispieldateien für Regeln finden Sie im Verzeichnis examples. Diese Regeldateien werden einfach verwendet, indem die Regeldatei mit der Option -f angegeben wird (d. h. sniffles -f rules.xml).
Das Sniffles-Regelformat ist wie folgt:```xml
<petabi_rules> <traffic_stream proto="tcp" src="any" dst="any" sport="any" dport="any" handshake="True" teardown="True" synch="True" ip="4"> </traffic_stream> <traffic_stream proto="tcp" src="any" dst="any" sport="any" dport="any" handshake="True" teardown="True" synch="True"> </traffic_stream> </petabi_rules>
Im Detail funktionieren die Tags wie folgt:
- `<petabi_rules> </petabi_rules>`: Dies definiert alle Regeln für diese
Regeldatei. Es sollte nur einen Satz dieser Tags geben, der alle festgelegten
Verkehrsströme öffnet und schließt.
- `<rule > </rule>`: Kennzeichnet eine einzelne Regel. Eine einzelne Regel kann
eine beliebige Anzahl von Verkehrsströmen oder Paketen erzeugen. Es kann eine beliebige Anzahl
von Regeln in einer einzigen Datei geben.
- Optionen:
- name: Der Name für diese Regel. Hauptsächlich zur Dokumentation, keine wirkliche
Funktion.
- `<traffic_stream> </traffic_stream>`: Ein Verkehrsstrom definiert Verkehr
zwischen zwei Endpunkten. Alle innerhalb eines einzigen Verkehrsstroms festgelegten Pakete
teilen sich dieselben Endpunkte. Es kann eine beliebige Anzahl von Verkehrsströmen
für eine bestimmte Regel festgelegt werden. Unterschiedliche Verkehrsströme innerhalb
derselben Regel können je nach den unten stehenden Einstellungen unterschiedliche Endpunkte haben oder nicht.
- Optionen:
- typets: Gibt den Typ des Verkehrsstroms an, den wir zur
Paketerzeugung verwenden. Derzeit gibt es Standard, ScanAttack und
BackgroundTraffic.
- scantype: 1==Syn-Scan (Standard) 2 == Connection-Scan.
Wird mit ScanAttack verwendet.
- target: Gibt die Ziel-IP-Adresse für den Scan-Angriff an.
- targetports: Für einen Scan-Angriff. Geben Sie eine durch Kommas getrennte Liste
möglicher Ports oder einen einzelnen Startport an. Andernfalls werden die Ports
zufällig gescannt. Wenn ein einzelner Startport angegeben wird,
werden die Ports der Reihe nach von diesem Punkt bis 65535 gescannt,
danach kehrt es zum Startpunkt zurück. Diese Option
wird zusammen mit typets='ScanAttack' verwendet.
- srcport: Gibt den Quellport für den Scan-Angriff an. Standardmäßig zufällig.
- duration: Das Fenster oder die Dauer in Sekunden eines Scan-Angriffs,
wenn typets='ScanAttack' ist.
- intensity: Intensität des Scan-Angriffs, wenn typets='ScanAttack' ist.
- offset: Verzögerung vor Beginn eines Scan-Angriffs. Wird auch verwendet beim
Einfügen mehrerer Scans in den Verkehr.
- replychance: Wahrscheinlichkeit, dass ein Scan eine Antwort erhält.
Mit anderen Worten, Wahrscheinlichkeit, dass der Zielport offen ist
(Standard 20%). Wird mit ScanAttack verwendet.
- proto: Gibt das Protokoll dieses Verkehrsstroms an.
Sollte TCP oder UDP oder ICMP sein (nicht getestet).
- src: Quell-IP-Adresse. Kann eine Adresse im Format xxx.xxx.xxx.xxx
sein, $EXTERNAL_NET (für eine externe Adresse – geht von einem festgelegten
Heimnetzwerk aus), $HOME_NET oder any (zufällige
IP-Adressauswahl).
- dst: Ziel-IP-Adresse. Wie Quell-IP-Adresse.
- sport: Quellport (geht von TCP oder UDP aus). Kann die Snort-Port-
Formatierung verwenden, die eine durch Kommas getrennte Liste in eckigen Klammern
(z. B. [80,88,89]), einen Bereich (z. B. [10:1000]) oder any
(d. h. zufällige Auswahl aus 0-65535) sein kann.
- dport: Zielport gemäß sport.
- handshake: Erzeugt einen TCP-Handshake zu Beginn des
Stroms. Wenn ausgeschlossen, gibt es keinen Handshake. Gültige Werte
sind true oder false. Standard ist false.
- latency: Setzt die durchschnittliche Latenz zwischen Paketen (in Mikrosekunden).
- teardown: Schließt den Strom, wenn der gesamte Verkehr gesendet wurde,
indem der TCP-Tear-down am Ende des Verkehrsstroms angehängt wird.
Gültige Werte sind true oder false. Standard ist false.
- synch: Verkehrsströme sind synchron oder nicht. Bei true muss ein
Verkehrsstrom beendet sein, bevor der nächste Verkehrsstrom
starten kann. Bei false werden alle aufeinanderfolgenden Ströme, die false sind
(d. h. asynchron), gleichzeitig ausgeführt.
- tcp_overlap: Der Standardwert ist false. Bei true wird ab dem
zweiten Paket ein zusätzlicher Inhalt angehängt und die TCP-
Sequenznummer um eins reduziert, um die überlappende TCP-Sequenznummer zu simulieren.
- ipv: Gibt IPv4 oder IPv6 an. Gültige Optionen sind 4 oder 6.
Standard ist 4.
- out_of_order: Lässt Pakete zufällig in falscher Reihenfolge eintreffen.
Beachten Sie, dass dies nur mit Paketen funktioniert, die die 'times'-Option verwenden.
Weiterhin sollte diese Option auch mit ack verwendet werden, damit
die entsprechenden doppelten ACKs in der Verkehrsspur erscheinen.
Gültige Werte sind true oder false. Standard ist false.
- out_of_order_prob: Setzt die Wahrscheinlichkeit, dass Pakete in falscher
Reihenfolge eintreffen. Zum Beispiel würde 10 bedeuten, dass eine
10%ige Chance für jedes Paket besteht, in falscher Reihenfolge einzutreffen. Pakete
in falscher Reihenfolge treffen nach allen Paketen in richtiger Reihenfolge ein.
Darüber hinaus werden sie ebenfalls zufällig gemischt. Wenn also
von 10 Paketen die ersten Pakete 2 und 5 als in falscher Reihenfolge bestimmt werden,
treffen sie als letzte der 10 Pakete ein (Positionen 9 und 10) und in einer
beliebigen Reihenfolge (d. h. 5 kann vor 2 kommen oder umgekehrt). Der Wert
muss zwischen 1 und 99 liegen. Standard ist 50.
- packet_loss: Lässt Pakete zufällig fallen (d. h. nicht eintreffen).
Dies funktioniert nur mit der 'times'-Option. Weiterhin sollte diese Option
auch mit ack auf true gesetzt werden, damit
doppelte ACKs in der Verkehrsspur erscheinen. Gültige Werte
sind 1 bis 99, die die Wahrscheinlichkeit darstellen, dass ein Paket verloren geht.
Beachten Sie, dass der Paketverlust nur bei datentragenden Paketen auftritt, nicht
bei den ACKs.
- ack: Lässt jedes Datenpaket in diesem Fluss von
einem ACK vom Server gefolgt werden. Gültige Werte sind true oder false.
Standard ist false.
- percentage: Dies gilt nur für BackgroundTraffic und es sollte
nur eine Regel von BackgroundTraffic in einer Regeldatei oder einem Verzeichnis geben.
Der Prozentsatz gibt den Prozentsatz des Hintergrundverkehrsstroms
an, der im gesamten Verkehrsstrom erstellt werden soll.
- http: Prozentuale Verteilung von HTTP-Anwendungsprotokollen im
Hintergrundverkehrsstrom.
- ftp: Prozentuale Verteilung von FTP-Anwendungsprotokollen im
Hintergrundverkehrsstrom.
- pop: Prozentuale Verteilung von POP-Anwendungsprotokollen im
Hintergrundverkehrsstrom.
- smtp: Prozentuale Verteilung von SMTP-Anwendungsprotokollen im
Hintergrundverkehrsstrom.
- imap: Prozentuale Verteilung von IMAP-Anwendungsprotokollen im
Hintergrundverkehrsstrom.
- `<pkt > </pkt>`: Diese Direktive kennzeichnet entweder ein einzelnes
Paket oder eine Reihe von Paketen. Die times-Funktion kann verwendet werden, um mit einer
`<pkt> </pkt>`-Direktive mehrere Pakete zu erzeugen. Andernfalls ist es
erforderlich, jedes Paket in jeder Richtung explizit zu kennzeichnen.
- Optionen:
- dir: Die Richtung des Pakets. Gültige Werte sind to server
oder to client. Die anfängliche Quell-IP wird als Client betrachtet,
und die anfängliche Ziel-IP als Server. Somit sendet 'to server' ein
Paket vom Client zum Server und 'to client' sendet ein Paket
vom Server zum Client. Standard ist to server.
- content: Regulärer Ausdruck, der den Inhalt für dieses
Paket angibt. Die Größe des Pakets hängt vom regulären
Ausdruck ab.
- fragment: Gibt an, ob dieses Paket fragmentiert werden soll oder nicht.
Funktioniert nur mit ipv4. Sollte einen Wert größer als 2 haben.
Erstellt so viele Fragmente, wie gültig sind oder wie angegeben
(je nachdem, welcher Wert kleiner ist). Standardwert ist 0, was keine
Fragmente bedeutet.
- ack: Sendet ein ACK für dieses Paket oder nicht. Gültige Werte sind
true oder false. Standard ist false.
- split: Verteilt den Inhalt auf die angegebene Anzahl von
Paketen. Standardmäßig wird der gesamte Inhalt in einem einzigen
Paket gesendet (Fragmente sind eine kleine Ausnahme von dieser Regel).
- times: Sendet dieses Paket x-mal. Standardwert ist 1,
ein positiver Wert sendet genau x Pakete (möglicherweise
mit ACKs, wenn ack true ist), während eine negative Zahl
eine zufällige Anzahl von Paketen zwischen 1 und abs(-x) sendet.
- ttl: Setzt den Time-to-Live-Wert für das Paket. Standardmäßig erzeugt
Sniffles einen zufälligen TTL-Wert.
- ttl_expiry: Simuliert den TTL-Expiry-Angriff, indem Pakete
in mehrere Pakete aufgeteilt werden, mit einem bösartigen Paket
zwischen zwei guten Paketen. Standardmäßig ist der Wert 0
(kein bösartiges Paket). Wenn der Wert nicht Null ist,
wird ein bösartiges Paket mit diesem TTL gleich dem ttl_expiry-
Wert eingefügt. Wenn der ttl-Wert gesetzt ist, wird das gute Paket
mit dem neuen ttl-Wert gesetzt.
Abschließende Hinweise: Das neue Regelformat ist erst ein Anfang und kann Probleme enthalten.
Bitte machen Sie mich auf etwaige Unstimmigkeiten oder Fehler aufmerksam. Weiterhin ist beabsichtigt,
die Optionen zu erweitern, um nach Bedarf mehr und mehr Funktionalität bereitzustellen.
Bitte kontaktieren Sie mich mit gewünschten Funktionen. Schließlich wird dieses Produkt
wie besehen bereitgestellt. Es gibt keine Garantie für Funktionalität oder
Genauigkeit. Sie können dieses Projekt gerne an Ihre eigenen Bedürfnisse anpassen.
Credits:
--------
Diese Anwendung wurde von Petabi, Inc. entwickelt, wo wir zuverlässige,
realistische und superschnelle Sicherheitslösungen anbieten.
Autoren:
- Victor C. Valgenti
- Min Sik Kim
- Tu Le
- Moosuk Pyun
Neue Funktionen:
-------------
- 21.11.2014: Version 1.4.0: Verkehrsaufteilung und Traffobot für die
bidirektionale Verkehrserzeugung hinzugefügt. Fehler behoben, bei dem eine Ausnahme
ausgelöst wurde, wenn die erzeugte Verkehrsmenge in einen einzelnen
Verkehrsschreibaufruf passte. Umformatiert und Verwendung aktiviert. Schließlich
Komponententests für Traffobot und XML-Parsing hinzugefügt.
- 03.02.2015: Version 2.0. Vollständige Neufassung der Funktionsweise von Strömen, um den Speicherbedarf
bei der Erzeugung großer Ströme mit speziellen Regeln zu reduzieren. Derzeit
können etwa 2-3 Millionen gleichzeitige Flüsse verarbeitet werden, bevor die Leistung nachlässt. Ich habe
einige Funktionen hinzugefügt, um bei der Erstellung großer Flüsse zu helfen. Erstens:
Erzeugen Sie mit etwa einer Gleichzeitigkeit von 2-3 Millionen Flüssen. Verwenden Sie auch keinen
Teardown für diese Flüsse. Ein Bruchteil der Flüsse wird vom Anfang
bis zum Ende der Aufzeichnung bestehen bleiben, während der Rest in jeder
Batch-Periode geschlossen wird. Ich werde daran arbeiten, dies effizienter zu gestalten, aber die Verwaltung
aller komplexen Optionen in Sniffles kann jetzt nicht wirklich kostengünstig im
Speicher erfolgen. Die einzige andere Lösung ist ein leistungsstärkerer Rechner mit mehr RAM.
Diese Version enthält auch eine Vielzahl von Fehlerbehebungen.
- 11.02.2015: Wahrscheinlichkeit für Pakete in falscher Reihenfolge hinzugefügt, um die Häufigkeit
von Paketen in falscher Reihenfolge einstellen zu können.
- 05.03.2015: TCP-Teardown auf standardmäßige Teardown-Sequenz geändert.
Ermöglicht nun die Verteilung von Inhalten auf mehrere Pakete ohne Verwendung von Fragmenten.
- 09.04.2015: Scan-Verkehr behoben, der bei einer der vorherigen
Änderungen teilweise beschädigt wurde. Der PCAP-Startzeitstempel ist jetzt standardmäßig die aktuelle Zeit und kann
mit der Option -g gesetzt werden. Schließlich wird das 3. Paket im 3-Wege-TCP-Handshake
nun datentragend sein, wenn der Client zuerst Daten senden soll.
- 22.05.2015: Regelparsing neu geschrieben, um die Erweiterung des Regelparsers zu vereinfachen,
um mehr Formate zu unterstützen. NFA-Traversierung und PCRE
direkt in Sniffles eingebettet. Code bereinigt und für die
Veröffentlichung vorbereitet.
- 27.05.2015: Dokumentation aktualisiert, PCRE-Bibliotheken und
NFA-Konstruktion in Sniffles integriert, um ein eigenständiges Paket zu erstellen.
Den Regex-Generator und den Zufallsregel-Generator als
Teil des Sniffles-Pakets hinzugefügt. Version auf 3.0.0 aktualisiert
und auf GitHub veröffentlicht.
- 12.08.2015: Eine große Anzahl von Fehlerbehebungen und neuen
Funktionen implementiert. Grundlegende Änderungen an der Handhabung von Strömen und Flüssen
vorgenommen, um eine verbesserte Erweiterbarkeit zu ermöglichen. Latenz pro
Fluss hinzugefügt. Dokumentation aktualisiert.
Regulärer-Ausdruck-Generator
============================
Dies ist ein einfacher Generator für reguläre Ausdrücke.
Er erzeugt reguläre Ausdrücke entweder vollständig zufällig oder basierend auf einer Reihe von Verteilungen.
Die Steuerungen, die auf die Erzeugung der regulären Ausdrücke angewendet werden können,
sind struktureller Natur, nicht kontextuell. Mit anderen Worten:
Es wird nicht versucht, bestimmte Zeichenfolgen-Token in den erzeugten regulären Ausdrücken erscheinen zu lassen.
Die Wahrscheinlichkeitsverteilungen können jedoch angepasst werden, um die Arten von Merkmalen zu beeinflussen,
die in den Regeln vorkommen, wie Zeichenklassen, Alternativen, Wiederholungen usw.
Installation
-------
Wird automatisch mit dem Rest von Sniffles installiert.
Optionen
-------
regexgen – Zufälliger Generator für reguläre Ausdrücke.
Verwendung: regexgen [-C Zeichenverteilung] [-c Anzahl regex]
[-D Klassenverteilung] [-f Ausgabedatei re]
[-l Lambda für Längenerzeugung] [-M Maximale Regex-Länge]
[-m Minimale Regex-Länge] [-n Negationswahrscheinlichkeit]
[-o Optionswahrscheinlichkeit] [-R Wiederholungswahrscheinlichkeit] [-r Wiederholungsverteilung]
[-t Verteilung der strukturellen Typen von re] [-?] [-g]
- -C Zeichenverteilung: Legt die Wahrscheinlichkeit fest, bestimmte
Zeichen oder Zeichentypen zu sehen. Siehe eine kurze Erklärung der
Verteilungen unten für Beispiele zur Verwendung. Standardmäßig ist diese Verteilung
eine Gleichverteilung. Diese Verteilung
hat fünf Slots: ASCII-Zeichen, Binäre Zeichen im \x00-Format,
Alphabetische Buchstaben (Groß- oder Kleinschreibung), Ziffern und Substitutionsklassen
(wie \w). Ein Beispiel für eine Eingabe wäre "10,20,10,40,20",
was bedeuten würde: 10% Wahrscheinlichkeit, dass ein erzeugtes Zeichen aus 10% ASCII,
20% binär, 10% Buchstaben usw. stammt. Eine Einschränkung ist, dass ASCII-Zeichen,
die Probleme mit regulären Ausdrücken verursachen könnten (wie `[' oder `{`),
in hexadezimale Darstellung konvertiert werden (z. B. \x3b).
- -c Anzahl der zu erzeugenden regulären Ausdrücke. Standard ist eins.
- -D Klassenverteilung: Es gibt nur zwei Slots in der Klassenverteilung.
Der erste Slot ist die Wahrscheinlichkeit, dass die Klasse aus
einer zufälligen Anzahl von Zeichen besteht. Der
zweite Slot ist die Wahrscheinlichkeit, dass die Klasse aus
Bereichen (wie a-z) besteht.
- -f Name der Ausgabedatei. Legt den Namen der Datei fest, in der die
regulären Ausdrücke gespeichert werden. Standard ist eine Datei namens rand.re
im aktuellen Arbeitsverzeichnis.
- -g Gruppen: Alle regulären Ausdrücke haben ein gemeinsames Präfix mit
mindestens einem oder mehreren anderen regulären Ausdrücken (solange es
mehr als einen Regex gibt). Ein gemeinsames Präfix ist einfach ein regulärer Ausdruck,
der für eine bestimmte Menge regulärer Ausdrücke identisch ist. Die Gesamtzahl
der möglichen gemeinsamen Präfixe reicht von 1 bis zur Hälfte der Größe der
insgesamt zu erzeugenden regulären Ausdrücke. Der Standardwert für diese
Option ist false. Diese Option benötigt keine Parameter.
- -l Lambda für Länge: Dies ist die mittlere Länge für eine Exponentialverteilung
der Längen regulärer Ausdrücke. Der Standardwert ist 10.
- -M Maximale Regex-Länge: Erzeugt reguläre Ausdrücke mit höchstens dieser
strukturellen Länge oder kürzer. Standardmäßig ist die maximale Länge nicht begrenzt.
- -m Minimale Regex-Länge: Erzeugt reguläre Ausdrücke mit mindestens dieser Länge
oder länger. Standard ist 3, und es wird automatisch ein Wert von 1 verwendet,
wenn die Eingabe null oder kleiner ist.
- -n Negationswahrscheinlichkeit: Die Wahrscheinlichkeit, dass eine Zeichenklasse
eine Negationsklasse ([^xyz]) ist, anstatt einer normalen Zeichenklasse ([xyz]).
Standardwahrscheinlichkeit ist 50%.
- -o Optionswahrscheinlichkeit: Dies ist die Wahrscheinlichkeit, dass eine Option an den
regulären Ausdruck angehängt wird. Aktuelle Optionen sind 'i', 'm' und 's'.
Eine zufällige Anzahl von Optionen wird der Liste hinzugefügt, wobei diese Optionen
durch eine Gleichverteilung ausgewählt werden.
- -R Wiederholungswahrscheinlichkeit: Die Wahrscheinlichkeit, dass eine Wiederholung nach
einem beliebigen strukturellen Bestandteil zum regulären Ausdruck hinzugefügt wird.
- -r Wiederholungsverteilung: Die Verteilung der Wiederholungsstrukturen.
Die Slots sind: Null bis eins (?), Null bis viele (*), eins bis viele (+), und
Zählung ({x,y}).
- -t Verteilung der strukturellen Typen von re: Die Verteilung für die
primären strukturellen Bestandteile des regulären Ausdrucks. Diese
bestehen aus drei Slots oder Kategorien: Zeichen, Klassen
und Alternation. Beachten Sie, dass Alternation einfach einen kleineren regulären
Ausdruck bis zur Größe der verbleibenden Länge des regulären Ausdrucks erzeugt.
Mit anderen Worten: Alternation führt dazu, dass mehrere kleinere reguläre
Ausdrücke in den gesamten regulären Ausdruck eingefügt werden.
Die Alternation verwendet genau dieselbe Methodik bei der Erstellung dieser
kleineren regulären Ausdrücke.
- -? Zeigt diese Hilfe an.
Dieser Generator erzeugt zufällige reguläre Ausdrücke. Es ist möglich,
die Strukturen innerhalb der regulären Ausdrücke auf eine Wahrscheinlichkeitsverteilung
abzustimmen, aber derzeit nicht den Inhalt. Dies ist wünschenswert, um
die maximale Vielfalt an möglichen regulären Ausdrücken zu erkunden
(wenn auch nicht unbedingt realistische reguläre Ausdrücke).
Die Verteilungen werden durch die Erstellung einer Liste von Wahrscheinlichkeiten für
die verschiedenen Möglichkeiten oder Slots für eine bestimmte Verteilung behandelt.
Diese werden als Befehlszeilenargumente mit einer einfachen Zeichenfolgenliste
wie "10,30,40,20" hinzugefügt. Die Liste sollte so viele Werte
haben, wie es Slots gibt. Die Summe aller Werte in der Liste sollte
100 sein und es sollten keine Brüche enthalten sein. Der Wert an jedem Slot
ist die Wahrscheinlichkeit, dass dieser Slot ausgewählt wird. Zum Beispiel
hat die grundlegende Verteilung der strukturellen Typen von regulären Ausdrücken drei Slots. Der
erste Slot ist die Wahrscheinlichkeit, dass der nächste Strukturtyp
ein Zeichen ist (wobei ein Zeichen ein Buchstabe, eine Ziffer, binär, ASCII,
oder eine Substitutionsklasse (wie \w) sein kann). Der zweite Slot ist für Zeichenklassen
wie [ab@%], [^123] oder [a-z]. Der letzte Slot ist die Wahrscheinlichkeit
des Auftretens von Alternation wie (ab|cd). Mit diesen drei Slots können Sie abstimmen,
wie oft die Strukturen in Ihren regulären Ausdrücken erscheinen sollen.
Zum Beispiel würde regexgen -c 10 -t "80,10,10" 10 reguläre Ausdrücke erstellen,
bei denen 80% der verwendeten Strukturen Zeichen wären, 10 Prozent wären
Zeichenklassen und 10% Alternation.
Zufallsregel-Generator
=====================
Der Zufallsregel-Generator bietet eine Möglichkeit, eine Anzahl zufällig
generierter Regeln zu erstellen, um eine bestimmte Plattform zu testen. Derzeit
entsprechen die erzeugten Regeln entweder dem Snort-Regelformat oder sind nur Textzeilen.
Damit der Zufallsregel-Generator funktioniert, müssen Sie einen Satz
definierter Merkmale haben. Beispielmerkmale finden Sie im
Ordner example_features und werden unten weiter beschrieben.
Installation
-------
Wird automatisch mit Sniffles installiert
Hinweis: Der Zufallsregel-Generator verwendet den
Zufalls-Regex-Generator zur Erstellung von Inhalten jeglicher Art.Optionen
-------
Zufallsregelgenerator
Verwendung: rulegen -c [Anzahl der Regeln] -f [Feature-Set]
-o [Ausgabedatei] [-s]
- -c Anzahl der Regeln: Die Anzahl der zu generierenden Regeln.
Standard ist eine.
- -f Feature-Set: Die Datei, die die Beschreibung des Feature-Sets enthält.
Bitte lesen Sie die Dokumentation für eine weitere Erklärung der
Feature-Sets und deren Beschreibung.
- -o Ausgabedatei: Ausgabedatei, in die die Regeln geschrieben werden.
Standard ist rules.txt
- -s Snort-Regelformat: Regeln im Snort-Regelformat schreiben.
Keine Parameter, standardmäßig ausgeschaltet. Wenn ausgeschaltet, werden Regeln einfach
in ein String-Format umgewandelt, was auch immer das basierend auf
dem Feature-Parser sein mag.
Feature-Set
-----------
Features werden verwendet, um potenzielle Aspekte von Regeln zu beschreiben, die in
IDS verwendet werden. Ein Paketfilter könnte beispielsweise Regeln verwenden, die auf
IP-Quell- und -Zieladressen abzielen. In diesem Fall wäre es möglich,
ein Feature-Set zu erstellen, das beschreibt, wie diese IP-Quell- und
-Zieladressen generiert werden sollen. Genauer gesagt unterscheiden wir
zwischen einfachen Regeln und komplexen Regeln. Der Unterschied
zwischen diesen beiden ist das Vorhandensein von mehrdeutigen Notationen. Zum
Beispiel, wenn wir eine mehrdeutige Notation von * für jede
IP-Adresse hätten, dann könnten wir sagen, dass * eine mehrdeutige Notation darstellt.
Weiterhin wissen wir, dass eine Regel auch eine nicht-mehrdeutige Notation verwenden kann,
wie 192.168.1.1. Das würde eine einfache IP-Adresse darstellen, da
es sich um eine einzelne feste IP-Adresse ohne mögliche mehrdeutige
Notation handelt. Wir definieren dann weiter den Bereich der jeweiligen
Features (z. B. IP-Adressen über die gesamten 4 Milliarden plus
möglichen IPv4-Adressen, oder nur eine Teilmenge davon).
Die Features definieren letztlich alle Aspekte einer
beliebigen Regel. Bei einem gegebenen Feature-Set und einem gültigen Regelformat
ist es möglich, eine beliebige Anzahl von Regeln zufällig zu generieren,
die diese Features verwenden. Auf diese Weise ist es möglich,
Testsatz-Regeln zu generieren, die das IDS über eine
oft übersehene Vektordimension hinweg untersuchen.
Features werden in einer durch Semikolon getrennten Liste definiert, ein Feature pro Zeile
type=feature; Liste der Argumente in key=value-Paaren, Listen unter Verwendung von Python-
Formatierung (d. h. [a, ..., z]). Features definieren spezifische Teile eines
Zielregelformats. Features können erweitert werden, um mehr Funktionalität hinzuzufügen.
Optional kann man die Fähigkeit der Features erweitern, indem man ein neues
Regelformat erstellt.
Aktuelle Feature-Typen:
1. Feature -- generisches Feature
2. Content -- Content Feature
3. IP -- IP Feature
4. Protocol -- Protocol Feature
Mehrdeutige Listen sollten als Listen wie [x:y]
für einen Bereich, [x,y] für eine Liste, {x1,x2,x3} für eine Menge
oder einfach * für einen Platzhalter oder eine ähnliche Einzeloption geschrieben werden.
Beispiel zu mehrdeutigen Listen:```
ambiguity_list=[[2:9]]
it will generate [3:4], [5:6], etc (any [x:y] such that
x <= y and x >= 2 and y > x and y <= 9).
ambiguity_list=[[3,20]]
it will generate [3,9,10], [3,4,8,12], etc (any list [x1,x2,x3,..]
such that all values falling between 3 and 20.
ambiguity_list=[{5,6,10}]
it will generate a subset of {5,6,10} such as {5,10}, {5}.
ambiguity_list=[[2:9],[3,20],{5,6,11}]
it will pick one of [2:9], [3,20], and {5,6,11} and
generate a corresponding instance (see above)
Beispiel für eine Feature-Datei:``` type=protocol; name=proto; proto_list=[TCP,UDP,ICMP]; complexity_prob=0;ambiguity_list=None; type=ip; name=sip; version=4; complexity_prob=100;
Das obige definiert zwei Features, ein Protokoll-Feature und ein Quell-IP-Feature. Das Protokoll heißt proto, was nur für den Regel-Formatierer wichtig ist, und die gültigen Protokolle sind: IP, TCP, UDP und ICMP. Das IP-Feature ist als IPv4 definiert, und alle Regeln werden komplex sein. Die IP-Komplexität ist bereits Teil der Klasse und muss nicht in der Feature-Definition hinzugefügt werden. Dies erzeugt IP-Adressen in CIDR-Notation.
Generische Feature-Attribute:
- Feature_name: Informationsattribut, potenziell wertvoll für den Regel-Formatierer.
- lower_bound: Die untere Grenze möglicher Werte. Nimmt an, dass das Feature eine Zahl ist.
- upper_bound: Gegenteil von lower_bound.
- complexity_prob: Die Wahrscheinlichkeit, komplexe Features für eine Regel zu verwenden. Von 0 bis 100. Standardmäßig 0.
Wenn komplexe Features verwendet werden, wird eine mehrdeutige Notation zufällig aus der Mehrdeutigkeitsliste ausgewählt, oder
falls das Feature eine spezifische Mehrdeutigkeit definiert (wie bei IP-Adressen), wird diese verwendet. Wenn komplexe
Features nicht verwendet werden, wird ein Wert unter Verwendung der Grenzen erzeugt, oder, im Fall von Content,
unter Verwendung einer Reihe von Verteilungswerten, die die erzeugte Zeichenfolge auf eine Reihe
von ASCII-Zeichen beschränken.
- ambiguity_list: Eine Liste möglicher mehrdeutiger Notationen.
Kommagetrennte Liste mit Python-Formatierung
(z. B. [a, b, c]).
- toString(): Gibt eine Instanz einer Regel mit diesem speziellen Feature-Set aus.
Content-Feature – Erbt von Feature:
- regex: Wahr oder Falsch. Wenn Wahr, wird die PCRE-Formatierung für Regex verwendet, sowie möglicherweise die Optionen i, s oder
m zum Regex hinzugefügt.
- length: Definiert die durchschnittliche Länge des erzeugten
Inhalts.
- min_regex_length: Definiert die Mindestlänge des regulären
Ausdrucks.
Protokoll-Feature – Erbt von Feature:
- proto_list: Definiert die Liste der möglichen Protokolle,
als kommagetrennte Liste (z. B. [TCP,
UDP]).
IP-Feature – Erbt von Feature:
- version: 4 für IP Version 4, 6 für IP Version 6.
Standardmäßig Version 4.
Mehrdeutige Notation für Bereiche, Listen, Mengen:
Bereichsnotation:
[x:y] bedeutet von x bis y (einschließlich).
Listenniation:
[x,y] bedeutet eine Liste einer zufällig bestimmten Anzahl von Werten,
wobei jeder Wert größer oder gleich x und kleiner oder gleich y ist.
Mengennotation:
{x1,x2,x3,x4} bedeutet eine Menge mit den Werten x1, x2, x3, x4. Es
wird eine Teilmenge der ursprünglichen Menge erzeugt.
Bitte sehen Sie sich die Beispiel-Feature-Sets im Ordner
example_features für weitere Beispiele an.
Weitere Details sowie die akademische Theorie dahinter sollen später hinzugefügt werden.
-e eval: Erstellen Sie genau ein Paket für jede Regel im Regelsatz. Ignoriert alle anderen Eingaben außer -f. Jedes Paket enthält Inhalt, der mit der ausgewählten Regel übereinstimmt.
-E Full Eval: Erstellen Sie ein Paket für jeden gangbaren Pfad in einer pcre-Regel im Regelsatz. Mit anderen Worten, ab(c|d)e würde zwei Pakete erstellen: abce und abde. Ignoriert alle anderen Eingaben außer -f.
-f Rule File: Liest eine einzelne Regeldatei gemäß dem angegebenen Pfad und Dateinamen.
-F Config: Legen Sie eine Konfigurationsdatei für Sniffles-Optionen fest. Die Konfigurationsdatei ist eine Möglichkeit, die Parameter für einen Lauf von Sniffles festzulegen.
-g Timestamp: Legt die Startzeit für den pcap-Zeitstempel fest. Dies ist die Anzahl der Sekunden seit dem 31.12.1969. Standard ist die aktuelle Zeit.
-h IP Home Prefixes: Eine Liste von IP-Heimnetzwerk-Präfixen. IP- Adressen, die von einer internen Adresse stammen sollen, verwenden diese Präfixe. Präfixe können eine gesamte 4-Byte-IPv4-Adresse im Format xxx.xxx bezeichnen. Beispiel: "10.192.168,172.16".
-H IP v6 Home Prefixes: Gleiches wie IPv4-Heimpräfixe, nur für IPv6. Bemerkenswerte Ausnahmen: Das Trennzeichen ist ein Doppelpunkt, wobei zwei Bytes zwischen Doppelpunkten dargestellt werden.
-i IPv6-Prozentsatz: Setzen Sie diesen Wert zwischen 1 und 100, um Pakete mit IPv6 zu generieren. Dies bestimmt den Prozentsatz der Streams, die IPv6 sein werden.
-I Intensität des Scan-Angriffs (d. h. Pakete pro Sekunde).
-l Content Length: Setzen Sie die Content-Länge auf die angegebene Anzahl von Bytes. Weniger als eins setzt die Länge gleich dem durch den NFA generierten Inhalt oder einer Zufallszahl zwischen 10 und 1410, wenn die Header ebenfalls zufällig sind. Kürzt oder füllt das Paket nach Bedarf.
-L Latenz: Durchschnittliche Latenz in Mikrosekunden. Wenn nicht gesetzt, wird für jeden Stream eine zufällige durchschnittliche Latenz zwischen 1 und 200 µs bestimmt. Somit haben die Pakete eines bestimmten Streams eine durchschnittliche Latenzzeit zwischen jedem Paket im Fluss.
-M Ermöglicht die Verwendung einer MAC-Verteilung, um benutzerdefinierte MAC- Adressen im Verkehr zu haben. Standardmäßig werden MAC-Adressen zufällig generiert. Weitere Informationen zur MAC- Definitionsdatei finden Sie in der examples/mac_definition_file.txt. Hinweis: Sie können bis zu zwei MAC-Definitionsdateien angeben, um unterschiedliche Werte abhängig von Quell- oder Ziel-MACs festzulegen. Wenn Sie nur eine Datei angeben, wird diese für beide Richtungen verwendet. Wenn Sie die folgende Notation verwenden, können Sie bestimmte Richtungen angeben. Beispiel: 'path1:path2'. Path1 ist die MAC-Definitionsdatei für Quell-MACs und path2 ist die MAC-Definitionsdatei für Ziel-MACs. Sie können auch ein Fragezeichen (?) verwenden, um eine oder die andere als zufällig zu kennzeichnen, wie in: '?:path2', um zufällige Quell-MACs zu haben, aber die Datei für Ziel-MACs zu verwenden.
-n Not Match Completely. Setzt den von einer Regel generierten Inhalt so, dass er nicht vollständig übereinstimmt (d. h. die letzten Zeichen werden automatisch abgeschnitten). Standardverhalten ist, dass der Regelinhalt vollständig übereinstimmt.
-o output file: Legt den Namen der Ausgabedatei fest. Standardmäßig heißt die Datei: sniffles.pcap.
-O Offset: Offset vor Beginn eines Scan-Angriffs. Wird auch verwendet, wenn mehrere Scans in den Verkehr eingefügt werden. Dies ist die Anzahl der Sekunden vor Beginn des Scans. Bei Verwendung mit -R wird dies zur durchschnittlichen Anzahl von Sekunden vor Start.
-p Packets-per-stream: Legt die Anzahl der inhaltsragenden Pakete für einen einzelnen Stream fest. Wenn ein positiver Wert als Argument angegeben wird, erscheinen genau x (wobei x die angegebene ganze Zahl ist) inhaltsragende Pakete für jeden Stream. Wenn x negativ ist, erscheint eine zufällige Anzahl von Paketen für jeden Stream (von 1 bis abs(x)). Standardmäßig ist dieser Wert 1.
-P Target Port list: Für einen Scan-Angriff. Geben Sie eine durch Kommas getrennte Liste möglicher Ports oder einen einzelnen Start-Port an. Andernfalls werden Ports zufällig gescannt. Wenn ein einzelner Start-Port angegeben wird, werden die Ports der Reihe nach von diesem Punkt bis 65535 gescannt, danach wird zum Startpunkt zurückgekehrt. Wenn eine Liste angegeben wird, werden die Ports in der Liste im Round-Robin-Verfahren gescannt.
-r Random: Generieren Sie zufälligen Inhalt anstatt aus den Regeln. Wenn noch Regeln bereitgestellt werden, werden die Regeln bei der Generierung der Header verwendet. Hinweis: Viele Merkmale in den Regeln können bestimmte Aspekte der zufälligen Generierung überschreiben.
-R Random scan Attacks: Verwendet den Offset, um Scan-Angriffe im Verkehr zu erstellen, verwendet den Offset jedoch nur als Median. Der Offset wird verwendet, um die Zeitspanne zwischen dem Ende eines Scans und dem Start eines neuen Scans zu bestimmen.
-s Scan Attack: Gefolgt von einer durch Kommas getrennten Liste von IPv4-Adressen, die angeben, welche IP-Adresse anvisiert werden soll. Jeder IP-Bereich erstellt einen Scan-Angriff. Die Bereiche sollten wie folgt sein: 192.168.1.1, was genau diese eine IP-Adresse anvisieren würde, während 192.168.1 eine zufällige IP-Adresse zwischen 192.168.1.0 und 192.168.1.255 anvisieren würde.
-S Scan type: 1==Syn-Scan (Standard) 2 == Verbindungs-Scan.
-t TCP Handshake: Fügen Sie einen TCP-Handshake in alle TCP-Streams ein. Standardmäßig ausgeschaltet.
-T TCP Teardown: Fügen Sie einen TCP-Teardown in alle TCP-Streams ein. Standardmäßig ausgeschaltet.
-v Verbosity: Erhöht den Umfang der Ausgabemeldungen.
-w write content: Schreibt die Inhaltszeichenfolgen in eine Datei namens 'all.re'
-W Window: Das Fenster oder die Dauer in Sekunden eines Scan-Angriffs.
-Z Reply Chance: Wahrscheinlichkeit, dass ein Scan eine Antwort erhält. Mit anderen Worten, Wahrscheinlichkeit, dass der Ziel-Port offen ist (Standard 20%).