Cisco Intrusion Detection System Device Manager および Event Viewer インストレーション ユーザ ガイド
シグニチャ エンジンの使用
シグニチャ エンジンの使用
発行日;2012/02/07 | 英語版ドキュメント(2010/02/22 版) | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 4MB) | フィードバック

目次

シグニチャ エンジンの使用

一般情報

シグニチャ エンジン

アラームの処理

設定の解析

MASTER エンジンの設定に関する制約事項

Engine Summarizer

MASTER エンジンのパラメータ

正規表現の構文

エラー メッセージ

ATOMIC エンジン

ATOMIC エンジンについて

ATOMIC.ARP エンジンのパラメータ

ATOMIC.ICMP エンジンのパラメータ

ATOMIC.IPOPTIONS エンジンのパラメータ

ATOMIC.L3.IP エンジンのパラメータ

ATOMIC.TCP エンジンのパラメータ

ATOMIC.UDP エンジンのパラメータ

ATOMIC エンジンの設定に関する制約事項

FLOOD エンジン

FLOOD エンジンについて

FLOOD.HOST.ICMP エンジンのパラメータ

FLOOD.HOST.UDP エンジン

FLOOD.NET エンジンのパラメータ

FLOOD エンジンの設定に関する制約事項

HTTP 解読

HTTP 解読について

変換されない文字

デコードのバリエーション

サポートされているデコード

エラー状態

解読アラーム

OTHER エンジン

OTHER エンジンについて

OTHER エンジンに属するシグニチャのリスト

OTHER エンジンのパラメータ

SERVICE エンジン

SERVICE エンジンについて

SERVICE エンジンの設定に関する制約事項

SERVICE.DNS エンジンのパラメータ

SERVICE.FTP エンジンのパラメータ

SERVICE.GENERIC エンジンのパラメータ

SERVICE.HTTP エンジンについて

HTTP フィールド セクション

一致文字列長

SERVICE.HTTP エンジンに対する制限および制約事項

SERVICE.HTTP エンジンのパラメータ

SERVICE.IDENT エンジンのパラメータ

SERVICE.MSSQL エンジンのパラメータ

SERVICE.NTP エンジンのパラメータ

SERVICE.RPC エンジンのパラメータ

SERVICE.SMB エンジンのパラメータ

SERVICE.SNMP エンジンについて

SERVICE.SNMP エンジンに関する制限事項

SERVICE.SNMP エンジンのパラメータ

SERVICE.SSH エンジンのパラメータ

STATE.STRING エンジン

STATE.STRING エンジンについて

STATE.STRING エンジンに関する制限事項

STATE.STRING エンジンのパラメータ

事前定義済みステート マシン

ステート マシン エンジンの遷移パラメータ

SERVICE.SMTP エンジンの遷移

STATE.STRING.CISCOLOGIN エンジンの遷移

STATE.STRING.LPRFORMAT エンジンの遷移

STRING エンジン

STRING エンジンについて

一致文字列長

STRING エンジンのパラメータ

STRING エンジンに関する制限事項

SWEEP エンジン

SWEEP エンジンについて

SWEEP エンジンの設定に関する制約事項

SWEEP.HOST.ICMP エンジンのパラメータ

SWEEP.HOST.TCP エンジンのパラメータ

SWEEP.MULTI エンジンのパラメータ

SWEEP.OTHER.TCP エンジンのパラメータ

SWEEP.PORT.TCP エンジンのパラメータ

SWEEP.PORT.UDP エンジンのパラメータ

SYSLOG エンジン

TROJAN エンジンと TRAFFIC エンジン

シグニチャ エンジンの使用

この付録では、シグニチャ エンジンおよびそのパラメータについて説明します。シグニチャのチューニングおよび作成に関する詳細については、「シグニチャの設定」を参照してください。

この付録の構成は次のとおりです。

「一般情報」

「ATOMIC エンジン」

「FLOOD エンジン」

「HTTP 解読」

「OTHER エンジン」

「SERVICE エンジン」

「STATE.STRING エンジン」

「STRING エンジン」

「SWEEP エンジン」

「SYSLOG エンジン」

「TROJAN エンジンと TRAFFIC エンジン」

一般情報

次の項では、シグニチャ エンジンに関する一般事項について説明します。

「シグニチャ エンジン」

「アラームの処理」

「設定の解析」

「MASTER エンジンの設定に関する制約事項」

「Engine Summarizer」

「MASTER エンジンのパラメータ」

「正規表現の構文」

「エラー メッセージ」

シグニチャ エンジン

シグニチャ エンジンは、センサーを構成するコンポーネントの 1 つで、特定のカテゴリに属する数多くのシグニチャをサポートしています。エンジンは、パーサーとインスペクタから構成されます。それぞれのエンジンには所定のパラメータ群が用意されており、各パラメータは許容された範囲内または選択肢内の値を取ります。

表 A-1 は、シグニチャ エンジンとその説明をまとめたものです。

 

表 A-1 シグニチャ エンジン

エンジン
説明

ATOMIC.ARP

ARP の簡易シグニチャおよびクロスパケット シグニチャ。

ATOMIC.ICMP

Type、Code、Sequence、ID という 4 つのパラメータに基づく簡易 ICMP アラーム。

ATOMIC.IPOPTIONS

レイヤ 3 オプションのデコードに基づく簡易アラーム。

ATOMIC.L3.IP

簡易レイヤ 3 IP アラーム。

ATOMIC.TCP

Port、Destination、Flags、single packet Regex という 4 つのパラメータに基づく簡易 TCP パケット アラーム。SummaryKey を使用して、MinHits および Summarize カウントのアドレス ビューを定義します。できるだけ高いパフォーマンスを実現するためには、xxxx という値の StorageKey を使用します。

ATOMIC.UDP

Port、Direction、DataLength という 3 つのパラメータに基づく簡易 UDP パケット アラーム。

FLOOD.HOST.ICMP

単一のホストへの ICMP フラッド。

FLOOD.HOST.UDP

単一のホストへの UDP フラッド。

FLOOD.NET

ネットワーク セグメントへのマルチプロトコル フラッド。この検査では、IP アドレスはワイルドカード化されます。

OTHER

このエンジンは、共通パラメータを変更できるように汎用シグニチャをグループ化する際に使用します。シグニチャの共通パラメータに対するインターフェイスが定義されます。

SERVICE.DNS

DNS サービスを分析します。

SERVICE.FTP

FTP サービスの特殊デコード アラーム。

SERVICE.GENERIC

カスタム サービス/ペイロードのデコード。十分な知識のあるユーザだけが使用します。

SERVICE.HTTP

HTTP プロトコル デコード ベースの文字列エンジン。反回避の URL 解読も含まれます。

SERVICE.IDENT

IDENT サービス(クライアントおよびサーバ)アラーム。

SERVICE.MSSQL

Microsoft SQL サービス インスペクション エンジン。

SERVICE.NTP

ネットワーク タイム プロトコル ベースのシグニチャ エンジン。

SERVICE.RPC

RPC サービスを分析します。

SERVICE.SMB

SMB SuperInspector シグニチャ。

SERVICE.SMTP

SMTP プロトコルを検査します。

SERVICE.SNMP

SNMP トラフィックを検査します。

SERVICE.SSH

SSH ヘッダー デコード シグニチャ。

SERVICE.SYSLOG

syslog を処理します。

STATE.STRING.CISCOLOGIN

Telnet ベースの Cisco Login 検査エンジン。

STATE.STRING.LPRFORMATSTRING

LPR プロトコルを検査します。

STRING.ICMP

汎用の ICMP ベース文字列検索エンジン。

STRING.TCP

汎用の TCP ベース文字列検索エンジン。

STRING.UDP

汎用の UDP ベース文字列検索エンジン。

SWEEP.HOST.ICMP

ICMP を使用してノードの範囲をスイープしている単一のホスト。

SWEEP.HOST.TCP

TCP 上のホスト スイープおよびサービス スイープを検出します。

SWEEP.MULTI

クロスプロトコル スイープを実行します。

SWEEP.OTHER.TCP

フィンガープリント スキャンを実行します。

SWEEP.PORT.TCP

2 つのノード間のポート スイープを検出します。

SWEEP.PORT.UDP

2 つのノード間における複数の宛先ポートへの UDP 接続を検出します。

アラームの処理

アラーム出力ユニットからは、EventStore へアラームが送信されます。EventStore には、イベントのさまざまなアトリビュートがあります。その中には、eventID、severity、originator block、time block など、必ず使用されるアトリビュートもあれば、1 つのアラームに対して複数のアドレスまたはポートを指定できる participant block など、オプションのアトリビュートもあります。

オプションの alertDetails フィールドは、アラームに関連付けられた追加の文字列データ用として頻繁に使用されます。

context block は、アラームの原因となったパケットをリレーする際に使用されます。STRING エンジン、STATE エンジン、および HTTP エンジンでは通常、この context block だけが使用されます。

アラームに対しては通常、participant block に複数のアドレスまたはポートが指定されることはありません。アドレスまたはポートが複数指定されるのは、スイープなど特殊な場合です。

設定の解析

XML データ形式の新しい設定とともに、setConfig Control Transaction(CT; 制御トランザクション)が受信されます。エンジンでは、このデータの解析および解釈を通じて、必須パラメータの不足、範囲外のパラメータ値、相互に排他的なパラメータなど、制約違反のチェックが行われます。エラーが検出されると、setConfig CT の受信は拒否され(エラー コードが表示され)、制約違反のあるパラメータについての詳細な情報とともにエラー文字列が発信者に返されます。

MASTER エンジンの設定に関する制約事項

MASTER エンジンのパラメータには、設定に関して次のような制約があります。

すべての MASTER パラメータがすべてのサブエンジンで解釈されるわけではない。


) すべてのサブエンジンでは使用されない主なパラメータには、WantFrag、MaxInspectLength、ResetAfterIdle などがあります。


AlarmInterval を使用する場合は、次のようなパラメータ設定を行う必要がある。

MinHits を 1 未満に設定する。

AlarmThrottle を FireAll に設定する。

ChokeThreshold を ANY に設定する。

ThrottleInterval に有効な値を設定する。

MinHits と AlarmThrottle FireOnce は同時に使用できない。

ChokeThreshold と AlarmThrottle FireOnce は同時に使用できない。

AlarmThrottle が GlobalSummarize である場合、ChokeThreshold は意味を持たない。

一部のシグニチャ エンジンでは、カスタム シグニチャはサポートされていません。次のエンジンはシグニチャに特化したもので、他のエンジンのようにプロトコル デコードに対する汎用性はありません。

これらのエンジンに基づいても、カスタム シグニチャを作成できません。

SERVICE.SMB

SERVICE.SSH

TRAFFIC.ICMP

TROJAN.BO2K

TROJAN.TFN2K

TROJAN.UDP

これらのエンジンに対してカスタム シグニチャを作成しようとすると、「 Error: Array contains max entries, could not add new entry 」というエラー メッセージが表示されます。

Engine Summarizer

Summarizer を使用すると、センサーから送信されたアラームの量を軽減すると同時に、基本集約機能として、複数のイベントを 1 つのアラームにまとめることができます。また、シグニチャごとに特別なパラメータを指定することにより、アラームの処理方法をさまざまに変更できます。各シグニチャには、推奨される通常の処理を実行するためのデフォルト設定が用意されています。各シグニチャの設定を修正することにより、エンジンのタイプごとに定められた制約の範囲内でデフォルトの処理方法を変更できます。要約機能は、固定モード(サマリー モードの自動アップグレードは不可)または可変モード(自動アップグレードおよび自動ダウングレードが可能)で動作します。

可変モードは、「stick」などのアンチ IDS ツールに対処するための機能です。アンチ IDS ツールとは、不正なトラフィックを送信することにより IDS に短時間で大量のアラームを生成させるものです。こうした攻撃が行われると、画面に表示されるアラームが膨大な数にのぼるため、オペレータはそれらのアラームを削除せざるをえなくなります。しかも、その煩雑な画面の中には正規のアラームが含まれている可能性もあります。そのためアンチ IDS ツールは、IDS コンソールのサービス拒絶を引き起こす原因となりうるものです。

可変モードでは、アラーム量の監視が(シグニチャごとに)行われ、急激な増加が検出されると、ある一定時間(インターバル)内の特定の時点以降、アラームの生成が一時的に抑制されます。そして、そのインターバルが終了すると、要約アラームが送信され、通常の動作に戻ります。モードのアップグレードおよびダウングレードとは、一定時間(インターバル)内にアドレス セットのシグニチャに対するアラームの抑制および要約の処理方法が自動的に変更されることを指します。

固定モードでは、シグニチャのパラメータに指定されていないかぎり、アラームの生成が抑制されることはありません。

基本集約機能には、2 つのモードがあります。簡易なモードでは、検出されたヒット数がシグニチャに設定されたしきい値を超えた時点でアラームが送信されます。一方、高度なモードでは、各インターバルにおけるヒット数がカウントされます。具体的には、ヒット数が X 、インターバルの長さが Y 秒という条件を設定して監視を行い、直前の Y 秒間に検出されたヒット数が X に達した場合に限ってアラームが送信されます。ここで、「ヒット」とはイベントを表すために使用した用語で、基本的にはアラームを指します。ただし、ヒット数がしきい値を超過するまでは、センサーからアラームとして送信されることはありません。

次に示すのは、シグニチャ アラームの動作を設定する際に使用するパラメータです。

ThrottleInterval には、カウント アルゴリズムを実行するインターバルの長さ(秒単位)を指定します。

MinHits には、アラームの送信に最低限必要なヒットのカウント数を指定します。MinHits は、AlarmInterval と併用することも、単独で使用することもできます。併用するかしないかによって、実行する動作は異なります。AlarmInterval に値を指定しない場合は、インスペクタが有効である間にカウントされたヒットの総数が対象となります。この値は、タイムアウト後もリセットされません。この機能は、経過時間を考慮しないでヒット数をカウントする場合に使用します。

