IPS カスタムパターンの構文

キーワード 使用率
srcaddr/dstaddr <ipaddress>; 送信元/宛先 IP アドレス
srcport/dstport <Number>; 送信元/宛先ポート
content 「<content string>;」

ニ重引用符内の文字列。

1 つのルールで複数のコンテンツを指定できます。値にはテキストとバイナリデータの組み合わせを含めることができます。通常、バイナリデータはパイプ文字 (|) 内に配置されます。

nocase

content キーワードにのみ使用できます

NULL コンテンツ値の大文字と小文字の区別を無視します

rawbytes

content キーワードとのみ使用できます
NULL デコードを無視します。生パケットデータを確認します。

depth

content キーワードとのみ使用できます

<number>;

例: depth:5;

指定されたペイロードバイト数内にあるコンテンツを検索します。depth キーワード値がコンテンツキーワード値の長さよりも小さい場合、このシグネチャは決して一致しません。

offset

content キーワードとのみ使用できます

<number>;

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

指定されたペイロードバイト数の後にあるコンテンツの検索を開始します。このタグはペイロード内の絶対値です。depth タグによる指定値以降のマッチ検索を停止するには、offset タグの後に depth タグを使用します。depth が指定されていない場合は、ペイロード末尾までマッチ検索を継続します。

distance

content キーワードとのみ使用できます

<number>;

例: content:「ABC」; content:「DEF」; distance:1;

指定されたバイト数が前回一致したコンテンツの末尾に関連しているコンテンツを検索します。distance タグの後に within タグを使用できます。within タグの値が指定されていない場合は、ペイロード末尾までマッチ検索を継続します。

within

content キーワードとのみ使用できます
<number>;

例: content: 「ABC」; content: 「DEF」; within:10;

指定されたペイロードバイト数内にあるコンテンツを検索します。distance タグとともに使用します。
uricontent uricontent:<content string>;

content: uricontent:「%3F」;

正規化された要求の URI フィールドを検索します。バイナリデータは URI 値として定義できます。
isdataat <value> [,relative];

例: content: 「PASS」; isdataat: 50, relative;

ペイロードのデータが指定された場所にあることを確認します。前回のコンテンツマッチに関連しているデータを任意で検索します。
pcre pcre:[!]「(/<regex>/|m/<regex>/)[ismxAEGRUB]」;

例: pcre:「/BLAH/i」;

pcre キーワードは、perl と互換性のある正規表現を使用してルールを書き込むことができます。

i - 大文字と小文字の区別がありません

s - ドットメタ文字に改行を含めます

m - デフォルトによりこの文字列は文字が含まれる単一の長い行として扱われ、^ と $ はこの文字列の冒頭と末尾で一致します。m が設定されると、バッファ内にある改行の直後または直前、およびバッファの冒頭と末尾で ^ と $ は一致します。

x - エスケープされた場合や文字クラス内にある場合を除き、パターン内の空白データ文字は無視されます。

A - バッファ冒頭でのみパターンマッチする必要があります (^ と同様)。

E - 件名文字列の末尾でのみ一致するように $ を設定します。E を含めない場合、件名文字列が改行だと $ は最終文字の直前で一致します (他の改行の前ではなく)。

G - 量指定子の「「貪欲さ」」を反転します。これにより、デフォルトでは貪欲ではなく、「「?」」の後から貪欲になるように設定できます。

R - relative を最後のパターンマッチ末尾と一致させます (distance:0; と類似)。U - デコードされた URI バッファと一致します (uri キーワードと類似)。

B - デコードされたバッファの使用禁止 (raw キーワードと類似)。

byte_test <bytes to convert>, [!]<operator>, <value>, <offset> [,relative] [,<endian>] [,<number type>, string]; oct,dec,hex は string とのみ使用されます

例: 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;

byte フィールドを (演算子を含む) 指定値でテストします。バイナリ値をテストしたり、代表の byte 文字列をバイナリ相当に変換してテストできます。bytes_to_convert - パケットから取得するバイト数 operator - 値 (<、>、=、!、&) のテストを実行するための操作

value - 変換された値をテストするための値

offset - 処理を開始するペイロード内のバイト数

relative - 最後のパターンマッチに関連する offset を使用する

big - データを big として処理する

endian (default) little - データを little endian として処理する

string - パケット内の文字列形式に格納されたデータ

hex - 16 進数で表示される変換された文字列データ

dec - 10 進数で表示される変換された文字列データ

oct - 8 進数で表示される変換された文字列データ

byte_jump <bytes_to_convert>, <offset> [,relative] [,multiplier <multiplier value>] [,big] [,little][,string] [,hex] [,dec] [,oct] [,align] [,from_beginning]; oct,dec,hex は string とのみ使用されます

