Anhang B – 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 einem content-Stichwort verwendet werden
NULL
Groß-/Kleinschreibung im content-Wert wird ignoriert
rawbytes kann nur mit einem content-Stichwort verwendet werden
NULL
Dekodierung wird ignoriert. Siehe Raw-Paketdaten
depth kann nur mit einem content-Stichwort verwendet werden
<number>; z. B. depth:5;
Sucht nach Inhalten innerhalb der angegebenen Anzahl der Bytes der Payload. Wenn der Wert des depth-Stichworts kleiner ist als die Länge des Werts des content-Stichworts, wird die Signatur nie übereinstimmen
offset kann nur mit einem content-Stichwort verwendet werden
<number>; z. B. 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 einem content-Stichwort 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 einem content-Stichwort 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 String 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 – Springt zum Anfang des Pakets anstelle von der aktuellen Position aus.
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 keine Bits angegeben sind
dsize
[<|>] <number>[ <> number]; zum Beispiel Größe: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 keine Bits angegeben 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
Stichwort Wert Nutzung srcaddr/dstaddr <ipaddress>; Die Quell-/Ziel-IP-Adresse srcport/dstport <Number>; Der Quell-/Ziel-Port... mehr erfahren »
Fenster schließen
Anhang B – 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 einem content-Stichwort verwendet werden
NULL
Groß-/Kleinschreibung im content-Wert wird ignoriert
rawbytes kann nur mit einem content-Stichwort verwendet werden
NULL
Dekodierung wird ignoriert. Siehe Raw-Paketdaten
depth kann nur mit einem content-Stichwort verwendet werden
<number>; z. B. depth:5;
Sucht nach Inhalten innerhalb der angegebenen Anzahl der Bytes der Payload. Wenn der Wert des depth-Stichworts kleiner ist als die Länge des Werts des content-Stichworts, wird die Signatur nie übereinstimmen
offset kann nur mit einem content-Stichwort verwendet werden
<number>; z. B. 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 einem content-Stichwort 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 einem content-Stichwort 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 String 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 – Springt zum Anfang des Pakets anstelle von der aktuellen Position aus.
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 keine Bits angegeben sind
dsize
[<|>] <number>[ <> number]; zum Beispiel Größe: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 keine Bits angegeben 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