AlarmInterval は、一定時間におけるヒット数のカウントを有効にする場合に使用します。AlarmInterval に値を指定すると、直前の Y 秒間に検出されたアクティビティに基づいて継続的にアラームがカウントされ、直前の Y 秒間に X 件のヒットがカウントされた場合に限りアラームが送信されます。ここで、 X は MinHits に指定した値、 Y は ThrottleInterval に指定した値です。この機能は、アラーム送信をある一定時間内に限定する場合に使用します。AlarmInterval は主に、ログイン失敗シグニチャに使用します。この場合、直前の 60 秒間にログインを 3 回失敗すると、アラームが送信されます。このシグニチャでは、経過時間の識別子を使用しない場合でも、いずれかの時点で(1 時間後を目安として)アラームが送信されることになります。ただし、ログインに失敗する間隔が極めて短い場合は、パスワードの総当り攻撃など深刻なイベントと考えられますが、単なるログインの失敗は一般的なイベントであるため、このようにして送信されたアラームは深刻な事態を示すものではありません。

AlarmThrottle には、使用する要約モードを指定します。

FireAll を指定した場合は、ChokeThreshold の設定に基づいて自動アップグレードが実行されないかぎり、アラームの送信は制限されません。

FireOnce を指定すると、(アドレス セット上の)インスペクタが有効である間に一度だけアラームが送信されます。

Summarize を指定すると、インターバルの中で最初のアラームが送信された後、カウントが開始されます。そのインターバルが終了した時点で、イベントが複数存在する場合は、要約アラームが送信されます。この要約アラームの内容は、alertDetails フィールドに「Interval Summary: X alarms this interval」という文字列が指定されていることを除けば、送信済みの元のアラームと同じものです。要約アラームは、SummaryKey(またはそのデフォルト値)により指定されたアドレス セット上でカウントされます。

GlobalSummarize は、Summarize とほぼ同じ働きを持ちます。異なるのは、alertDetails フィールドに「Global Summary: X alarms this interval」という文字列が指定されている点と、カウントに使用されるアドレス セットがグローバル(xxxx)キーである点です。つまり、センサー上で同一の SIGID アラームはすべて 1 か所でカウントされ、Global Summary の文字列として表示される数は、センサー全体のカウント数を表します。

ChokeThreshold を使用すると、自動アップグレード/ダウングレード機能を有効または無効に設定できます。デフォルト値が設定されていない ChokeThreshold に値を指定しなかった場合、または ChokeThreshold に 100,000 などの大きな値を設定した場合、この機能は無効になります。ChokeThreshold に指定する数値は、インターバルにおけるアラーム数のしきい値を表し、これが自動アップグレードをトリガーする基準となります。アップグレードは、FireAll から Summarize、Summarize から GlobalSummarize の順に行われます。

ただし、インターバルにおけるアラーム数が ChokeThreshold の値の 2 倍を超える場合は、FireAll から直接 GlobalSummarize へアップグレードされます。ダウングレードは、次のインターバルが始まる時点で実行されます。これにより、次のインターバルは通常の動作に戻った状態で開始されます(要約アラームが送信された直後)。

例:SIG 20000 AlarmThrottle FireAll ChokeThreshold 100 ThrottleInterval 60

トラフィック 1:60 秒間に 90 件のアラームが発生。結果:通常のアラームが 90 件送信されます。

トラフィック 2:60 秒間に 120 件のアラームが発生。結果:通常のアラームが 100 件と、カウント数が 120 の IntervalSummary アラームが 1 件送信されます。

トラフィック 3:60 秒間に 240 件のアラームが発生。結果:通常のアラームが 100 件と、カウント数が 240 の GlobalSummary アラームが 1 件送信されます。


) この例は、すべてのアラームが同じアドレス セット(例:10.1.1.1 ~ 10.2.2.2)上で発生することを前提としたものです。


SummaryKey には、カウント アルゴリズムに使用されるアドレス ビューを指定します。SummaryKey に値を指定しない場合、アルゴリズムでは StorageKey に設定されたものと同じキーが使用されることになります。しかし、SummaryKey に対して StorageKey の 値 xxxx は無効であるため、これらのシグニチャにはキーを指定する必要があります。SummaryKey は、アルゴリズムで使用されるカウンタが存在するアドレス セットを表します。そのため、値が Axxx(送信元アドレス)であるか、xxBx(宛先アドレス)であるか、AxBx(送信元アドレスと宛先アドレスのペア)であるかによって、受け取る結果は異なります。

これらのパラメータは、すべてを同時に使用できるわけではありません。モードに応じて、いくつかの制約があります。

ChokeThreshold に X を指定した場合(ただし X は ANY 以外)、AlarmThrottle に FireOnce を指定できません。

StorageKey が xxxx であるシグニチャでは、AlarmThrottle に FireOnce を指定できません。

AlarmInterval に値を指定した場合、MinHits には 1 より大きな値、AlarmThrottle には FireAll、ChokeThreshold には ANY を指定する必要があります。

SummaryKey には、インスペクタのプロトコルで使用されないポート(AaBb、Axxb)は設定できません。

デフォルトの場合、SummaryKey は StorageKey と同じ値を取ります。ただし、StorageKey が xxxx である場合は除きます。StorageKey が xxxx である場合は、SummaryKey に値を指定しないと、要約機能は作動しません(すべてのアラームを受信することになります)。

MASTER エンジンのパラメータ

MASTER エンジンには、各サブエンジンに対するパラメータが用意されています。入力(設定の解析)および出力(アラームの送信)は、MASTER エンジンで一元的に行われます。各サブエンジンでは、入力のデコードおよび検査に必要な具体的なプロトコルが定められています。MASTER エンジンの構造体およびメソッドはサブエンジンに継承されます。

表 A-2 は、MASTER エンジンのパラメータとその説明をまとめたものです。各パラメータは、名前と値のペアです。名前は、各エンジンにより定義されます。指定できる値には、エンジンによって定義された制限があります。値として有効なのは、特定の範囲に属する値、または所定の選択肢から選んだ値に限られます。名前は、各エンジンのすべてのシグニチャで一定です。値は、変数の実体であり、同じエンジン グループ内のシグニチャ間で異なっていても構いません。


) データ型の欄には、値の範囲または有効な値が付記されているものもあります。


保護されているパラメータは、デフォルト シグニチャに対しては変更できませんが、カスタム シグニチャに対しては修正できます。

必須パラメータは、デフォルト シグニチャかカスタム シグニチャかを問わず、すべてのシグニチャに対して定義する必要があります。

 

表 A-2 MASTER エンジンのパラメータ

パラメータ名
データ型
説明

AlarmDelayTimer

NUMBER(1 ~ 3600)

アラーム発生後に行うシグニチャに対する追加検査の遅延時間(秒数)。

AlarmInterval

NUMBER(2 ~ 1000)

時間イベントの特別な処理。AlarmInterval に Y 、MinHits に X を指定すると、 Y 秒のインターバルの間に X 件のアラームがカウントされた場合に限ってアラームが送信される。

AlarmSeverity

ENUM
(high、medium、low、informational)

アラームにより通知されるアラートの重大度。

AlarmThrottle

ENUM
(FireAll、FireOnce、GlobalSummarize、Summarize)

アラーム送信の制限方法。値の選択肢は次のとおり。

FireAll:すべてのアラームが送信される。

FireOnce:最初のアラームが送信された後、インスペクタが削除される。

Summarize:IntervalSummary アラームが送信される。

GlobalSummarize:GlobalSummary アラームが送信される。

AlarmTraits

NUMBER(0 ~ 65535)

対象となるシグニチャをより詳細に特徴付けるユーザ定義の特性。

ChokeThreshold

NUMBER

AlarmThrottle モードの自動切り替えの基準となる 1 インターバル当たりのアラーム数のしきい値。ChokeThreshold に値を指定した場合、ThrottleInterval により定義されたインターバル中に多数のアラームが検出されると、AlarmThrottle モードが自動で切り替わる。

Enabled

BOOLEAN
(true、false)

シグニチャを有効にする場合は true、無効にする場合は false を指定する。

EventAction

BITSET
(log、reset、shunHost、shunConnection、ZERO)

アラームの送信時に実行する処理。

FlipAddr

BOOLEAN
(true、false)

アラーム メッセージ内で送信元アドレス(およびポート)と宛先アドレス(およびポート)を入れ替える場合は true、(通常どおり)入れ替えない場合は false を指定する。

MaxInspectLength

NUMBER

検査対象にするバイト数の最大値。

MaxTTL

NUMBER(0 ~ 1000)

論理ストリームを検査する秒数の最大値。この値を X とすると、インスペクタはアクティブな状態が X 秒間続いた後、削除される。

MinHits

NUMBER

アラーム メッセージ送信に必要なシグニチャのヒットの最低数。この値が X のとき、アラームが送信されるためには、アドレス キーのシグニチャが少なくとも X 回検出される必要がある。

Protocol

BITSET
(FRAG、IP、TCP、UDP、ICMP、ARP、CROSS、ZERO CUSTOM)

インスペクタの対象プロトコル。

ResetAfterIdle

NUMBER(2 ~ 1000)

ホストがアイドル状態になってから、シグニチャ カウンタをリセットするまでに待機する秒数。

ServicePorts

NUMBER

ターゲット サービスが常駐するポートまたはポート範囲のリスト(カンマ区切り形式)。

SigComment

STRING

USER NOTES:対象のシグニチャに関するその他の情報。

SIGID

NUMBER(993 ~ 50000)

シグニチャ ID。デフォルト シグニチャに対する有効範囲は 993 ~ 19999。カスタム シグニチャに対する有効範囲は 20000 ~ 50000。

SigName

STRING

シグニチャの正式な名前。

SigStringInfo

STRING

アラーム メッセージに記載する追加情報。

StorageKey

BITSET
(xxxx Axxx xxBx AxBx AaBb Axxb STREAM DOUBLE ZERO)

固定データを保存するために使用するアドレス キーのタイプ。

SubSig

NUMBER

サブシグニチャ ID。シグニチャの特定のバリアントを表す。

SummaryKey

ENUM
(AaBb AxBx Axxb Axxx xxBx)

シグニチャを要約するストレージのタイプ。

ThrottleInterval

NUMBER(0 ~ 1000)

AlarmThrottle インターバルを定義する秒数。AlarmThrottle パラメータと併用すると、アラーム数に対する特殊な制限を設定できる。

WantFrag

ENUM
(ANY、false、true)

フラグメントが必要な場合は true、不要な場合は false、どちらでもよい場合は ANY を指定する。

正規表現の構文

正規表現(Regex)は、テキストを記述する手段として、強力で柔軟性のある表記言語です。正規表現では、パターン マッチングが行われることから、任意のパターンを簡潔に記述できるようになっています。

表 A-3 は、IDS バージョン 4.0 で使用できる正規表現の構文をまとめたものです。

 

表 A-3 正規表現の構文

メタ文字
名前
説明

?

疑問符

0 回または 1 回の繰り返し。

*

星印(アスタリスク)

0 回以上の繰り返し。

+

プラス記号

1 回以上の繰り返し。

{x}

量指定子

ちょうど X 回の繰り返し。

{x,}

最小量指定子

少なくとも X 回の繰り返し。

.

ドット

改行(0x0A)以外の任意の 1 文字。

[abc]

文字クラス

リスト内の任意の 1 文字。

[^abc]

否定文字クラス

リストにない任意の 1 文字。

[a-z]

文字範囲クラス

範囲内(両端も含む)の任意の 1 文字。

( )

カッコ

他のメタ文字の適用範囲を制限する際に使用する。

|

論理和(OR)

このメタ文字で区切られた各表現のうちいずれかと一致する。

^

キャレット

行の先頭。

\ char

エスケープ文字。

char がメタ文字である場合も含めて、 char そのものと一致する。

char

文字

char がメタ文字でない場合は、char そのものと一致する。

\r

復帰

復帰文字(0x0D)と一致する。

\n

改行

改行文字(0x0A)と一致する。

\t

タブ

タブ文字(0x09)と一致する。

\f

フォーム フィード

フォーム フィード文字(0x0C)と一致する。

\xNN

エスケープされた 16 進数文字

16 進コード 0xNN(0<=N<=F)を持つ文字と一致する。

\NNN

エスケープされた 8 進数文字

8 進コード NNN(0<=N<=8)を持つ文字と一致する。

繰り返し演算子ではいずれの場合も、該当する文字列のうち最も短いものが一致対象となります。一方、それ以外の演算子では、その適用範囲に最大限多くの文字が取り込まれるため、該当する文字列のうち最も長いものが一致対象となります。

表 A-4 は、正規表現のパターンの例を示したものです。

 

表 A-4 正規表現のパターン

一致対象
正規表現

Hacker

Hacker

Hacker または hacker

[Hh]acker

bananas、banananas、banananananas など、一定の規則で構成されたすべての文字列

ba(na)+s

同じ行の中にある foo と bar の間に改行以外の文字が 0 個以上ある文字列

foo.*bar

foo または bar

foo|bar

moon または soon

(m|s)oon

エラー メッセージ

シグニチャ エンジンの操作中、次のようなエラー メッセージが表示される場合があります。

次に示すのは、サービス サブモード コマンドの実行時に発生する可能性があるエラーです。これらのエラーは、ソース ファイル /vob/csids_2/dev/srcPool/cli/cidCliStateTransition.cpp に記述されています。

Error: Attempt to remove an entry that does not exist.Operation failed.

このエラーは、存在しないエントリを削除しようとした場合に発生します。たとえば、仮想センサー設定の ATOMIC.ARP: no signatures sigid 7106 で発生します。

Error: Attempt to delete permanent entry.Operation failed.

このエラーは、保護されたエントリを削除しようとした場合に発生します。たとえば、ATOMIC.ARP: no signatures sigid 7105 で発生します。