例: content:「|00 00 00 01|」; distance: 4; within: 4; byte_jump: 4,12,relative,align

bytes_to_convert - パケットから取得するバイト数 multiplier value - 算出されたバイト数を値で乗算しそのバイトの数だけ前にスキップする

operator - 値 (<、>、=、!、&) のテストを実行するための操作

value - 変換された値をテストするための値

offset - 処理を開始するペイロード内のバイト数

relative - 最後のパターンマッチに関連する offset を使用する

big - データを big として処理する

endian (default) little - データを little endian として処理する

string - パケット内の文字列形式に格納されたデータ

hex - 16 進数で表示される変換された文字列データ

dec - 10 進数で表示される変換された文字列データ

oct - 8 進数で表示される変換された文字列データ

align – 変換されたバイト数を次の 32 ビット境界まで四捨五入する

from_beginning – パケットの現在の場所からではなく、パケットペイロードの冒頭から前へスキップする

ttl <number>;><number>;<<number>; IP time-to-live の値を指定値と確認します
tos <number>; 指定した Value の「IP TOS」フィールドを確認します
id <number>; 指定した Value の「IP ID」フィールドを確認します
ipopts {rr | eol | nop | ts | sec | lsrr |ssrr | satid | any}

rr - IP RR (record route) オプションが存在するか確認します

eol - IP EOL (end of list) オプションが存在するか確認します

nop - IP NOP (no op) オプションが存在するか確認します

ts - IP TS (time stamp) オプションが存在するか確認します

sec - IP SEC (IP security) オプションが存在するか確認します

lsrr - IP LSRR (loose source routing) オプションが存在するか確認します

ssrr - IP SSRR (strict source routing) オプションが存在するか確認します

satid - IP SATID (stream identifier) オプションが存在するか確認します

any - IP に何かしらのオプションがあるか確認します

fragoffset <number>; 許可して、IP フラグメントのオフセットフィールドと 10 進数を比較します
fragbits [+*!]<[MDR]>; IP ヘッダー内で IP 断片化と予約済みのビット数が設定されているか確認します。

M - ビットをより断片化させる

D - ビットの断片化禁止

R - 予約済みのビット

+ - 指定ビットとその他のビットと一致

* - 指定ビットが設定されている場合に一致

- 指定ビットが設定されていない場合に一致

dsize [<|>] <number>[ <> number];

例: dsize:300<>400;

パケットのペイロードサイズをテストします。data_size が指定されている場合パケットの再構築は自動的にオフになるため、data_size と only_stream 値を含むシグネチャは正しく設定されません。dsize はペイロードのサイズに関係なく、パケット再構築の稼働中にエラーが生じます。
flags [!|*|+]<FSRPAU120>[,<FSRPAU120>];

例: Flags:SF,12

パケット内で一致するように、TCP フラグを指定します。

S - SYN フラグと一致

A - ACK フラグと一致

F - FIN フラグと一致

R - RST フラグと一致

U - URG フラグと一致

P - PSH フラグと一致

1 - 予約済みビットと一致

1 2 - 予約済みビットと一致

2 0 - TCP フラグのセットなしと一致

+ - 指定ビットとその他のビットと一致

* - 指定ビットが設定されている場合に一致

- 指定ビットが設定されていない場合に一致

flow to_client|to_server|from_client| from_server ];established;bi_direction;[no_stream|only_stream]; TCP のみ。to_server の値は from_client の値と同じです。to_client の値は from_server の値と同じです。bi_direction タグは、シグネチャを双方向のトラフィックと一致させます。たとえば、「--dst_port 80」 と bi_direction セットを含むシグネチャがある場合、そのシグネチャはポート 80 への/からのトラフィックを確認します。
seq <number>; 指定された TCP シーケンス番号を確認します
ack <number>; 指定された TCP Ack 番号を確認します
window <number>; 指定された TCP window サイズを確認します
itype [<|>]<number>[<>number]; 一致する ICMP の種類を指定します
icode [<|>]<number>[<>number]; 一致する ICMP コードを指定します
icmp_id <number>; 指定した ICMP ID 値を確認します
icmp_seq <number>; 指定した ICMP シーケンス値を確認します
rpc <application number>,[<version number>|*],[<procedure number>|*>; SUNRPCCALL 要求内で RPC アプリケーション、バージョン、プロシージャ番号を確認します。* ワイルドカードは version numer および procedure number に使用できます
ip_proto <number>;[!]<number>;><number>;<<number>; IP プロトコルヘッダーを確認します
samip NULL 送信元と宛先は同じ IP アドレスを所有しています