(57)【要約】【課題】ネットワークを通過するパケットデータの内部構造をリアルタイムに自動的に解析し、異常なデータを含むパッケトを識別することによって、容易に数値化できないパケットデータの未知攻撃パターンに対して、その未知攻撃を検知し、サーバを保護することができる。【解決手段】有向グラフ構造生成・処理部１０４は、文字列分解処理部１０３から受けたリクエストデータの文字列を単位に有向グラフ構造を生成し若しくは該当する文字列についてのアップデート処理を実行する。評価処理部１０５は、有向グラフ構造生成・処理部１０４と連繋して、有向グラフ構造を参照し、ネットワークインタフェース１０１が受信したリクエストデータの区分されたデータ単位での出現頻度を計算し評価して、その評価の情報（異常値／正常値の判定情報）を転送制御部１０６に送出する。【選択図】図１
2005085158.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークで扱うアクセスデータを入力し、当該データを予め定義した文字集合により分割して、分割した文字列のノードおよび有向エッジをもつ有向グラフ構造を生成し管理する処理手段と、
前記有向グラフ構造を参照し、当該有向グラフ構造の辿ったパスの出現頻度から前記入力されたアクセスデータの異常を検出する処理手段と
を具備したことを特徴とする不正アクセス検出装置。
【請求項２】
前記有向グラフ構造について前記ノードのグループ化を行う処理手段をさらに具備した請求項１記載の不正アクセス検出装置。
【請求項３】
前記入力されたアクセスデータの異常を検出した際に、当該異常を管理者に通知し、管理者からの通知に従い、前記有向グラフのエッジに異常であることを示すマークを付す管理者とのインターフェイス手段をさらに具備した請求項１記載の不正アクセス検出装置。
【請求項４】
コンピュータネットワークで扱うアクセスデータを入力するステップと、
前記入力したアクセスデータを予め定義した文字集合により分割するステップと、
前記分割した文字列についてノードおよび有向エッジをもつ有向グラフ構造を生成するステップと、
前記有向グラフ構造を辿り、前記分割した文字列について当該文字列と同じ文字列のノードが存在するとき、辿り先に至る前記ノードおよび有向エッジについて辿った回数を更新し管理するステップと、
前記有向グラフ構造の辿ったパスの出現頻度から前記入力されたアクセスデータの異常を検出するステップと
を具備したことを特徴とするコンピュータネットワーク上に於ける異常データ検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インターネットに於いて、ファイアウォールでは防ぐことができない未知の攻撃からＷｅｂサーバ等を防御するための不正アクセス検出装置および異常データ検出方法に関する。
【背景技術】
【０００２】
インターネットに於いて、ファイアウォールで防ぐことができない攻撃は多様であるが、その中で、Ｗｅｂサーバ上のセキュリティホール、すなわちソフトウェアのバグや脆弱性を狙った攻撃は、特にその数が多い。ＨＴＴＰリクエストに特定の文字列が含まれているだけで、それを解釈実行したＷｅｂサーバ上のＣＧＩ（Common Gateway Interface）等のソフトウェアが、バッファオーバーフローや、予期せぬ動作を引き起こすといった不具合である。こうしたＷｅｂサーバ上のソフトウェアの脆弱性を狙った攻撃に対応するために、多くの侵入検知システムは、クライアントからＷｅｂサーバに送信されるＨＴＴＰリクエストをアプリケーション層で中継・解析し、あらかじめ既知の攻撃の特徴を格納したシグネチャ（攻撃パターンファイル）と比較し、マッチした場合にセッション中継を遮断することにより、Ｗｅｂサーバを防御している。
【０００３】
しかしながら、上記した従来技術においては、シグネチャに格納されていない未知の攻撃からはＷｅｂサーバを防御することができないという問題があった。
【０００４】
一方、シグネチャに記述されていない攻撃を検出することを目的として、攻撃でない通常のパケットデータの統計情報を採取し、このデータをもとに、通過するパケットデータを統計解析することによって、通常のデータと異なるパケットを区別する手法がある。この方法によって、異常なパケットを検出することをアノーマリディテクッションという。
【０００５】
このアノーマリディテクションは、一般的に、パケットの長さやアクセス頻度などの単純に数値化可能なデータの統計分布を解析することで実現されており、これに、様々な学習アルゴリズムを適用することで、解析精度を高める研究が行われている。
【特許文献１】特開２００２−０６３０８４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述したように、コンピュータネットワーク上での攻撃検出に於いて、未知の攻撃パターンからサーバを防御するために、パケットのデータの長さやアクセス頻度などの数値化可能なデータの統計情報を採取して、統計分布などを解析し、異常なパケットを見つけ出す技術が開発されている。
【０００７】
しかし、単純に数値化可能なデータの異常値のみでは、検出不可能な攻撃パターンもあり、より精度の高い未知攻撃検出処理が必要とされている。
【０００８】
また、統計処理や学習処理は、システムリソースの負荷を増大させ、実運用上での処理スピードに問題が生じる。また、ＩＤＳ（intrusion detection system）タイプの攻撃検出では、パケットのすりぬけを許してしまうという問題があり、ファイアーウォールタイプの攻撃検出では、ネットワークのバンド幅を低減させてしまうという問題があった。
【０００９】
本発明は、容易に数値化できないパケットデータの未知攻撃パターンをアノーマリ検知により効率的に検知できる不正アクセス検出装置およびコンピュータネットワーク上に於ける異常データ検出方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、ネットワークを通過するパケットデータの内部構造を、リアルタイムに自動的に解析することによって、異常なデータを含むパッケトを識別し、ネットワーク攻撃からサーバを保護するシステムを実現する。一般に、コンピュータサーバに送りつけられるパケットデータは、何らかのサービスを要求するリクエスト（ＨＴＴＰリクエスト）であり、ＲＦＣ（request for comments）などで規定された構文構造をもっている。しかし、サーバで動作するアプリケーションなどの都合で、独自に拡張された構文を規定するケースや、厳密に構文解析できないような仕様もある。また、サーバによっては、リクエストの中に、特定の文字列が特定の場所にあるもののみが、正常なリクエストとして認識されるようなものが多く存在する。
【００１１】
本発明は、文字クラスの分類、文字列の前後関係の相関関係の抽出を通して、リクエストがもつ構文構造を学習したり適切な文字列のデータベースを構築する。
【００１２】
統計情報は、統計処理する母集団の数が多いほど、統計解析する精度が向上するという性質がある。しかし、母集団が増大すると、統計解析処理の負荷が増大し、リアルタイムにパケットを解析することが難しくなってくる。
【００１３】
このため、本発明では、相転移のように、局所的に扱うデータ規模の量に応じて、解析レベルを変化させることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、容易に数値化できないパケットデータの未知攻撃パターンに対して、当該攻撃パターンをアノーマリディテクションによって効率的に検知することができる。
【発明を実施するための最良の形態】
【００１５】
以下図面を参照して本発明の一実施例を説明する。
【００１６】
ネットワークシステムに於いて未知攻撃防御システムを実現する本発明の実施形態に係る不正アクセス検出装置の構成を図１に示す。
【００１７】
未知攻撃防御システムを実現する不正アクセス検出装置３は、攻撃の対象となるＷｅｂサーバ２とネットワーク１との間に介在し、ネットワーク１を介して入力されたパケット転送によるアクセスデータ（リクエストデータ）から未知の攻撃パターンを検出することによって、Ｗｅｂサーバ２を未知の攻撃パターンから保護する。クライアントＰＣ４はネットワーク１を介してＷｅｂサーバ２をアクセスする。尚、不正アクセス検出装置３は、Ｗｅｂサーバ２とネットワーク１との間に、傍受型、フィルタ型のいずれで介挿されてもよいが、ここでは一例としてフィルタ型としての構成を例に示す。
【００１８】
不正アクセス検出装置３は、ネットワークインタフェース１０１、リクエストデータ抽出部１０２、文字列分解処理部１０３、有向グラフ構造生成・処理部１０４、評価処理部１０５、転送制御部１０６、ネットワークインタフェース１０７、イニシャライズ処理部１１１、有向グラフ構造データ格納部１１２、セパレータ定義情報ファイル１２１、トレーシングデータ格納部１２２等を具備して構成される。
【００１９】
ネットワークインタフェース１０１は、ネットワーク１を介してＷｅｂサーバ２に送られるパケットデータを受信し、受信したパケットデータをリクエストデータ抽出部１０２に受け渡す。
【００２０】
リクエストデータ抽出部１０２は、ネットワークインタフェース１０１が受信したパケットからリクエストデータ（ＨＴＴＰリクエスト）を抽出し、抽出したリクエストデータを文字列分解処理部１０３に受け渡す。
【００２１】
文字列分解処理部１０３は、リクエストデータ抽出部１０２から受けたリクエストデータをセパレータ定義情報ファイル１２１に定義されたセパレータ文字を参照して区分（切断）し、区分した文字列を有向グラフ構造生成・処理部１０４に受け渡す。
【００２２】
有向グラフ構造生成・処理部１０４は、文字列分解処理部１０３から受けたリクエストデータの文字列を単位に、ノードおよび有向エッジをもつ木構造の有向グラフ構造をポインタを用いて生成し、更に該当する文字列についてのアップデート処理（パスの更新処理）を実行する（図２（ｂ）、図３参照）。
【００２３】
評価処理部１０５は、上記有向グラフ構造生成・処理部１０４と連繋し、有向グラフ構造生成・処理部１０４で処理した有向グラフ構造を参照して、ネットワークインタフェース１０１が受信したリクエストデータの区分されたデータ単位での出現頻度を計算し評価して、その評価の情報（正常範囲とみなされる域値であるか異常範囲とみなされる域値であるかを示す異常値／正常値の判定情報）を転送制御部１０６に送出する。
【００２４】
転送制御部１０６は、評価処理部１０５から受けた評価情報（異常値／正常値の判定情報）をもとにネットワークインタフェース１０１が受信したリクエストデータの送出／破棄（若しくは保留）の制御を行う。即ち、評価情報が異常値であれば、該当するリクエストデータをネットワークインタフェース１０７に渡さずに破棄し（若しくは記憶手段に留保し）、評価情報が正常値であれば、該当するリクエストデータをネットワークインタフェース１０７に渡す。
【００２５】
ネットワークインタフェース１０７は、転送制御部１０６の転送制御で渡されたリクエストデータをＷｅｂサーバ２に転送する。
【００２６】
イニシャライズ処理部１１１は、トレーシングデータ格納部１２２に保持されたトレーシングデータを用いて、有向グラフ構造生成・処理部１０４に於ける有向グラフ構造の処理に際しての初期化（イニシャライズ処理）を行い、有向グラフ構造を辿るグラフポインタをエントリ（ルートノード）にセットする機能を実現する。
【００２７】
有向グラフ構造データ格納部１１２は、予め学習された有向グラフ構造のデータを保持し、イニシャライズ処理に於いて、有向グラフ構造生成・処理部１０４にプリセットする機能を実現する。
【００２８】
図２、および図３は、それぞれ有向グラフ構造生成・処理部１０４および評価処理部１０５の処理動作を説明するためのもので、図２（ａ）に、リクエストデータ（リクエスト行）の一例を示し、図２（ｂ）に、同図（ａ）のリクエスト行に従う木構造の有向グラフ構造の例を示し、図３に処理の手順を示している。尚、図３では、リクエストデータに含まれるセパレータ文字についても区切られた一つの文字列として扱っている。
【００２９】
ここで上記各図を参照して本発明の不正アクセス検出装置に於ける動作を説明する。
【００３０】
不正アクセス検出装置３に於いて、ネットワークインタフェース１０１は、ネットワーク１を介してＷｅｂサーバ２に送られるパケットデータを受信し、受信したパケットデータをリクエストデータ抽出部１０２に受け渡す。リクエストデータ抽出部１０２は、ネットワークインタフェース１０１が受信したパケットからリクエストデータ（ＨＴＴＰリクエスト）を抽出し、抽出したリクエストデータを文字列分解処理部１０３に受け渡す。
【００３１】
文字列分解処理部１０３は、リクエストデータ抽出部１０２から受けたリクエストデータをセパレータ定義情報ファイル１２１に定義されたセパレータ文字を参照して区分（切断）し、区分した文字列を有向グラフ構造生成・処理部１０４に受け渡す。この際、セパレータ定義情報ファイル１２１に定義されたセパレータ文字としては、「  ”  ’  ｀  （  ）  ｛  ｝  〔  ］  ;  ,  ＝  ｜  」、さらには図２に示す、「  ？  スペース  」等を挙げることができる。文字列分解処理部１０３はセパレータ定義情報ファイル１２１に定義されたこれらのセパレータ文字を見つける毎に、リクエストデータを分解（区分）する。そしてこの区分した文字列を有向グラフ構造生成・処理部１０４に渡す。
【００３２】
有向グラフ構造生成・処理部１０４は、文字列分解処理部１０３から受けたリクエストデータの文字列を単位に、木構造の有向グラフ構造をポインタを用いて生成し、若しくは該当する文字列についてのアップデート処理（出現頻度の更新処理）を実行する（図２（ｂ）、図３参照）。
【００３３】
この際、有向グラフ構造生成・処理部１０４は、初期化の処理ステップに於いて、図２（ｂ）に示すように、グラフポインタがルートノードに設定される（図３ステップＳ１１）。この処理はイニシャライズ処理部１１１の制御の下に実行される。
【００３４】
有向グラフ構造生成・処理部１０４は、上記リクエストデータについて、処理すべき入力文字列（ｓ）があるとき（図３ステップＳ１２  Ｙｅｓ）、入力した文字列（ｓ）に対して、グラフポインタによりグラフを辿り（図２（ｂ）参照）、グラフを辿るポインタの行く先に、入力された文字列（ｓ）と同じ文字列のノードが存在するか否かを検索する（図３ステップＳ１３）。
【００３５】
ここで、グラフを辿るポインタの行く先に、入力された文字列（ｓ）と同じ文字列のノードが存在する際は（図３ステップＳ１３  Ｙｅｓ）、そのノードに至る（通過した）パスのエッジのカウンタ値（ｅｄｇｅ＿ｃｏｕｎｎｔ）をインクリメントする（図３ステップＳ１４）。この後、当該文字列の出現頻度（ｆｒｅｑ）を計算する処理並びにその出現頻度の評価が評価処理部１０５により実行される（図３ステップＳ１５）。この評価処理部１０５の処理については後述する。
【００３６】
上記処理の後、有向グラフ構造生成・処理部１０４は続いてグラフポインタを行く先のノードに移動し（図３ステップＳ１６）、グラフポインタが指すノードのカウンタ値（ｎｏｄｅ＿ｃｏｕｎｔ）をインクリメントする（図３ステップＳ１７）。
【００３７】
このように、入力した文字列（ｓ）に対して、グラフポインタによりグラフを辿り、グラフを辿るポインタの行く先に、入力された文字列（ｓ）と同じ文字列のノードが存在する間は、上記した有向グラフ構造のアップデート処理（ステップＳ１２〜Ｓ１７）が繰り返し実行される。尚、この処理ではセパレータ文字についても入力した文字列として扱われ、アップデート処理の対象となる。
【００３８】
一方、上記入力した文字列（ｓ）に対して、グラフポインタによりグラフを辿り、グラフを辿るポインタの行く先に、入力された文字列（ｓ）と同じ文字列のノードが存在ないときは（図３ステップＳ１３  Ｎｏ）、グラフポインタを用いて、入力した文字列（ｓ）のノード、および入力した文字列（ｓ）へのエッジ（ｅｄｇｅ）を作り、そのエッジのエッジのカウンタ値（ｅｄｇｅ＿ｃｏｕｎｔ）を「１」にセットし、さらに上記ノードのカウンタ値（ｎｏｄｅ＿ｃｏｕｎｔ）を「０」にセットした後（図３ステップＳ１８）、グラフポインタが指す新たに作成したノードのカウンタ値（ｎｏｄｅ＿ｃｏｕｎｔ）をインクリメントする（図３ステップＳ１７）。
【００３９】
上記したように有向グラフ構造生成・処理部１０４は、有向グラフ構造生成処理若しくはアップデート処理（出現頻度の更新処理）をリクエストデータのすべての文字列に対して実行する。
【００４０】
上記した有向グラフ構造の生成並びにアップデート処理を繰り返し行うことで、有向グラフ構造が複雑化する場合の対処として、適当な閾値を使って、ノードのグループ化を行うことで、有向グラフ構造の複雑化を回避することができる。即ち、一つのノードから飛び出す有向エッジの数が、ある閾値を超たら、全ての飛先のノードの内容によって、飛先ノードのグループ化を行う。この際のグループ化の例としては、数値を対象としたグループ化、識別子を対象としたグループ化、記号文字を対象としたグループ化等を挙げることができる。例えば、数値というグループや数値の値の範囲によってグループ化を行なう。または、アルファベットで始まるアルファベットか数字か特定の記号を含んだ文字列を対象にグループ化を行なう。
【００４１】
上記有向グラフ構造生成・処理部１０４で作成され管理される有向グラフ構造を参照して評価処理部１０５は出現頻度（ｆｒｅｑ）の計算、並びにその出現頻度の評価を行う（図３ステップＳ１５）。
【００４２】
ここでの基本的な処理としては、有向グラフ構造を辿るパスの出現頻度を計算し、計算した結果が異常に小さいか、既に攻撃として学習しているか、あるいは、その近傍のパスの頻度と比べて極端に小さい値となるものを異常データとして検出する。
【００４３】
この処理に於いて上記評価処理部１０５により実行される出現頻度（ｆｒｅｑ）の計算例、並びにその出現頻度の評価例を以下に記す。
【００４４】
出現頻度（ｆｒｅｑ）の計算は、上記初期化ステップで「０」に初期設定し、グラフのポインタを進める毎に、「ｆｒｅｑ＋＝（ｌｏｇ（ｅｄｇｅ＿ｃｏｕｎｎｔ）−ｌｏｇ（ｎｏｄｅ＿ｃｏｕｎｔ））」という計算をする。ここで、ｅｄｇｅ＿ｃｏｕｎｔは、移動する有向エッジの出現回数、ｎｏｄｅ＿ｃｏｎｔは、移動する前にポインタが指していたノードの出現回数である。尚、ｌｏｇの計算は、大まかな値で十分な場合、ビット操作命令などによって高速に実行できる。この際の評価関数の例としては、例えば、（ｆｒｅｑ  ＜  −１０  ｜｜  ｍｉｎ（ｏｔｈｅｒ＿ｆｒｅｑ  −  ｆｒｅｑ）  ＞  ５  ｜｜  ｅｄｇｅ−＞ｍａｒｋｅｄ＿ａｎｏｒｍａｌｙ）という式を使う。ここで、ｏｔｈｅｒ＿ｆｒｅｑは、グラフポインタを移動する前のノードから別の有向エッジへ移動する場合のｆｒｅｑであり、ｅｄｇｅ−＞ｍａｒｋｅｄ＿ａｎｏｒｍａｌｙは、学習によって、この有向エッジへのパスは、異常データとしてマークされていることを示すフラグである。尚、ここでの学習は、例えば管理者に問合せることによって行う。
【００４５】
評価処理部１０５は、上記有向グラフ構造生成・処理部１０４で処理した有向グラフ構造を参照して、ネットワークインタフェース１０１が受信したリクエストデータの区分されたデータ単位での出現頻度を計算し、評価して、その評価の情報（正常範囲とみなされる域値であるか異常範囲とみなされる域値であるかを示す異常値／正常値の判定情報）を転送制御部１０６に送出する。
【００４６】
転送制御部１０６は、評価処理部１０５から受けた評価情報（異常値／正常値の判定情報）をもとにネットワークインタフェース１０１が受信したリクエストデータの送出／破棄（若しくは保留）の制御を行う。例えば評価情報が異常値であれば、該当するリクエストデータをネットワークインタフェース１０７に渡さずに破棄し（若しくは記憶手段に留保して管理者に提示し）、評価情報が正常値であれば、該当するリクエストデータをネットワークインタフェース１０７に渡す。具体的にはネットワークインタフェース１０１で受信したパケットをバッファし、そのバッファしたパケットを破棄若しくはネットワークインタフェース１０７に送出する。ネットワークインタフェース１０７は、転送制御部１０６の転送制御で渡されたリクエストデータをＷｅｂサーバ２に転送する。
【００４７】
上記したように本発明の実施形態によれば、ネットワークを通過するパケットデータの内部構造をリアルタイムに自動的に解析し、異常なデータを含むパッケトを識別することによって、容易に数値化できないパケットデータの未知攻撃パターンに対して、その未知攻撃を検知し、サーバを保護することができる。
【図面の簡単な説明】
【００４８】
【図１】本発明の実施形態に係る不正アクセス検出装置の構成を示すブロック図。
【図２】本発明の実施形態に係る不正アクセス検出装置の動作を説明するためのリクエストデータの一例およびそのデータ内容に従う有向グループ構造の一例を示す図。
【図３】本発明の実施形態に係る不正アクセス検出装置の処理手順を示すフローチャート。
【符号の説明】
【００４９】
１…ネットワーク、２…Ｗｅｂサーバ、３…不正アクセス検出装置、４…クライアントＰＣ、１０１…ネットワークインタフェース、１０２…リクエストデータ抽出部、１０３…文字列分解処理部、１０４…有向グラフ構造生成・処理部、１０５…評価処理部、１０６…転送制御部、１０７…ネットワークインタフェース、１１１…イニシャライズ処理部、１１２…有向グラフ構造データ格納部、１２１…セパレータ定義情報ファイル、１２２…トレーシングデータ格納部。
【図１】
2005085158.tif 000003
【図２】
2005085158.tif 000004
【図３】
2005085158.tif 000005