Eigene IPS-Signaturen

Mit eigenen Signaturen können Sie Ihr Netzwerk vor Schwachstellen in Zusammenhang mit Netzwerkobjekten, wie Server, Protokollen und Anwendungen, schützen. Sie können eigene Signaturen erstellen und sie später zu IPS-Richtlinienregeln hinzufügen.

Syntax für benutzerdefinierte IPS-Muster

Stichwort

Wert

Nutzung

srcaddr/dstaddr

<IP-Adresse>;

Die Quell-/Ziel-IP-Adresse.

srcport/dstport

<Zahl>;

Der Quell-/Zielport.

content

<Inhalt-Zeichenfolge>;

Eine Zeichenfolge in doppelten Anführungszeichen.

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

nocase

Kann nur mit dem content-Stichwort verwendet werden.

NULL

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

rawbytes

Kann nur mit dem content-Stichwort verwendet werden.

NULL

Jegliche Dekodierung ignorieren. In den Paketrohdaten (raw) suchen.

depth

Kann nur mit dem content-Stichwort verwendet werden.

<Zahl>;

Beispiel: depth:5;

Nach Inhalten innerhalb der angegebenen Anzahl der Bytes der Nutzlast suchen. Wenn der Wert des depth-Stichworts kleiner ist als die Länge des Werts des content-Stichworts, wird niemals eine Übereinstimmung mit der Signatur gefunden.

offset

Kann nur mit dem content-Stichwort verwendet werden

<Zahl>;

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

Die Suche nach den Inhalten nach der angegebenen Anzahl Bytes der Nutzlast beginnen. Dieses Zeichen ist ein absoluter Wert in der Nutzlast. Dem offset-Zeichen ein depth-Zeichen folgen lassen, um die Suche nach einer Übereinstimmung zu beenden, sobald der im depth-Zeichen aufgeführte Wert erreicht ist. Ist kein depth-Wert angegeben, bis zum Ende der Nutzlast weiter nach einer Übereinstimmung suchen.

distance

Kann nur mit dem content-Stichwort verwendet werden

<Zahl>;

Beispiel: content:"ABC"; content:"DEF"; distance:1;

Die Inhalte nach der angegebenen Anzahl an Bytes durchsuchen relativ zum Ende der zuvor gefundenen Inhalte. Dem distance-Zeichen kann das within-Zeichen folgen. Ist kein Wert für das within-Zeichen angegeben, bis zum Ende der Nutzlast nach einer Übereinstimmung weitersuchen.

within

Kann nur mit dem content-Stichwort verwendet werden

<Zahl>;

Beispiel: content: „ABC"; content: "DEF"; within:10;

Nach Inhalten innerhalb der angegebenen Anzahl der Bytes der Nutzlast suchen. Mit dem distance-Zeichen verwenden.

uricontent

uricontent:<Inhalt-Zeichenfolge>;

Beispiel: uricontent:"%3F";

Nach dem normalisierten Anfrage-URI-Feld suchen. Binärdaten können als URI-Wert definiert werden.

isdataat

<Wert> [,relative];

Beispiel: content: "PASS"; isdataat: 50, relative;

Überprüfen, dass die Nutzlast an einer angegebenen Stelle über Daten verfügt. Optional nach Daten relativ zum Ende der vorherigen Inhaltsübereinstimmung suchen.

pcre

pcre:[!]

(/<regex>/|m/<regex>/)[ismxAEGRUB];

Beispiel: pcre:"/BLAH/i";

Das pcre-Stichwort erlaubt es Ihnen, Regeln als Perl-kompatible reguläre Ausdrücke zu schreiben.

i: Groß-/Kleinschreibung ignorieren.

s: Zeilenumbrüche im dot-Metazeichen miteinschließen.

m: Standardmäßig wird die Zeichenkette als eine einzige große Zeile mit Zeichen behandelt (^ und $ entsprechen dem Beginn und Ende der Zeichenkette). Wenn m gesetzt ist, entsprechen ^ und $ dem Anfang oder dem Ende einer neuen Zeile im Puffer, als auch dem Anfang und Ende des Puffers selbst.

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