Error: Array contains min entries, could not delete requested entry.

このエラーは、必要最小限のエントリしか含まれていない配列からエントリを削除しようとした場合に発生します。

Error: Cannot create a custom signature with SIGID < 20000.

Error: Array contains max entries, could not add new entry as stated in original email thread.

Error: <XML Config Name Str> failed validation.Would you like to exit anyway and discard your changes?

ただし、<XML Config Name Str> には、無効な設定を表すコロン区切りの文字列が表示されます。たとえば、サービス ホスト設定では次のようになります。

sensor(config-Host)# timeParams
sensor(config-Host-tim)# summerTimeParams
sensor(config-Host-tim-sum)# active-selection recurringParams
sensor(config-Host-tim-sum)# exit

Error: 'summerTimeParams':'recurringParams':'summerTimeZoneName' -- there is neither a value nor a 'default' attribute for a required failed validation.Would you like to exit anyway?[no]

次のエラー群は、IDAPI インターフェイスで発生するもので、 /vob/csids_2/dev/srcPool/lib/idapi/cidCtlTrans.cpp に記述されています。これらのエラーが CLI に表示されるのは次のような場合です。

制御トランザクションを試行した場合。

サービス サブモードの開始時、および変更を起こった場合はサービス サブモードの終了時。

アラーム チャネル調整モード。

仮想センサー調整モード。

サービス サブモードで実行されたコマンドは、.xml ファイルのローカル コピーに適用されます。CT を実行しない非サービス CLI コマンドは、「terminal length」、「display-serial」、「show history」、「show events」、および「clear events」だけです。

Error: <appName> not responding, please check system processes.

ただし、<appName> には、authentication、cidcli、cidwebserver、logApp、mainApp、sensorApp のいずれかのアプリケーション名が表示されます。これは重大エラーであり、いずれかのアプリケーションとの通信ができなくなったことを示すものです。復旧するためには、センサーをリブートする必要があります。

Error: Control transaction has unregistered.

通常の実行時環境では発生しないエラーです。このエラーは、CT の完了途中に CT の受信側が正常にシャットダウンしたことを示すものです。

Error: Unknown control transaction name.

通常の実行時環境では発生しないエラーです。このエラーは、CT の実行開始時に CT が未登録であることを示しており、それを除けば前項のエラーと同じものです。非 CLI アプリケーションでは、不正な CT 名が使用されたことを示している場合もあります。

Error: Control transaction cannot be completed at this time.

このエラーは、アプリケーションがビジー状態にあり、CT に対して応答できない場合に発生します。時間をおいて再試行してください。このエラーは、 tune-virtual-sensor tune-alarm-channel reset-signatures sensing-interface shutdown などのコマンドにおいて、sensorApp に対し何らかの変更が加えられた場合に限り発生します。

ATOMIC エンジン

次の項では、ATOMIC エンジンについて説明します。

「ATOMIC エンジンについて」

「ATOMIC.ARP エンジンのパラメータ」

「ATOMIC.ICMP エンジンのパラメータ」

「ATOMIC.IPOPTIONS エンジンのパラメータ」

「ATOMIC.L3.IP エンジンのパラメータ」

「ATOMIC.TCP エンジンのパラメータ」

「ATOMIC.UDP エンジンのパラメータ」

「ATOMIC エンジンの設定に関する制約事項」

ATOMIC エンジンについて

ATOMIC エンジンでは、複数のパケットにまたがる固定データは保存されません。その代わりに、1 つのパケットの解析を基にしてアラームを送信できます。そのため、これらエンジンの基本的な機能には、非グローバル StorageKey へのアタッチメントは必要ありません。StorageKey xxxx が使用されます。ATOMIC エンジンは、ストレージを備えていないため、原則的には 1 対 1 のシグニチャになっています。各 ATOMIC エンジンには、そのプロトコルに特化した識別子が用意されています。

ATOMIC.L3.IP は、汎用のレイヤ 3 インスペクタです。DataLength と Protocol Number との比較処理が可能です。また、フラグメントと部分 ICMP との比較に使用できるフックもいくつか用意されています。いずれのパラメータも必須ではないため、「任意の IP パケット」を表す単純なシグニチャを記述できます。

ATOMIC.ICMP は、L4 プロトコルに特化したエンジンです。このエンジンにはパラメータが多数あります。一部のパラメータでは、単独の値を指定することも、最小値および最大値により値の範囲を指定することもできます。各シグニチャに対して個々のパラメータをすべて使用することもできますが、あまり実用的な方法ではありません。また、いずれのパラメータも必須ではないため、「任意の ICMP パケット」を表す単純なシグニチャを記述できます。

ATOMIC.UDP は L4 プロトコルに特化したエンジンで、ポートおよびパケット長を検証するための基本的な機能を備えています。いずれのパラメータも必須ではないため、「任意の UDP パケット」を表す単純なシグニチャを記述できるほか、そのシグニチャにポート(またはポート範囲)を追加することもできます(「ポート 53 の任意の UDP パケット」など)。

ATOMIC.IPOPTIONS は、L3 オプションをデコードする簡易エンジンです。シグニチャの設定に使用する Pupation パラメータは唯一の必須パラメータです。

ATOMIC.TCP は、L4 TCP パケットに特化したエンジンで、ポート フィルタ機能や SinglePacketRegex を備えているほか、TcpFlags および Mask の基本的な比較処理を実行できます。TcpFlags および Mask に対しては、設定済みパラメータを基準にパケットの比較を行い目的のパケットを特定するという手法が適用されます。これは SWEEP.*.TCP エンジンでも使用される一般的な手法です。TcpFlags と Mask は必須ですが、ACK の TcpFlags と Mask を使用すれば、非接続パケットおよび非クローズパケットを比較の対象として登録できます。SinglePacketRegex を使用すると、簡易正規表現による照合が可能です。これにより、1 つのシグニチャの中でポート、フラグ、および正規表現を組み合せて使用できます。

ATOMIC.ARP は、基本的なレイヤ 2 ARP シグニチャに使用できるほか、dsniff や ettercap などの ARP スプーフィング ツールを対象としたより高度な検出機能も備えています。

ATOMIC.ARP エンジンのパラメータ

表 A-5 は、ATOMIC.ARP エンジンのパラメータをまとめたものです。

 

表 A-5 ATOMIC.ARP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

ArpOperation

NUMBER(0 ~ 255)

×

×

シグニチャの対象となる ARP 演算コード。

MacFlip

NUMBER(0 ~ 65535)

×

×

IP アドレスに対して MAC アドレスが指定した回数を超えて変化するとアラームが送信される。

RequestInbalance

NUMBER(0 ~ 65535)

×

×

IP アドレスに対する要求の数が、応答の数よりもさらに指定した件数分上回るとアラームが送信される。

wantDstBroadcast

BOOLEAN
(True、False)

×

×

ARP 宛先アドレス 255.255.255.255 が検出された場合、シグニチャに関するアラームを送信するかどうか。

wantSrcBroadcast

BOOLEAN
(True、False)

×

×

ARP 送信元アドレス 255.255.255.255 が検出された場合、シグニチャに関するアラームを送信するかどうか。

ATOMIC.ICMP エンジンのパラメータ

表 A-6 は、ATOMIC.ICMP エンジンのパラメータをまとめたものです。

 

表 A-6 ATOMIC.ICMP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

IcmpCode

NUMBER(0 ~ 255)

×

×

ICMP ヘッダーの CODE 値。

IcmpId

NUMBER(0 ~ 65535)

×

×

ICMP ヘッダーの IDENTIFIER 値。

IcmpMaxCode

NUMBER(0 ~ 255)

×

×

ICMP CODE 値が指定した値を超えるとアラームが発生する。

IcmpMaxSeq

NUMBER(0 ~ 65535)

×

×

ICMP SEQ 値が指定した値を超えるとアラームが発生する。

IcmpMinCode

NUMBER(0 ~ 255)

×

×

ICMP CODE 値が指定した値を下回るとアラームが発生する。

IcmpMinSeq

NUMBER(0 ~ 65535)

×

×

ICMP SEQ 値が指定した値を下回るとアラームが発生する。

IcmpSeq

NUMBER(0 ~ 65535)

×

×

ICMP ヘッダーの SEQUENCE 値。

IcmpType

NUMBER(0 ~ 255)

×

×

ICMP ヘッダーの TYPE 値。

IpTOS

NUMBER(0 ~ 255)

×

×

IP ヘッダーの TYPE OF SERVICE 値。

ATOMIC.IPOPTIONS エンジンのパラメータ

表 A-7 は、ATOMIC.IPOPTIONS エンジンのパラメータをまとめたものです。

 

表 A-7 ATOMIC.IPOPTIONS エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

HasBadOption

BOOLEAN(True、False)

×

×

オプションのリストに異常があるかどうか。

IpOption

NUMBER(0 ~ 255)

×

×

照合する IP オプション コード。

ATOMIC.L3.IP エンジンのパラメータ

表 A-8 は、ATOMIC.L3.IP エンジンのパラメータをまとめたものです。

 

表 A-8 ATOMIC.L3.IP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

MaxDataLen

NUMBER(0 ~ 65535)

×

×

指定した値を IP データの長さが超えるとアラームが発生する。

MaxProto

NUMBER(0 ~ 255)

×

×

指定した値を IP プロトコル番号が超えるとアラームが発生する。

MinDataLen

NUMBER(0 ~ 65535)

×

×

指定した値を IP データの長さが下回るとアラームが発生する。

MinProto

NUMBER(0 ~ 255)

×

×

指定した値を IP プロトコル番号が下回るとアラームが発生する。

ProtoNum

NUMBER(0 ~ 255)

×

×

アラームを発生する単独の IP プロトコル番号。

isIcmp

BOOLEAN(True、False)

×

×

ICMP パケットだけを検査するかどうか。

isImpossiblePacket

BOOLEAN(True、False)

×

×

送信元 IP と宛先 IP が同一かどうか。

isLocalhost

BOOLEAN(True、False)

×

×

IP パケット内にローカル ホスト(127.0.0.1)が含まれるかどうか。

isOverrun

BOOLEAN(True、False)

×

×

制限を超過したフラグメントかどうか。

isRFC1918

BOOLEAN(True、False)

×

×

予約済み(RFC1918) IP アドレスかどうか。

ATOMIC.TCP エンジンのパラメータ

表 A-9 は、ATOMIC.TCP エンジンのパラメータをまとめたものです。

 

表 A-9 ATOMIC.TCP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

DstPort

NUMBER(0 ~ 65535)

×

×

照合する単独の宛先ポート。

Mask

BITSET(FIN SYN RST PSH ACK URG ZERO)

×

TcpFlags の比較に使用するマスク。

PortRange

NUMBER(0 ~ 2)

×

×

宛先ポート:下位ポートだけ(1)、上位ポートだけ(2)、すべて(0)。(0)

PortRangeSource

NUMBER(0 ~ 2)

×

×

送信元ポート:下位ポートだけ(1)、上位ポートだけ(2)、すべて(0)。

SinglePacketRegex

STRING

×

×

単独の TCP パケット内での検索に使用する正規表現。

SrcPort

NUMBER(0 ~ 65535)

×

×

照合する単独の送信元ポート。

TcpFlags

BITSET(FIN SYN RST PSH ACK URG ZERO)

×

Mask によってマスクされた場合に照合する TCP フラグ。

ATOMIC.UDP エンジンのパラメータ

表 A-10 は、ATOMIC.UDP エンジンのパラメータをまとめたものです。

 

表 A-10 ATOMIC.UDP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

DstPort

NUMBER(0 ~ 65535)

×

×

照合する単独の宛先ポート。

MinUDPLength

NUMBER(0 ~ 65535)

×

×

パケットの UDP 長が指定した値を下回るとアラームが送信される。

ShortUDPLength

BOOLEAN
(True、False)

×

×

IP データの長さがパケットの UDP 長を下回った場合にアラームを送信するかどうか。

SrcPort

NUMBER(0 ~ 65535)

×

×

照合する単独の送信元ポート。

ATOMIC エンジンの設定に関する制約事項

ATOMIC エンジンのパラメータには、設定に関して次のような制約があります。

各 ATOMIC エンジンでは、マスター パラメータ ResetAfterIdle および MaxInspectLength は無視される。

ATOMIC.UDP では、そのパラメータを少なくとも 1 つ指定する必要がある。

ATOMIC.TCP では、TcpFlags および Mask は必須である。

ATOMIC.L3.IP、ICMP、IPOPTIONS、および ARP には、必須パラメータはない。

FLOOD エンジン

次の項では、FLOOD エンジンについて説明します。

「FLOOD エンジンについて」

「FLOOD.HOST.ICMP エンジンのパラメータ」

「FLOOD.HOST.UDP エンジン」

「FLOOD.NET エンジンのパラメータ」

「FLOOD エンジンの設定に関する制約事項」

FLOOD エンジンについて

FLOOD エンジンでは、複数のホストから 1 つのホストに向けたトラフィック(FLOOD.HOST.*)、またはセンサーのセグメント全体における集約トラフィック(FLOOD.NET)の解析が行われます。

ホスト フラッドは、Packets-Per-Second(PPS)レート カウンタを宛先アドレスに割り当てる n 対 1 のシグニチャです。サンプリングは秒単位で行われます。

ネット フラッドは、アドレスを使用することなく仮想センサーごとにレートをカウントする n n のシグニチャです。なお、物理的なセンサーが複数のインターフェイスを監視している場合、それらのインターフェイスは 1 つまたは複数のインターフェイス グループにグループ分けされます。このとき、個々のインターフェイス グループに仮想的なセンサーが 1 つずつ割り当てられます。これが仮想センサーです。この場合も、サンプリングは秒単位で行われます。

各 FLOOD.HOST エンジンには、そのプロトコルに特化したさまざまな識別子があります。FLOOD.HOST.ICMP では、パラメータ IcmpType を使用して、カウントの対象とする ICMP パケットの種類を指定します。

