(57)【要約】【課題】  解析に基づく解析正常動作モデルを用いた異常検知の判定結果と、観察（学習）に基づく正常動作モデルを用いた異常検知の判定結果を照合させながら学習を行うことにより、最終的に利用可能な正常動作モデルを構築する異常検知方法を提供する。【解決手段】  解析に基づく解析正常動作モデルを用いた静的検知と学習に基づく正常動作モデルを用いた動的検知とを併用することで、観察対象ソフトウエア３が攻撃を受けない環境の下でなくとも、学習が行える。また学習終了期間判定手段３１が、静的検知の判定結果と、動的検知の判定結果の一致割合が高くなってきたことに基づいて、学習の終了を判定することにより、正常動作モデルを生成する際に、いつまで学習を継続すればよいかについての判定を客観的に行える。【選択図】  図５
2008129714.tif 000002
【特許請求の範囲】
【請求項１】
観察対象ソフトウエアが正常な動作をしているときの正常動作モデルを学習し、学習した前記正常動作モデルを正常動作モデル記憶手段に記憶する学習ステップと、
前記観察対象ソフトウエアの動作が、前記正常動作モデル記憶手段に記憶している前記正常動作モデルと一致するか否かに基づいて前記観察対象ソフトウエアへの不正侵入による異常の発生を検知する異常検知ステップとを備えてなる異常検知方法であって、
前記正常動作モデル記憶手段とは別の記憶手段に、前記学習ステップによらずに予め前記観察対象ソフトウエアの静的な解析に基づいて得た解析正常動作モデルを事前に記憶しておき、
前記学習ステップが予め定めた学習レベルに達するまでは、前記別の記憶手段に記憶した前記解析正常動作モデルを用いて、前記観察対象ソフトウエアの動作が、前記解析正常動作モデルから判断して正常であるか否かを判断し、前記観察対象ソフトウエアへの不正侵入による異常の発生を検知する別異常検知ステップを更に備え、
前記学習ステップが予め定めた学習レベルに達するまでは、前記別異常検知ステップの検知結果を利用し、併せて前記学習ステップ及び前記異常検知ステップを実行して、前記別異常検知ステップで前記動作の正常を検知しているにも拘わらず前記異常検知ステップで前記動作の異常を検知しているときには、そのときの前記動作に基づいて学習した前記正常動作モデルを前記正常動作モデル記憶手段に記憶させ、
前記学習ステップが予め定めた学習レベルに達した後は、前記異常検知ステップの検知結果を利用することを特徴とする異常検知方法。
【請求項２】
前記観察対象ソフトウエアの前記静的な解析においては、前記観察対象ソフトウェアのコードを元にして解析した関数モデルを前記解析正常動作モデルとして生成することを特徴とする請求項１に記載の異常検知方法。
【請求項３】
前記別異常検知ステップでは、前記観察対象ソフトウェアから発行されたシステムコールを捕捉し、前記システムコールが行われた時点でのプロセスのコールスタックに積まれた情報と該情報が積まれた順序をコールスタック情報とし、システムコールが行われた時点におけるコールスタックに積まれた情報及びそれまでに実行されてきた関数の呼び出し元へのコールスタック情報を、前記観察対象ソフトウエアの前記動作として取得する請求項２に記載の異常検知方法。
【請求項４】
前記システムコールがあった時点とその一回前に前記システムコールがあった時点との、前記コールスタック情報の差分を用いて前記観察対象ソフトウェアの動作をモデル化したものを前記正常動作モデルとする請求項３に記載の異常検知方法。
【請求項５】
前記学習ステップが前記予め定めた学習レベルに達したか否かを、前記別異常検知ステップで前記動作の正常を検知しているにも拘わらず前記異常検知ステップで前記動作の異常を検知している割合が少なくなったことに基づいて判定する請求項１に記載の異常検知方法。
【請求項６】
観察対象ソフトウエアが正常な動作をしているときの正常動作モデルを学習する学習手段と、
学習した前記正常動作モデルを記憶する正常動作モデル記憶手段と、
前記観察対象ソフトウエアの動作が、前記正常動作モデル記憶手段に記憶している前記正常動作モデルと一致するか否かに基づいて前記観察対象ソフトウエアへの不正侵入による異常の発生を検知する異常検知手段とを備えてなる異常検知装置であって、
前記正常動作モデル記憶手段とは別に設けられて、予め前記観察対象ソフトウエアの静的な解析に基づいて得た解析正常動作モデルを記憶する別の記憶手段と、
前記学習が予め定めた学習レベルに達するまで、前記別の記憶手段に記憶した前記解析正常動作モデルを用いて、前記観察対象ソフトウエアの動作が、正常であるか否かの判断を行い、前記観察対象ソフトウエアへの不正侵入による異常の発生を検知する別異常検知手段とを更に備え、
前記学習が予め定めた学習レベルに達するまでは、前記別異常検知手段の検知結果を利用し、併せて前記学習手段及び前記異常検知手段を動作させて、前記別異常検知手段で前記動作の正常を検知しているにも拘わらず前記異常検知手段で前記動作の異常を検知しているときには、そのときの前記動作に基づいて学習した前記正常動作モデルを前記正常動作モデル記憶手段に記憶し、
前記学習が予め定めた学習レベルに達した後は、前記異常検知手段の検知結果を利用することを特徴とする異常検知装置。
【請求項７】
観察対象ソフトウエアが正常な動作をしているときの正常動作モデルを学習し、学習した前記正常動作モデルを正常動作モデル記憶手段に記憶する学習機能と、
前記観察対象ソフトウエアの動作が、前記正常動作モデル記憶手段に記憶している前記正常動作モデルと一致するか否かに基づいて前記観察対象ソフトウエアへの不正侵入による異常の発生を検知する異常検知機能とをコンピュータを用いて実現するために、コンピュータにおいて読み取り可能な異常検知用プログラムであって、
前記正常動作モデル記憶手段とは別の記憶手段に、前記学習ステップによらずに予め前記観察対象ソフトウエアの静的な解析に基づいて得た解析正常動作モデルを事前に記憶する機能と、
前記学習機能が予め定めた学習レベルに達するまでは、前記別の記憶手段に記憶した前記解析正常動作モデルを用いて、前記観察対象ソフトウエアの動作が、正常であるか否かの判断を行って、前記観察対象ソフトウエアへの不正侵入による異常の発生を検知する別異常検知機能と、
前記学習機能が予め定めた学習レベルに達するまでは、前記別異常検知機能の検知結果を利用し、併せて前記学習機能及び前記異常検知機能を実現して、前記別異常検知機能で前記動作の正常を検知しているにも拘わらず前記異常検知機能で前記動作の異常を検知しているときには、そのときの前記動作に基づいて学習した前記正常動作モデルを前記正常動作モデル記憶手段に記憶させる機能とを更に前記コンピュータを用いて実現し、
前記学習機能が予め定めた学習レベルに達した後は、前記異常検知機能の検知結果を利用するように構成されていることを特徴とする異常検知用プログラム。
【請求項８】
請求項７に記載のプログラムが記録された、コンピュータで読み取り可能な記録媒体。
【請求項９】
観察対象ソフトウエアの動作が正常動作モデルと一致するか否かに基づいて前記観察対象ソフトウエアへの不正侵入による異常の発生を検知する異常検知に利用する正常動作モデルを作成するために、前記観察対象ソフトウエアに正常な動作を行わせることを継続して正常動作モデルを学習により生成する学習モデル生成方法であって、
前記学習によらずに、予め前記観察対象ソフトウエアの静的な解析に基づいて得た解析正常動作モデルを事前に作成し、
前記学習が予め定めた学習レベルに達するまでは、前記学習と併用して、前記解析正常動作モデルを利用した異常検知を実行し、
前記解析正常動作モデルを利用した異常検知が前記観察対象ソフトウエアの正常を検知しているにも拘わらず、前記学習による学習結果が異常を判定しているときには、そのときの前記正常動作モデルは正しいものと学習し、
前記解析正常動作モデルを利用した異常検知の結果と前記学習による学習結果との一致割合に基づいて、学習の進捗状況を判定することを特徴とする学習モデル生成方法。
【請求項１０】
前記一致割合が、予め定めた割合に達したときに、学習が終了したものと判定することを特徴とする請求項９に記載の学習モデル生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、観察対象ソフトウエアへの不正侵入を検知するための異常検知方法、異常検知装置及び異常検知用プログラム並びに学習モデル生成方法に関するものである。
【背景技術】
【０００２】
従来からホストコンピュータ上で動作するソフトウエアの脆弱性を突いた攻撃に対する防御策として、異常検知システム（Anomaly Detection System）が提案されている。図１は、観察対象ソフトウエア（アプリケーション、プロセスを含む）への不正侵入（異常の発生）を検知する、異常検知装置１０１の基本構成の概略を示すブロック図である。この異常検知装置では、システムコール捕捉手段１０２が観察対象ソフトウエア１０３が動作して呼び出したシステムコール１０４を捕捉する。そしてシステムコール捕捉手段１０２は、システムコール１０４を捕捉したときのコールスタック情報１０５を判定手段１０６へと渡す。観察対象ソフトウエアは、システムコールが発行すると、一時停止された状態にある。そして判定手段１０６は、そのシステムコールが正常な動作内で呼び出されたものか否かを判定し、正常と判断して許可する場合には、観察対象ソフトウエアの一時停止を解除する。また判定手段１０６は、異常と判断して許可をしない場合には、観察対象ソフトウエアの動作を停止させる処理を行う。判定手段１０６は、正常/異常の判断を下すために何らかのルール１０７を用いる。判定に用いるルール１０７として、例えばシステムコールの正常時の呼び出し順を記録したデータベースを利用するならば、ルール１０７に当たるものはシステムコール順となる。この場合、判定手段１０６は、システムコール順序がルールとして予め記憶しているシステムコール順序と合致していれば、観察対象ソフトウエアの動作は正常とみなす。
【０００３】
このような異常検知装置には、予め定めておくルールとして、従来、観察対象ソフトウエアの静的な解析に基づくモデル（解析正常動作モデル）を用いるものと、観察対象ソフトウエアの観察または学習に基づくモデル（正常動作モード）を用いるものとが存在する。前者では、予め観察対象ソフトウエアを静的に解析して得た解析正常動作モデルと、観察対象ソフトウエアの動作（検出したモード）とが一致するか否かに基づいて、動作の正常／異常を判断する。解析正常動作モデルには、観察対象ソフトウエアが取り得るすべての動作が網羅的に含まれている。具体的な一例では、解析に基づくモデルは、観察対象ソフトウェアのバイナリデータやソースコード等のコードから解析手段が自動的に生成する。この場合、観察対象ソフトウェアを動作させる必要はなく、プログラムが自動的に解析をするため、後述する学習は不要であり、使用するルールを短い時間で得ることができる。これに対して後者、すなわち観察（学習）に基づくモデル（正常動作モデル）をルールとして用いる場合には、観察対象ソフトウエアを実際に正常な状態で動作させ、正常な動作を観察することで正常動作モデルを生成する。したがって学習を行う場合には、攻撃を受ける可能性が無いことが保証されている環境において長い時間をかけて、できるだけ多くの正常動作モデルを得る必要があり、使用するルールを得るために長い時間を要する。
【０００４】
静的な解析に基づくモデル（ルール）を用いた異常検知装置の一例としては、非特許文献１に示されたシステムが挙げられる。この非特許文献１に示された装置では、観察対象ソフトウエアのバイナリコードから抽出した関数と関数呼び出し、ソフトウエア（プログラム）のコントロールフローを変更するような命令（ブランチ命令）を端点として、オートマトンを構築し、これに基づいてモデルを生成する。図２は解析に基づくモデル（解析正常動作モデル）を自動作成するための自動解析モデル生成装置２００の構成の一例を示すブロックである。この自動解析モデル生成装置２００は、観察対象ソフトウェア２０３のバイナリコード２０７を逆アセンブル手段２０８で逆アセンブルしてアセンブラコード２０９を生成する。ここで逆アセンブルとは、機械語で記述されているソフトウェアのバイナリコードを人が読める形（この場合はアセンブラ言語）に変換する作業を指す。ブランチ抽出手段２１０は、アセンブラコード２０９からブランチ命令を抽出し、ブランチのリスト２１１をモデル生成手段２１２に渡す。また関数定義抽出手段２１３は、バイナリコードから関数定義部分を抽出し、同様に関数定義リスト２１４をモデル生成手段２１２に渡す。モデル生成手段２１２は、これらのリスト２１１及び２１４をオートマトンの状態で記録し、ブランチや関数呼び出しを状態遷移として記録する。これにより関数同士がどう呼び出し合っているかという関連を表したモデル２１５を構築し、解析に基づくモデルデータ２１６として記憶する。
【０００５】
この解析に基づくモデルデータ（解析正常動作モデル）を図１のルール１０７として利用して、観察対象ソフトウエアの動作が正常であるか否かの検知を行う。図３は、静的な解析によりルール（モデルデータ）を用いて、異常検知を行う従来の異常検知装置２０１の構成の一例を示すブロック図である。図３に示した装置では、システムコール捕捉手段２０２は観察対象ソフトウエア２０３がシステムコール２０４を呼び出したときに、観察対象ソフトウエアを停止させてそのときのコールスタックを参照し、コールスタック情報２０５を取得する。判定手段２０６の一部を構成するバックトレース生成手段２０６Ａは、コールスタック情報２０５からシステムコールが出された時点でのコールスタック（コールスタックに積まれたリターンアドレス）を参照し、呼び出されてきた関数のリストを作成する。これをバックトレース情報と呼ぶ。また判定手段２０６の残部を構成する動作の検査手段２０６Ｂでは、以前のバックトレース情報が表す状態から、今回生成されたバックトレース情報が表す状態へと遷移するパスが、図２の自動モデル生成装置で作成したモデルデータ（解析正常動作モデル）２１６に存在するか否かを調べる。遷移するパスが、モデルデータ（解析正常動作モデル）２１６に存在していれば正常に遷移したと判断し、システムコールの実行を続け、観察対象ソフトウエアに基づく制御を戻す。遷移するパスが存在しなければ異常と判断し（不正侵入があったと判断し）、実行を停止させる。
【０００６】
特開２００６−１０６９３９号公報（特許文献１）には、非特許文献１に記載の静的解析により定めたモデルを利用する異常検知装置においては、元のソフトウエアと不正プログラムにより攻撃された後のソフトウエアとが、システムコールの発行シーケンスが同じになる場合に、不正侵入（異常）を検視することができない問題を解消するための発明が開示されている。この発明では、システムコール及びシステムコールまでの経路情報が、予め会計したシステムコール及びこのシステムコールに対応する経路情報に一致するか否かにより、不正侵入があったか否かを判定している。
【０００７】
次に、観察（学習）に基づいてモデル（正常動作モデル）を生成するモデル生成装置の例としては、非特許文献２に示された装置が挙げられる。図４は、非特許文献２に示されたモデル生成装置の主要部の構成を示すブロック図である。この装置では、システムコールの正当性にコールスタック（コールスタックに積まれたリターンアドレス）と、以前のシステムコールから今回のシステムコールへ到るまでのリターンアドレスをリストにしたバーチャルパス（Virtual Path）とを用いてモデルを生成する。ここでシステムコール時のプログラムカウンタと、コールスタックをともに記録したものをバーチャルスタックリスト（Virtual Stack List）と呼ぶ。図４の装置では、観察対象ソフトウェア３０３を事前にクリーンルームで実行して、正常動作時のモデルを得る学習を行う。学習中において、観察対象ソフトウェア３０３がシステムコールを行うと、システムコール捕捉手段３０２がコールスタックを参照し、コールスタック情報３０５からコールスタックを取得する。次に、バーチャルスタックリスト生成手段３２１が前回のシステムコール時に生成したバーチャルスタックリストと、今回のシステムコール時に生成したバーチャルスタックリストの情報（バーチャルスタックリスト情報）３２２を生成する。バーチャルパス生成手段３２３はバーチャルスタックリスト情報３２２に含まれるバーチャルスタックリストの差分情報を生成する。具体的には比較対象のバーチャルスタックリストの底部フレームから頂上フレームに向かって順次比較を行い、お互いに異なるリターンアドレスが出現した地点から、頂上フレーム側全てのリターンアドレスのリスト（これをバーチャルパス（Virtual Path）情報３２４と呼ぶ）を生成する。モデルの記録手段３２５は、生成されたバーチャルパス情報をハッシュテーブル３２７に記録する。記録が終わるとシステムコールの処理を続行させ、観察対象ソフトウェアに制御を戻す。異常検知時は、ハッシュ値が記録されたハッシュテーブル３２７を観察対象ソフトウェアのための正常動作モデルとして利用する。観察対象となるソフトウェアの動作が異常であるか否かを検知するときには、システムコールがなされるたびにバーチャルスタックリスト（Virtual Stack List）とバーチャルパス（Virtual Path）とを生成し、正常動作モデルとして記録されているハッシュテーブル３２７中にあるバーチャルパス情報とのマッチングを行う。そして、検知動作時のバーチャルパス情報とハッシュテーブル３２７に記録されているバーチャルパス情報とが合致していれば、そのシステムコールは正常であると判定し、合致しなければそのシステムコールは異常であると判定する。
【特許文献１】特開２００６−１０６９３９号公報
【非特許文献１】“静的解析に基づく侵入検知システムの最適化”，情報処理学会論文誌：コンピューティングシステム，vol.45，No.SIG3 (ACS 5)，pp.11-20
【非特許文献２】H.Feng, et al, “Anomaly Detection Using Call Stack Information”, The proc. of IEEE Symposium on Security and Privacy 2003, pp.62.
【発明の開示】
【発明が解決しようとする課題】
【０００８】
特許文献１にも示されるように、解析に基づく解析正常動作モデルを用いた異常検知方法には理論上防御できない攻撃が存在する。すなわち解析に基づく解析正常動作モデルを用いた異常検知方法では、理論的には動作可能であるが、実際の条件下では絶対に発生しない動作状態が正常なものとして認識されてしまうことがある。これに対して、観察（学習）に基づくモデル（正常動作モデル）を用いた異常検知方法は、多彩な攻撃に対応可能である。しかしながら観察に基づく正常動作モデルを構築するためには、システムの運用を開始する前に、検知対象となるシステムが攻撃を受けない環境の下（クリーンルーム内）で、十分な量の学習を行わなければならない問題がある。また学習をどの程度まで行うべきか否かが不明なため、必要以上に学習を行っている場合もある。そのため観察に基づく正常動作モデルを構築するためには、ソフトウエアを実際に運用するまでに、かなりの時間がかかる。
【０００９】
本発明の目的は、異常検知を行いながら、解析に基づく解析正常動作モデルを用いた異常検知の判定結果と、観察（学習）に基づく正常動作モデルを用いた異常検知の判定結果を照合させながら学習を行うことにより、最終的に利用可能な正常動作モデルを構築する異常検知装置、異常検知方法及び異常検知用プログラムを提供することにある。
【００１０】
本発明の他の目的は、最終的には観察（学習）に基づく正常動作モデルを利用するが、正常動作モデルが構築されるまでは、解析に基づく解析正常動作モデルを用いて異常検知を行う異常検知装置、異常検知方法及び異常検知用プログラムを提供することにある。
【００１１】
本発明の別の目的は、学習により正常動作モデルを生成する場合に、学習の終了時期を判定することができる学習モデル生成方法を提供することにある。
【課題を解決するための手段】
【００１２】
本発明が改良の対象とする異常検知方法では、学習ステップと異常検知ステップとを実行する。学習ステップでは、観察対象ソフトウエアが正常な動作をしているときの正常動作モデルを学習し、学習した正常動作モデルを正常動作モデル記憶手段に記憶する。異常検知ステップでは、観察対象ソフトウエアの動作が、正常動作モデル記憶手段に記憶している正常動作モデルと一致するか否かに基づいて観察対象ソフトウエアへの不正侵入による異常の発生を検知する。
【００１３】
本発明の異常検知方法では、異常検知を行いながら、解析に基づく解析正常動作モデルを用いた異常検知の判定結果と、観察（学習）に基づく正常動作モデルを用いた異常検知の判定結果を照合させながら学習を行うことにより、最終的に利用可能な正常動作モデルを構築する。そこで本発明では、正常動作モデル記憶手段とは別の記憶手段に、学習ステップによらずに予め観察対象ソフトウエアの静的な解析に基づいて得た解析正常動作モデルを事前に記憶しておく。また本発明では、学習ステップが予め定めた学習レベルに達するまでは、別の記憶手段に記憶した解析正常動作モデルを用いて、観察対象ソフトウエアの動作が、解析正常動作モデルから判断して正常であるか否かを判断し、観察対象ソフトウエアへの不正侵入による異常の発生を検知する別異常検知ステップを更に実行する。そして学習ステップが予め定めた学習レベルに達するまでは、別異常検知ステップの検知結果を利用し、併せて学習ステップ及び異常検知ステップを実行して、別異常検知ステップで動作の正常を検知しているにも拘わらず異常検知ステップで動作の異常を検知しているときには、そのときの動作に基づいて学習した正常動作モデルを正常動作モデル記憶手段に記憶させる。そして学習ステップが予め定めた学習レベルに達した後は、正常動作モデルを利用した異常検知ステップの検知結果を利用する。
【００１４】
本発明によれば、学習ステップが予め定めた学習レベルに達するまでは、解析に基づく解析正常動作モデルを用いた異常検知の判定結果を用いて異常検知を行うので、異常検知動作を早期に開始することができる。また本発明の方法では、解析に基づく解析正常動作モデルを用いた異常検知の判定結果をガイドとして、学習を行っていくため、従来のように、攻撃を受けない環境下で学習を行う必要がない。そして最終的には、学習により構築した正常動作モデルを利用して異常検知を行うため、解析に基づく解析正常動作モデルを用いた異常検知だけでは、どうしても検知できない異常を含めて、より高い精度での異常検知を、早期に開始できる。
【００１５】
観察対象ソフトウエアの静的な解析において、解析正常動作モデルを生成する方法は、任意である。例えば、観察対象ソフトウェアのバイナリコードやソースコード等のコードを元にして解析した関数モデルを解析正常動作モデルとして生成すると、従来の解析技術を利用して簡単に解析正常動作モデルを生成できる。
【００１６】
また静的な解析により構築した解析正常動作モデルを利用して異常検知を行う場合（別異常検知ステップ）の観察対象ソフトウエアの動作の検出は、任意である。例えば、観察対象ソフトウェアのバイナリコードやソースコード等のコードを元にして解析した関数モデルを解析正常動作モデルとして生成する場合であれば、最初に、観察対象ソフトウェアから発行されたシステムコールを捕捉する。そしてシステムコールによる呼び出しが行われた時点でのプロセスのコールスタックに積まれた情報と該情報が積まれた順序をコールスタック情報とし、システムコールが行われた時点におけるコールスタックに積まれた情報及びそれまでに実行されてきた関数の呼び出し元へのコールスタック情報を、観察対象ソフトウエアの動作として取得するようにする。このような方法で、観察対象ソフトウエアの動作を検出すると、解析正常動作モデルとの一致または不一致の判定を簡単に実施することができる。
【００１７】
学習ステップにおいて構築する正常動作モデルの生成方法は、観察対象ソフトウエアの動作の検出方法に対応して、定めるのが好ましい。前述のように、システムコールを基準にして観察対象ソフトウエアの動作を検出する場合には、システムコールがあった時点とその一回前にシステムコールがあった時点との、コールスタック情報の差分を用いて観察対象ソフトウェアの動作をモデル化したものを正常動作モデルとして定めるのが好ましい。このようにすると観察対象ソフトウェアの動作の検出動作の主要部を、異常検知と学習の両方で利用することができる。
【００１８】
なお学習ステップが予め定めた学習レベルに達したか否か（学習が終了したか否か）の判定方法は、任意である。例えば、別異常検知ステップで観察対象ソフトウェアの動作の正常を検知しているにも拘わらず異常検知ステップで動作の異常を検知している割合が、予め定めた割合より少なくなったことにより、学習の終了を判定するようにしてもよい。
【００１９】
すなわち解析に基づく解析正常動作モデルを用いた判定と観察（学習）に基づく正常動作モデルを用いた判定を比較し、観察に基づくモデルの学習進度を表現することで、学習終了時期を判断することが可能になる。なお学習量に基づく、学習の終了の判定方法は、従来通り攻撃を受けない環境下（クリーンルーム）内で行われる学習において、学習の終了を判定する場合にも有効である。
【００２０】
また本発明が改良の対象とする異常検知装置は、学習手段と、正常動作モデル記憶手段と、異常検知手段とを備えている。学習手段は、観察対象ソフトウエアが正常な動作をしているときの正常動作モデルを学習する。正常動作モデル記憶手段は、学習手段が学習した正常動作モデルを記憶する。異常検知手段は、観察対象ソフトウエアの動作が、正常動作モデル記憶手段に記憶している正常動作モデルと一致するか否かに基づいて、観察対象ソフトウエアへの不正侵入による異常の発生を検知する。本発明の異常検知装置は、更に、正常動作モデル記憶手段とは別に設けられて、予め観察対象ソフトウエアの静的な解析に基づいて得た解析正常動作モデルを記憶する別の記憶手段を備えている。また本発明の異常検知装置は、更に、学習手段による学習が予め定めた学習レベルに達するまで、別の記憶手段に記憶した解析正常動作モデルを用いて、観察対象ソフトウエアの動作が、正常であるか否かの判断を行い、観察対象ソフトウエアへの不正侵入による異常の発生を検知する別異常検知手段とを更に備えている。
【００２１】
特に本発明の異常検知装置では、学習が予め定めた学習レベルに達するまでは、別異常検知手段の検知結果を利用し、併せて学習手段及び異常検知手段を動作させて、別異常検知手段で動作の正常を検知しているにも拘わらず異常検知手段で動作の異常を検知しているときには、そのときの動作に基づいて学習した正常動作モデルを正常動作モデル記憶手段に記憶させる。そして学習が予め定めた学習レベルに達した後は、異常検知手段の検知結果を利用する。本発明の異常検知装置を利用しても、前述の異常検知方法と同様の効果を得ることができる。
【００２２】
本発明の異常検知装置をコンピュータを用いて実現する場合に用いるコンピュータ読み取り可能なプログラムは、観察対象ソフトウエアが正常な動作をしているときの正常動作モデルを学習し、学習した正常動作モデルを正常動作モデル記憶手段に記憶する学習機能と、観察対象ソフトウエアの動作が、正常動作モデル記憶手段に記憶している正常動作モデルと一致するか否かに基づいて観察対象ソフトウエアへの不正侵入による異常の発生を検知する異常検知機能とをコンピュータを用いて実現するように構成されている。本発明の異常検知用プログラムは、さらに正常動作モデル記憶手段とは別の記憶手段に、学習機能によらずに予め観察対象ソフトウエアの静的な解析に基づいて得た解析正常動作モデルを事前に記憶する機能と、学習機能が予め定めた学習レベルに達するまでは、別の記憶手段に記憶した解析正常動作モデルを用いて、観察対象ソフトウエアの動作が、正常であるか否かの判断を行って、観察対象ソフトウエアへの不正侵入による異常の発生を検知する別異常検知機能とをコンピュータ内で実現する。さらに本発明の異常検知用プログラムは、学習機能が予め定めた学習レベルに達するまでは、別異常検知機能の検知結果を利用し、併せて学習機能及び異常検知機能を実現して、別異常検知機能で動作の正常を検知しているにも拘わらず異常検知機能で動作の異常を検知しているときには、そのときの動作に基づいて学習した正常動作モデルを正常動作モデル記憶手段に記憶させる機能とを更にコンピュータを用いて実現す
るように構成されている。また学習機能が予め定めた学習レベルに達した後は、異常検知機能の検知結果を利用するように、本発明のプログラムは構成されている。このプログラムは、コンピュータ読み取り可能な記録媒体に記録される。
【００２３】
本発明の学習モデル生成方法は、従来のようにクリーンルームで学習を行う場合における学習の終了判定にも当然にして利用できる。この学習モデル生成方法は、観察対象ソフトウエアの動作が正常動作モデルと一致するか否かに基づいて観察対象ソフトウエアへの不正侵入による異常の発生を検知する異常検知に利用する正常動作モデルを作成するために、観察対象ソフトウエアに正常な動作を行わせることを継続して正常動作モデルを学習により生成する。本発明の方法では、学習によらずに、予め観察対象ソフトウエアの静的な解析に基づいて得た解析正常動作モデルを事前に作成する。また予め定めた学習レベルに達するまでは、学習と併用して、解析正常動作モデルを利用した異常検知を実行する。解析正常動作モデルを利用した異常検知が観察対象ソフトウエアの正常を検知しているにも拘わらず、学習による学習結果が異常を判定しているときには、そのときの正常動作モデルは正しいものと学習する。そして解析正常動作モデルを利用した異常検知の結果と学習による学習結果との一致割合に基づいて、学習の進捗状況を判定する。一致割合が、予め定めた割合に達したときに、学習が終了したものと判定する。
【００２４】
このようすると、従来、定め難かった学習の終了判定を、客観的に行うことできるようになる。
【発明の効果】
【００２５】
本発明によれば、学習ステップが予め定めた学習レベルに達するまでは、解析に基づく解析正常動作モデルを用いた異常検知の判定結果を用いて異常検知を行うので、異常検知動作を早期に開始することができるという利点が得られる。また本発明によれば、解析に基づく解析正常動作モデルを用いた異常検知の判定結果をガイドとして、学習を行っていくため、従来のように、学習のために攻撃を受けない環境を用意する必要がないという利点が得られる。そして最終的には、学習により構築した正常動作モデルを利用して異常検知を行うため、解析に基づく解析正常動作モデルを用いた異常検知だけでは、どうしても検知できない異常を含めて、より高い精度での異常検知を、早期に開始できる効果が得られる。
【発明を実施するための最良の形態】
【００２６】
図５は、本発明の異常検知プログラムをホストコンピュータで実行して、コンピュータ内で本発明の異常検知方法を実施する本発明の異常検知装置の実施の形態の一例の構成を示すブロックである。本発明の実施の形態では、静的な解析に基づく解析正常動作モデルを用いた異常検知（以下静的検知と言う）と、観察（学習）に基づく正常動作モデルを用いた異常検知（以下、動的検知と言う）を並行して行う。もし学習が十分に行われていない状態で、動的検知を行うと、実際には攻撃（侵入）ではないのに攻撃（侵入）されたと判定する誤検知が多数発生することになる。そこで本実施の形態では、静的検知が観察対象ソフトウエアの動作が正常であると判断しているときに、動的検知が異常と判断したときには、学習が不十分なために発生した誤検知であったとみなし、今起きた動作は正常であったということを観察（学習）に基づく正常動作モデルに学習させる。
【００２７】
静的検知と動的検知とを行うために、図５の実施の形態の異常検知装置１は、予め観測対象ソフトウエアについて静的な解析を行って得た解析正常動作モデルを記憶手段７にモデルデータとして記憶している。解析正常動作モデルは、図２を用いて説明した従来公知の方法によって取得する。静的な解析により得たルール（モデルデータ）を用いて、異常検知を行うために、システムコール捕捉手段２は観察対象ソフトウエア３がシステムコール４を呼び出したときに、観察対象ソフトウエア３を停止させて、そのときに実行されているコールスタックを参照して、コールスタック情報５を取得する。判定手段６の一部を構成するバックトレース生成手段６Ａは、コールスタック情報５からシステムコールが呼び出された時点でのコールスタック（コールスタックに積まれたリターンアドレス）を参照し、呼び出されてきた関数のリスト（バックトレースリスト）を作成する。また判定手段６の残部を構成する動作の検査手段６Ｂは、以前のバックトレース情報が表す状態から、今回生成されたバックトレース情報が表す状態へと遷移するパスが、記憶手段７中のモデルデータ（解析正常動作モデル）に存在するか否かを調べる。そして遷移するパスが、モデルデータ（解析正常動作モデル）に存在していれば正常に遷移したと判断し、システムコールの実行を続け、観察対象ソフトウエアに制御を戻す（再開する）。遷移するパスが存在しなければ、攻撃を受けて誤動作した可能性が高いため、異常と判断し（不正侵入があったと判断し）、後述する学習および観察対象プロセスの実行を停止する。動作の検査手段６Ｂが、動作を正常であると判定した場合は、判定結果を学習終了期間判定手段３１に渡す。以上の動作が静的検知における動作である。なお本実施の形態においては、判定手段６が、観察対象ソフトウエアへの不正侵入による異常の発生を検知する静的検知のための別異常検知手段を構成している。
【００２８】
次に動的検知について説明する。動的検知では、観察対象ソフトウェア３がシステムコールを行うと、システムコール捕捉手段２がコールスタックを参照し、コールスタック情報５からコールスタックを取得する。次に、バーチャルスタックリスト生成手段２１が前回のシステムコール時に生成したバーチャルスタックリストと、今回のシステムコール時に生成したバーチャルスタックリスト情報２２を生成する。バーチャルパス生成手段２３は、バーチャルスタックリスト情報２２に含まれるバーチャルスタックリストの差分情報を生成する。具体的には比較対象のバーチャルスタックリストの底部フレームから頂上フレームに向かって順次比較を行い、お互いに異なるリターンアドレスが出現した地点から、頂上フレーム側全てのリターンアドレスのリスト（バーチャルパス情報）２４を生成する。検査手段２５は、バーチャルパス情報２４とハッシュテーブル２７に記憶されたバーチャルパス情報とが一致するか否かにより正常か否かの判定を行う。ハッシュテーブル２７は、正常動作モデル記憶手段を構成している。検査手段２５での判定結果は、学習終了期間判定手段３１に渡される。学習終了期間判定手段３１は、動的検知のための正常動作モデルを構築するための学習が必要十分な期間行われたか否かを判定するとともに、静的検知の結果を使用することから動的検知の結果を使用することの切り替え指令を動作の検査手段３３に指令する機能を有している。学習終了期間判定手段３１では、学習の終了を判定するまでは、静的検知を行った動作の検査手段６Ｂの判定結果と、動的検知を行った検査手段２５の判定結果の両方を入力とし、動作の検査手段６Ｂが動作の正常を判定しているにも拘わらず、検査手段２５の判定結果が異常を判定しているときには、動作の検査手段３３に前述の正常動作モデルを構築するために必要なバーチャルパス情報であることを指令する。動作の検査手段３３は、この指令を受けてハッシュテーブル２７に、そのバーチャルパス情報を記録する。同時に、静的検知による動作が正常であることの検知に基いて、観察対象ソフトウエア３にはシステムコールの処理を続行させ、観察対象ソフトウェアに制御を戻す。
【００２９】
後述するように学習終了期間判定手段３１が学習の終了を判定すると、以後は、静的検知の判定結果によらず、動的検知の判定結果により異常の検知を行う。動的検知のみで、観察対象となるソフトウェアの動作が異常であるか否かを検知するときには、システムコールがなされるたびにバーチャルスタックリスト情報とバーチャルパス情報とを生成し、正常動作モデルとして記録されているハッシュテーブル２７中のバーチャルパス情報とのマッチングを行う。そして、検査手段２５が入力されたバーチャルパス情報２４とハッシュテーブル２７に記録されているバーチャルバス情報のいずれか一つとが合致していれば、そのシステムコールは正常であると判定し、合致しなければそのシステムコールは異常であると判定する。なお本実施の形態では、検査手段２５、学習終了期間判定手段３１及び動作の検査手段３３によって、動的検知のための異常検知手段が構成されている。
【００３０】
このようにするとハッシュテーブル２７に必要十分な正常動作モデルが構築されるまでは、静的検知の検知結果をガイドとして学習が繰り返されることになる。したがって本実施の形態によれば、観察（学習）により正常動作モデルを構築する場合でも、学習が０の状態から実際に異常の検知を始めることができるので、従来よりも早期に観察ソフトウエアの運用を開始することができる。本発明の実施の形態では、学習を行っている間は、動的検知がどう判断しようとも静的検知の結果が正しいとみなして学習を行うため、静的検知が誤作動するような攻撃を受けると、観察（学習）に基づくモデルに誤った学習がなされてしまう恐れがある。しかし観察に基づくモデルの学習中に静的検知によって防げない攻撃が来なければ、その後の動的検知では静的検知によって防げない攻撃を防げる可能性があるため、十分に実用可能である。
【００３１】
学習終了期間判定手段３１では、両動作の検査手段６Ｂ及び２５の判断が食い違っているうちは、解析に基づく静的正常動作モデルを用いた検査手段６Ｂの判定結果が正しいものとみなして、観察に基づく正常動作モデルに学習を行わせる。そしてある程度、判定結果が一致するようになったら学習が終了したとみなす。両動作の検査手段６Ｂ及び２５の判定結果がある程度一致したかどうかを判定する手法にはいくつかの手法がある。この実施例では双方の判定が一致したら、カウンタに１加え、一致しなかった場合はリセットを行うカウンタを用いて、カウント値がある閾値を超えたら学習が終了するという手法を採用している。
【００３２】
図６は、本実施の形態で採用している学習終了期間判定手段３１の判定動作の一例を示すフローチャートを示している。このフローチャートでは、カウンタが閾値を超えていない場合は、また学習中であると判断する（ＳＴ１）。そして解析に基づく解析正常動作モデルを用いた検知すなわち静的検知の判定結果が異常であると判定した場合は、システムを停止させるようになっているため、この時点では静的検知の結果は常に正常となっているはずである。そのため学習をすべきか否かは、観察に基づくモデルを用いた動的検知の判断結果のみで判定できる。動的検知の判定結果が「正常」であった場合は、双方の判定結果が一致したということであるからカウンタに１を加えるカウントアップ動作を行う（ＳＴ２及びＳＴ３）。反対に動的検知の判定結果が「異常」であった場合は、このとき学習終了期間判定手段３１は正常動作モデルの記録手段であるハッシュテーブル２７に今回のバーチャルスタックリストとバーチャルパスに基づいて計算したバーチャルパス情報を渡して観察に基づく正常動作モデルの学習（構築）を行ったのちに、カウンタをリセットする（ＳＴ２，ＳＴ４，ＳＴ５）。カウンタの条件分岐によって、選択手段を持つカウンタがある閾値を超えていれば（ＳＴ１）、学習は終了したと判断し、学習を終了する処理を行う（ＳＴ６）。
【００３３】
本実施の形態では、一度カウンタが閾値を超えてしまうと、二度と学習中の状態に戻ることはない。しかしながら、必要があれば学習終了後も外部からの要求に基づいて学習中の状態に戻すような手段を加えても良いのは勿論である。
【００３４】
また上記の実施の形態では、学習の進度を見る装置としてカウンタを採用した。しかしながら、ある一定時間、誤検知がなかった場合には学習が終了したと見なして、学習の終了期間を判定するようにしてもよいのは勿論である。学習の進度を判定するその他の手法として、図７に示す使用率カウンタを用いる方法がある。図７（Ａ）及び（Ｂ）に示した表は、静的な解析に基づく解析正常動作モデルが持つ関数モデルを表したものである。なお図７の表は、静的な解析に基づくモデルの一表現例であり、この表現例に限定されるものではない。図７（Ａ）の左側の表は、初期値を示している。したがって使用率カウンタの初期値（使用率）は０／９である。ここで例えば観察（学習）に基づく正常動作モデルの学習にＣ→Ｂという経路とＡ→Ｃという経路703を使ったと仮定する。図７（Ａ）の右側の図に示すように、学習が行われると解析に基づくモデルには、Ｃ→Ｂという経路とＡ→Ｃという経路が用いられたという印が付いている。すなわちＣ→Ｂに対応する○の下にアンダーバー「＿」の印がついており、Ａ→Ｃに対応する×の下にもアンダーバーの印がついている。このとき使用率は、２／９となって、使用率カウンタの値は増加する。このように経路を使って学習した場合には、観察に基づく正常動作モデルは、次にこの経路と同じ経路を用いることを判定したときに、解析に基づく解析正常動作モデルを用いた静的検知の判断と判定結果が食い違うことはなくなる。このことは、解析に基づく正常動作モデルの知識のうち、この経路を用いる知識を学習できたことを意味する。そして観察に基づく正常動作モデルが解析に基づく解析正常動作モデルの知識をどの程度学習できたかという指標には、解析に基づく解析正常動作モデルの使用率を用いることができる。
【００３５】
また図７（Ｂ）に示すように、既にアンダーバーの印がついている経路Ｃ→Ｂが再度用いられた場合は、カウンタの値は増加せず、カウンタは元の数値のまま保たれる。したがって使用率は２／９のまま変わらず、またアンダーバーの印についても、既に印がつけられているため、変化はおこらない。したがってこの手法によれば、同じ経路が再度使用されたとしても、使用率が変わることがないため、同じ経路が多数回繰り返されることにより、あたかも学習進度と誤認することはない。したがって使用回数を計数する単純なカウンタと比べて、使用率を用いる手法には、偏った学習が防げるという特徴がある。偏った学習とは、実際には学習が十分に行われていないにも関わらず学習が終了したと判定してしまうことをいう。この偏った問題は、単純なカウンタを用いた場合に、ソフトウェアのある一部分を反復して実行することで解析に基づく解析正常動作モデルを用いた判断と、観察に基づく正常動作モデルを用いた判断とが一致し続けてしまい、カウンタが閾値を超えてしまうことにより発生する。これに対して使用率を用いる手法では、一部分の経路を繰り返し実行し続けたとしても、単純なカウンタを用いた手法のように、カウンタが際限なく増加し続けることはない。
【００３６】
改めて、本発明の異常検知方法を図５に示した実施の形態を用いて説明すると以下のようになる。本発明では、正常動作モデル記憶手段として用いるハッシュテーブル２７とは別の記憶手段７に、前述の手段２１〜３１を用いて学習をする学習ステップ及び異常検知ステップによらずに、予め観察対象ソフトウエア３の静的な解析に基づいて得た解析正常動作モデル（モデルデータ）を事前に記憶しておく。そして本発明では、学習ステップが予め定めた学習レベルに達するまで（学習終了期間判定手段３１が学習の終了を判定するまで）は、この別の記憶手段７に記憶した解析正常動作モデルを用いて、観察対象ソフトウエア３の動作が、解析正常動作モデルから判断して正常であるか否かを判断し、観察対象ソフトウエアへの不正侵入による異常の発生を検知する（静的検知における別異常検知ステップ）。そして学習ステップが、予め定めた学習レベルに達するまでは（学習終了期間判定手段３１が学習の終了を判定するまでは）、前述の静的検知における別異常検知ステップの検知結果を利用し、併せて学習ステップ及び異常検知ステップを実行して、別異常検知ステップで動作の正常を検知しているにも拘わらず異常検知ステップで動作の異常を検知しているときには、そのときの動作に基づいて学習した正常動作モデル（新たなハッシュ値を含むデータ）を正常動作モデル記憶手段として用いられるハッシュテーブル２７に記憶させる。そして学習終了期間判定手段３１が、学習ステップが予め定めた学習レベルに達したことを判定すると、動的検知による判定結果が利用されるようになる。すなわち以後は、ハッシュテーブル２７に記憶された正常動作モデルを利用した異常検知ステップの検知結果を利用する。
【００３７】
図５に示す構成は、コンピュータ内においてプログラムを実行して実現される。本実施の形態で使用可能なプログラムは、観察対象ソフトウエア３が正常な動作をしているときの正常動作モデルを学習し、学習した正常動作モデルを正常動作モデル記憶手段（ハッシュテーブル２７）に記憶する学習機能と、観察対象ソフトウエア３の動作が、正常動作モデル記憶手段（２７）に記憶している正常動作モデルと一致するか否かに基づいて観察対象ソフトウエア３への不正侵入による異常の発生を検知する異常検知機能（手段２５〜手段３３を実現する機能）によってコンピュータを用いて実現するように構成されている。本発明で使用する異常検知用プログラムは、さらに正常動作モデル記憶手段（２７）とは別の記憶手段７に、学習機能によらずに予め観察対象ソフトウエア３の静的な解析に基づいて得た解析正常動作モデルを事前に記憶する機能をコンピュータ内に実現する。またプログラムは、学習機能が予め定めた学習レベルに達するまでは、別の記憶手段７に記憶した解析正常動作モデルを用いて、観察対象ソフトウエア３の動作が、正常であるか否かの判断を行って、観察対象ソフトウエア３への不正侵入による異常の発生を検知する別異常検知機能とをコンピュータ内に実現する。さらに本発明で使用する異常検知用プログラムは、学習機能が予め定めた学習レベルに達するまでは、静的検知のための別異常検知機能の検知結果を利用し、併せて動的検知のための学習機能及び異常検知機能を実現して、別異常検知機能で動作の正常を検知しているにも拘わらず異常検知機能で動作の異常を検知しているときには、そのときの動作に基づいて学習した正常動作モデルを正常動作モデル記憶手段に記憶させる機能とを更にコンピュータを用いて実現するように構成されている。そして学習機能が予め定めた学習レベルに達した後は、動的検知による異常検知機能の検知結果を利用するように、本発明で使用するプログラムは構成されている。
【００３８】
また上記実施の形態において使用されている学習モデル生成方法は、従来のように攻撃を受けない環境下（クリーンルーム）で学習を行う場合における学習の終了判定にも当然にして利用できる。この学習モデル生成方法では、観察対象ソフトウエア３の動作が正常動作モデルと一致するか否かに基づいて観察対象ソフトウエア３への不正侵入による異常の発生を検知する異常検知に利用する正常動作モデルを作成するために、観察対象ソフトウエア３に正常な動作を行わせることを継続して正常動作モデルを学習により生成する。この方法では、学習によらずに、予め観察対象ソフトウエア３の静的な解析に基づいて得た解析正常動作モデルを事前に作成する。また予め定めた学習レベルに達するまでは、学習と併用して、解析正常動作モデルを利用した異常検知を実行する（すなわち静的検知を実行する）。解析正常動作モデルを利用した異常検知（静的検知の判定結果）が観察対象ソフトウエア３の正常を検知しているにも拘わらず、学習による学習結果（動的検知の判定結果）が異常を判定しているときには、そのときの正常動作モデルは正しいものと学習する。そして解析正常動作モデルを利用した異常検知の結果（静的検知の判定結果）と学習による学習結果（動的検知の判定結果）との一致割合に基づいて、学習の進捗状況を判定する。一致割合が、予め定めた割合に達したときに、学習が終了したものと判定する。
【００３９】
以上のように本発明の実施の形態によれば、解析に基づく解析正常動作モデルで防御を行いながら観察に基づく正常動作モデルの学習を行うため、攻撃を受けない環境下でなくても学習が可能となる。そのため学習対象となる観察対象ソフトウエアが攻撃を受けない環境下を用意してから、学習を行うという手順は不要となり、実際にソフトウェアを使用しながら安全に学習することが可能である。
【００４０】
また、本発明の実施の形態によれば、攻撃のない環境下で正常動作モデルを生成する従来の手法を用いるか、または攻撃があるかもしれない環境下でモデルを生成するかに拘わらず、解析に基づく解析正常動作モデルの判定結果と比較して、正常動作モデルの学習の程度を測ることにより学習を終了する時期を知ることが可能となり、正常動作モデル生成を行う際の手助けとなる。
【図面の簡単な説明】
【００４１】
【図１】公知の異常検知装置の基本構成を示すブロック図である。
【図２】静的な解析に基づく解析正常動作モデルを生成する公知の装置の構成を示すブロック図である。
【図３】静的な解析に基づく解析正常動作モデルを用いた公知の異常検知装置の構成を示すブロック図である。
【図４】学習時の、観察に基づく正常動作モデルを生成する装置の構成を示すブロック図である。
【図５】本発明の異常検知装置の実施の形態の一例を示すブロック図である。
【図６】学習終了期間の判定機能の動作を示すフローチャートである。
【図７】（Ａ）及び（Ｂ）は、学習進度を判定するカウンタの動作を説明する図である。
【符号の説明】
【００４２】
１  異常検知装置
２  システムコール捕捉手段
３  観察対象ソフトウエア
６  判定手段（別異常検知手段）
６Ａ  バックトレース生成手段
６Ｂ  動作の検査手段
７  記憶手段
２１  バーチャルスタックリスト生成手段
２３  バーチャルパス生成手段
２５  検査手段
２７  ハッシュテーブル（正常動作モデル記憶手段）
３１  学習終了期間判定手段
３３  動作の検査手段
【図１】
2008129714.tif 000003
【図２】
2008129714.tif 000004
【図３】
2008129714.tif 000005
【図４】
2008129714.tif 000006
【図５】
2008129714.tif 000007
【図６】
2008129714.tif 000008
【図７】
2008129714.tif 000009