IPS-Syntax für eigene Patterns

Stichwort Wert Nutzung
srcaddr/dstaddr <ipaddress>; Die Quell-/Ziel-IP-Adresse
srcport/dstport <Number>; Der Quell-/Ziel-Port
content „<content string>;“

Eine Zeichenfolge in doppelten Anführungszeichen.

In einer Regel können mehrere Inhalte stehen. Der Wert kann aus Text und Binärdaten bestehen. Binärdaten stehen im Allgemeinen zwischen senkrechten Strichen (|).

nocase

Kann nur mit dem Stichwort „content“ verwendet werden

NULL Groß-/Kleinschreibung im content-Wert wird ignoriert

rawbytes

Kann nur mit dem Stichwort „content“ verwendet werden
NULL Dekodierung wird ignoriert. Sucht in den Raw-Paketdaten

depth

Kann nur mit dem Stichwort „content“ verwendet werden

<number>;

zum Beispiel depth:5;

Sucht nach Inhalten innerhalb der angegebenen Anzahl der Bytes der Nutzlast. Wenn der Wert des depth-Stichworts kleiner ist als die Länge des Werts des content-Stichworts, wird die Signatur nicht gefunden.

offset

Kann nur mit dem Stichwort „content“ verwendet werden

<number>;

zum Beispiel content:cgi-bin/phf;offset:4;depth:20;

Sucht nach Inhalten nach der angegebenen Anzahl der Bytes der Nutzlast. Dieser Tag ist ein absoluter Wert in der Nutzlast. Dem offset-Tag kann ein depth-Tag folgen, um so die Suche nach einem Match zu beenden, sobald der im depth-Tag aufgeführte Wert erreicht wurde. Ist kein Wert für „depth“ angegeben, wird bis zum Ende der Nutzlast weiter nach einem Match gesucht.

distance

Kann nur mit dem Stichwort „content“ verwendet werden

<number>;

zum Beispiel content:„ABC“;content:„DEF“; distance:1;

Sucht nach dem Inhalt der angegebenen Anzahl der Bytes relativ zum Ende der vorherigen gefundenen Inhalte. Nach dem distance-Tag kann ein within-Tag folgen. Wenn kein Wert für den within-Tag angegeben ist, wird bis zum Ende der Nutzlast nach einem Match gesucht.

within

Kann nur mit dem Stichwort „content“ verwendet werden
<number>;

Zum Beispiel content: „ABC“; content: „DEF“; within:10;

Sucht nach Inhalten innerhalb der angegebenen Anzahl der Bytes der Nutzlast. Gemeinsam mit dem distance-Tag verwenden.
uricontent uricontent:<content string>;

zum Beispiel, uricontent:„%3F“;

Es wird nach dem normalisierten Request-URI-Feld gesucht. Binärdaten können als URI-Wert definiert werden.
isdataat <value> [,relative];

zum Beispiel content: „PASS“; isdataat: 50, relative;

Prüft, ob die Nutzlast an einer bestimmten Stelle über Daten verfügt. Optional wird nach Daten ab dem Ende des vorherigen Inhalt-Match gesucht.
pcre pcre:[!]„(/<regex>/|m/<regex>/)[ismxAEGRUB]“;

zum Beispiel pcre:„/BLAH/i“;

Das pcre Stichwort lässt es zu, dass Regeln mit perl-kompatiblen regulären Ausdrücken geschrieben werden.

i – schreibungsunabhängig

s – Newlines im dot Metazeichen einschließen

m – Standardmäßig wird die Zeichenkette als eine große Zeile mit Zeichen behandelt; ^ und $ entsprechen dem Beginn und Ende der Zeichenkette. Wenn m gesetzt ist, entsprechen ^ und $ sofort nach oder vor jeder Newline im Buffer, ebenso wie am Anfang und am Ende des Buffers.

x – Leerzeichen-Datenzeichen im Pattern werden ignoriert, außer wenn es ein Maskierungszeichen ist oder innerhalb einer Zeichenklasse.

A – Das Pattern muss nur dem Beginn des Buffers entsprechen (das gleiche wie ^)