A: Das Muster muss nur dem Beginn des Puffers entsprechen (das gleiche wie ^).

E: Setzt $ so, dass nur am Ende der Zeichenkette nach einer Übereinstimmung gesucht wird. Ohne E trifft $ auch direkt vor dem letzten Zeichen zu, wenn es eine neue Zeile ist (aber nicht vor anderen neuen Zeilen).

G: Kehrt die Gier der Quantifizierer um, sodass sie nicht standardmäßig gierig sind, sondern erst wenn ein ? folgt.

R: Liefert eine Übereinstimmung relativ zum Ende der letzten Musterübereinstimmung (ähnlich distance:0;).

U: Liefert eine Übereinstimmung in den dekodierten URI-Puffern (ähnlich dem uri-Stichwort).

B: Dekodierte Puffer nicht verwenden (ähnlich wie raw-Stichwort).

byte_test

<zu konvertierende Bytes>, [!]<Operator>, <Wert>, <Offset> [,relative] [,<endian>] [,<Zahlentyp>, string]; oct,dec,hex wird nur mit Zeichenkette verwendet

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;

Ein Byte-Feld auf einen bestimmten Wert (mit Operator) überprüfen. Kann binäre Werte testen oder repräsentative Byte-Zeichenfolgen in ihr binäres Äquivalent konvertieren und testen. bytes_to_convert: Die Anzahl der Bytes, die vom Paketoperator aufgenommen werden sollen, der auszuführende Vorgang zum Testen des Werts (<,>,=,!,&).

value: Der Wert, mit dem der konvertierte Wert getestet wird.

offset: Die Anzahl der Bytes in der Nutzlast, um die Verarbeitung zu starten.

relative: Verwendung eines Offsets (Versatzes) relativ zur letzten Musterübereinstimmung.

big: Die Daten als „big“ verarbeiten.

endian (default) little: Die Daten als Little Endian verarbeiten.

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_zu_konvertieren>, <Offset> [,relative] [,multiplier <Multiplikator-Wert>] [,big] [,little][,string] [,hex] [,dec] [,oct] [,align] [,from_beginning]; oct,dec,hex wird nur mit String verwendet.

Beispiel: content:"|00 00 00 01|"; distance: 4; within: 4; byte_jump: 4,12,relative,align

bytes_to_convert: Die Anzahl der Bytes, die aus dem Paket aufgenommen werden sollen. Multiplikatorwert: Die Anzahl der berechneten Bytes mit dem Wert multiplizieren und diese Anzahl von Bytes überspringen.

operator: Die auszuführende Operation mit welcher der Wert (<,>,=,!,&) getestet werden soll.

value: Der Wert, mit dem der konvertierte Wert verglichen werden soll.

offset: Die Anzahl der Bytes in der Nutzlast, um die Verarbeitung zu starten.

relative: Einen Offset (Versatz) verwenden relativ zur letzten Musterübereinstimmung.

big: Die Daten als „big“ verarbeiten.

endian (default) little: Die Daten als Little Endian verarbeiten.

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 Zahl der konvertierten Bytes bis zur nächsten 32-Bit-Grenze aufrunden.

from_beginning: Am Anfang der Paket-Nutzlast mit dem Überspringen beginnen, anstatt an der aktuellen Position im Paket.

ttl

<Zahl>;><Zahl>;<<Zahl>;

Den Wert von IP Time-to-Live mit dem angegebenen Wert vergleichen.

tos

<Zahl>;

Das Feld IP TOS mit dem angegebenen Wert vergleichen.

id

<Zahl>;

Das Feld IP ID mit dem angegebenen Wert vergleichen.

ipopts

{rr | eol | nop | ts | sec | lsrr |ssrr | satid | any}

rr: Prüfen, ob die Option IP RR (record route) vorhanden ist.

eol: Prüfen, ob die Option IP EOL (end of list) vorhanden ist.

nop: Prüfen, ob die Option IP NOP (no op) vorhanden ist.