FLOOD.HOST.UDP には、カウント対象から除外される送信元ポートおよび宛先ポートがそれぞれ 3 つずつ用意されています。これらのポートを介して送受信されたパケットは、検出されてもカウントの対象とはなりません。

FLOOD.NET では、Gap、Peaks、Rate という 3 つのパラメータを使用して、現在および直近のサンプルと、アラームのトリガー条件を定めた設定内容との比較が行われます。さらに、Protocol の値を変更することにより、TCP、UDP、ICMP のそれぞれに異なるシグニチャを指定できます。IcmpType は、L4 としてサポートされている唯一のパラメータです。これらのシグニチャは、「AlarmThrottle に指定した時間幅の中で、PPS が Rate の値を上回っている秒数が Peaks の値を超え、PPS が Rate の値を下回っている秒数が Gap の値未満である」という条件でアラームが送信されるように設定できます。

FLOOD.HOST.ICMP エンジンのパラメータ

表 A-11 は、FLOOD.HOST.ICMP エンジンのパラメータをまとめたものです。

 

表 A-11 FLOOD.HOST.ICMP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

IcmpType

NUMBER(0 ~ 256)

×

×

ICMP ヘッダーの TYPE 値。

Rate

NUMBER

×

許容される PPS 最大値。

FLOOD.HOST.UDP エンジン

表 A-12 は、FLOOD.HOST.UDP エンジンのパラメータをまとめたものです。

 

表 A-12 FLOOD.HOST.UDP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

ExcludeDst1

NUMBER(0 ~ 65536)

×

×

フラッドのカウントから除外する宛先ポート。

ExcludeDst2

NUMBER(0 ~ 65536)

×

×

フラッドのカウントから除外する宛先ポート。

ExcludeDst3

NUMBER(0 ~ 65536)

×

×

フラッドのカウントから除外する宛先ポート。

ExcludeSrc1

NUMBER(0 ~ 65536)

×

×

フラッドのカウントから除外する送信元ポート。

ExcludeSrc2

NUMBER(0 ~ 65536)

×

×

フラッドのカウントから除外する送信元ポート。

ExcludeSrc3

NUMBER(0 ~ 65536)

×

×

フラッドのカウントから除外する送信元ポート。

Rate

NUMBER

×

PPS のしきい値。Rate の値が PPS を上回っている時間が 1 秒に達するとアラームが送信される。

FLOOD.NET エンジンのパラメータ

表 A-13 は、FLOOD.NET エンジンのパラメータをまとめたものです。

 

表 A-13 FLOOD.NET エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

Gap

NUMBER

×

×

ThrottleInterval に指定した時間幅の中で、PPS が Rate の値を下回っている状態が許容される秒数。Gap の値を超えた場合でも不審な点があると判断されなければ、アラームは送信されず、カウントはリセットされます。

IcmpType

NUMBER(0 ~ 256)

×

×

ヘッダーの ICMP タイプの値。このパラメータが有効なのは、Protocol が ICMP に設定されている場合に限る。

Peaks

NUMBER

×

×

不審な点があると判断される秒数のいしき値。ThrottleInterval に指定された時間幅の中で、PPS が Rate の値を上回っている秒数が Peaks の値を超えると、アラームが送信される。

Rate

NUMBER

×

×

PPS のしきい値。不審な点があると判断される秒数は、PPS が Rate の値を上回った状態が継続する秒数として定義される。診断/フィードバック モードの場合は、Rate の値を 0 に設定する。

マスター パラメータの Protocol には、FLOOD.NET シグニチャの対象となるプロトコルを設定します。Protocol を ICMP に設定すると、IcmpType フィールドが有効になります。それ以外の値を設定した場合、IcmpType フィールドは無効です

マスター パラメータの ThrottleInterval には、サンプリングのほか、Peaks および Gap の値に対する比較処理を行うインターバルの長さを指定します。

FLOOD エンジンの設定に関する制約事項

FLOOD グループに属するすべてのシグニチャには、Rate パラメータを指定する必要があります。

FLOOD エンジンでは、次のマスター パラメータは無視されます。

WantFrag

MaxInspectLength

ResetAfterIdle

FLOOD.NET 学習モード:FLOOD.NET エンジンには、フィードバック モードという他のエンジンにはない特別な設定要素があります。フィードバック モードでは、通常の検査が行われる代わりに、診断アラームが定期的に送信されます。アラームとともに、インターバルの中で検出された PPS の最大値も通知されます。フィードバック モードが指定されるのは、Rate パラメータが 0 に設定された場合です。診断情報を使用することにより、ネットワーク トラフィックのベースラインを特定し、それに基づいてシグニチャを調整できます。フィードバックは、アラーム レコードの alertDetails フィールド内に表示された「MaxPPS=xyz」という形式のプレーンテキストです。このプレーンテキストは、その他の alertDetails 値に類似したもので、アラーム ビューアによって表示されます。

HTTP 解読

次の項では、シグニチャ エンジンにおける HTTP 解読について説明します。

「HTTP 解読について」

「変換されない文字」

「デコードのバリエーション」

「サポートされているデコード」

「エラー状態」

「解読アラーム」

HTTP 解読について

HTTP 解読とは、符号化された文字を ASCII 対応文字に正規化することによって、HTTP メッセージをデコードするプロセスです。このプロセスは、ASCII 正規化と呼ばれることもあります。

HTTP パケットを検査するには、あらかじめそのデータを、ターゲット システムでのデータ処理時に表示されるものと同じデータ表現として解読または正規化しておく必要があります。また、ホスト ターゲット タイプごとにカスタマイズされたデコード方式を用意することが推奨されます。そのためには、ターゲット上で動作しているオペレーティング システムおよび Web サーバのバージョンを確認する必要があります。IDS 4.0 の初期リリースは、Microsoft IIS Web サーバ用としてデフォルトの解読処理機能を備えています。

変換されない文字

プロトコルの区切り文字として使用できる文字はいずれも、ASCII 対応文字には変換 されません 。こうした文字に該当するのは、次のような特殊文字です。

16 進数値 0x00(ヌル)

0x09(タブ)

0x0A(改行)

0x0D(復帰)

0x20(スペース)

符号化された形式で検出された特殊文字は、UTF-8 シングル オクテット表現に変換されます。解読処理において、符号化された形式のヌル(%e0%80%80 など)が検出された場合は、%00 と出力されます。これにより、解読されたデータ ストリーム内で特殊文字を照合する必要がある場合でも、一貫性のある表現に基づいてパターン マッチングを行えます。

デコードのバリエーション

さまざまな実装の違いに応じて、デコードにもいくつかのバリエーションがあります。中には侵入検知システムの回避だけを目的とするデコードも存在します。Cisco IDS の解読機能では、次のようなデコードがサポートされています。

二重符号化

コード ポイントに対し 2 つのレベルの符号化が施されます。第一の符号化には、UTF-8 シングル オクテットまたは Unicode %U 符号化のいずれかを使用できます。バリエーションはありません。第二の符号化では、何かの符号化方式および符号化のバリエーションを使用して、第一の符号化で生成された各オクテットを符号化できます。

UTF-8 シーケンス内に符号化されていないオクテットと符号化されたオクテットを混在させる

UTF-8 シーケンス内で、先頭のオクテットを除く任意のオクテットを、符号化されていない値にできます。たとえば、UTF-8 で %E0%84%A3 と表現された値 0x123 を %E0・A3 と表現できます。ただし、・ は ASCII 値 0x84 に対応します。

あいまいなビット

一部のデコーダ実装では、符号化された特定のビットが無視されます。たとえば IIS 4.0 では、%C0 と %D0 が同じものと見なされ、UTF-8 2 オクテット符号化の第 5 ビットが破棄されます。

Microsoft base-36

この他にも、デコーダの実装によってデコードが異なる例があります。たとえば、Microsoft の UTF-8 デコーダの旧バージョンでは、UTF-8 符号化において有効な 16 進文字として、36 文字(A ~ Z および 0 ~ 9)を使用できます(通常は A ~ F と 0 ~ 9 の 16 文字)。

代替コード ページ

Windows ベースのパーソナル コンピュータは、その多くが拡張ラテン語コード ページを備えています。拡張文字は、処理の際、ASCII 対応文字に正規化されます。たとえば、Unicode コード ポイント U+212C は、ASCII 対応文字「b」に正規化されます。

自己参照ディレクトリ

ディレクトリ名 foo/././bar は、 foo/bar と同じパスを参照します。

複数のディレクトリ デリミタ

一部のオペレーティング システムでは、「/」(スラッシュ)と「\」(バック スラッシュ)が同一のディレクトリ デリミタとして扱われます。さらに、複数のディレクトリ デリミタが連続して記述されている場合、2 番目以降のディレクトリ デリミタは無視されます。

1 つの文字を一意に符号化できる方法が何通り存在するのかはケースによって異なります。その中でも、二重符号化を使用したケースは、こうした方法が多数存在するという意味で最悪のケースです。ここで、%uhhhh というシーケンスを使用して「\」(バック スラッシュ)を一意に表現する方法が何通りあるのかを概算してみます。ただし、h はそれぞれ Unicode シーケンスの 16 進文字です。

「%」 の表現方法は少なくとも 140 通り。

「u」 の表現方法は少なくとも 3260 通り。

「h」 の表現方法は少なくとも 1000 通り。

これらの数字を基に計算すると、Microsoft IIS 4.0 により認識される 1 つの文字を二重符号化によって符号化する方法は、少なくとも 1000^4 * 3260 * 140 = 4.56e+17、つまり 45 * 10^15 通り存在することになります。

サポートされているデコード

Cisco IDS の解読機能では、2 つの基本的な Unicode 符号化方式がサポートされています。

UTF-8 符号化:Unicode(Universal Character Set)Transformation Format、8 ビット符号化形式。UTF-8 は、Unicode スカラー値(コード ポイント)を、1 ~ 4 バイトのシーケンスとしてシリアライズする UTF です。

文字は、1 ~ 3 オクテットのシーケンスを使用して符号化されます。シングル オクテットのシーケンスの場合、最上位ビットには 0 に設定され、残りの 7 ビットを使用して文字値が符号化されます。 n オクテット( n > 1)のシーケンスの場合、先頭のオクテットは上位 n ビットに 1 が設定され、それに続く 1 ビットには 0 に設定されます。さらに残りのビットには、ペイロードのビットが設定されます。次に示すオクテットはすべて、最上位ビットに 1、その次のビットに 0 が設定され、残りの 6 ビットは各オクテット内でペイロードを使用して符号化されます。表を参照してください。

Microsoft のカスタム Unicode %Uxxxx 符号化

Microsoft では、introduced an encoding method that prefixes the プレフィクス「%U」または「%u」の後に 4 桁の 16 進数 が続く 16 ビット Unicode 番号を導入しています。表 A-14 はその例です。たとえば、コード ポイント U+1234 であれば %U1234 に符号化されます。

 

表 A-14 Unicode %Uxxxx 符号化の例

U-00000000 - U-0000007F:

U-00000080 - U-000007FF:

U-00000800 - U-0000FFFF:

エラー状態

解読処理において、文字シーケンスが変換できない場合は、次善の方法により処理が行われます。たとえば、%E0%84<09>(<> 内の値は処理前の 16 進値)が検出されると、<E0><84><09> が出力されます。解読処理ではパフォーマンス上の理由から、シーケンスのデコードに使用された元の値は保持されないため、出力できるのはエラー状態になった時点までのデコード処理に使用された中間の値だけです。同様に %C0%A# が検出された場合は、<C0>%A# というシーケンスが出力されます。

解読アラーム

解読処理では、異常なイベントがいつ発生したかを示すため状態バッファにフラグが設定されます。発呼側エンジンのインスペクタからは、実際のアラームが送信されます。 表 A-15 は、これらのアラームを示したものです。

 

表 A-15 解読アラーム

アラーム
説明
トリガー

5249.0

IDS 回避符号化

ヌル、復帰、改行、「.」(ピリオド)、「/」(スラッシュ)、「\」(バック スラッシュ)は、URI セクションでデコードされる。

5250.0

IDS 回避二重符号化

ヌル、復帰、改行、「.」(ピリオド)、「/」(スラッシュ)、「\」(バック スラッシュ)は、URI セクションで二重デコードされる。

OTHER エンジン

次の項では、OTHER エンジンについて説明します。

「OTHER エンジンについて」

「OTHER エンジンに属するシグニチャのリスト」

「OTHER エンジンのパラメータ」

OTHER エンジンについて

OTHER エンジンでは、その他のエンジン プロトコル デコードに適合しないシグニチャが扱われます。OTHER エンジンを使用すると、他のエンジンと同じエンジン インフラストラクチャを使用して、組み込みシグニチャ用のパラメータを設定できます。これらのシグニチャは、OTHER エンジンには実装されませんが、Stream プロセッサや Frag プロセッサなど、同じシステム内にある他の専用プロセッサにより使用されます。


注意 OTHER エンジンに対しては、カスタム シグニチャは定義できません。

OTHER エンジンに属するシグニチャのリスト

表 A-16 は、OTHER エンジンに属するシグニチャをまとめたものです。


) OTHER エンジンのシグニチャはすでにカスタム コードによってサポートされているため、OTHER エンジンにはカスタム シグニチャは追加できません。


 

表 A-16 OTHER エンジンに属するシグニチャのリスト

シグニチャ ID:サブシグニチャ
機能分野

994:1

パケット取り込み

994:2

パケット取り込み

95:1

パケット取り込み

995:2

パケット取り込み

1200

フラグメント処理

1201

フラグメント処理

1202

フラグメント処理

1203

フラグメント処理

1204

フラグメント処理

1205

フラグメント処理

1206

フラグメント処理

1207

フラグメント処理

1208

フラグメント処理

1220

フラグメント処理

3050

TCP ストリーム処理

3250

TCP ストリーム処理