E – $ kennzeichnet das Ende der Zeichenkette. Ohne E entspricht $ auch direkt vor dem letzten Zeichen, wenn es eine Newline ist (aber nicht vor anderen Newlines)

G – Kehrt die „Gier“ der Gewichtungen um, sodass sie nicht standardmäßig gierig sind, sondern erst wenn ein „?“ folgt.

R – Sucht nach Übereinstimmungen am Ende des letzten übereinstimmenden Patterns (ähnlich wie distance:0;) U – Sucht nach dekodierten URI-Puffern (ähnlich wie uri)

B – Dekodierte Puffer werden nicht verwendet (ähnlich wie raw keyword).

byte_test <bytes to convert>, [!]<operator>, <value>, <offset> [,relative] [,<endian>] [,<number type>, string]; oct,dec,hex nur mit Zeichenfolge verwendet

zum Beispiel msg: „AMD procedure 7 plog overflow“; content:„|00 04 93 F3|“; content:„|00 00 00 07|“; distance: 4.within:4; byte_test:4,>,1000,20,relative;

Prüft ein Byte-Feld auf einen bestimmten Wert (mit Operator). Fähig, binäre Werte zu testen und repräsentative Byte-Strings in ihr binäres Gegenüber zu konvertieren und zu testen. bytes_to_convert – Die Anzahl an Bytes, die aus dem Paket aufgenommen werden – Mit dieser Operation wird der Wert (<,>,=,!,&) geprüft

value – Der Wert, mit welchem der konvertierte Wert verglichen wird

offset – Die Anzahl der Bytes, nach welcher die Nutzlast die Verarbeitung startet

relative – Verwendung eines offset ab dem letzten Pattern-Match

big – Verarbeitung der Daten als Big

Endian (Standard) little – Verarbeitung der Daten als Little Endian

string – Die Daten im Paket werden im String-Format gespeichert

hex – Die konvertierten String-Daten werden hexadezimal dargestellt

dec – Die konvertierten String-Daten werden dezimal dargestellt

oct – Die konvertierten String-Daten werden oktal dargestellt

byte_jump <bytes_to_convert>, <offset> [,relative] [,multiplier <multiplier value>] [,big] [,little][,string] [,hex] [,dec] [,oct] [,align] [,from_beginning]; oct,dec,hex wird nur mit String verwendet

zum Beispiel, content:„|00 00 00 01|“; distance: 4; within: 4; byte_jump: 4,12,relative,align

bytes_to_convert – Die Anzahl an Bytes, die aus dem Paket aufgenommen werden multiplier value – Multipliziert die Anzahl der errechneten Bytes mit dem Wert und springt die Anzahl an Bytes vor

operator – Mit dieser Operation wird der Wert (<,>,=,!,&) geprüft

value – Der Wert, mit welchem der konvertierte Wert verglichen wird

offset – Die Anzahl der Bytes, nach welcher die Nutzlast die Verarbeitung startet

relative – Verwendung eines offset ab dem letzten Pattern-Match

big – Verarbeitung der Daten als Big

Endian (Standard) little – Verarbeitung der Daten als Little Endian

string – Die Daten im Paket werden im String-Format gespeichert

hex – Die konvertierten String-Daten werden hexadezimal dargestellt

dec – Die konvertierten String-Daten werden dezimal dargestellt

oct – Die konvertierten String-Daten werden oktal dargestellt

align – Die konvertierten Bytes werden auf das nächste 32-Bit Format aufgerundet

from_beginning – Vorwärts überspringen vom Anfang der Paket-Payload, anstatt von der aktuellen Position im Paket

ttl <number>;><number>;<<number>; Vergleicht den Wert von IP Time-to-Live mit dem angegebenen Wert
tos <number>; Vergleicht das Feld IP TOS mit dem angegebenen Wert
id <number>; Vergleicht das Feld IP ID mit dem angegebenen Wert
ipopts {rr | eol | nop | ts | sec | lsrr |ssrr | satid | any}

rr – Prüft, ob die Option IP RR (record route) vorhanden ist

