IDP シグネチャー言語の機能強化
シグネチャー言語の構成を理解する
IDP エンジン コードでは、以下の構成要素がサポートされています。
-
Depth- 指定されたパターンを検索するパケットの深さを指定します。深度値は相対値ではありません。 例えば、奥行きを100に指定できます。
<Depth>100</Depth>
-
Offset—パケット内のパターンの検索を開始する場所を指定できます。オフセット値は相対値ではありません。 たとえば、オフセットの値を 100 として指定できます。
<Offset>100</Offset>
-
Within-パターンマッチ間に最大Nバイトが存在することを確認します。パターン一致は、常に前の一致に対して相対的です。 たとえば、N の値が 10 の場合です。
<Attack> <Member>m01</Member> - - - - - - </Attack> <Attack> <Member>m02</Member> - - - - - - <Within>10</Within> - - - - - - </Attack>
-
Distance— IDP エンジンが前のパターンと比較して指定されたパターンを検索する場所を指定できます。これは常に前の一致に対して相対的であり、距離値は負の値になる可能性があります。 例えば、N の値が 10 の場合、m01 が一致すると、m02 は m01 一致の終わりの後に 10 バイト発生する必要があります。
<Attack> <Member>m01</Member> - - - - - - </Attack> <Attack> <Member>m02</Member> - - - - - - <Distance>10</Distance> - - - - - - </Attack>
-
Ipopts—リストされているすべてのipoptsには、セキュリティパッケージで対応する異常が定義されており、デバイスまたはIDPエンジンで設定されている場合に検出できます。
-
rr - 記録ルート
-
eol - リストの終了
-
nop - ノーオペレーション
-
ts - タイムスタンプ
-
sec - IP セキュリティ
-
esec - IP 拡張セキュリティ
-
lsrr - ルーズ ソース ルーティング
-
ssrr - ストリクト ソース ルーティング
-
satid - ストリーム識別子
-
Junos OS 20.2R1 以降、IDP エンジンは署名言語の構成要素をサポートしています。署名構成により、IDP は、誤検知を減らすのに役立つ、より効率的なシグネチャを生成できます。
-
Byte extractバイト 抽出 キーワードは、長さエンコードプロトコルに対するシグネチャの記述に役立ち、パケットペイロードをバイト単位で読み取り、後で使用する変数として保存します。バイト抽出には、相対および非相対の両方を指定できます。チェーン攻撃ごとに使用できるバイト抽出数は任意です。例えば:
<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>
表 1 は、構成要素のフィールドを
Byte extract
示しています。表 1:バイト抽出出力フィールド フィールド
フィールドの説明
align
バイト境界を指定します。
bitmask
AND 演算のビットマスク(1~4 バイト)を 16 進形式で指定します。
bytes
パケット(1..10)から抽出するバイト数を指定します。
endianness
IDP エンジンが読み取るバイトの処理に使用するエンジアン数を指定します。
multiplier
読み取ったバイトに対して乗算する値を指定します。
offset
IDP エンジンが処理を開始するペイロードのオフセットバイト数を指定します。
relative
最後のパターン一致に対するオフセットを使用するかどうかを指定します。
string
ストリング・データを解析するデータ・タイプを指定します。
var-name
他のルール オプションで参照する変数の名前を指定します。
-
Byte testバイトテスト キーワードでは、運用値でバイトフィールドをテストできます。バイト テストは、相対および非相対の両方を指定できます。
> , < , =, &, ^ ,<=,>=
はサポートされている演算子であり、抽出される最大バイト数は 4 です。例えば: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>
表 2 は、構成要素のフィールドを
Byte test
示しています。表 2:バイト テスト出力フィールド フィールド
フィールドの説明
bitmask
AND 演算のビットマスク(1~4 バイト)を 16 進形式で指定します。
bytes
パケット(1..10)から抽出するバイト数を指定します。
endianness
IDP エンジンが読み取るバイトの処理に使用するエンジアン数を指定します。
negate
演算子が true でないかどうかを確認します。
offset
オフセット変数名またはオフセット値を言及する
operator
抽出された値に対して実行する操作を指定します。
relative
最後のパターン一致に対するオフセットを使用するかどうかを指定します。
rvalue
変換された値は 、rvalue でテストされます。.
string
ストリング・データを解析するデータ・タイプを指定します。
-
Byte jump— Byte jump キーワードは、長さをエンコードしたプロトコルのために書かれた署名に使用され、ペイロードの特定の部分をスキップして、非常に特定の場所で検出を実行します。バイトジャンプ値は、相対および非相対の両方を指定できます。例えば:
<Byte_jump> <Byte>2</Byte> <Offset>8</Offset> <Relative>true</Relative> <Multiplier>2</Multiplier> <From_beginning>true</From_beginning> Endianess>little</Endianess> </Byte_jump>
表 3 は、構成要素のフィールドを
Byte jump
示しています。表 3:バイトジャンプ出力フィールド フィールド
フィールドの説明
align
IDP エンジンによって読み取られるバイトを処理するエンジアン数を指定します。
bitmask
AND 演算のビットマスク(1~4 バイト)を 16 進形式で指定します。
bytes
パケット(1..10)から抽出するバイト数を指定します。
endianness
IDP エンジンが読み取るバイトを処理するエンジアン数を指定します。
from-beginning
ペイロードの先頭からジャンプを有効にします。
from-end
ペイロードの最後からジャンプを有効にします。
multiplier
読み取ったバイトに対して乗算する値を指定します。
offset
使用するオフセット変数名またはオフセット値について言及してください。
post-offset
前方または後方にスキップするバイト数を指定します(-65535..65535)。
relative
最後のパターン一致に対するオフセットを使用するかどうかを指定します。
string
ストリング・データを解析するデータ・タイプを指定します。
-
Byte math— Byte math キーワードを使用すると、抽出された値、指定された値、または既存の変数に対して数学的な演算を実行できます。バイト演算値は、結果を新しい変数に格納します。などの
1) '+' | '-' | '*' | '/' | '<<' | '>>'
操作がサポートされています。相対および非相対の両方を指定できます。例えば:<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>
表 4 は、構成要素のフィールドを
Byte math
示しています。表 4:バイト数学出力フィールド フィールド
フィールドの説明
bitmask
AND 演算のビットマスク(1~4 バイト)を 16 進形式で指定します。
bytes
パケット(1..10)から抽出するバイト数を指定します。
endianness
読み取るバイトを処理するエンジアンネスを指定します。
offset
処理を開始するペイロードのバイト数を指定します(0..65535)。
operator
抽出した値に対して実行する操作を指定します。
relative
最後のパターン一致に対するオフセットを使用するかどうかを指定します。
result
結果を格納する変数名を指定します。
rvalue
特定の数学的演算に使用する値を指定します。
string
ストリング・データを解析するデータ・タイプを指定します。
-
Is-data-at— is-data-at キーワードでは、ペイロードに指定された場所に必要なデータが含まれていることを確認できます。例えば:
M02 <SLE_Constructs> <Isdataat> <Value>50</Value> <negate>false</negate> </Isdataat> <SLE_Constructs>
表 5 は、構成要素のフィールドを
Is-data-at
示しています。表 5:Isdataat 出力フィールド フィールド
フィールドの説明
negate
is-data-at test の結果を無効にします。
offset
オフセット変数名またはオフセット値について言及してください。
relative
最後のパターン一致に対するオフセットを使用するかどうかを指定します。
-
Detection Filter— 検知フィルターは、攻撃が一致する速度を定義します。送信元または宛先のカウントは、シグネチャで指定されたオプション値に従って維持されます。検知フィルターは外部
<SLE_Constructs>
にあり、攻撃メンバー単位ではなく攻撃ごとに指定されます。同じ送信元 IP から 10 秒の間隔で攻撃が 5 回検知されると、攻撃とマークされます。 例えば:<Detection_filter> <count>5</count> <scope>src</scope> other options dst/session <time>10</time> </Detection_filter>