3251

TCP ストリーム処理

5249

HTTP 解読

5250

HTTP 解読

OTHER エンジンのパラメータ

表 A-17 は、OTHER エンジンのパラメータをまとめたものです。

 

表 A-17 OTHER エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

HijackMaxOldAck

NUMBER

×

×

Hijack がトリガーされるまで許容される、クライアントからサーバへの古いデータレス受信応答の最大数。

HijackReset

BOOLEAN(True、False)

×

×

Hijack シグニチャの使用にリセットを必要とするかどうか。

ServicePorts

RANGE

×

×

ターゲット サービスが常駐するポートまたはポート範囲のリスト(カンマ区切り形式)。

SynFloodMaxEmbrionic

NUMBER

×

×

任意のサービスに対して同時に行える初期接続の最大数。

TrafficFlowTimeout

NUMBER

×

×

継続的にトラフィックが存在しない状態になってから、アラームが送信されるまでの秒数。

SERVICE エンジン

次の項では、SERVICE エンジンについて説明します。

「SERVICE エンジンについて」

「SERVICE エンジンの設定に関する制約事項」

「SERVICE.DNS エンジンのパラメータ」

「SERVICE.FTP エンジンのパラメータ」

「SERVICE.GENERIC エンジンのパラメータ」

「SERVICE.HTTP エンジンについて」

「SERVICE.IDENT エンジンのパラメータ」

「SERVICE.MSSQL エンジンのパラメータ」

「SERVICE.NTP エンジンのパラメータ」

「SERVICE.RPC エンジンのパラメータ」

「SERVICE.SMB エンジンのパラメータ」

「SERVICE.SNMP エンジンについて」

「SERVICE.SSH エンジンのパラメータ」

SERVICE エンジンについて

SERVICE エンジンでは、2 つのホスト間における L5+ トラフィックの解析が行われます。これらは、TCP の場合は STREAM(AaBb)、UDP の 場合は DUAL(AxBx)または QUAD(AaBb)で固定データを追跡する 1 対 1 シグニチャです。これらのエンジンでは、ライブ サービスと類似の方法で L5+ ペイロードのデコードと解釈が行われます。部分的なデコードにより、シグニチャを検査するうえで十分な情報が得られる場合は、サービスのような完全なデコードを行う必要はありません。SERVICE エンジンでは、シグニチャを決定するうえで十分なデータがデコードされますが、CPU やメモリの負荷をできるだけ軽減できるよう、必要以上のデコードは行われません。

SERVICE エンジン全体には、STREAM プロセッサの出力を使用するなど、共通した特性がある一方、個々の SERVICE エンジンには、検査対象のサービスに関する固有の情報が保持されます。文字列エンジンの使用が不適切または望ましくない場合には、SERVICE エンジンによって、アルゴリズムに特化した汎用文字列エンジンの機能が補完されます。

SERVICE デコードの目的は、ライブ サーバによる L5+ ペイロードの解釈をシミュレートすることにあります。この解釈の結果が、プロトコルのデコード済みフィールドとなります。これらのデコード済みフィールドは、シグニチャのパラメータと比較されることで、多くはシグニチャの決定に使用されます。

エンジンによるデコード中、不良ペイロードによるエラーが発生する場合があります。これらのエラー状態は、Protocol Violations や Error Traps など種類の異なるシグニチャにもリンクします。こうした状況が発生するのは、エンジンによるペイロードのデコード中、サービスのプロトコルの規則に違反する不正な箇所がそのペイロードの中に含まれているためにエラーが生じた場合です。解析コード内のエラーは、エラー トラップによって処理されます。シグニチャにマップされるトラップ条件を指定する場合は、SERVICE.FTP の「BadPort」で始まるパラメータなど、通常のパラメータを使用します。場合によっては、これらのトラップ条件を組み合せることで、複数のトラップ条件を満たした場合にエラーが発生するようなシグニチャを構成できます。ただしほとんどの場合、トラップ条件はトラップ シグニチャに 1 対 1 でマップされます。

SERVICE エンジンの設定に関する制約事項

SERVICE エンジンでは、次のパラメータは使用されません。

ResetAfterIdle

WantFrag

MaxInspectLength

SERVICE.RPC エンジンのパラメータには、設定に関して次のような制約があります。

マスター パラメータの Protocol には、TCP と UDP のいずれかを指定する必要がある。

PortMapper が True に設定されている場合は、PortMapProgram に何らかの値を指定する必要がある。

PortMapper が False に設定されている場合は、RpcProgram に何らかの値を指定する必要がある。

isSweep が True に設定されている場合は、Unique に何らかの値を指定する必要がある。

isSweep が False に設定されている場合は、Unique に値を指定できない。

SERVICE.DNS のパラメータはいずれも必須ではないため、インターフェイスはカスタム シグニチャの拡張に対応できます。あらゆる対象を適用範囲とするには、UDP シグニチャおよび TCP シグニチャを追加する必要があります。マスター パラメータの Protocol には、TCP と UDP のいずれかを指定する必要があります。

SERVICE.FTP に対しては、1 つまたは複数のシグニチャ内で、BOOLEAN 型の BadPortCmdAddress と BadPortCmdPort を併用できます。BOOLEAN 型の BadPortCmdShort は単独でのみ使用できます。また、BOOLEAN 型の hasPasvSpoof も単独でのみ使用できます。

SERVICE.IDENT に対しては、MaxBytes、hasNewline、および HasBadPort を併用できますが、これらを実際に併用する場面は限られています。

SERVICE.SSH エンジンには、新しいシグニチャは追加できません。このエンジンによりサポートされているシグニチャは 2 つだけです。

SERVICE.GENERIC エンジンには、新しいシグニチャは追加できません。このエンジンには、シグニチャ アップデートにより新しいシグニチャが追加されます。

SERVICE.DNS エンジンのパラメータ

SERVICE.DNS エンジンは、後続の複数ジャンプなどの反回避手法を含む高度な DNS デコードに特化したエンジンです。このエンジンは、パラメータが多数用意されているほか、TCP のポート 53 と UDP のポート 53 のいずれにおいても動作します。つまり、このエンジンは 2 つのプロトコルに対応したインスペクタです。SERVICE.DNS エンジンでは、TCP に対しては STREAM、UDP に対しては QUAD が使用されます。

表 A-18 は、SERVICE.DNS エンジンのパラメータをまとめたものです。

 

表 A-18 SERVICE.DNS エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

QueryChaosString

STRING

×

×

DNS クエリー クラスのカオス文字列。

QueryClass

NUMBER

×

×

DNS クエリー クラスの 2 バイト値。

QueryInvalidDomainName

BOOLEAN(True、False)

×

×

DNS クエリー長が 255 を超えるかどうか。

QueryJumpCountExceeded

BOOLEAN(True、False)

×

×

DNS 圧縮カウンタを有効にするかどうか。

QueryOpcode

NUMBER

×

×

DNS クエリー命令コードの 1 バイト値。

QueryRecordDataInvalid

BOOLEAN(True、False)

×

×

DNS レコード データ が不完全かどうか。

QueryRecordDataLen

NUMBER

×

×

DNS 応答レコードのデータ長。

QuerySrcPort53

BOOLEAN(True、False)

×

×

DNS パケットの送信元がポート 53 かどうか。

QueryStreamLen

NUMBER

×

×

DNS パケット長。

QueryType

NUMBER

×

×

DNS クエリー タイプの 2 バイト値。

QueryValue

BOOLEAN(True、False)

×

×

クエリー 0、応答 1。

SERVICE.FTP エンジンのパラメータ

SERVICE.FTP には、検出を行ううえで STRING エンジンを使用するのが適切でない場合に、その機能を補完する役割があります。このエンジンでは、主に FTP ポート コマンドのデコードが行われますが、無効なポート コマンドや PASV スプーフィングのトラップも行われます。SERVICE.FTP エンジンのパラメータはいずれも BOOLEAN 型で、ポート コマンドのデコードおけるさまざまなエラー トラップ条件へのマッピングに使用します。FTP は、TCP のポート 20 およびポート 21 上で実行されます。センサーでは、CT に対して、データだけを保持するポート 20 ではなくポート 21 が検査されます。

表 A-19 は、SERVICE.FTP エンジンのパラメータをまとめたものです。

 

表 A-19 SERVICE.FTP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

BadPortCmdAddress

BOOLEAN
(True、False)

×

×

ポート コマンドに無効なアドレスが指定されていたかどうか。

BadPortCmdPort

BOOLEAN
(True、False)

×

×

ポート コマンドに無効なポートが指定されていたかどうか。

BadPortCmdShort

BOOLEAN
(True、False)

×

×

ポート コマンドに不正があった(規定より短い)かどうか。

Direction

ENUM
(ANY、FromService、ToService)

×

×

センサーによる監視対象が、サービス ポートを宛先とするトラフィックの場合は ToService、送信元とするトラフィックの場合は、FromService を指定する。

ServicePorts

RANGE

×

×

ターゲット サービスが常駐するポートまたはポート範囲のリスト(カンマ区切り形式)。

isPASV

BOOLEAN
(True、False)

×

×

PASV ポート スプーフィングが検出されたかどうか。

SERVICE.GENERIC エンジンのパラメータ

SERVICE.GENERIC は特殊なエンジンです。これは、シグニチャを記述するためのものではありません。このエンジンを使用すると、設定ファイルだけによるシグニチャ アップデートで、プログラム シグニチャを発行できます。SERVICE.GENERIC エンジンは、簡易なマシン言語およびアセンブリ言語を備えています。これらの言語は設定ファイルで定義されます。(アセンブリ言語から導出された)マシン コードは仮想マシンを介して実行されます。仮想マシンは、命令を処理し、パケットから重要な情報を引き出して、マシン コードに指定された比較および演算を実行します。

SERVICE.GENERIC エンジンは、STRING エンジンおよび STATE エンジンを補完することで高速なシグニチャ応答を実現する緊急応答エンジンとしての役割を持っています。


注意 このエンジンでは、カスタム シグニチャは作成できません。

表 A-20 は、SERVICE.GENERIC エンジンのパラメータをまとめたものです。

 

表 A-20 SERVICE.GENERIC エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

DstPort

NUMBER(0 ~ 65535)

×

×

シグニチャの対象となる宛先ポート。

IntermediateInstructions

STRING

×

アセンブリ コードまたはマシン コード。文字列形式のマシン対応コード(regname、oper、opnd1、opnd2)。


注意 十分な知識のあるユーザだけが使用します。

PayloadSource

ENUM(FullTcpStream ICMPdata L2header L3header
L4header
TCPdata UDPdata)

×

×

ペイロード オフセットの計算を開始する位置。

SrcPort

NUMBER(0 ~ 65535)

×

×

シグニチャの対象となる送信元ポート。

SERVICE.HTTP エンジンについて

SERVICE.HTTP は、Hyper-Text Transport Protocol(HTTP)に特化した、正規表現に基づくパターン検査機能やアラーム機能を備えています。このエンジンは、文字列ベース パターン マッチング検査エンジンです。

正規表現(Regex)は、テキストを記述する手段として、強力で柔軟性のある表記言語です。正規表現は、データ内のパターンと照合する際に使用されるパターン マッチャというデータ構造にコンパイルされます。正規表現では、パターン マッチングが行われることから、任意のパターンを簡潔に記述できるようになっています。

SERVICE.HTTP では、最新の正規表現ライブラリが使用されます。この正規表現ライブラリを使用すると、複数のパターンを 1 つのパターン マッチング テーブルにまとめることで、データ内の検索を一度に実行できます。最新の正規表現では、論理和演算子「|」(OR 演算子とも言う)を使用することもできます。

SERVICE.HTTP で検索できるのは、Web サービスに向けたトラフィックである HTTP 要求だけです。このエンジンでは、リターン トラフィックは検査できません。このエンジンで定義された各サブエンジンでは、対象となる Web ポートを個別に指定できます。

ここでは、次の内容について説明します。

「HTTP フィールド セクション」

「一致文字列長」

「SERVICE.HTTP エンジンに対する制限および制約事項」

「SERVICE.HTTP エンジンのパラメータ」

HTTP フィールド セクション

SERVICE.HTTP エンジンの主な役割は、HTTP 要求メソッド(GET、POST、HEAD など)に続く HTTP 要求を特定のセクションに分割することです。要求を分割することで、正規表現がより単純になり、パターン マッチャのサイズも小さくなります。

次に示すのは、分割される前の HTTP 要求の例です。

POST /eng/Tech/projectB/foobar.html?name=john&last=doe HTTP/1.0
<CRLF>
Accept: text/html
User-Agent: Mozilla
Host: 10.1.20.55
Context-Length: 45
<CRLF>
<CRLF>
Argument1=td&Argument2=foobar&middlename=levi
<CRLF>

HTTP 要求は、次の 3 つのセクションに分割されます。

URI

Uniform Resource Identifier(ユニフォーム リソース識別子)。エンティティのアクセス方式およびリソース名を識別するための名前です。

URI は、HTTP メソッドの直後から、最初の改行または引数デリミタ(? または &)までのセクションです。

/eng/Tech/projectB/foobar.html

引数

URI に引数デリミタ(& または ?)が含まれる場合は、そのデリミタの直後から最初の改行までのセクションが引数となります。POST メソッドが使用されている場合、引数には Content-Length ヘッダー フィールドで定義されたエンティティ ボディ内のデータもすべて含まれます。このどちらの場合にも該当しなければ、引数セクションは空になっていてもかまいせん。POST メソッドが使用されている場合は、URI 要求行の引数よりも前に、エンティティ ボディの検査が行われることもあります。

name=john&last=doe

Argument1=td&Argument2=foobar&middlename=levi

ヘッダー

ヘッダーは、最初の改行の直後から 2 つの復帰改行(<CRLF><CRLF>)までの部分です。

Accept: text/html

User-Agent: Mozilla

Host: 10.1.20.55