eol – Prüft, ob die Option IP EOL (end of list) vorhanden ist

nop – Prüft, ob die Option IP NOP (no op) vorhanden ist

ts – Prüft, ob die Option IP TS (time stamp) vorhanden ist

sec – Prüft, ob die Option IP SEC (IP security) vorhanden ist

lsrr – Prüft, ob die Option IP LSRR (loose source routing) vorhanden ist

ssrr – Prüft, ob die Option IP SSRR (strict source routing) vorhanden ist

satid – Prüft, ob die Option IP SATID (stream identifier) vorhanden ist

any – Prüft, ob die Option IP any vorhanden ist

fragoffset <number>; Vergleicht das offset-Feld des IP-Fragments mit dem Dezimalwert
fragbits [+*!]<[MDR]>; Überprüft, ob IP-Fragmentierung und reservierte Bits im IP-Header vorhanden sind.

M – Das More-Fragments-Bit

D – Das „Don't-Fragment“-Bit

R – Das Reserved-Bit

+ – Die angegebenen Bits suchen, plus jegliche weiteren

* – Match, wenn eines der angegebenen Bits gefunden wird

! – Match, wenn die angegebenen Bits nicht gesetzt sind

dsize [<|>]<number>[<>number];

zum Beispiel dsize:300<>400;

Testet die Nutzlast des Pakets. Wenn data_size festgelegt ist, wird das Zusammenfügen des Pakets automatisch abgeschaltet, sodass eine Signatur mit Werten für data_size und only_stream als falsch betrachtet wird. dsize scheitert an neu gebauten Datenpaketen, unabhängig von der Größe der Nutzlast
flags [!|*|+]<FSRPAU120>[,<FSRPAU120>];

zum Beispiel, Flags:SF,12

TCP-Flags, mit welchen ein Paket abgeglichen werden soll.

S – Sucht nach dem SYN-Flag

A – Sucht nach dem ACK-Flag

F – Sucht nach dem FIN-Flag

R – Sucht nach dem RST-Flag

U – Sucht nach dem URG-Flag

P – Sucht nach dem PSH-Flag

1 – Sucht nach dem reservierten Bit

1 2 – Sucht nach dem reservierten Bit

2 0 – Sucht nach Bits ohne TCP-Flags

+ – Sucht nach den angegebenen Bits, plus weiteren

* – Match, wenn eines der angegebenen Bits gefunden wird

! – Match, wenn die angegebenen Bits nicht gesetzt sind

flow to_client|to_server|from_client| from_server ];established;bi_direction;[no_stream|only_stream]; Nur TCP: Der Wert für to_server entspricht dem Wert für from_client. Der Wert für to_client entspricht dem Wert für from_server. Das Tag bi_direction führt die Suche nach passenden Signaturen in beiden Richtungen durch. Wenn zum Beispiel eine Signatur mit „--dst_port 80“ vorliegt und bi_direction ist gesetzt, prüft die Signatur den Datenverkehr von und an Port 80.
seq <number>; Auf die festgelegte TCP-Sequenznummer prüfen
ack <number>; Auf die festgelegte TCP-Achknowledge-Nummer prüfen
window <number>; Auf die festgelegte TCP-Fenstergröße prüfen
itype [<|>]<number>[<>number]; Gibt den ICMP-Typ für die Suche an
icode [<|>]<number>[<>number]; Gibt den ICMP-Code für die Suche an
icmp_id <number>; Sucht nach dem angegebenen ICMP-ID-Wert
icmp_seq <number>; Sucht nach dem angegebenen ICMP-Sequenzwert
rpc <application number>,[<version number>|*],[<procedure number>|*>; Sucht nach den RPC-Anwendungs-, Versions- und Prozessnummern in SUNRPCCALL-Anfragen. Der Platzhalter * kann für Versions- und Prozessnummern verwendet werden.
ip_proto <number>;[!]<number>;><number>;<<number>; Sucht nach der IP-Protokollkopfzeile
samip NULL Die Quelle und das Ziel haben dieselbe IP-Adresse