Syntax für Signaturen für den benutzerdefinierten Angriffsschutz

Info zu Signatursyntax und -vereinbarungen
Wenn Sie den Content für jede IPS-Signatur schreiben, müssen Sie die folgende Syntax verwenden:
rule protocol-type, [Protokolloptionen,] [ip-Protokolloptionen,] "msg", "content"...
Sie müssen jede Signatur mit dem Schlüsselwort
rule
beginnen, gefolgt vom Argument "protocol type", den Protokolloptionen, IP-Protokolloptionen, Msg-Argumenten und Content-Argumenten. Die optionalen Argumente sind in eckigen Klammern eingeschlossen. Geben Sie nur die Informationen in den Klammern ein, nicht die Klammern selbst. Argumente, die von einer Ellipse gefolgt werden, können wiederholt werden. Sie stellen die Informationen für die Argumente mithilfe der unterstützten Operatoren und regulärer Ausdrücke zur Verfügung.
Protokolltypargumente
Dieser Teil der Signatur definiert den Protokolltypen mithilfe der folgenden Syntax:
protocol-type
wobei
protocol-type
einer der folgenden Parameter ist:
  • tcp
  • udp
  • icmp
Der Protokolltyp muss direkt auf das Wort
rule
folgen.
Beispiel:
rule udp
Für die Protokolltypen
tcp
,
udp
und
icmp
sind jeweils optionale Argumente verfügbar.
TCP-Protokoll-Argumente
Zusätzliche Details über das TCP-Protokoll finden Sie unter RFC 793:
TCP-Protokoll-Argumente
Attribut
Beschreibung
Syntax
source
Quell-TCP-Port
source operator (Wert)
wobei
Wert
eine vorzeichenlose 16-Bit-Zahl zwischen 0 und 65535 ist.
Beispiel:
source=(180,2100)
Der Wert muss in Klammern stehen. Der Wert 0 (Null) heißt "alle Ports".
Sie können verschiedene Ports angeben, indem Sie einen Gedankenstrich zwischen zwei Werte stellen (z. B. bedeutet "3-5" Ports 3, 4 und 5). Mehrere Ports können angegeben werden, indem man sie mit Kommas trennt.
dest
Ziel-TCP-Port
dest operator (Wert)
wobei Wert eine vorzeichenlose 16-Bit-Zahl zwischen 0 und 65535 ist.
Beispiel:
dest=(120.125)
Der Wert muss in Klammern stehen. Der Wert 0 (Null) heißt "alle Ports".
Sie können verschiedene Ports angeben, indem Sie einen Gedankenstrich zwischen zwei Werte stellen (z. B. bedeutet "3-5" Ports 3, 4 und 5). Mehrere Ports können angegeben werden, indem man sie mit Kommas trennt.
tcp_flag
TCP-Flags im Paket
tcp_flag operator flag|[Flag]...
wobei
flag
einer der folgenden Parameter ist:
  • fin: Datenende
  • syn: Folgenummern synchronisieren
  • rst: Verbindung zurücksetzen
  • psh: Push-Funktion
  • ack: Bestätigungsfeld bedeutend
  • urg: dringendes Pointer-Feld bedeutend
  • 0: Übereinstimmung mit allen Flags