Content-Length: 45

一致文字列長

パラメータ MinMatchLength を使用すると、一致する文字列の長さを指定できます。この長さは、最初の繰り返し演算子(* または +)の直前にある文字から、パターン内の最後の文字までを対象に計算されます。たとえば、パターンが foobar.*abc で、検索するデータが「foobarxxxxxxxxxxabc」であるとすると、正規表現検索に記録される長さは 13 となります。これは、foobar の「r」と abc の「c」との隔たりを表しています。シグニチャ記述パラメータである MinMatchLength に値が指定されている場合、RegexString の値(論理和演算子「|」が使用されている場合は各部分文字列も含む)の中に繰り返し演算子が含まれていないと、エラーがログに記録され、シグニチャの記述は処理 されません 。繰り返し演算子が含まれない正規表現は固定長であり、さらに論理和演算子が使用されていなければ一致文字列の長さは常に一定です。論理和演算子が使用されている場合は、いずれかの部分文字列の長さが一致文字列の長さとなります。

SERVICE.HTTP エンジンに対する制限および制約事項

表 A-21 は、SERVICE.HTTP エンジンに対する制限を示したものです。

 

表 A-21 SERVICE.HTTP エンジンに対する制限

制限
制限値
エラー処理

1 つのパターン マッチャに含まれる状態の最大数

65500

新しいパターン マッチャが生成され、検査リストに追加される。

パターン マッチャの最大数

25

エラーがログに記録される。

MinMatchLength が定義されている場合のパターン マッチャに含まれるパターンの最大数

255

新しいパターン マッチャが生成され、検査リストに追加される。


) HTTP の処理には多くの時間を要するため、要求の先頭 20 バイトの中から有効な HTTP メソッド(GET、HEAD、POST)が検出されない場合は、そのデータ ストリーム全体に対する検査が中止されます。


SERVICE.HTTP エンジンには次のような制約があります。

MinRequestMatchLength は、RequestRegex の値が指定され、かつ RequestRegex の値に繰り返し演算子(* または +)が含まれている場合に限って適用される。

MaxRequestFieldLength の値が MinRequestMatchLength の値より小さいとエラーが生成される。

SERVICE.HTTP エンジンのパラメータ

表 A-22 は、SERVICE.HTTP エンジンのパラメータをまとめたものです。

 

表 A-22 SERVICE.HTTP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

UriRegex1

STRING

×

HTTP 要求の URI セクション内で照合するパターンの正規表現。URI フィールドは、有効な HTTP メソッドと、最初の復帰改行または引数デリミタ(? または &)との間で定義される。

ArgNameRegex2

STRING

×

引数セクション内で照合するパターンの正規表現。

ArgValueRegex3

STRING

×

ArgNameRegex の値が一致した後に引数セクション内で照合するパターンの正規表現。照合は順次実行される。ArgNameRegex と ArgValueRegex の併用は、引数のキーと値のペアを照合する場合に有効。

HeaderRegex4

STRING

×

ヘッダー セクション内で照合するパターンの正規表現。

RequestRegex5

STRING

×

要求全体で照合するパターンの正規表現。

MaxUriFieldLength

NUMBER(0 ~ 4294967295)

×

×

URI フィールドの最大長。

MaxArgFieldLength

NUMBER(0 ~ 4294967295)

×

×

引数フィールドの最大長。

MaxHeaderFieldLength

NUMBER(0 ~ 4294967295)

×

×

ヘッダー フィールドの最大長。

MaxRequestFieldLength

NUMBER(0 ~ 4294967295)

×

×

ヘッダー フィールドの最大長。

Deobfuscate

BOOLEAN
(True、False)

×

×

検索の前に反回避 HTTP 解読を適用するかどうか。

ServicePorts

SET

×

ターゲット サービスが常駐するポートまたはポート範囲のリスト(カンマ区切り形式)。

MinRequestMatchLength6

NUMBER(0 ~ 4294967295)

×

×

UriRegex の値と一致することが必要なバイト数の最小値。

1.文字列は有効な正規表現であることが必要です。

2.文字列は有効な正規表現であることが必要です。引数デリミタまで達すると、一致状態はリセットされます。

3.文字列は有効な正規表現であることが必要です。また、ArgNameRegex の値を指定する必要もあります。引数デリミタまで達すると、一致状態はリセットされます。

4.文字列は有効な正規表現であることが必要です。

5.文字列は有効な正規表現であることが必要です。

6.このパラメータを使用するには、RequestRegex の値に、繰り返し演算子(* または +)が含まれている必要があります。含まれていなければ、このパラメータは使用できません。

SERVICE.IDENT エンジンのパラメータ

SERVICE.IDENT エンジンでは、TCP ポート 113 のトラフィックの検査が行われます。このエンジンは、基本的なデコードを実行できるほか、データ長のオーバーフローを指定したり、デコード エラー トラップを検索したりするためのパラメータを備えています。また、Stream Reassembly エンジンで外部的に処理されるもの以外のクロスパケット ストレージは必要ありません。

表 A-23 は、SERVICE.IDENT エンジンのパラメータをまとめたものです。

 

表 A-23 SERVICE.IDENT エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

Direction

ENUM(FromService、ToService)

×

×

センサーによる監視対象が、サービス ポートを宛先とするトラフィックの場合は ToService、送信元とするトラフィックの場合は、FromService を指定する。

MaxBytes

NUMBER(0 ~ 65535)

×

×

ペイロード長がこの値を超えるとアラームが送信される。

ServicePorts

RANGE

×

×

ターゲット サービスが常駐するポートまたはポート範囲のリスト(カンマ区切り形式)。

hasBadPort

BOOLEAN
(True、False)

×

×

IDENT ペイロードにベイ ポート指定子が含まれている場合にアラームを送信するかどうか。

hasNewline

BOOLEAN
(True、False)

×

×

ペイロードに非終端改行文字が含まれている場合にアラームを送信するかどうか。

SERVICE.MSSQL エンジンのパラメータ

SERVICE.MSSQL エンジンでは、Microsoft の SQL server (MSSQL)で使用されるプロトコルの検査が行われます。また、ログイン ユーザ名や、パスワードが使用されたかどうかなどの MS SQL プロトコル値に基づいたカスタム シグニチャを追加できます。

表 A-24 は、SERVICE.MSSQL エンジンのパラメータをまとめたものです。

 

表 A-24 SERVICE.MSSQL エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

sqlUsername

STRING

×

×

MS SQL サービスにログインしているユーザのユーザ名(完全一致)。

passwordPresent

BOOLEAN

×

×

MS SQL ログインでパスワードが使用されたかどうか。

SERVICE.NTP エンジンのパラメータ

SERVICE.NTP エンジンでは、Network Time Protocol(NTP; ネットワーク タイム プロトコル)の検査が行われます。

表 A-25 は、SERVICE.NTP エンジンのパラメータをまとめたものです。

 

表 A-25 SERVICE.NTP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

Mode

NUMBER(0x0 ~ 0xffff)

×

×

RFC 1305 に基づく NTP パケットの動作モード。

MaxSizeOfControlData

NUMBER(0x0 ~ 0xffff)

×

×

制御パケットで送信されるデータの最大許容量。

ControlOpCode

NUMBER(0x0 ~ 0xffff)

×

×

RFC1305 の Appendix B に基づく NTP 制御パケットの命令コード番号。

isInvalidDataPacket7

BOOLEAN
(True、False)

×

×

NTP データ パケットの構造を調べ、そのサイズが正しいことを確認するかどうか。

isNonNtpTraffic8

BOOLEAN
(True、False)

×

×

NTP ポート上で非 NTP(または異常)トラフィックが存在するかどうかを調べるためのパラメータ。

7.このトークンは、その他のエンジンに固有のトークンとは併用できません。

8.このトークンは、その他のエンジンに固有のトークンとは併用できません。

SERVICE.RPC エンジンのパラメータ

SERVICE.RPC エンジン デコーダでは、反回避の方式として完全なデコードが行われます。これにより、断片化メッセージ(複数パケット内の 1 つのメッセージ)およびバッチ メッセージ(1 つのパケット内の複数メッセージ)を処理できます。RPC ポート マッパーは、ポート 111 上で動作します。通常の RPC メッセージは、550 より上位であれば任意のポートで送受信できます。RPC スイープは、TCP ポート スイープとほぼ同じものです。異なるのは、有効な RPC メッセージが送信された場合に一意のポートだけをカウントするという点です。また RPC スイープは、一意のカウントを実行できるように、RPC プログラムのタイプごとに区別されます。

表 A-26 は、SERVICE.RPC エンジンのパラメータをまとめたものです。

 

表 A-26 SERVICE.RPC エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

Direction

ENUM(FromService、ToService)

×

×

センサーによる監視対象が、サービス ポートを宛先とするトラフィックの場合は ToService、送信元とするトラフィックの場合は、FromService を指定する。

PortMapProgram

NUMBER(0 ~ 99999)

×

×

シグニチャの対象とするポート マッパーに送信されるプログラム番号。

RpcMaxLength

NUMBER(0 ~ 99999)

×

×

RPC メッセージ全体の長さの最大許容値。長さがこの値を超えるとアラームが生成される。

RpcProcedure

NUMBER(0 ~ 65535)

×

×

シグニチャの対象とする RPC プロシージャ番号。

RpcProgram

NUMBER(0 ~ 99999)

×

×

シグニチャの対象とする RPC プログラム番号。

ServicePorts

RANGE

×

×

ターゲット サービスが常駐するポートまたはポート範囲のリスト(カンマ区切り形式)。

Unique

NUMBER(2 ~ 40)

×

×

スイープ用のパラメータ。アラームが送信されるまで許容される一意的なポート接続の数のしきい値。このパラメータを有効にするには、パラメータ isSweep が True に設定されていることが必要。

isPortMapper

BOOLEAN
(True、False)

×

×

ポート 111 トラフィックをシグニチャの対象とする場合は True、それ以外の場合は False を指定する。

isSpoolSrc

BOOLEAN
(True、False)

×

×

SrcAddress が 127.0.0.1 に設定されている場合にアラームを送信するかどうか。

isSweep

BOOLEAN(True、False)

×

×

シグニチャが RPC スイープの場合は True、それ以外の場合は False を指定する。このパラメータを有効にするには、Unique に値を設定することが必要。

SERVICE.SMB エンジンのパラメータ

SERVICE.SMB エンジンでは、SMB プロトコルのデコードが行われます。次に示すのは、SERVICE.SMB エンジンに属する組み込みシグニチャです。

3303:ゲスト特権でログインに成功

3304:ヌル ログインを試行

3305:Windows 95/98 のパスワード ファイルによるアクセス

3306:リモート レジストリへのアクセスを試行

3307:RedButton 監視

3308:リモート isarpc サービスへのアクセスを試行

3309:リモート srvsvc サービスへのアクセスを試行

6255:SMB ログインに失敗


) シグニチャのリストは、シグニチャがアップデートされるたびに変更されます。このリストは、4.0 リリースに適用されるものです。



注意 SERVICE.SMB エンジンには、カスタム シグニチャは追加できません。SERVICE.SMB エンジンにカスタム シグニチャを追加しようとすると、「Error: Array contains max entries, could not add new entry」というエラー メッセージが表示されます。

表 A-27 は、SERVICE.SMB エンジンのパラメータをまとめたものです。

 

表 A-27 SERVICE.SMB エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明例

ScanInterval

NUMBER(1 ~ 131071)

×

×

アラーム レートの決定に使用されるインターバルの秒数(シグニチャ 6255 のみ)。

HitCount

NUMBER(1 ~ 65535)

×

×

ScanInterval で指定したインターバルの中で、指定した数のヒットがカウントされるとアラームがトリガーされる(シグニチャ 6255 のみ)。

PipeName

STRING(260 バイト)

×

×

NT_CREATE_ANDX で監視するパイプ数(ユーザ シグニチャには実装されていない)。

AccountName

STRING(260 バイト)

×

×

指定したアカウント名に対してログインが試行されるとアラームが送信される(ユーザ シグニチャには実装されていない)。

FileName

STRING(260 バイト)

×

×

指定した名前のファイルを開こうとするとアラームが送信される(ユーザ シグニチャには実装されていない)。


) シグニチャ 6255(SMB ログインに失敗)で値を変更できるパラメータは、ScanInterval と HitCount だけです。


SERVICE.SNMP エンジンについて

SERVICE.SNMP エンジンでは、SNMP プロトコルの検査が行われます。また、ポート 161 を宛先とするすべての UDP パケットに対してフィルタリング処理が行われます。

この項で取り上げる事項は次のとおりです。

「SERVICE.SNMP エンジンに関する制限事項」

「SERVICE.SNMP エンジンのパラメータ」

SERVICE.SNMP エンジンに関する制限事項

表 A-28 は、SERVICE.SNMP エンジンに対して現在適用されている制限事項を示したものです。

 

表 A-28 SERVICE.SNMP エンジンに関する制限事項

制限
制限値
エラー処理

デコードされたコミュニティ名の最大長

256 文字

プロトコル違反アラームが送信される。

デコードされたオブジェクト ID の最大長

256 文字

プロトコル違反アラームが送信される。

SERVICE.SNMP エンジンで検査の対象となるのは、SNMP バージョン 1 だけです。


注意 可能性は低いものの、2 つの異なるコミュニティ名の文字列から同じ整数ハッシュが生成されることがあります。この場合、コミュニティ名の照合結果は false positive になります。コミュニティ名のハッシュを生成するには、そのコミュニティ名の先頭 4 バイトまでを 32 ビットの整数に変換し、その整数にそれ以外のバイトをすべて足し合せます。

SERVICE.SNMP エンジンのパラメータ

