コンテンツにスキップ

カスタム IPS シグネチャ

カスタムシグネチャでは、サーバー、プロトコルやアプリケーションなどのネットワークオブジェクトに関連する脆弱性からネットワークを保護することができます。カスタムシグネチャを作成し、後で IPS ポリシールールに追加することができます。

制限事項

評価版ライセンスの有効期限が切れている場合や、「IPS (侵入防御システム) > IPS ポリシー」で IPS 保護をオフにした場合は、カスタム IPS シグネチャを設定できません。

設定済みのカスタム IPS シグネチャを保持するには、ライセンスの有効期限から 30日以内に IPS 保護を再度有効にするか、IPS 保護を手動でオフにすることをお勧めします。詳細は、IPS ポリシーを参照してください。

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

キーワード 使用率
srcaddr/dstaddr <ipaddress>; 送信元/宛先 IP アドレス。
srcport/dstport <Number>; 送信元/宛先ポート。
content "<content string>;"
二重引用符で囲んだ文字列。
1 つのルールで複数のコンテンツを指定できます。値にはテキストとバイナリデータの組み合わせを含めることができます。通常、バイナリデータはパイプ文字 ( | ) 内に配置します。
nocase

コンテンツキーワードのみに使用できます。
Null (ヌル) コンテンツ値の大文字と小文字の区別を無視します。
rawbytes

コンテンツキーワードのみに使用できます。
Null (ヌル) デコードを無視します。生パケットデータを確認します。
depth

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

コンテンツキーワードのみに使用できます
<number>;
例: content:cgi-bin/phf;offset:4;depth:20;
ペイロードの指定バイト数から後方のコンテンツを検索します。このタグはペイロード内の絶対値です。offset タグの後に depth タグを指定すると、depth タグの指定値まで検索します。depth が指定されていない場合は、ペイロード末尾までマッチ検索を継続します。
distance

コンテンツキーワードのみに使用できます
<number>;
例: content:"ABC"; content:"DEF"; distance:1;
最初に一致したコンテンツの末尾から、指定バイト数分、コンテンツを検索します。distance タグの後に within タグを使用できます。within タグの値が指定されていない場合は、ペイロード末尾まで検索します。
within

コンテンツキーワードのみに使用できます
<number>;
例: content: "ABC"; content: "DEF"; within:10;
指定されたペイロードバイト数内にあるコンテンツを検索します。distance タグとともに使用します。
uricontent uricontent:<content string>;
例: uricontent:"%3F";
正規化された要求の URI フィールドを検索します。バイナリデータは URI 値として定義できます。
isdataat <value> [,relative];
例: content: "PASS"; isdataat: 50, relative;
ペイロードのデータが指定された場所にあることを確認します。前回のコンテンツマッチに関連しているデータを任意で検索します。
pcre pcre:[!]"(/<regex>/ | m/<regex>/)[ismxAEGRUB]";
例: pcre:"/BLAH/i";
Perl と互換性のある正規表現を使用してルールを記述できます。

i: 大文字と小文字を区別しません。

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

m: 文字列は、デフォルトで、1つの長い行として扱われます (^$ は、文字列の冒頭および末尾に一致します)。m を設定すると、^$ はバッファ内の冒頭および末尾に加え、改行の冒頭および末尾にも一致するようになります。

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

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

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

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

R: 最後のパターンマッチの終わりを基準にしたマッチ (distance:0; と同様)。

U: デコードされた URI バッファを照合します (uri キーワードと同様)。

B: デコードされたバッファの使用禁止 (raw キーワードと類似)。
byte_test <bytes to convert>, [!]<operator>, <value>, <offset> [,relative] [,<endian>] [,<number type>, string]; oct,dec,hex used with string only
例: 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 フィールドを (演算子を含む) 指定値でテストします。バイナリ値をテストしたり、代表的なバイト文字列をバイナリに相当する文字列に変換してテストすることができます。

bytes_to_convert: パケット演算子から取得するバイト数。値をテストするために実行する操作です (<>=!&)。

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

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

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

big: データを big として処理します。

endian (default) little: データをリトルエンディアンとして処理します。

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

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

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

oct: 進数で表示される変換された文字列データ。
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: パケットからピックアップするバイト数。
乗数値: 計算されたバイト数に値を掛け、そのバイト数をスキップします。

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

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

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

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

big: データを big として処理します。

endian (default) little: データをリトルエンディアンとして処理します。

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

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

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

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

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

from_beginning: パケットの現在の場所からではなく、パケットペイロードの冒頭から前へスキップする。
ttl <number>;><number>;<<number>; IP time-to-live の値を指定値と確認します。
tos <number>; 指定した値の「IP TOS」フィールドを確認します。
id <number>; 指定した値の「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 アプリケーション、バージョン、プロシージャ番号を確認します。バージョン番号とプロシージャ番号には 「*」ワイルドカードを使用できます。
ip_proto <number>;[!]<number>;><number>;<<number>; IP プロトコルヘッダーを確認します。
samip Null (ヌル) 送信元と宛先は同じ IP アドレスを所有しています。