HTTP-Keywords

Diese Keywords dienen dem Vergleich mit bestimmten Teilen eines HTTP-Datenstroms.

Alle Keywords können zusammen mit allen Inhaltsmodifikatoren verwendet werden, wie depth, distance, offset, nocase und within.

Bemerkung

All Puffer sind normalisiert, bis auf die raw-Keywords. Nachfolgende Carriage-Return- und New-Line-Marken werden entfernt.

Die folgenden Request Keywords sind verfügbar:

Keyword

Typ

Richtung

http.uri

Sticky Buffer

Request

http.uri.raw

Sticky Buffer

Request

http.method

Sticky Buffer

Request

http.request_line

Sticky Buffer

Request

http.request_body

Sticky Buffer

Request

http.header

Sticky Buffer

beide

http.host

Sticky Buffer

Request

http.host.raw

Sticky Buffer

Request

http.user_agent

Sticky Buffer

Request

http.accept

Sticky Buffer

Request

http.accept_enc

Sticky Buffer

Request

http.accept_lang

Sticky Buffer

Request

http.cookie

Sticky Buffer

beide

http.referer

Sticky Buffer

Request

http.connection

Sticky Buffer

Request

http.content_type

Sticky Buffer

beide

http.content_len

Sticky Buffer

beide

http.protocol

Sticky Buffer

beide

http.header_names

Sticky Buffer

beide

Die folgenden Response Keywords sind verfügbar:

Keyword

Typ

Richtung

http.location

Sticky Buffer

Response

http.stat_code

Sticky Buffer

Response

http.stat_msg

Sticky Buffer

Response

http.response_line

Sticky Buffer

Response

http.response_body

Sticky Buffer

Response

http.header

Sticky Buffer

beide

http.cookie

Sticky Buffer

beide

http.content_type

Sticky Buffer

beide

http.content_len

Sticky Buffer

beide

http.protocol

Sticky Buffer

beide

http.header_names

Sticky Buffer

beide

http.host

Sticky Buffer zum Abgleich mit dem normalisierten HTTP-Host. Die Normalisierung besteht darin, dass die Portinformationen abgeschnitten und alle Zeichen in Kleinbuchstaben umgewandelt werden. Muster zum Abgleich mit diesem Puffer sollten vollständig klein geschrieben sein oder das nocase-Flag gesetzt haben, obwohl dies nicht zwingend gefordert ist.

Zum Beispiel:

alert http any any -> any any (http.host; content:"abc.com"; sid:1;)

http.host.raw

Sticky Buffer zum Abgleich mit dem unverarbeiteten HTTP-Host. Dieser Puffer kann Portinformationen enthalten.

Zum Beispiel:

alert http any any -> any any (http.host.raw; content:"AbC.com:80"; sid:1;)

http.method

Sticky Buffer zum Abgleich mit der HTTP-Methode. Dieser Puffer kann auf maximal 16 Bytes zutreffen.

Beispiele für Methoden sind: GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS, CONNECT und PATCH.

http.uri und http.uri.raw

Sticky Buffers zum Abgleich mit dem unverarbeiteten HTTP-Request-URI. Aktuell werden http.uri und http.uri.raw synonym verwendet. Für http.uri erfolgt keine Normalisierung.

urilen

Das Keyword urilen vergleicht die Länge der Request URI. Die Operatoren < (kleiner als) und > (größer als) können verwendet werden.

Mögliche Formate von urilen sind:

urilen:1;
urilen:>1;
urilen:<10;
urilen:10<>20;        (größer als 10, kleiner als 20)

Beispiel von urilen in einer Signatur:

