Verbesserungen der IDP-Signatursprache
Die Konstrukte der IDP-Signatursprache ermöglichen es IDP, effizientere Signaturen zu generieren, die dazu beitragen, Fehlalarme zu reduzieren. Dies kann mithilfe der Signature Language erreicht werden, die Angriffsmuster mithilfe von regelbasierter Syntax, Kontexten und Übereinstimmungsbedingungen definiert.
Grundlegendes zu Signatursprachkonstrukten
Die IDP-Signatursprachenkonstrukte in Junos OS sind die Konstrukte, die in der IDP-Signatursprache verfügbar sind. Die Konstrukte wurden entwickelt, um die Erkennungs- und Präventionsfähigkeiten von Netzwerksicherheitsmaßnahmen zu verbessern. Die Sprache bietet eine Reihe von Tools und Funktionen zum Definieren von Signaturen, die verschiedene Arten von böswilligen Aktivitäten und anomalen Datenverkehrsmustern erkennen können. Netzwerkadministratoren können effektive Sicherheitssignaturen erstellen. Die Konstrukte enthalten Optionen zum Definieren von Datenverkehrsmustern, zum Angeben von Bedingungen für Warnungen und zum Einbinden von Kontextinformationen, um die Genauigkeit und Relevanz von Erkennungen zu verbessern.
Die folgenden Konstrukte werden im IDP-Engine-Code unterstützt:
-
Depth: Gibt die Tiefe in einem Paket an, mit der nach dem angegebenen Muster gesucht werden soll. Der Tiefenwert ist nicht relativ. Sie können z. B. die Tiefe als 100 angeben.
<Depth>100</Depth>
-
Offset: Hier können Sie angeben, wo mit der Suche nach einem Muster in einem Paket begonnen werden soll. Der Offset-Wert ist nicht relativ. Sie können z. B. einen Wert für offset als 100 angeben.
<Offset>100</Offset>
-
Within: Stellt sicher, dass zwischen Musterübereinstimmungen maximal N Byte vorhanden sind. Die Musterübereinstimmung ist immer relativ zu einer vorherigen Übereinstimmung. Beispiel, wenn der Wert von N 10 ist.
<Attack> <Member>m01</Member> - - - - - - </Attack> <Attack> <Member>m02</Member> - - - - - - <Within>10</Within> - - - - - - </Attack>
-
Distance: Hier können Sie angeben, wo die IDP-Engine nach dem angegebenen Muster relativ zur vorherigen Musterübereinstimmung suchen muss. Dies ist immer relativ zur vorherigen Übereinstimmung und der Entfernungswert kann negativ sein. Wenn der Wert von N z. B. 10 ist, sollte m02 10 Byte nach dem Ende der m01-Übereinstimmung auftreten, sobald m01 übereinstimmt:
<Attack> <Member>m01</Member> - - - - - - </Attack> <Attack> <Member>m02</Member> - - - - - - <Distance>10</Distance> - - - - - - </Attack>
-
IpoptsFür alle aufgelisteten IPOPTs sind entsprechende Anomalien im Sicherheitspaket definiert und können erkannt werden, wenn sie auf dem Gerät oder der IDP-Engine konfiguriert sind:
-
rr - Route aufzeichnen
-
eol - Ende der Liste
-
nop - Keine Operation
-
ts - Zeitstempel
-
sec – IP-Sicherheit
-
esec – Erweiterte IP-Sicherheit
-
lsrr – Routing mit losen Quellen
-
ssrr – Striktes Quell-Routing
-
satid - Stream-Bezeichner
-
-
Byte extract—Das Schlüsselwort Byte extract hilft beim Schreiben von Signaturen für längenkodierte Protokolle, liest die Paketnutzlast in Byte und speichert sie als Variable für die spätere Verwendung. Der Byte-Extrakt kann sowohl relativ als auch nicht relativ sein. Pro Kettenangriff kann eine beliebige Anzahl von Byte-Extrakten verwendet werden.Zum Beispiel:
<Byte_Extract> <Byte>4</Byte> <Offset>12</Offset> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <Multiplier>2</Multiplier> <String>dec</String> <align>True</align> <Name>msg_len</align> </Byte_Extract>
Tabelle 1 listet die Felder für das
Byte extract
Konstrukt auf.Tabelle 1: Byte-Extrakt-Ausgabefelder Feld
Feldbeschreibung
align
Geben Sie die Byte-Ausrichtung an.
bitmask
Geben Sie die Bitmaske (1-4 Bytes) für die UND-Operation im Hexadezimalformat an.
bytes
Geben Sie die Anzahl der Bytes an, die aus dem Paket extrahiert werden sollen (1-10).
endianness
Geben Sie die Endianness an, mit der die von der IDP-Engine gelesenen Bytes verarbeitet werden sollen.
multiplier
Geben Sie den Wert an, der mit den gelesenen Bytes multipliziert werden soll.
offset
Geben Sie die Offset-Anzahl der Bytes in der Nutzlast an, von der aus die IDP-Engine mit der Verarbeitung beginnen soll.
relative
Geben Sie an, ob ein Versatz relativ zur letzten Musterübereinstimmung verwendet werden soll oder nicht.
string
Geben Sie den Datentyp an, in dem Zeichenfolgendaten analysiert werden sollen.
var-name
Geben Sie den Namen der Variablen an, auf die in anderen Regeloptionen verwiesen werden soll.
-
Byte testMit dem SchlüsselwortByte test können Sie das Bytefeld mit einem operativen Wert testen. Der Bytetest kann sowohl relativ als auch nicht relativ sein.
> , < , =, &, ^ ,<=,>=
sind die unterstützten Operatoren und die maximale Anzahl der extrahierten Bytes beträgt 4.Zum Beispiel:M02 <SLE_Constructs> <Within>50</Within> <Byte_Test> <Byte>4</Byte> <Operator>=</Operator> <Offset>12</Offset> <Value>12</Value> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <String>dec</String> <align>True</align> </Byte_Test>
Tabelle 2 listet die Felder für das
Byte test
Konstrukt auf.Tabelle 2: Byte-Test-Ausgabefelder Feld
Feldbeschreibung
bitmask
Geben Sie die Bitmaske (1-4 Bytes) für die UND-Operation im Hexadezimalformat an.
bytes
Geben Sie die Anzahl der Bytes an, die aus dem Paket extrahiert werden sollen (1-10).
endianness
Geben Sie die Endianness an, mit der die von der IDP-Engine gelesenen Bytes verarbeitet werden sollen.
negate
Überprüfen Sie, ob der Operator nicht wahr ist.
offset
Erwähnen Sie den Namen der Offset-Variablen oder den Offset-Wert
operator
Geben Sie den Vorgang an, der für einen extrahierten Wert ausgeführt werden soll.
relative
Geben Sie an, ob ein Versatz relativ zur letzten Musterübereinstimmung verwendet werden soll oder nicht.
rvalue
Der konvertierte Wert wird mit rvalue getestet. .
string
Geben Sie den Datentyp an, in dem Zeichenfolgendaten analysiert werden sollen.
-
Byte jumpDas Schlüsselwort Byte-Sprung wird für Signaturen verwendet, die für längencodierte Protokolle geschrieben wurden, um bestimmte Teile der Nutzlast zu überspringen und eine Erkennung an ganz bestimmten Stellen durchzuführen. Der Bytesprungwert kann sowohl relativ als auch nicht relativ sein.Zum Beispiel:
<Byte_jump> <Byte>2</Byte> <Offset>8</Offset> <Relative>true</Relative> <Multiplier>2</Multiplier> <From_beginning>true</From_beginning> Endianess>little</Endianess> </Byte_jump>
Tabelle 3 listet die Felder für das
Byte jump
Konstrukt auf.Tabelle 3: Byte-Sprung-Ausgabefelder Feld
Feldbeschreibung
align
Geben Sie die Endianness an, mit der die von der IDP-Engine gelesenen Bytes verarbeitet werden sollen.
bitmask
Geben Sie die Bitmaske (1-4 Bytes) für die UND-Operation im Hexadezimalformat an.
bytes
Geben Sie die Anzahl der Bytes an, die aus dem Paket extrahiert werden sollen (1-10).
endianness
Geben Sie die Endianness an, mit der Bytes, die von der IDP-Engine gelesen werden, verarbeitet werden sollen.
from-beginning
Aktivieren Sie den Sprung vom Anfang der Nutzlast.
from-end
Aktivieren Sie den Sprung vom Ende der Nutzlast.
multiplier
Geben Sie den Wert an, der mit den gelesenen Bytes multipliziert werden soll.
offset
Geben Sie den Namen der Offset-Variablen oder den zu verwendenden Offset-Wert an.
post-offset
Geben Sie die Anzahl der Bytes an, die vorwärts oder rückwärts übersprungen werden sollen (-65535..65535).
relative
Geben Sie an, ob ein Versatz relativ zur letzten Musterübereinstimmung verwendet werden soll oder nicht.
string
Geben Sie den Datentyp an, in dem Zeichenfolgendaten analysiert werden sollen.
-
Byte mathMit dem Schlüsselwort Byte math können Sie eine mathematische Operation für einen extrahierten Wert, einen angegebenen Wert oder eine vorhandene Variable ausführen. Der mathematische Bytewert speichert das Ergebnis in einer neuen resultierenden Variablen. Die Vorgänge wie werden
1) '+' | '-' | '*' | '/' | '<<' | '>>'
unterstützt. Es kann sowohl relativ als auch nicht-relativ sein.Zum Beispiel:<SLE_Constructs> <Byte_Math> <Byte>4</Byte> <Operator>+</Operator> <Offset>12</Offset> <rValue>12</rValue> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <String>dec</String> <align>True</align> <result_var>var1</result_var> </Byte_Math> <SLE_Constructs>
In Tabelle 4 sind die Felder für das
Byte math
Konstrukt aufgeführt.Tabelle 4: Mathematische Byte-Ausgabefelder Feld
Feldbeschreibung
bitmask
Geben Sie die Bitmaske (1-4 Bytes) für die UND-Operation im Hexadezimalformat an.
bytes
Geben Sie die Anzahl der Bytes an, die aus dem Paket extrahiert werden sollen (1-10).
endianness
Geben Sie die Endianness an, mit der gelesene Bytes verarbeitet werden sollen.
offset
Geben Sie die Anzahl der Bytes in der Nutzlast an, um die Verarbeitung zu starten (0..65535).
operator
Geben Sie den Vorgang an, der für den extrahierten Wert ausgeführt werden soll.
relative
Geben Sie an, ob ein Versatz relativ zur letzten Musterübereinstimmung verwendet werden soll oder nicht.
result
Geben Sie den Variablennamen an, unter dem das Ergebnis gespeichert werden soll.
rvalue
Geben Sie den Wert an, der für die spezifische mathematische Operation verwendet werden soll.
string
Geben Sie den Datentyp an, in dem die Zeichenfolgendaten analysiert werden sollen.
-
Is-data-at— Mit dem Schlüsselwort is-data-at können Sie überprüfen, ob die Nutzlast die erforderlichen Daten an einem bestimmten Speicherort enthält. Zum Beispiel:
M02 <SLE_Constructs> <Isdataat> <Value>50</Value> <negate>false</negate> </Isdataat> <SLE_Constructs>
In Tabelle 5 sind die Felder für das
Is-data-at
Konstrukt aufgeführt.Tabelle 5: Isdataat-Ausgabefelder Feld
Feldbeschreibung
negate
Negiert die Ergebnisse des is-data-at-Tests .
offset
Erwähnen Sie den Namen der Offset-Variablen oder den Offset-Wert.
relative
Geben Sie an, ob ein Versatz relativ zur letzten Musterübereinstimmung verwendet werden soll oder nicht
-
Detection Filter— Der Erkennungsfilter definiert die Rate, mit der der Angriff übereinstimmen soll. Eine Zählung wird entweder für die Quelle oder das Ziel gemäß dem in der Signatur angegebenen Optionswert beibehalten. Der Erkennungsfilter befindet sich außerhalb
<SLE_Constructs>
und wird pro Angriff und nicht pro Element des Angriffs angegeben. Wenn ein Angriff 5 Mal in einem Intervall von 10 Sekunden von derselben Quell-IP aus erkannt wird, wird er als Angriff gekennzeichnet. Zum Beispiel:<Detection_filter> <count>5</count> <scope>src</scope> other options dst/session <time>10</time> </Detection_filter>