CommunityName の文字列は、整数サイズのハッシュに変換されます。これにより、プロトコルのデコードが高速化され、必要な記憶域が減少します。パケットからデコードされた CommunityName の文字列も整数ハッシュに変換されます。CommunityName の各文字列からは、ほぼ一意の整数ハッシュが生成されます。これらのハッシュを使用することで、CommunityName の文字列が一致するかどうかを判定できます。また、ハッシュを保存して比較することにより、総当り攻撃を受けていないかどうかの判定も行えます。

ObjectId の文字列は、整数配列に変換されます。これにより、プロトコルのデコードが高速化され、必要な記憶域が減少します。パケットからデコードされた ObjectId の文字列も整数配列に変換されます。これらの配列を比較することにより、ObjectId の文字列が一致するかどうかを判定できます。

表 A-29 は、SERVICE.SNMP エンジンのパラメータをまとめたものです。

 

表 A-29 SERVICE.SNMP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

CommunityName9

STRING

×

×

検索対象の SNMP パスワード。

ObjectId10

STRING

×

×

検索対象のオブジェクト ID。

BruteForceCount11

NUMBER

×

×

二重に検出された一意のコミュニティ名が指定した数に達すると、総当たり攻撃を受けていると見なされる。

IsBruteForce12

BOOLEAN(True、False)

×

BruteForceCount に値が指定されているかどうかを示すトークン。

IsValidPacket13

BOOLEAN(True、False)

SNMP プロトコル違反があるかどうかを示すトークン。

IsNonSnmpTraffic14

BOOLEAN(True、False)

×

UDP ポート 161 を宛先とする非 SNMP トラフィックがあるかどうかを示すトークン。

9.長さが 2 ~ 255 の文字列です。

10.長さが 2 ~ 255 の文字列です。この文字列は「.1.3.6.4.1」という形式にする必要があります。最短の文字列は「.<number>」です(<number> は 1 桁の数字を表す)。

11.2 ~ 31 の整数値です。

12.このトークンは、BruteForceCount トークンを使用している場合に限って使用できます。

13.このトークンは、その他のエンジンに固有のトークンとは併用できません。

14.このトークンは、その他のエンジンに固有のトークンとは併用できません。

SERVICE.SSH エンジンのパラメータ

SERVICE.SSH エンジンは、ポート 22 の SSH トラフィックに特化しています。SSH セッションのセットアップ以外はすべて暗号化されるため、このエンジンではセットアップのフィールドに限って監視が行われます。SSH には 2 つのデフォルト シグニチャがあります。これら既存のシグニチャの設定を変更できますが、新しい SSH シグニチャを追加できません。


注意 SERVICE.SSH エンジンには、カスタム シグニチャは追加できません。SERVICE.SSH エンジンにカスタム シグニチャを追加しようとすると、「Error: Array contains max entries, could not add new entry」というエラー メッセージが表示されます。

表 A-30 は、SERVICE.SSH エンジンのパラメータをまとめたものです。

 

表 A-30 SERVICE.SSH エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

Direction

ENUM

(ANY、FromService、ToService)

×

×

センサーによる監視対象が、サービス ポートを宛先とするトラフィックの場合は ToService、送信元とするトラフィックの場合は、FromService を指定する。

KeyLength

NUMBER(0 ~ 65535)

×

×

キーの長さが指定した値を超えると RSAREF オーバーフローが発生する。

PacketDepth

NUMBER(0 ~ 65535)

×

×

指定した数のパケットが検知されるとセッション キーが失われたと判断される。

ServicePorts

RANGE

×

×

ターゲット サービスが常駐するポートまたはポート範囲のリスト(カンマ区切り形式)。

UserLength

NUMBER(0 ~ 65535)

×

×

ユーザ名フィールドの長さが指定した値を超えると USERNAME オーバーフローが発生する。

STATE.STRING エンジン

ここでは、次の内容について説明します。

「STATE.STRING エンジンについて」

「STATE.STRING エンジンに関する制限事項」

「STATE.STRING エンジンのパラメータ」

「事前定義済みステート マシン」

STATE.STRING エンジンについて

STATE.STRING エンジンは、TCP ストリームに対する状態ベースかつ正規表現ベースのパターン検査機能およびアラーム機能を備えています。

STATE.STRING エンジンを使用すると、任意の文字列ベースのステート マシンを定義できます。このステート マシンでは、シグニチャをステート マシンのコンテキストに特化できます。 ステート マシン とは何かの状態を保存するデバイスで、入力があるたびに、その内容に基づいてある状態から別の状態に移行したり、処理や出力を行ったりできます。ステート マシンは、出力やアラームを発生させる特定のイベントを記述するために使用します。ステート マシンの概念は非常に強力で、プロトコルのデコードや任意のネットワーク トランザクションにも適用できます。STATE.STRING エンジンでは、シグニチャの忠実度が高いため、false positive の発生数は減少します。


注意 STATE.STRING エンジンの初期リリースには、シグニチャのアップデートに伴って設定やアップグレードが可能なマシン ステートは用意されていません。

定義された個々のステート マシンは、互いに独立したエンジンに存在します。各エンジンの名前は、STATE.STRING.<StateMachine name> という形式になります。<StateMachine name> は、それぞれに定義されたステート マシンの名前です。ステート マシンの定義は、専用の .xml ファイルに保存されます。このファイルは、シグニチャのアップデートに伴い、いずれかの時点でアップデートできます。初期リリース(バージョン 4.0)では、ステート マシンの設定は行えません。ステート マシンの設定内で定義されたそれぞれの状態名は、状態名のリストで確認できます。事前定義済みの状態名は、カスタム シグニチャを定義する際に使用できます。それぞれの状態を有効に利用するためには、それらが表している内容を理解する必要があります。

STATE.STRING エンジンに関する制限事項

表 A-31 STATE.STRING エンジンに関する制限事項を示したものです。

 

表 A-31 STATE.STRING エンジンに関する制限事項

制限
制限値
エラー処理

1 つのパターン マッチャに含まれる状態の最大数

65500

新しいパターン マッチャが生成され、検査リストに追加される。

パターン マッチャの最大数。

25

エラー メッセージが生成される。

MinMatchLength が定義されている場合のパターン マッチャに含まれるパターンの最大数

255

新しいパターン マッチャが生成され、検査リストに追加される。

STATE.STRING エンジンのパラメータ

表 A-32 は、STATE.STRING エンジンのパラメータをまとめたものです。

 

表 A-32 STATE.STRING エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

Direction

ENUM(ToService または FromService)

サービス ポートへ送信したトラフィックを検査するか、サービス ポートから受信したトラフィックを検査するかを指定する。

MaxInspectLength

NUMBER(1 ~ 4294967295)

×

シグニチャで検査するデータ ストリームの最大深度。RegexString の値は、この深度に到達した時点または到達する前の時点で一致することが必要。

EndMatchOffset

NUMBER(1 ~ 4294967295)

×

RegexString の値がその中で一致をレポートする必要がある、正確なストリーム オフセットのバイト数。

MinMatchLength15

NUMBER(1 ~ 4294967295)

×

照合の開始から終了までの間で、RegexString の値と一致する必要がある最小バイト数。

RegexString16

STRING

正規表現のパターン。

ServicePorts

SET

ターゲット サービスが常駐するポートまたはポート範囲のリスト(カンマ区切り形式)。

StateName17

ENUM

RegexString の値との一致を制限する、ステート マシン内の状態の名前。

15.このパラメータを使用するには、正規表現の中に繰り返し演算子(* または +)が含まれている必要があります。含まれていなければ、このパラメータは使用できません。繰り返し演算子が含まれない RegexString の値は固定長であり、一致文字列の長さは常に一定です。

16.RegexString の値は、正規表現形式の文字列であることが必要です。

17.この列挙値は、ステート マシン定義の中で定義されます。

事前定義済みステート マシン

ステート マシンは、開始状態名と遷移のリストで構成されます。開始状態名は、ステート マシンの初期状態の名前で、遷移の中で定義されます。

この項で取り上げる事項は次のとおりです。

「ステート マシン エンジンの遷移パラメータ」

「SERVICE.SMTP エンジンの遷移」

「STATE.STRING.CISCOLOGIN エンジンの遷移」

「STATE.STRING.LPRFORMAT エンジンの遷移」

ステート マシン エンジンの遷移パラメータ

表 A-33 は、ステート マシン エンジンの遷移を定義するためのパラメータをまとめたものです。

 

表 A-33 ステート マシン エンジンの遷移パラメータ

パラメータ名
データ型
説明

RegexString

STRING

状態遷移をトリガーする正規表現の文字列。

MaxInspectLength

NUMBER(1 ~ 4294967295)

RegexString の値に関して検査できる最大ストリーム オフセットのバイト数。

EndOffset

NUMBER(1 ~ 4294967295)

RegexString の値が一致する必要がある正確なストリーム オフセットのバイト数。

RequiredState

STRING

遷移が生じるために必要なステート マシンの現在の状態。入力した一意の文字列ごとに、RequiredState パラメータの列挙値が定義されます。

NextState

STRING

遷移した後の新しい状態。入力した一意の文字列ごとに、RequiredState パラメータの列挙値が定義されます。

Direction

ENUM(ToService または FromService)

遷移のために検査するデータ ストリームの方向。

SERVICE.SMTP エンジンの遷移

表 A-34 は、初期状態 START に対する SERVICE.SMTP エンジンの遷移を示したものです。

 

表 A-34 SERVICE.SMTP エンジンの遷移

正規表現文字列
必須の状態
次の状態
方向

[\r\n]250[ ]

START

SmtpCommands

FromService