Beispiel:
tcp_flag&ack|ps
Die meisten "tcp_flag"-Tests verwenden den Operator "&" (bitweises "und") als Maske (d. h. ein Paket muss die angegebenen Flags haben, kann aber auch andere enthalten).
Sie können mehrere Flags in einem Test angeben, indem Sie ein Pipe-Zeichen (|) zwischen den Flags einfügen.
window
TCP-Fenstergröße
window operator size
wobei
operator size
eine vorzeichenlose 16-Bit-Zahl zwischen 0 und 65535 ist.
Beispiel:
window=16384
UDP-Protokollargumente
Zusätzliche Informationen über das UDP-Protokoll finden Sie unter RFC 768:
UDP-Protokollargumente
Attribut
Beschreibung
Syntax
source
Quell-UDP-Port
source operator (Wert)
wobei
Wert
eine vorzeichenlose 16-Bit-Zahl zwischen 0 und 65535 ist.
Beispiel:
source=(180,2100)
Der Wert muss in Klammern stehen. Der Wert 0 (Null) heißt "alle Ports".
Sie können verschiedene Ports angeben, indem Sie einen Gedankenstrich zwischen zwei Werte stellen (z. B. bedeutet "3-5" Ports 3, 4 und 5). Mehrere Ports können angegeben werden, indem man sie mit Kommas trennt.
dest
Ziel-UDP-Port
dest operator (Wert)
wobei
Wert
eine vorzeichenlose 16-Bit-Zahl zwischen 0 und 65535 ist.
Beispiel:
dest=(120)
Der Wert muss in Klammern stehen. Der Wert 0 (Null) heißt "alle Ports".
Sie können verschiedene Ports angeben, indem Sie einen Gedankenstrich zwischen zwei Werte stellen (z. B. bedeutet "3-5" Ports 3, 4 und 5). Mehrere Ports können angegeben werden, indem man sie mit Kommas trennt.
ICMP-Protokollargumente
Ausführliche Beschreibungen der gültigen ICMP-Protokolltyp- und -Codekombinationen finden Sie in den RFCs 792 und 1256:
ICMPv4 und ICMPv6 werden für ICMP-Regeln unterstützt.
ICMPv6 wird ab Version 14.2 unterstützt.
ICMP-Protokollargumente
Attribut
Beschreibung
Syntax
Typ
ICMP-Protokolltyp
Typ Operator-Wert
wobei
Wert
eine vorzeichenlose 8-Bit-Zahl zwischen 0 und 255 ist.
Beispiel:
Typ=0
Code
ICMP-Protokolltyp
Code-Operator-Wert
wobei
Wert
eine vorzeichenlose 8-Bit-Zahl zwischen 0 und 255 ist.
Beispiel:
Code<=10
IP-Protokollargumente
Die IP-Protokollargumente sind unabhängig von den Protokolltypargumenten und gelten für TCP-, UDP- und ICMP-Protokolltypen.
Zusätzliche Informationen zum IP-Protokoll finden Sie unter RFC 791:
IP-Protokollargumente
Attribut
Beschreibung
Syntax
saddr
Quell-IP-Adresse
saddr=(Wert/CIDR)
wobei:
  • Wert
    eine IPv4- oder IPv6-Adresse des Computers, auf dem der Client ausgeführt wird, oder die Variable $LOCALHOST ist.
    IPv6 wird ab Version 14.2 unterstützt.
  • CIDR
    ist eine klassenlose Inter-Domänen-Routingbezeichnung, die angibt, wie viele Bits für das Netzwerkvorzeichen verwendet werden.
Beispiel:
saddr=(127.0.0.0/25)
25 Bits der IPv4-Adresse werden zum Identifizieren des eindeutigen Netzwerks und die restlichen Bits zum Identifizieren des Host verwendet.
saddr=(2001:0db8::0001/32)
32 Bits der IPv6-Adresse werden zum Identifizieren des eindeutigen Netzwerks und die restlichen Bits zum Identifizieren des Host verwendet.
daddr
Ziel-IP-Adresse
daddr=(Wert/CIDR)
wobei:
  • Wert
    eine IPv4- oder IPv6-Adresse des Computers, auf dem der Client ausgeführt wird, oder die Variable $LOCALHOST ist.
    IPv6 wird ab Version 14.2 unterstützt.
  • CIDR
    ist eine klassenlose Inter-Domänen-Routingbezeichnung, die angibt, wie viele Bits für das Netzwerkvorzeichen verwendet werden.