alert tcp any any -> any any (classtype:misc-attack; \
http.uri; content:\"placeholder\"; urilen:11<>13, raw; sid:1;)

Sie können auch norm oder raw anhängen, um festzulegen ob normalisierte oder unverarbeitete Puffer verwendet werden sollen.

Bemerkung

Derzeit wird die Inspektion des normalisierten Puffers (über norm) nicht unterstützt.

http.protocol

Sticky Buffer, der das HTTP-Feld aus der HTTP-Request- oder -Response-Zeile prüft. Wenn die Request-Zeile ‚GET / HTTP/1.0rn‘ ist, enthält dieser Puffer ‚HTTP/1.0‘.

Zum Beispiel:

alert http any any -> any any (http.protocol; content:"HTTP/1.0"; sid:1;)

http.request_line

Sticky Buffer zum Abgleich mit der gesamten HTTP-Request-Zeile. Wenn die Request-Zeile ‚GET / HTTP/1.1rn‘ ist, enthält dieser Puffer ‚GET HTTP/1.1‘.

Zum Beispiel:

alert http any any -> any any (http.request_line; content:"GET / HTTP/1.1"; sid:1;)

http.header

Sticky Buffer zum Abgleich mit dem gesamten HTTP-Header.

Zum Beispiel:

alert http any any -> any any (http.header; content:"Sun, 03 May 2015 23:02:37 GMT"; sid:1;)

Bemerkung

Das Keyword http.header.raw wird nicht unterstützt.

http.user_agent

Sticky Buffer zum Abgleich mit dem HTTP-User-Agent in einer HTTP-Request.

Zum Beispiel:

alert http any any -> any any (http.user_agent; content:"Bittorrent"; sid:1;)

http.accept

Sticky Buffer zum Abgleich mit dem HTTP-Accept-Header.

Zum Beispiel:

alert http any any -> any any (http.accept; content:"image/gif"; sid:1;)

http.accept_enc

Sticky Buffer zum Abgleich mit dem HTTP-Accept-Encoding-Header.

Zum Beispiel:

alert http any any -> any any (http.accept_enc; content:"gzip"; sid:1;)

http.accept_lang

Sticky Buffer zum Abgleich mit dem HTTP-Accept-Language-Header.

Zum Beispiel:

alert http any any -> any any (http.accept_lang; content:"en-us"; sid:1;)

http.connection

Sticky Buffer zum Abgleich mit dem HTTP-Connection-Header.

Zum Beispiel:

alert http any any -> any any (http.connection; content:"keep-alive"; sid:1;)

http.content_type

Sticky Buffer zum Abgleich mit dem HTTP-Content-Type-Header.

Zum Beispiel:

alert http any any -> any any (http.content_type; content:"x-www-form-urlencoded"; sid:1;)

http.content_len

Sticky Buffer zum Abgleich mit dem HTTP-Content-Length-Header.

Zum Beispiel:

alert http any any -> any any (http.content_len; content:"1500"; sid:1;)

http.referer

Sticky Buffer zum Abgleich mit dem HTTP-Referer-Header.

Zum Beispiel:

alert http any any -> any any (http.referer; content:".php"; sid:1;)

http.header_names

Sticky Buffer zum Abgleich mit einem künstlichen Puffer, der nur die Namen aller gesehenen HTTP-Header enthält.

Beispielpuffer:

\\r\\nHost\\r\\n\\r\\n

Beispielregel:

alert http any any -> any any (http.header_names; content:"|0d 0a|Host|0d 0a|"; sid:1;)

Folgendes Beispiel prüft, dass nur Host enthalten ist:

alert http any any -> any any (http.header_names; \
        content:"|0d 0a|Host|0d 0a 0d 0a|"; sid:1;)

Folgendes Beispiel prüft, dass User-Agent direkt auf Host folgt:

alert http any any -> any any (http.header_names; \
        content:"|0d 0a|Host|0d 0a|User-Agent|0d 0a|"; sid:1;)

Folgendes Beispiel prüft, dass User-Agent auf Host folgt, aber nicht zwingend direkt:

alert http any any -> any any (http.header_names; \
        content:"|0d 0a|Host|0d 0a|"; content:"|0a 0d|User-Agent|0d 0a|"; \
        distance:-2; sid:1;)

http.request_body

Sticky Buffer zum Abgleich mit dem Body der HTTP-Request.

Bemerkung

Der Modifikator http_client_body ist veraltet und sollte nicht mehr verwendet werden.

http.stat_msg

Sticky Buffer zum Abgleich mit der HTTP-Statusmeldung.

http.stat_code

Sticky Buffer zum Abgleich mit dem HTTP-Statuscode. Dieser Puffer kann auf maximal 16 Bytes zutreffen.

Zum Beispiel:

alert http any any -> any any (http.stat_code; content:"200"; sid:1;)

http.response_line

Sticky Buffer zum Abgleich mit der HTTP-Request-Zeile.

Zum Beispiel:

alert http any any -> any any (http.response_line; content:"HTTP/1.0 200 OK"; sid:1;)

http.response_body

Sticky Buffer zum Abgleich mit dem Body der HTTP-Response.

Zum Beispiel:

alert http any any -> any any (http.response_body; content:"|0A 0B|</span>"; sid:1;)

Bemerkung

  • http.response_body trifft komprimierte Daten (Deflate) wie file_data.

  • Der Modifikator http_server_body ist veraltet und sollte nicht mehr verwendet werden.

http.location

Sticky Buffer zum Abgleich mit den HTTP-Location-Headers.

Zum Beispiel:

alert http any any -> any any (http.location; content:"http://www.genua.de"; sid:1;)

file_data

Synonym für http.response_body.

file.data

Synonym für file_data.