220[ ][^\r\n[\x7f-\xff]*SNMP

START

SmtpCommands

FromService

(HE|EH)LO

START

SmtpCommands

ToService

[\r\n](235|220.*TLS)

START

ABORT

FromService

[\r\n](235|220.*TLS)

SmtpCommands

ABORT

FromService

[Dd][Aa][Tt][Aa]|[Bb][Dd][Aa][Tt]

SmtpCommands

MailHeader

ToService

[\r\n]354

SmtpCommands

MailHeader

FromService

[\r\n][.][\r\n]

MailHeader

SmtpCommands

ToService

[\r\n][2][0-9][0-9][ ]

MailHeader

SmtpCommands

FromService

([\r][\n]|[\n][\r]){2}

MailHeader

MailBody

ToService

[\r\n][.][\r\n]

MailBody

SmtpCommands

ToService

[\r\n][2][0-9][0-9][ ]

MailBody

SmtpCommands

FromService

STATE.STRING.CISCOLOGIN エンジンの遷移

表 A-35 は、初期状態 START に対する STATE.STRING.CISCOLOGIN エンジンの遷移を示したものです。

 

表 A-35 STATE.STRING.CISCOLOGIN エンジンの遷移

正規表現文字列
必須の状態
次の状態
方向

User[ ]Access[ ]Verification

START

CiscoDevice

FromService

Cisco[ ]Systems[ ]Console

START

CiscoDevice

FromService

assword[:]

CiscoDevice

PassPrompt

FromService

\x03

PassPrompt

ControlC

ToService

(enable)

ControlC

EnableBypass

FromService

\x03[\x00-\xFF]

ControlC

PassPrompt

ToService

STATE.STRING.LPRFORMAT エンジンの遷移

表 A-36 は、初期状態 START に対する STATE.STRING.LPRFORMAT エンジンの遷移を示したものです。

 

表 A-36 STATE.STRING.LPRFORMAT エンジンの遷移

正規表現文字列
終了オフセット
必須の状態
次の状態
方向

[1-9]

1

START

ABORT

ToService

%

START

FormatChar

ToService

[\x0a\x0d]

FormatChar

ABORT

ToService

STRING エンジン

この項で取り上げる事項は次のとおりです。

「STRING エンジンについて」

「一致文字列長」

「STRING エンジンのパラメータ」

「STRING エンジンに関する制限事項」

STRING エンジンについて

STRING エンジンは、TCP、UDP、ICMP など複数の転送プロトコルを対象とした正規表現ベースのパターン検査機能およびアラート機能を備えています。

正規表現は、テキストを記述する手段として、強力で柔軟性のある表記言語です。正規表現では、パターン マッチングが行われることから、任意のパターンを簡潔に記述できるようになっています。正規表現は、データ内のパターンと照合する際に使用されるパターン マッチャというデータ構造にコンパイルされます。

STRING エンジンは、TCP、UDP および ICMP の各プロトコルを対象とした、文字列ベースの汎用パターン マッチング検査エンジンです。STRING エンジンでは、複数のパターンを 1 つのパターン マッチング テーブルにまとめることでデータ内の検索を一度に実行できる新しい正規表現エンジンが使用されます。最新の正規表現では、論理和演算子「|」(OR 演算子とも言う)を使用することもできます。STRING エンジンには、STRING.TCP、STRING.UDP、STRING.ICMP という 3 つの種類があります。

一致文字列長

パラメータ MinMatchLength を使用すると、一致する文字列の長さを指定できます。この長さは、最初の繰り返し演算子(* または +)の直前にある文字から、パターン内の最後の文字までを対象に計算されます。たとえば、パターンが foobar.*abc で、検索するデータが「foobarxxxxxxxxxxabc」であるとすると、正規表現検索に記録される長さは 13 となります。これは、foobar の「r」と abc の「c」との隔たりを表しています。シグニチャ記述パラメータである MinMatchLength が指定されている場合、RegexString の値の中に繰り返し演算子が含まれていないと、エラーがログに記録され、シグニチャの記述は処理 されません 。また、OR 演算子が使用され、そのオペランドに中に繰り返し演算子が含まれていないものがある場合にも、エラーが発生します (例:cat|dog+y|mouse.*trap)。繰り返し演算子が含まれない正規表現は固定長であり、さらに論理和演算子が使用されていなければ一致文字列の長さは常に一定です。論理和演算子が使用されている場合は、いずれかの部分文字列の長さが一致文字列の長さとなります。

STRING エンジンのパラメータ

表 A-37 は、STRING エンジンのパラメータをまとめたものです。

 

表 A-37 STRING エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

Direction18

BOOLEAN

サービス ポートへ送信したトラフィックを検査するか、サービス ポートから受信したトラフィックを検査するかを指定する。

EndMatchOffset

NUMBER

×

RegexString の値が一致のレポートに使用する必要がある、正確なストリーム オフセットのバイト数。

MinMatchLength19

NUMBER

×

RegexString の値と一致する必要があるバイト数の最小値。

RegexString20

STRING

正規表現のパターン。

ServicePorts

SET

×

ターゲット サービスが常駐するポートまたはポート範囲のリスト(カンマ区切り形式)。

StripTelnetOptions

BOOLEAN

×

パターンを検索する前に、データ ストリームから Telnet オプション制御文字を削除するかどうか。主に IDS 反回避ツールとして使用する。

18.ToService または FromService。

19.このパラメータを使用するには、正規表現の中に繰り返し演算子(* または +)が含まれている必要があります。含まれていなければ、このパラメータは使用できません。繰り返し演算子が含まれない RegexString の値は固定長であり、一致文字列の長さは常に一定です。

20.RegexString の値は、正規表現形式の文字列であることが必要です。

STRING エンジンに関する制限事項

表 A-38 は、STRING エンジンに関する制限事項を示したものです。

 

表 A-38 STRING エンジンに関する制限事項

制限
制限値
エラー処理

1 つのパターン マッチャに含まれる状態の最大数

65500

新しいパターン マッチャが生成され、検査リストに追加される。

パターン マッチャの最大数。

25

エラーがログに記録される。

MinMatchLength が定義されている場合のパターン マッチャに含まれるパターンの最大数

255

新しいパターン マッチャが生成され、検査リストに追加される。

SWEEP エンジン

この項で取り上げる事項は次のとおりです。

「SWEEP エンジンについて」

「SWEEP エンジンの設定に関する制約事項」

「SWEEP.HOST.ICMP エンジンのパラメータ」

「SWEEP.HOST.TCP エンジンのパラメータ」

「SWEEP.MULTI エンジンのパラメータ」

「SWEEP.OTHER.TCP エンジンのパラメータ」

「SWEEP.PORT.TCP エンジンのパラメータ」

「SWEEP.PORT.UDP エンジンのパラメータ」

SWEEP エンジンについて

SWEEP エンジンでは、2 つのホスト間のトラフィック(SWEEP.PORT.*)または 1 つのホストから多数のホストへのトラフィック(SWEEP.HOST.*)について、解析が行われます。ホスト スイープは、1 つの攻撃者ホストからの一意のホスト接続をカウントし、ホストの一意のカウントがそのしきい値を超えた場合にアラームを送信する 1 対 n シグニチャです。ポート スイープは、2 つのホスト間の一意のポート接続をカウントし、そのカウント数がしきい値を超えた場合にアラームを送信する 1 対 1 シグニチャです。

SWEEP.MULTI は、UDP ポートおよび TCP ポートがともにスイープされた場合にトリガーされる従来の SATAN シグニチャを備えるなど、クロスプロトコル スイープを対象としたエンジンです。SWEEP.OTHER.TCP は、特殊な TcpFlags を組み合せて送信し、ターゲット マシンのオペレーティング システムを特定する Queso や NMAP スイープなど、通常とは異なるスイープを対象としたエンジンです。このエンジンでは、他の SWEEP エンジンのような通常タイプの一意のカウンティングは行われず、攻撃対象へ送信されたさまざまな TcpFlags 群が監視されます。

各スイープのアラーム条件は、本質的には Unique の値によって決まります。Unique は、しきい値を指定するパラメータです。ある一定時間内にアドレス セット上で検出されたポート/ホストの数が Unique の値を上回るとアラームが送信されます。一意のポート/ホストのトラッキング処理をカウンティングと言います。カウンティング セクションの処理内容は、IcmpType、Mask/TcpFlags、WantFrag など他のパラメータや UDP ポートにより制御されます。これらのパラメータは、パケットの条件が満たされてない場合にカウンティングをバイパスするための主要な識別子です。

SWEEP エンジンの設定に関する制約事項

SWEEP エンジンでは、マスター パラメータ ResetAfterIdle が使用されます。ResetAfterIdle には、インスペクタでトラフィックが検出されなくなってから、一意のカウンティングの現在の状態がクリアされるまでの秒数 X を指定します。言い換えれば、現在の状態がクリアされるまでの X 秒間に、インスペクタでトラッキングされているホスト(アドレス セット)上でトラフィックが一切検出されなかったということです。これらのエンジンでは、マスター パラメータ WantFrag を使用することもできますが、パラメータ MaxInspectLength は使用されません。

SWEEP.HOST.ICMP エンジンのパラメータ

表 A-39 は、SWEEP.HOST.ICMP エンジンのパラメータをまとめたものです。

 

表 A-39 SWEEP.HOST.ICMP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

IcmpType

NUMBER(0 ~ 255)

×

×

スイープ シグニチャの対象となる ICMP のタイプ。

Unique

NUMBER(2 ~ 40)

×

一意的なホスト接続の数のしきい値。インターバル中にホスト接続数が Unique の値を超えた場合はアラームが送信される。

SWEEP.HOST.TCP エンジンのパラメータ

表 A-40 は、SWEEP.HOST.TCP エンジンのパラメータをまとめたものです。

 

表 A-40 SWEEP.HOST.TCP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

Mask

BITSET
(FIN SYN RST PSH ACK URG ZERO)

×

TcpFlags の比較に使用するマスク。

TcpFlags

BITSET
(FIN SYN RST PSH ACK URG ZERO)

×

Mask によってマスクされた場合に照合する TCP フラグ。

Unique

NUMBER(2 ~ 40)

×

許容される一意的な接続の数のしきい値。この値を超えると、アラームが送信される。

SWEEP.MULTI エンジンのパラメータ

表 A-41 は、SWEEP.MULTI エンジンのパラメータをまとめたものです。

 

表 A-41 SWEEP.MULTI エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

TcpInterest

NUMBER(1 ~ 2)

×

×

対象となる事前定義済み TCP ポート。
1 = SATAN の通常モードでスキャンされるポート、2 = SATAN のヘビー モードでスキャンされるポート。

UdpInterest

NUMBER(1 ~ 2)

×

×

対象となる事前定義済み UDP ポート。
1 = SATAN の通常モードでスキャンされるポート、2 = SATAN のヘビー モードでスキャンされるポート。

UniqueTCPports

NUMBER(2 ~ 40)

×

×

アラームが送信されるまで許容される一意的な TCP ポート接続の数のしきい値。

UniqueUDPports

NUMBER(2 ~ 40)

×

×

アラームが送信されるまで許容される一意的な UDP ポート接続の数のしきい値。

SWEEP.OTHER.TCP エンジンのパラメータ

表 A-42 は、SWEEP.OTHER.TCP エンジンのパラメータをまとめたものです。

 

表 A-42 SWEEP.OTHER.TCP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

PortRange

NUMBER(0 ~ 2)

×

×

使用する宛先ポートの範囲。
1 = 下位ポート、2 = 上位ポート、0 = すべて

TcpFlags1

BITSET
(FIN SYN RST PSH ACK URG ZERO)

×

等価比較に使用する TCP フラグ(1/4)。

TcpFlags2

BITSET
(FIN SYN RST PSH ACK URG ZERO)

×

×

等価比較に使用する TCP フラグ(2/4)。

TcpFlags3

BITSET
(FIN SYN RST PSH ACK URG ZERO)

×

×

等価比較に使用する TCP フラグ(3/4)。

TcpFlags4

BITSET
(FIN SYN RST PSH ACK URG ZERO)

×

×

等価比較に使用する TCP フラグ(4/4)。

SWEEP.PORT.TCP エンジンのパラメータ

表 A-43 は、SWEEP.PORT.TCP エンジンのパラメータをまとめたものです。

 

表 A-43 SWEEP.PORT.TCP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

InvertedSweep

BOOLEAN
(True、False)

×

×

一意のカウンティングに対して、DSTPORT の代わりに SRCPORT を使用するかどうか。

Mask

BITSET
(FIN SYN RST PSH ACK URG ZERO)

×

TcpFlags の比較に使用するマスク。

PortRange

NUMBER(0 ~ 2)

×

検査対象とするポート範囲:1 = 下位ポート、2 = 上位ポート、0 = すべて。

SupressReverse

BOOLEAN
(True、False)

×

×

アドレス セットに対して逆方向にスイープが実行された場合にアラームを生成しないかどうか。

TcpFlags

BITSET
(FIN SYN RST PSH ACK URG ZERO)

×

Mask によってマスクされた場合に照合する TCP フラグ。

Unique

NUMBER(2 ~ 40)

×

アラームが送信されるまで許容される一意的な接続の数のしきい値。

SWEEP.PORT.UDP エンジンのパラメータ

表 A-44 は、SWEEP.PORT.UDP エンジンのパラメータをまとめたものです。

 

表 A-44 SWEEP.PORT.UDP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

PortsInclude

STRING

×

×

スイープについての検査対象とするポートまたはポート範囲のカンマ区切りリスト。

Unique

NUMBER(2 ~ 40)

×

2 つのホスト間における一意的なポート接続の数のしきい値。

SYSLOG エンジン

SYSLOG エンジンでは、syslog ポート(514 UDP)を宛先とするトラフィックの解析が行われます。このエンジンは、syslog のデータ内容の処理に特化したものです。事前に定義されている CISCO ACL ポリシー違反メッセージのフォーマットに syslog のデータ内容が準拠している場合は、その syslog のデータ内容を使用してアラートが生成されます。ACL のフォーマットに準拠していない syslog は無視されます。

表 A-45 は、SYSLOG エンジンのパラメータをまとめたものです。

 

表 A-45 SYSLOG エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

AclDataSource

STRING

×

×

ACL 違反のある有効な送信元の IP アドレスのカンマ区切りリスト。

AclFilterName

STRING

×

×

ACL フィルタの名前。

Facility

NUMBER

×

×

syslog のファシリティ レベル。

Priority

NUMBER

×

×

syslog の優先度レベル。

TROJAN エンジンと TRAFFIC エンジン

TROJAN グループに属するエンジンは次の 3 つです。

TROJAN.BO2K

TROJAN.TFN2K

TROJAN.UDP

TRAFFIC グループに属するエンジンは TRAFFIC.ICMP だけです。


注意 TROJAN エンジンおよび TRAFFIC エンジンには、カスタム シグニチャは追加できません。TROJAN エンジンおよび TRAFFIC エンジンにカスタム シグニチャを追加しようとすると、「Error: Array contains max entries, could not add new entry」というエラー メッセージが表示されます。

TRAFFIC エンジンおよび TROJAN エンジンは、BackOrifice 2000(BO2K)、Tribe Flood Net 2000(TFN2K)、LOKI、Distributed Denial Of Service(DDOS)などの非標準プロトコルを対象としたエンジンです。

BackOrifice(BO)は、Windows を標的とした最初のバック ドア型トロイの木馬です。この BO は UDP 上で実行されます。ほどなくして、BO に代わる BO2K が現れました。BO2K は、基本的な XOR 暗号を利用する UDP と TCP のどちらにも対応しています。TROJAN.UDP エンジンは、UDP モードの BO および BO2K に対処します。TCP モードには、TROJAN.BO2K エンジンで対処します。

TFN2K は、Tribe Flood Net(TFN)の新しいバージョンです。この TFN2K は、Distributed DOS(DDoS; 分散型 DoS)エージェントであり、感染した複数のコンピュータ(ゾンビ)による同時攻撃を制御することで、身元がわからない無数の攻撃ホストから 1 つのコンピュータ(またはドメイン)を狙って、不正なトラフィックを大量に送信できます。TFN2K は、送信するパケットのヘッダー情報をランダム化するため、とりわけ悪質性が高いと考えられますが、それでもそのシグニチャを特定するための手掛かりが 2 つ存在します。1 つは L3 チェックサムが正しくないこと、もう 1 つは使用されている Base64 符号化データの痕跡、および char 64 "A" が、ペイロードの末尾から検出されることです。TFN2K は、任意のポートで実行可能であり、ICMP、TCP、UDP、またはこれらのプロトコルの組み合せで通信できます。

LOKI も、バック ドア型トロイの木馬です。コンピュータが感染すると、悪意のあるコードにより ICMP トンネルが作成され、それを介して ICMP 応答として小さなペイロードが送信されます。これらは、ICMP をブロックするように設定されていないファイアウォールであれば通過できます。シグニチャでは、応答数に対する ICMP エコー要求数の超過分、簡易 ICMP コード、およびペイロード識別子が監視されます。

(TFN2K を除き)ここで対象となる DDoS のカテゴリは、ICMP ベースの DDoS エージェントです。その代表的なツールが TFN と Stacheldraht です。これらは TFN2K と同種のツールですが、ICMP にだけ依存し、固定コマンド(整数および文字列)があります。

TROJAN エンジンには、固有のパラメータはありません。このグループに属するエンジンの設定を変更する場合は、マスター パラメータを使用してください。

表 A-46 は、TRAFFIC.ICMP エンジンでサポートされているパラメータをまとめたものです。

 

表 A-46 TRAFFIC.ICMP エンジンのパラメータ

パラメータ名
データ型
保護
必須
説明

ReplyRatio

NUMBER

×

×

要求数に対する応答数の許容超過分。応答の数が、要求の数よりもさらに指定した件数分上回るとアラームが送信される。

WantRequest

ENUM
(ANY、False、True)

×

×

アラームを送信する前にエコー要求の検出が必須かどうか。True = アラーム送信前に要求の検出が必須。False = アラーム送信前に要求が検出されてはならない。ANY = どちらでもよい。

isLoki

BOOLEAN
(True、False)

×

×

シグニチャで、元の LOKI の監視を行うかどうか。

isModLoki

BOOLEAN
(True、False)

×

×

シグニチャで、修正された LOKI の監視を行うかどうか。