ts: Prüfen, ob die Option IP TS (time stamp) vorhanden ist.

sec: Prüfen, ob die Option IP SEC (IP security) vorhanden ist.

Lsrr: Prüfen, ob die Option IP LSRR (loose source routing) vorhanden ist.

ssrr: Prüfen, ob die Option IP SSRR (strict source routing) vorhanden ist.

satid: Prüfen, ob die Option IP SATID (stream identifier) vorhanden ist.

any: Prüfen, ob die Option „IP any“ vorhanden ist.

fragoffset

<Zahl>;

Ermöglicht den Vergleich des IP-Fragment-Offset-Felds 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 Reserviert-Bit.

+: Liefert eine Übereinstimmung mit den angegebenen Bits, plus weiteren.

*: Liefert eine Übereinstimmung, wenn eines der angegebenen Bits gesetzt ist.

!: Liefert eine Übereinstimmung, wenn die angegebenen Bits nicht gesetzt sind.

dsize

[<|>] <Zahl>[ <> Zahl];

Beispiel: dsize:300<>400;

Die Nutzlast des Pakets testen. Wenn data_size angegeben ist, wird die Wiederzusammensetzung des Pakets automatisch deaktiviert, sodass eine Signatur mit den Werten data_size und only_stream falsch ist.

dsize schlägt bei wieder zusammengesetzten Streampaketen fehl, unabhängig von der Größe der Nutzlast.

flags

[!|*|+]<FSRPAU120>[,<FSRPAU120>];

Beispiel: flags:SF,12

Geben Sie die TCP-Flags an, mit denen ein Paket abgeglichen werden soll.

S: Liefert eine Übereinstimmung mit dem SYN-Flag.

A: Liefert eine Übereinstimmung mit dem ACK-Flag.

F: Liefert eine Übereinstimmung mit dem FIN-Flag.

R: Liefert eine Übereinstimmung mit dem RST-Flag.

U: Liefert eine Übereinstimmung mit dem URG-Flag.

P: Liefert eine Übereinstimmung mit dem PSH-Flag.

1: Liefert eine Übereinstimmung mit dem Reserviert-Bit.

1 2: Liefert eine Übereinstimmung mit dem Reserviert-Bit

2 0: Liefert eine Übereinstimmung, wenn das Flag „No TCP“ gesetzt ist.

+: Liefert eine Übereinstimmung mit den angegebenen Bits, plus weiteren.

*: Liefert eine Übereinstimmung, wenn eines der angegebenen Bits gesetzt ist.

!: Liefert eine Übereinstimmung, 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 gesetzt ist, prüft die Signatur den Datenverkehr von und an Port 80.

seq

<Zahl>;

Auf die angegebene TCP-Sequenzzahl überprüfen.

ack

<Zahl>;

Auf die angegebene TCP-Acknowledge-Zahl überprüfen.

window

<Zahl>;

Auf die angegebene TCP-Fenstergröße überprüfen.

itype

[<|>]<Zahl>[<>Zahl];

Geben Sie den ICMP-Typ an, für den eine Übereinstimmung gesucht werden soll.

icode

[<|>]<Zahl>[<>Zahl];

Geben Sie den ICMP-Code an, für den eine Übereinstimmung gesucht werden soll.

icmp_id

<Zahl>;

Nach dem angegebenen ICMP-ID-Wert suchen.

icmp_seq

<Zahl>;

Nach dem angegebenen ICMP-Sequenzwert suchen.

rpc

<Anwendungsnummer>,[<Versionsnummer>|*],[<Prozedurnummer>|*>;

Nach den RPC-Anwendungs-, Versions- und Prozedurnummern in SUNRPCCALL-Anfragen suchen. Sie können den Platzhalter * für die Version und die Prozedurnummer verwenden.

ip_proto

<Zahl>;[!]<Zahl>;><Zahl>;<<Zahl>;

Den IP-Protokoll-Header überprüfen.

samip

NULL

Die Quelle und das Ziel haben dieselben IP-Adressen.