Beispiel:
daddr=(128.0.0.0/4)
Vier Bits der IPv4-Adresse werden zum Identifizieren des eindeutigen Netzwerks und die restlichen Bits zum Identifizieren des Host verwendet.
daddr=(2001:0db8::0002/120)
120 Bits werden zum Identifizieren des eindeutigen Netzwerks und die restlichen Bits zum Identifizieren des Host verwendet.
tos
Typ des Service-Flags im Paket
Dieses Attribut gilt nur für IPv4-Adressen.
tos Operator Wert
wobei
Wert
eine numerische Konstante in einem dezimalen, hexadezimalen oder oktalen Format ist.
Beispiel:
tos=0x4
Gültige IP-tos-Werte finden Sie unter Gültige IP-tos-Werte.
Um auf mehrere IP-tos-Werte in einem Paket zu prüfen, sollte das tos-Argument die Summe der Werte sein, die geprüft werden sollen. Gewöhnlich ist der Operator entweder = oder &. Das Angeben mehrerer dieser Flags mit einem Pipe-Zeichen (|) ist nicht möglich.
tot_len
Gesamtlänge des Pakets
Dieses Attribut gilt nur für IPv4-Adressen.
tot_len Operator-Wert
wobei
Wert
eine 16-Bit-Zahl zwischen 0 und 65535 ist, die die Gesamtlänge des Pakets angibt.
Beispiel:
tot_len>1445
Wenn Sie den Wert angeben, muss der Regelprotokolltyp beachtet werden, damit die zu prüfende Länge richtig berechnet wird. Folgende Header-Längen werden als Hilfe bei der Berechung der tot_len für jeden der unterstützten Protokolltypen herangezogen:
TCP: 20-60 Bytes
UDP: 8 Bytes
ICMP: 8-20 Bytes
ttl
Time to Live (TTL) des Pakets
Dieses Attribut gilt nur für IPv4-Adressen.
ttl Operator-Wert
wobei
Wert
ein 8-Bit-Wert zwischen 0 und 255 ist, der das Time to Live-Merkmal des Pakets angibt.
ip_flag
Fragmentierungsoffsetwert des Pakets
Dieses Attribut gilt nur für IPv4-Adressen.
ip_flag Operator Wert
wobei
Wert
ein 13-Bit-Wert ist, der den Fragmentierungsoffsetwert im Paket angibt.
IP-Fragmentierungsoffsets treten an 8 Byte-Grenzen auf; folglich stellen alle Bit-Werte im Fragmentierungsversatz drei Bit dar.
Gültige IP-tos-Werte
Dez
Hex
Option
2
0x2
Kosten minimieren
4
0x4
Zuverlässigkeit maximieren
8
0x8
Durchsatz maximieren
24
0x18
Verzögerung minimieren
Msg-Argumente
Wenn eine IPS-Signatur Paketinhalt mit den Testbedingungen der Regel erfolgreich abgleicht, wird die Meldung im Msg-Argument angegeben. Das Msg-Argument erscheint im Sicherheitsprotokoll auf dem Client und dem Server. Nur ein Msg-Argument kann in jeder IPS-Signatur eingeschlossen werden.
Syntax:
msg= "Warnmeldung"
Die Warnmeldung muss in doppelte Anführungszeichen eingeschlossen werden und darf keine Interpunktion enthalten. Einfache Anführungszeichen sind nicht zulässig. Der Zweck der Warnmeldung ist, dass Sie ein Ereignis in Ihrem Netzwerk leicht identifizieren können, indem Sie das Sicherheitsprotokoll überprüfen. Folglich müssen alle IPS-Signaturen kurze und dennoch beschreibende Warnmeldungen innerhalb des Msg-Arguments enthalten.
Beispiel:
msg="transversale Schwachstelle IIS-Unicode"
Content-Argumente
Das Inhaltsargument gibt ein Muster an, nach dem innerhalb eines Pakets gesucht wird. Das Inhaltsargument kann in einer IPS-Signatur mehrfach erscheinen. Der Inhalts-Wert muss in doppelte Anführungszeichen eingeschlossen werden (" "). Einfache Anführungszeichen (' ') sind nicht zulässig.
Syntax:
content="Wert"
wobei
Wert
ein Muster ist, das als Zeichenfolge oder binär angegeben wird und in Anführungszeichen eingeschlossen werden muss.
Ein Zeichenfolgenliteral ist eine Gruppe aufeinander folgender Zeichen einschließlich Leerzeichen. Eine Zeichenfolge kann sämtliche Zeichen außer Anführungszeichen ("), umgekehrte Schrägstriche (\) oder Zeilenumbrüche (\n) enthalten: Beispiel:
content="system32"
Ein binäres Literal ist eine Gruppe von aufeinander folgenden Bytes, die im hexadezimalen Format ausgedrückt werden, und in der \x vor jedem Byte steht. Beispiel:
content="\x04\x20\x20\x20\xBF"
Das folgende Beispiel gibt den Inhalt als binäres Literal "\x04\x20\x20\x20\xBF" an.
Zeichenfolgenliterale können mit binären Literalen kombiniert werden, um komplexe Muster zu erstellen. Beispiel:
content="\x0DLocation\x3A"
Optionale Content-Argumente
Sie können zusätzliche optionale Content-Argumente verwenden, um den Inhalt folgendermaßen näher zu kennzeichnen:
  • Groß- und Kleinschreibung
  • HTTP-Decodierung
  • Tiefe und Versatz
Groß- und Kleinschreibung
Sie können eine optionale C-Flagge zur Groß- und Kleinschreibung für jedes Content-Argument angeben. Wenn Sie diese Flagge verwenden, entspricht das Muster des Content-Arguments nur, wenn die Groß- und Kleinschreibung der entspricht, die für die Daten im Paket verwendet wird.
Beispielsweise können Sie die folgende Syntax verwenden:
content= "Wert"C
content="\x0DLocation\x3A "C
HTTP-Decodierung
Sie können die optionale Decodierungsmarkierungsfahne "HTTP H" in jedem Content-Argument verwenden. Wenn Sie die Decodierungsmarkierungsfahne "H HTTP" verwenden, werden die kodierten Zeichen in ein binäres Literal konvertiert, bevor sie einen Mustervergleich versuchen. Sie können "HTTP H" auch nach einer Groß- und Kleinschreibungsmarkierungsfahne "C" verwenden. HTTP-URIs verwenden kodierte Zeichen Wenn der Mustervergleich versucht und normalisiert wird, werden die normalisierten Daten mit dem binären Literal oder dem Zeichenfolgenliteral im Content-Argument verglichen. Unter den meisten Umständen wird die h-Markierungsfahne nur für die TCP-Regeln verwendet, die sich auf eine Anwendung beziehen, die das HTTP-Protokoll verwendet.
Beispielsweise können Sie die folgende Syntax verwenden:
content= "Wert"H
content="\x6f\x6e\x4c\x6f\x61\x64\x3d\x22\x61\x6c\x65\x72\x74\x28"H
Versatz und Tiefe
Sie können den Versatz- und Tiefen-Wert als optionale Argumente im Content verwenden. Der Versatz-Wert wird zuerst angegeben, gefolgt vom Tiefen-Wert.
Beispielsweise können Sie die folgende Syntax verwenden:
content="value"(offset,depth)
Syntax
Beschreibung
Wert
Ein Muster, angegeben als Zeichenfolgenliteral oder binäres Literal, das in Anführungszeichen stehen muss.
offset
Eine positive Ganzzahl in Dezimalschreibweise.
Der Versatz gibt eine alternative Position für den Anfang einer Musterentsprechung an. Außerdem gibt der Versatz an, wie viele Bytes übersprungen werden, bevor die Signatur eine Musterentsprechung versucht.
Ist kein Versatz-Argument vorhanden oder hat es den Wert 0, versucht das Content-Argumentmuster, eine Entsprechung zu finden. Das Muster versucht, einer der folgenden Optionen zu entsprechen:
  • Der Inhalt zu Beginn des destruktiven Paketauftrags
  • Der Teil des Pakets, das dem Protokollheader für das erste Content-Argument folgt
Jedes darauf folgende Content-Argument beginnt automatisch, auf Musterentsprechungen zu prüfen, die auf das Ende der vorherigen erfolgreichen Musterentsprechung folgen.
Tiefe
Eine positive Ganzzahl in Dezimalschreibweise. Die Tiefe gibt die Höchstzahl an Byte an, nach der bei Versuchen des Abgleichs mit einem Muster in einem Content-Argument gesucht werden soll.
Wenn ein Tiefenargument einen Wert von 0 hat, versucht das im Content-Argument enthaltene Muster, eine Entsprechung vom Versatz bis zum Ende des Pakets zu finden. Der Tiefenargumentwert kann nicht gleicher sein als die angegebene Anzahl von Bytes, damit das Muster innerhalb des Arguments des Content-Arguments übereinstimmt.
content="\x04\x20\x20\x20\xBF"(4,5)
Dieses Beispiel lässt vier Byte nach der vorherigen Musterentsprechung oder vom Beginn des Paket-Inhalts aus. Es vergleicht die folgenden fünf Byte mit dem binären Literal, das im Content-Argument enthalten ist.
Streamdepth-Argumente
Sie können das Streamdepth-Argument verwenden, um die Länge des Datenstroms zu begrenzen, in dem die Angriffsschutzregel nach einer Signatur sucht. Sie sollten Streamdepth verwenden, um die Leistung Ihrer benutzerdefinierten Angriffsschutzregeln zu verbessern. Das Streamdepth-Argument ist optional.
Syntax:
streamdepth=
Wert
Zum Beispiel vermuten Sie vielleicht, dass eine Signatur in den ersten 10 KB eines 1 MB-Datenstroms vorhanden ist. Sie können die folgende Syntax verwenden:
streamdepth=10240
Beim Datei-Download stoppt die Angriffsschutzregel mit diesem Streamdepth-Wert die Überprüfung der Signatur nach 10 KB. Da Sie die Überprüfung begrenzen, wird die Leistung des Downloads verbessert.
Wenn Sie einen Streamdepth-Werd von 0 einstellen, wendet der Angriffsschutz die Regel auf den gesamten Datenstrom an.
Unterstützte Operatoren
Viele Argumente in der Signatur-Syntax erfordern einen Operator, der angibt, welche Art von Test für die Überprüfung auf diese Art von Versuch anzuwenden ist.
Unterstützte Operatoren zur Verwendung in IPS-Signaturen beschreibt die unterstützten Operatoren.
Unterstützte Operatoren zur Verwendung in IPS-Signaturen
Operator
Beschreibung
<
Kleiner als
> geschützte Anwendung
Größer als
=
Ist gleich
&
Bitweises UND
In der Signaturbibliothek wird das Und-Zeichen (&) manchmal in Form der HTML-Entity & dargestellt.
<=
Kleiner oder gleich
>=
Größer oder gleich
Syntax für benutzerdefinierte IPS-Signaturen
Sie können benutzerdefinierte IPS-Signaturen erstellen, um einen Versuch, MP3-Dateien über einen Webbrowser oder FTP aufzurufen und herunterzuladen, zu erkennen.
Das Format einer MP3-Datei macht es schwierig, eine MP3-Datei im Netzwerkverkehr zu erkennen. Sie können jedoch die TCP-Pakete anzeigen, um die Befehle und Protokolle zu finden, die verwendet werden, um MP3-Dateien abzurufen. Sie können dann diese Informationen verwenden, um die Syntax für eine benutzerdefinierte IPS-Signatur zu erstellen.
Um eine MP3-Datei zu erkennen und anschließend den Zugriff darauf zu blockieren, schreiben Sie zwei Signaturen. Eine Signatur erkennt eine MP3-Datei über den HTTP-Dienst. Die zweite Signatur erkennt MP3-Dateien über den FTP-Dienst.
Wenn Sie eine benutzerdefinierte IPS-Signatur erstellen, müssen Sie den Inhalt der Signatur eingeben, indem Sie das folgende Format verwenden:
rule
protocol-type
, [
protocol-options,
] [
ip-protocol option,
] msg, content...
Während einer HTTP- oder FTP-Sitzung tauschen der Server und der Client Informationen aus. Die Informationen sind in den TCP-Paketen enthalten, die für den entsprechenden Dienst auf dem Server bestimmt sind. Der HTTP-Dienst verwendet Port 80 und der FTP-Dienst Port 21. Die TCP-Pakete enthalten die erforderlichen Informationen in einer Nutzlastkomponente.
Webbrowser verwenden den Befehl HTTP GET, um MP3-Dateien herunterzuladen. Der FTP-Client verwendet den Befehl FTP RETR, um Dateien herunterzuladen. Der FTP-Befehl wird auch verwendet, wenn mehrere Dateien mit dem Befehl MGET abgerufen werden. Der Dateiname und die jeweilige mp3-Erweiterung ist in beiden Anfragen vorhanden. Beide Protokolle fügen die Zeichen [CR] [LF] ein, um das Ende der Anfrage zu markieren.
Die Syntax der Signatur muss außerdem einige Parameter enthalten, einschließlich eines regulären Ausdrucks, der die bestimmten Befehle identifiziert, die blockiert werden sollen. Reguläre Ausdrücke sind Muster der Zeichen, die mit den Inhalten des Pakets verglichen werden. Die Befehle, die Sie blockieren möchten, sind in diesen Paketen enthalten. Wenn Sie den Namen einer bestimmten Datei nicht kennen, können Sie das Platzhalterzeichen (*) für die unbekannte Anzahl von Zeichen zwischen dem Befehl und dem Dateinamen verwenden. Der Befehl muss in Kleinbuchstaben eingegeben werden; für die Dateierweiterung wird jedoch sowohl Klein- als auch Großschreibung unterstützt.
Der Inhalt der HTTP-Signatur enthält die folgende Syntax:
rule tcp, dest=(80,443), saddr=$LOCALHOST, msg="MP3 GET in HTTP detected", regexpcontent="[Gg][Ee][Tt] .*[Mm][Pp]3 .*"
Der Inhalt der FTP-Signatur enthält die folgende Syntax:
rule tcp, dest=(21), tcp_flag&ack, saddr=$LOCALHOST, msg="MP3 GET in FTP detected", regexpcontent="[Rr][Ee][Tt][Rr] .*[Mm][Pp]3\x0d\x0a"
Syntax für HTTP- und FTP-Signatur erläutert die Syntax für die HTTP- und die FTP-Signatur.
Syntax für HTTP- und FTP-Signatur
Verwenden Sie die folgende Syntax
Führen Sie die folgende Aufgabe aus
Für die HTTP-Signatur:
rule tcp dest=(80,443)
Für die FTP-Signatur:
rule tcp dest=(21)
Meldet der paketbasierten Engine, welcher Datenverkehr durchsucht werden soll. So durchsucht die Engine nicht unnötigen Datenverkehr und verwendet keine Systemressourcen. Je ausführlicher die von Ihnen angegebenen Informationen sind, desto besser ist die Leistung der paketbasierten Engine.
Dieses Argument schränkt die Ziel-Ports auf 80 und 443 für den HTTP-Dienst und auf 21 für den FTP-Dienst ein.
Für die FTP-Signatur:
tcp_flag&ack
Reduziert die Falschmeldungen.
saddr=$LOCALHOST
Stellt sicher, dass die Anfrage vom Host ausgeht.
Für die HTTP-Signatur:
msg="MP3 GET in HTTP"
Für die FTP-Signatur:
msg="MP3 GET in FTP"
Zeigt den Namen für die Signatur an, wenn die Signatur ausgelöst wird. Der Name wird im Sicherheitsprotokoll angezeigt. Verwenden Sie eine beschreibende Zeichenfolge, damit Sie die ausgelöste Signatur im Protokoll identifizieren können.
Für die HTTP-Signatur:
regexpcontent="[Gg][Ee][Tt] .*[Mm][Pp]3 .*"
Für die FTP-Signatur:
regexpcontent="[Rr][Ee][Tt][Rr] .*[Mm][Pp]3\x0d\x0a"
Gleicht diese Zeichenfolge im HTTP- oder im FTP-Datenverkehr mit dem Auftrag in den TCP-Paketen ab. Um Falschmeldungen zu reduzieren, verwenden Sie dieses Argument mit Bedacht.
Die Zeichenfolge entspricht dem ASCII-Text des TCP-Pakets: "GET [.*].mp3[CR][LF]" für die HTTP-Signatur und "RETR [.*].mp3[CR][LF]" für die FTP-Signatur.
Die Zeichenfolge ist so konfiguriert, dass die Groß- und Kleinschreibung nicht beachtet werden muss.