(57)【要約】【課題】  ソフトウェアの挙動の検証精度を保ちながら、ソフトウェアの挙動を簡易に検証することを可能とするソフトウェア挙動モデル化装置、ソフトウェア挙動モデル化方法、ソフトウェア挙動検証装置及びソフトウェア挙動検証方法を提供する。【解決手段】  ソフトウェア挙動モデル化装置１００は、ソフトウェアの実行中に発生した特定のイベントを示すイベント情報を取得するイベント情報取得部１１０と、特定のイベントが発生した時点において、コールスタックに格納されたスタック情報を取得するスタック情報取得部１２０と、スタック情報に含まれるリターンアドレスがコールスタックに格納されている格納位置に応じて、リターンアドレスにスコアを設定して、格納位置及びスコアを用いて、特定のイベントと要素との関係をモデル化して、ソフトウェアの挙動モデルを生成する挙動モデル生成部１３０とを備える。【選択図】  図１
2008243034.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアの挙動をモデル化するソフトウェア挙動モデル化装置であって、
前記ソフトウェアの実行中に発生した特定のイベントを示すイベント情報を取得するイベント情報取得部と、
前記特定のイベントが発生した時点において、コールスタックに格納されたスタック情報を取得するスタック情報取得部と、
前記スタック情報に含まれる要素が前記コールスタックに格納されている格納位置に応じて、スコアを設定するスコア設定部と、
前記格納位置及び前記スコアを用いて、前記特定のイベントと前記要素との関係をモデル化して、前記ソフトウェアの挙動モデルを生成するモデル生成部とを備えることを特徴とするソフトウェア挙動モデル化装置。
【請求項２】
前記モデル生成部は、前記コールスタックに格納された前記要素から、前記挙動モデルの生成に用いるモデル化対象要素を抽出した上で、前記モデル化対象要素に対応する前記格納位置及び前記スコアを用いて、前記挙動モデルを生成することを特徴とする請求項１に記載のソフトウェア挙動モデル化装置。
【請求項３】
前記モデル化対象要素は、前記コールスタックに格納された前記要素のうち、上位から抽出された所定数の要素であることを特徴とする請求項２に記載のソフトウェア挙動モデル化装置。
【請求項４】
前記モデル化対象要素は、前記コールスタックに格納された前記要素のうち、前記スコアが所定閾値以上である要素であることを特徴とする請求項２に記載のソフトウェア挙動モデル化装置。
【請求項５】
前記モデル生成部は、前記特定のイベントと前記要素の処理順序との関係をモデル化して、前記挙動モデルを生成することを特徴とする請求項１に記載のソフトウェア挙動モデル化装置。
【請求項６】
ソフトウェアの挙動をモデル化するソフトウェア挙動モデル化方法であって、
前記ソフトウェアの実行中に発生した特定のイベントを示すイベント情報を取得するステップＡと、
前記特定のイベントが発生した時点において、コールスタックに格納されたスタック情報を取得するステップＢと、
前記スタック情報に含まれる要素が前記コールスタックに格納されている格納位置に応じて、スコアを設定するステップＣと、
前記格納位置及び前記スコアを用いて、前記特定のイベントと前記要素との関係をモデル化して、前記ソフトウェアの挙動モデルを生成するステップＤとを含むことを特徴とするソフトウェア挙動モデル化方法。
【請求項７】
ソフトウェアの挙動を検証するソフトウェア挙動検証装置であって、
前記ソフトウェアの実行中に発生した特定のイベントを示すイベント情報を取得するイベント情報取得部と、
前記特定のイベントが発生した時点において、コールスタックに格納されたスタック情報を取得するスタック情報取得部と、
前記特定のイベントと前記要素との関係が予めモデル化された挙動モデルを取得する挙動モデル取得部と、
前記イベント情報取得部によって取得された前記特定のイベント及び前記スタック情報取得部によって取得された前記スタック情報に基づいて、前記ソフトウェアの挙動が前記挙動モデルから乖離しているか否かを検証する挙動検証部とを備え、
前記挙動モデルは、前記ソフトウェアが予め正常に実行された際において、前記スタック情報に含まれる要素が前記コールスタックに格納されている位置である格納位置及び前記格納位置に応じて設定されるスコアを用いて生成されており、
前記挙動検証部は、前記格納位置及び前記スコアに基づいて、前記ソフトウェアの挙動が前記挙動モデルから乖離しているか否かを検証することを特徴とするソフトウェア挙動検証装置。
【請求項８】
前記挙動検証部は、前記スコアを累積的に加算し、累積的に加算された前記スコアに基づいて、前記ソフトウェアの異常挙動を検出することを特徴とする請求項７に記載のソフトウェア挙動検証装置。
【請求項９】
ソフトウェアの挙動を検証するソフトウェア挙動検証方法であって、
前記ソフトウェアの実行中に発生した特定のイベントを示すイベント情報を取得するステップＡと、
前記特定のイベントが発生した時点において、コールスタックに格納されたスタック情報を取得するステップＢと、
前記特定のイベントと前記要素との関係が予めモデル化された挙動モデルを取得するステップＣと、
前記ステップＡで取得された前記特定のイベント及び前記ステップＢで取得された前記スタック情報に基づいて、前記ソフトウェアの挙動が前記挙動モデルから乖離しているか否かを検証するステップＤとを含み、
前記挙動モデルは、前記ソフトウェアが予め実行された際において、前記スタック情報に含まれる要素が前記コールスタックに格納されている位置である格納位置及び前記格納位置に応じて設定されるスコアを用いて生成されており、
前記ステップＤでは、前記格納位置及び前記スコアに基づいて、前記ソフトウェアの挙動が前記挙動モデルから乖離しているか否かを検証することを特徴とするソフトウェア挙動検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの挙動をモデル化するソフトウェア挙動モデル化装置及びソフトウェア挙動モデル化方法、ソフトウェアの挙動を検証するソフトウェア挙動検証装置及びソフトウェア挙動検証方法に関する。
【背景技術】
【０００２】
ＰＣ、ワークステーション、サーバ、ルータ、携帯電話、ＰＤＡなどの計算機は、計算機の外部又は計算機の内部から攻撃を受ける可能性がある。代表的な攻撃としては、計算機上で実行されているソフトウェアの脆弱性を悪用する攻撃が挙げられる。攻撃者は、ソフトウェアの脆弱性を悪用するコードを計算機に送り込み、計算機上で実行されているソフトウェアに含まれるプロセスの制御を奪う。攻撃者は、制御を奪ったプロセスの権限を利用して不正な操作を行う。
【０００３】
これに対して、ソフトウェアの脆弱性を悪用する攻撃、特に、計算機にとって未知の攻撃を検出する異常検出システムが知られている。
【０００４】
具体的には、異常検出システムでは、ソフトウェアの正常な挙動が予めモデル化されており、モデル化された挙動モデルが格納されている。異常検出システムは、ソフトウェアの実行中において、ソフトウェアの挙動が挙動モデルから乖離しているか否かを判定する。
【０００５】
ここで、攻撃者は、プロセスがカーネルに重要な処理を依頼するシステムコールを用いて、計算機に任意の動作を行わせる。従って、ソフトウェアの挙動を監視する際において、システムコールの正当性を検証することが重要である。
【０００６】
これを受けて、ソフトウェアの実行中において、システムコールの正当性を検証する検証方法が提案されている。しかしながら、システムコール列を正常に保ちつつ、攻撃を行うことが可能であることが分かったため、検証精度を向上させるために、システムコールのみではなくて、リターンアドレスも検証に用いる方法が提案されている。この検証方法は、リターンアドレスなどが格納されるコールスタックの状況を利用する。具体的には、この検証方法は、ソフトウェアの挙動を学習する段階と、ソフトウェアの挙動を検証する段階とを含む（例えば、非特許文献１）。
【０００７】
ソフトウェアの挙動の学習段階では、ソフトウェアを予め正常に実行した上で、ソフトウェアの挙動モデルを生成する。
【０００８】
具体的には、システムコールが発生した際に、コールスタックの状況、（コールスタックに格納されるリターンアドレスの列）を取得するとともに、プログラムカウンタの値を取得する。リターンアドレスの列及びプログラムカウンタの値が記録された仮想スタックリスト（Ｖｉｒｔｕａｌ  Ｓｔａｃｋ  Ｌｉｓｔ）を生成する。続いて、一のシステムコールが発生した際に生成された仮想スタックリストと、一のシステムコールに続いて他のシステムコールが発生した際に生成された仮想スタックリストとの差分情報（Ｖｉｒｔｕａｌ  Ｐａｔｈ）を取得する。さらに、仮想スタックリスト（Ｖｉｒｔｕａｌ  Ｓｔａｃｋ  Ｌｉｓｔ）及び差分情報（Ｖｉｒｔｕａｌ  Ｐａｔｈ）に基づいてハッシュテーブルを生成して、ハッシュテーブルを挙動モデルとして利用する。
【０００９】
ソフトウェアの挙動の検証段階では、ソフトウェアの実行中においてシステムコールが発生した際に、ソフトウェアの挙動の学習段階と同様に、ハッシュテーブルを生成する。続いて、ソフトウェアの挙動の学習段階で生成されたハッシュテーブルと、ソフトウェアの実行中において生成されたハッシュテーブルとのマッチングを行う。ハッシュテーブルが合致する場合には、システムコールが許可され、ハッシュテーブルが合致しない場合には、ソフトウェアの挙動が異常であると判定される。
【非特許文献１】Ｈ.Ｆｅｎｇ等、“Ａｎｏｍａｌｙ  Ｄｅｔｅｃｔｉｏｎ  Ｕｓｉｎｇ  Ｃａｌｌ  Ｓｔａｃｋ  Ｉｎｆｏｒｍａｔｉｏｎ”、Ｔｈｅ  ｐｒｏｃ.  ｏｆ  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｓｅｃｕｒｉｔｙ  ａｎｄ  Ｐｒｉｖａｃｙ  2003、  ｐｐ.62.
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述した検証方法では、仮想スタックリスト（Ｖｉｒｔｕａｌ  Ｓｔａｃｋ  Ｌｉｓｔ）及び差分情報（Ｖｉｒｔｕａｌ  Ｐａｔｈ）に基づいてハッシュテーブルを生成する必要がある。特に、ソフトウェアの挙動の検証段階では、ソフトウェアの実行中においてハッシュテーブルを生成する必要があるため、計算機の処理負荷が重くなり、計算機の処理速度が遅くなってしまう。特に、ハッシュテーブルを取得するために差分情報（Ｖｉｒｔｕａｌ  Ｐａｔｈ）を生成する負荷が重いことに留意すべきである。
【００１１】
また、非特許文献1では、学習したもののみを正常とみなし、学習していないものは全て異常とみなす。つまり、学習の漏れがあると、正常挙動であっても異常と判断する誤検知が発生する恐れがある。ソフトウェアの正常挙動を網羅的に学習することは、現実的に困難であることから、これは問題であると考えられる。
【００１２】
そこで、本発明は、上述した課題を解決するためになされたものであり、ソフトウェアの挙動の検証精度を保ちながら、ソフトウェアの挙動を簡易に検証することを可能とするソフトウェア挙動モデル化装置、ソフトウェア挙動モデル化方法、ソフトウェア挙動検証装置及びソフトウェア挙動検証方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の一の特徴では、ソフトウェアの挙動をモデル化するソフトウェア挙動モデル化装置は、前記ソフトウェアの実行中に発生した特定のイベント（例えば、システムコール）を示すイベント情報を取得するイベント情報取得部（イベント情報取得部１１０）と、前記特定のイベントが発生した時点において、コールスタックに格納されたスタック情報を取得するスタック情報取得部（スタック情報取得部１２０）と、前記スタック情報に含まれる要素（例えば、リターンアドレス）が前記コールスタックに格納されている格納位置に応じて、スコアを設定するスコア設定部（スコア設定部１２５）と、前記格納位置及び前記スコアを用いて、前記特定のイベントと前記要素との関係をモデル化して、前記ソフトウェアの挙動モデルを生成するモデル生成部（挙動モデル生成部１３０）とを備える。
【００１４】
かかる特徴によれば、モデル生成部は、リターンアドレスの格納位置と、格納位置に応じて設定されたスコアとを用いて、ソフトウェアの挙動モデルを生成する。このように、リターンアドレスの格納位置に着目することによって、ソフトウェアの挙動のモデル化精度を高めることができる。
【００１５】
また、従来技術のように、差分情報（Ｖｉｒｔｕａｌ  Ｐａｔｈ）を用いる必要がないため、ソフトウェア挙動モデル化装置の処理負荷の軽減、ソフトウェア挙動モデル化装置の処理速度の向上を図ることができる。
【００１６】
本発明の上述した特徴において、前記モデル生成部は、前記コールスタックに格納された前記要素から、前記挙動モデルの生成に用いるモデル化対象要素を抽出した上で、前記モデル化対象要素に対応する前記格納位置及び前記スコアを用いて、前記挙動モデルを生成することが好ましい。
【００１７】
本発明の上述した特徴において、前記モデル化対象要素は、前記コールスタックに格納された前記要素のうち、上位から順に抽出された所定数の要素であることが好ましい。
【００１８】
本発明の上述した特徴において、前記モデル化対象要素は、前記コールスタックに格納された前記要素のうち、前記スコアが所定閾値以上である要素であることが好ましい。
【００１９】
本発明の上述した特徴において、前記モデル生成部は、前記特定のイベントと前記要素の処理順序との関係をモデル化して、前記挙動モデルを生成することが好ましい。
【００２０】
本発明の一の特徴では、ソフトウェアの挙動をモデル化するソフトウェア挙動モデル化方法は、前記ソフトウェアの実行中に発生した特定のイベントを示すイベント情報を取得するステップＡと、前記特定のイベントが発生した時点において、コールスタックに格納されたスタック情報を取得するステップＢと、前記スタック情報に含まれる要素が前記コールスタックに格納されている格納位置に応じて、スコアを設定するステップＣと、前記格納位置及び前記スコアを用いて、前記特定のイベントと前記要素との関係をモデル化して、前記ソフトウェアの挙動モデルを生成するステップＤとを含む。
【００２１】
本発明の一の特徴では、ソフトウェアの挙動を検証するソフトウェア挙動検証装置は、前記ソフトウェアの実行中に発生した特定のイベントを示すイベント情報を取得するイベント情報取得部（イベント情報取得部２１０）と、前記特定のイベントが発生した時点において、コールスタックに格納されたスタック情報を取得するスタック情報取得部（スタック情報取得部２２０）と、前記特定のイベントと前記要素との関係が予めモデル化された挙動モデルを取得する挙動モデル取得部（挙動モデル取得部２３０）と、前記イベント情報取得部によって取得された前記特定のイベント及び前記スタック情報取得部によって取得された前記スタック情報に基づいて、前記ソフトウェアの挙動が前記挙動モデルから乖離しているか否かを検証する挙動検証部（挙動検証部２４０）とを備え、前記挙動モデルは、前記ソフトウェアが予め実行された際において、前記スタック情報に含まれる要素が前記コールスタックに格納されている位置である格納位置及び前記格納位置に応じて設定されるスコアを用いて生成されており、前記挙動検証部は、前記格納位置及び前記スコアに基づいて、前記ソフトウェアの挙動が前記挙動モデルから乖離しているか否かを検証する。
【００２２】
かかる特徴によれば、挙動検証部は、リターンアドレスの格納位置と、格納位置に応じて設定されたスコアとを用いて、ソフトウェアの挙動が挙動モデルから乖離しているか否かを判定する。このように、リターンアドレスの格納位置に着目することによって、ソフトウェアの挙動の検証精度を高めることができる。
【００２３】
また、従来技術のように、差分情報（Ｖｉｒｔｕａｌ  Ｐａｔｈ）を用いる必要がないため、ソフトウェア挙動検証装置の処理負荷の軽減、ソフトウェア挙動検証装置の処理速度の向上を図ることができる。
【００２４】
本発明の上述した特徴において、前記挙動検証部は、前記スコアを前記格納位置毎に累積的に加算し、累積的に加算された前記スコアに基づいて、前記ソフトウェアの異常挙動を検出することが好ましい。
【００２５】
本発明の一の特徴では、ソフトウェアの挙動を検証するソフトウェア挙動検証方法は、前記ソフトウェアの実行中に発生した特定のイベントを示すイベント情報を取得するステップＡと、前記特定のイベントが発生した時点において、コールスタックに格納されたスタック情報を取得するステップＢと、前記特定のイベントと前記要素との関係が予めモデル化された挙動モデルを取得するステップＣと、前記ステップＡでによって取得された前記特定のイベント及び前記ステップＢで取得された前記スタック情報に基づいて、前記ソフトウェアの挙動が前記挙動モデルから乖離しているか否かを検証するステップＤとを含み、前記挙動モデルは、前記ソフトウェアが予め実行された際において、前記スタック情報に含まれる要素が前記コールスタックに格納されている位置である格納位置及び前記格納位置に応じて設定されるスコアを用いて生成されており、前記ステップＤでは、前記格納位置及び前記スコアに基づいて、前記ソフトウェアの挙動が前記挙動モデルから乖離しているか否かを検証する。
【発明の効果】
【００２６】
本発明によれば、ソフトウェアの挙動の検証精度を保ちながら、ソフトウェアの挙動を簡易に検証することを可能とするソフトウェア挙動モデル化装置、ソフトウェア挙動モデル化方法、ソフトウェア挙動検証装置及びソフトウェア挙動検証方法を提供することができる。
【発明を実施するための最良の形態】
【００２７】
以下において、本発明の実施形態に係るソフトウェア挙動モデル化装置及びソフトウェア挙動検証装置について、図面を参照しながら説明する。なお、以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。
【００２８】
ただし、図面は模式的なものであり、各寸法の比率などは現実のものとは異なることに留意すべきである。従って、具体的な寸法などは以下の説明を参酌して判断すべきである。また、図面相互間においても互いの寸法の関係や比率が異なる部分が含まれていることは勿論である。
【００２９】
［第１実施形態］
（ソフトウェア挙動モデル化装置）
以下において、第１実施形態に係るソフトウェア挙動モデル化装置の構成について、図面を参照しながら説明する。図１は、第１実施形態に係るソフトウェア挙動モデル化装置１００の構成を示すブロック図である。
【００３０】
図１に示すように、ソフトウェア挙動モデル化装置１００は、学習対象ソフトウェア（プログラム）の正常挙動をモデル化して、ソフトウェアの挙動モデルを生成する。具体的には、ソフトウェア挙動モデル化装置１００は、イベント情報取得部１１０と、スタック情報取得部１２０と、スコア設定部１２５と、挙動モデル生成部１３０とを備える。
【００３１】
イベント情報取得部１１０は、学習対象ソフトウェアの実行中において、学習対象ソフトウェアに含まれる各プロセスが発行する特定のイベント（以下、システムコール）を示すシステムコール情報を取得する。システムコールは、ソフトウェアに含まれるプロセスがオペレーションシステム（カーネル）に重要な処理を依頼する際に発行される命令である。
【００３２】
スタック情報取得部１２０は、コールスタックに格納された情報であるスタック情報を取得する。スタック情報は、複数のリターンアドレスがコールスタックに格納されている順に記録されたものである。リターンアドレスは、プロセスの実行中に呼ばれたサブルーチンが終了した際に、処理を戻すべきプロセスのアドレスである。
【００３３】
ここで、第１実施形態では、コールスタックには、コールスタックの下位（底）からコールスタックの上位に向けて、複数のリターンアドレスが処理順序に従って格納されている。例えば、各リターンアドレスの格納位置としては、コールスタックの上位から順に、すなわち、最も直近に処理されたリターンアドレス順に、「０」、「１」・・・「ｎ」が割り当てられている。
【００３４】
スタック情報取得部１２０は、学習対象ソフトウェアの実行中において、システムコール情報をイベント情報取得部１１０から取得する。
【００３５】
スタック情報取得部１２０は、イベント情報取得部１１０から取得したシステムコール情報によって示されるシステムコールが発生した際にコールスタックから取得したスタック情報を記憶する。具体的には、図２に示すように、スタック情報取得部１２０は、システムコール（Ｓｙｓ）が発生した際にコールスタックに記憶されているリターンアドレス（ＲＡ）をスタック情報として記憶する。
【００３６】
例えば、スタック情報取得部１２０は、図２に示すように、システムコール１が発生した場合には、システムコール１が発生した際にコールスタックに記憶されているリターンアドレス（０ｘ８００００００１、０ｘ８００００１２３、０ｘ８００００３４５）を記憶する。
【００３７】
スタック情報取得部１２０は、システムコール１に続いてシステムコール２が発生した場合には、システムコール２が発生した際にコールスタックに記憶されているリターンアドレス（０ｘ８００００００１、０ｘ８００００１２３、０ｘ８００００４５６、０ｘ８００００５６７）を記憶する。
【００３８】
スタック情報取得部１２０は、システムコール２に続いてシステムコール２が再び発生した場合には、システムコール２が発生した際にコールスタックに記憶されているリターンアドレス（０ｘ８００００００１、０ｘ８００００３２１、０ｘ８００００６５４）を記憶する。
【００３９】
スコア設定部１２５は、スタック情報取得部１２０からスタック情報を取得する。続いて、スコア設定部１２５は、スタック情報に含まれる各要素（リターンアドレス）がコールスタックに格納されている位置（格納位置）に応じて、各要素にスコアを設定する。
【００４０】
挙動モデル生成部１３０は、イベント情報取得部１１０からシステムコール情報を取得するとともに、スタック情報取得部１２０からスタック情報を取得する。また、挙動モデル生成部１３０は、スコア設定部１２５によって各要素（リターンアドレス）に設定されたスコアを取得する。続いて、挙動モデル生成部１３０は、システムコールとスタック情報（リターンアドレス）との関係をモデル化して、ソフトウェアの挙動モデルを生成する。挙動モデル生成部１３０は、システムコール毎に挙動モデルを生成する。
【００４１】
具体的には、図３（ａ）に示すように、システムコール１（Ｓｙｓ１）、システムコール２（Ｓｙｓ２）及びシステムコール２（Ｓｙｓ２）が順に発生した場合において、挙動モデルを生成するケースを例に挙げて説明する。
【００４２】
図３（ａ）に示すように、システムコール１（Ｓｙｓ１）が発生した時点において、コールスタックには、リターンアドレスA〜リターンアドレスＦが格納されている。なお、リターンアドレスＦが最も直近に処理されたものであり、リターンアドレスＦの格納位置は「０」であることに留意すべきである。
【００４３】
同様に、システムコール１（Ｓｙｓ１）に続いてシステムコール２（Ｓｙｓ２）が発生した時点において、コールスタックには、リターンアドレスA〜リターンアドレスＤが順に格納されている。なお、リターンアドレスＤが最も直近に処理されたものであり、リターンアドレスＤの格納位置は「０」であることに留意すべきである。
【００４４】
また、システムコール２（Ｓｙｓ２）に続いてシステムコール２（Ｓｙｓ２）が発生した時点において、コールスタックには、リターンアドレスA〜リターンアドレスＣが順に格納されている。なお、リターンアドレスＣが最も直近に処理されたものであり、リターンアドレスＣの格納位置は「０」であることに留意すべきである。
【００４５】
挙動モデル生成部１３０は、図３（ｂ）に示すように、システムコールの種類（Ｓｙｓ）、コールスタックにおけるリターンアドレスの格納位置、リターンアドレスの種類及びスコアを対応付けるテーブルを挙動モデルとして生成する。
【００４６】
ここで、上述したスコア設定部１２５は、格納位置が下位になれば下位になるほど、スコアが小さくなるようにスコアを設定する。また、スコア設定部１２５は、格納位置が同じであるリターンアドレスの数が多ければ多いほど、スコアが小さくなるようにスコアを設定してもよい。
【００４７】
例えば、格納位置を“Ｐ”、格納位置が同じリターンアドレスの種類数を“Ｎ”とした場合には、以下に示す式（１）〜式（４）に従ってスコア（Ｗ）が設定される。格納位置は、０以上の整数（「０」、「１」・・・「ｎ」）で表されていることを前提とする。
【数１】
2008243034.tif 000003
【００４８】
なお、上述した式（３）〜式（４）において、格納位置が同じリターンアドレスの種類数（Ｎ）に代えて、格納位置が同じリターンアドレスのカウント数（Ｃ）を用いてもよい。また、種類数（Ｎ）及びカウント数（Ｃ）の双方を用いてもよい。
【００４９】
なお、図３（ｂ）では、式（３）を用いてスコア（Ｗ）を算出している。但し、ｘの値は“２”であることに留意すべきである。
【００５０】
（ソフトウェア挙動モデル化方法）
以下において、第１実施形態に係るソフトウェア挙動モデル化方法について、図面を参照しながら説明する。図４は、第１実施形態に係るソフトウェア挙動モデル化方法を示すフロー図である。なお、図４では、学習対象ソフトウェアが正常に動作することを前提として説明する。
【００５１】
図４に示すように、ステップ１０において、ソフトウェア挙動モデル化装置１００は、学習対象ソフトウェアの挙動モデルを生成するために必要な情報の学習を開始する。
【００５２】
ステップ１１において、ソフトウェア挙動モデル化装置１００は、学習対象ソフトウェアに含まれる各プロセスが発行するシステムコールを示すイベント情報を取得する。
【００５３】
ステップ１２において、ソフトウェア挙動モデル化装置１００は、システムコールが発生した時点において、コールスタックに格納されているスタック情報（複数のリターンアドレス）を取得する（上述した図２を参照）。
【００５４】
ステップ１３において、ソフトウェア挙動モデル化装置１００は、挙動モデルの生成に必要な情報が揃ったか否か、例えば、学習対象ソフトウェアの実行が終了したか否かを判定する。ソフトウェア挙動モデル化装置１００は、挙動モデルの生成に必要な情報が揃った場合には、学習対象ソフトウェアの挙動モデルを生成するために必要な情報の学習を終了する。一方で、ソフトウェア挙動モデル化装置１００は、挙動モデルの生成に必要な情報が揃っていない場合には、ステップ１１及びステップ１２の処理を繰り返す。
【００５５】
ステップ１４において、ソフトウェア挙動モデル化装置１００は、システムコール情報及びスタック情報を用いて、学習対象ソフトウェアの挙動モデルを生成する。具体的には、ソフトウェア挙動モデル化装置１００は、リターンアドレスの格納位置及びリターンアドレスの種類に基づいて、各リターンアドレスにスコアを設定する。続いて、ソフトウェア挙動モデル化装置１００は、システムコールの種類、リターンアドレスの格納位置、リターンアドレスの種類及びスコアを対応付けるテーブルを挙動モデルとして生成する（上述した図３（ｂ）を参照）。
【００５６】
（作用及び効果）
第１実施形態に係るソフトウェア挙動モデル化装置１００（ソフトウェア挙動モデル化方法）によれば、挙動モデル生成部１３０は、リターンアドレスの格納位置と、格納位置に応じて設定されたスコアとを用いて、学習対象ソフトウェアの挙動モデルを生成する。このように、リターンアドレスの格納位置に着目することによって、学習対象ソフトウェアの挙動のモデル化精度を高めることができる。
【００５７】
また、従来技術のように、差分情報（Ｖｉｒｔｕａｌ  Ｐａｔｈ）を用いる必要がないため、ソフトウェア挙動モデル化装置１００の処理負荷の軽減、ソフトウェア挙動モデル化装置１００の処理速度の向上を図ることができる。
【００５８】
第１実施形態に係るソフトウェア挙動モデル化装置１００（ソフトウェア挙動モデル化方法）によれば、リターンアドレスの格納位置及び格納位置に応じて設定されるスコアを含むテーブルによって簡易に挙動モデルを表すため、挙動モデルのサイズを小さくすることができる。
【００５９】
［第２実施形態］
（ソフトウェア挙動検証装置）
以下において、第２実施形態に係るソフトウェア挙動検証装置の構成について、図面を参照しながら説明する。図５は、第２実施形態に係るソフトウェア挙動検証装置２００の構成を示すブロック図である。
【００６０】
図５に示すように、ソフトウェア挙動検証装置２００は、イベント情報取得部２１０と、スタック情報取得部２２０と、挙動モデル取得部２３０と、挙動検証部２４０とを備える。
【００６１】
イベント情報取得部２１０は、イベント情報取得部１１０と同様に、監視対象ソフトウェアの実行中において、監視対象ソフトウェアに含まれる各プロセスが発行する特定のイベント（システムコール）を示すシステムコール情報を取得する。
【００６２】
スタック情報取得部２２０は、スタック情報取得部１２０と同様に、システムコールが発生した時点において、コールスタックに格納されたスタック情報を取得する。なお、スタック情報は、第１実施形態と同様に、複数のリターンアドレスがコールスタックに格納されている順に記録されたものである。
【００６３】
挙動モデル取得部２３０は、第１実施形態で示したように、システムコール情報及びスタック情報を用いて生成された挙動モデルを取得する。ここで、挙動モデル取得部２３０は、監視対象ソフトウェアに対応する挙動モデルを取得することは勿論である。
【００６４】
挙動検証部２４０は、監視対象ソフトウェアの挙動が挙動モデルから乖離しているか否かを検証する。具体的には、挙動検証部２４０は、システムコール情報によって示されるシステムコールに対応する挙動モデルを取得する。続いて、挙動検証部２４０は、リターンアドレスの格納位置毎に、スタック情報取得部２２０によって取得されたリターンアドレスと挙動モデルに含まれるリターンアドレスとを比較する。
【００６５】
ここで、挙動検証部２４０は、リターンアドレスが一致する場合には、監視対象ソフトウェアの挙動が正常であるか否かを判定するための判定値に、格納位置に対応するスコアを加算しない。一方で、挙動検証部２４０は、リターンアドレスが不一致である場合には、格納位置に対応するスコアを判定値に累積的に加算する。挙動検証部２４０は、累積的にスコアが加算された判定値が所定判定値を超えた場合に、監視対象ソフトウェアの挙動が異常であると判定する。
【００６６】
例えば、監視対象ソフトウェアの挙動モデルが図６（ａ）に示すモデルであり、システムコール２（Ｓｙｓ２）が発生した時点においてコールスタックに格納されているリターンアドレスが図６（ｂ）に示すアドレスであるケースを例に挙げて説明する。
【００６７】
挙動検証部２４０は、システムコール２（Ｓｙｓ２）に対応する挙動モデルを取得する。続いて、挙動検証部２４０は、格納位置“０”において、リターンアドレスＧが挙動モデルと一致するか否かを検証する。図６では、挙動検証部２４０は、リターンアドレスＧが挙動モデルと一致しないため、格納位置“０”に対応するスコア（１／２）を判定値に加算する。なお、判定値の初期値は“０”であることに留意すべきである。
【００６８】
同様に、挙動検証部２４０は、格納位置“１”において、リターンアドレスＢが挙動モデルと一致するか否かを検証する。図６では、挙動検証部２４０は、リターンアドレスＢが挙動モデルと一致するため、格納位置“１”に対応するスコアを判定値に加算しない。
【００６９】
さらに、挙動検証部２４０は、格納位置“２”において、リターンアドレスＡが挙動モデルと一致するか否かを検証する。図６では、挙動検証部２４０は、リターンアドレスＡが挙動モデルと一致するため、格納位置“２”に対応するスコアを判定値に加算しない。
【００７０】
続いて、挙動検証部２４０は、スコアが累積的に加算された判定値（図６では、１／２）を当該スタック情報の累積スコアとして、複数のスタック情報毎に算出された累積スコアを異常スコアに加算する。
【００７１】
最終的には、挙動検証部２４０は、異常スコアが所定判定値を超えているか否かを判定し、監視対象ソフトウェアの挙動が正常であるか否かを判定する。
【００７２】
なお、累積スコアは、システムコールの発行回数に応じて正規化されてもよい。また、監視対象ソフトウェアの挙動が正常であるか否かは、予め定められた回数のシステムコールに対応する判定値の合計（累積値）で判断されてもよい。例えば、予め定められた回数が５回である場合には、システムコール１〜５に対応する判定値の合計（累積値）、システムコール２〜６に対応する判定値の合計（累積値）、システムコール３〜７に対応する判定値の合計（累積値）をそれぞれ算出した上で、各累積値に基づいて監視対象ソフトウェアの挙動が正常であるか否かを判断する。
【００７３】
（ソフトウェア挙動検証方法）
以下において、第２実施形態に係るソフトウェア挙動検証方法について、図面を参照しながら説明する。図７は、第２実施形態に係るソフトウェア挙動検証方法を示すフロー図である。
【００７４】
図７に示すように、ステップ２０において、ソフトウェア挙動検証装置２００は、監視対象ソフトウェアの挙動モデルを取得する（上述した図６（ａ）を参照）。
【００７５】
ステップ２１において、ソフトウェア挙動検証装置２００は、監視対象ソフトウェアの監視を開始する。
【００７６】
ステップ２２において、ソフトウェア挙動検証装置２００は、監視対象ソフトウェアに含まれるプロセスが発行するシステムコールを示すシステムコール情報を取得する。
【００７７】
ステップ２３において、ソフトウェア挙動検証装置２００は、システムコールが発生した時点において、コールスタックに格納されているスタック情報（複数のリターンアドレス）を取得する（上述した図６（ｂ）を参照）。
【００７８】
ステップ２４において、ソフトウェア挙動検証装置２００は、システムコール情報に対応する挙動モデルを参照して、ステップ２３で取得したリターンアドレスと挙動モデルに含まれるリターンアドレスとが一致するか否かをリターンアドレスの格納位置毎に判定する。また、ソフトウェア挙動検証装置２００は、リターンアドレスが一致する場合には、ステップ２６の処理に移り、リターンアドレスが不一致である場合には、ステップ２５の処理に移る。
【００７９】
ステップ２５において、ソフトウェア挙動検証装置２００は、リターンアドレスの格納位置に対応するスコアを判定値に加算する。
【００８０】
ステップ２６において、ソフトウェア挙動検証装置２００は、判定値が所定判定値を超えているか否か、及び、監視対象ソフトウェアの実行が終了したか否かを判定する。ソフトウェア挙動検証装置２００は、判定値が所定判定値を超えている場合には、監視対象ソフトウェアの挙動が異常であると判定する。一方で、監視対象ソフトウェアの実行が終了した場合には、監視対象ソフトウェアの挙動が正常であると判定する。
【００８１】
なお、ソフトウェア挙動検証装置２００は、判定値が所定判定値を超えておらず、かつ、監視対象ソフトウェアの実行が終了していない場合には、ステップ２２〜ステップ２５の処理を繰り返す。
【００８２】
（作用及び効果）
第２実施形態に係るソフトウェア挙動検証装置２００（ソフトウェア挙動検証方法）によれば、挙動検証部２４０は、リターンアドレスの格納位置と、格納位置に応じて設定されたスコアとを用いて、監視対象ソフトウェアの挙動が挙動モデルから乖離しているか否かを判定する。このように、リターンアドレスの格納位置に着目することによって、監視対象ソフトウェアの挙動の検証精度を高めることができる。
【００８３】
また、従来技術のように、差分情報（Ｖｉｒｔｕａｌ  Ｐａｔｈ）を用いる必要がないため、ソフトウェア挙動検証装置２００の処理負荷の軽減、ソフトウェア挙動検証装置２００の処理速度の向上を図ることができる。
【００８４】
第２実施形態に係るソフトウェア挙動検証装置２００（ソフトウェア挙動検証方法）によれば、挙動検証部２４０は、コールスタックに格納されたリターンアドレスと挙動モデルに含まれるリターンアドレスとを格納位置毎に比較して、リターンアドレスが不一致である場合にスコアを累積的に加算する。挙動検証部２４０は、累積的に加算されたスコア（判定値）に基づいて、監視対象ソフトウェアの挙動を検証する。従って、攻撃者の攻撃によってソフトウェア挙動検証装置２００にとって全く未知のソフトウェアが実行されてしまった場合であっても、ソフトウェアの異常を検出することができる。
【００８５】
［その他の実施形態］
本発明は上述した実施形態によって説明したが、この開示の一部をなす論述及び図面は、この発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。
【００８６】
例えば、上述した実施形態では特に触れていないが、スコア設定部１２５及び挙動モデル生成部１３０は、コールスタックに格納されたリターンアドレスのうち、挙動モデルの生成に用いるモデル化対象リターンアドレスを抽出した上で、モデル化対象リターンアドレスの格納位置及び格納位置に応じて設定されたスコアを用いて、学習対象モデルの挙動モデルを生成してもよい。
【００８７】
ここで、モデル化対象リターンアドレスは、コールスタックに格納されたリターンアドレスのうち、コールスタックの上位から順に抽出された所定数のリターンアドレスであってもよい。また、モデル化対象リターンアドレスは、コールスタックに格納されたリターンアドレスのうち、スコアが所定閾値以上であるリターンアドレスであってもよい。
【００８８】
上述した実施形態では、スコア設定部１２５は、一つのシステムコールと一つのリターンアドレスとの関係において、一つのリターンアドレスに対応するスコアを設定するが、これに限定されるものではない。すなわち、挙動モデル生成部１３０は、一つのシステムコールと一つのリターンアドレスとの関係をモデル化するが、これに限定されるものではない。
【００８９】
具体的には、スコア設定部１２５は、一つのシステムコールとコールスタックの上位からの順序が考慮された複数のリターンアドレスの順列との関係において、複数のリターンアドレスに対応するスコアを設定してもよい。すなわち、挙動モデル生成部１３０は、一つのシステムコールとコールスタックの上位からの順序が考慮された複数のリターンアドレスの順列との関係をモデル化してもよい。
【００９０】
上述した実施形態では特に触れていないが、スコア設定部１２５は、システムコールが発生した時点においてコールスタックに格納されているリターンアドレスについて、そのシステムコール内で出現回数が相対的に少ないリターンアドレスに対して、そのシステムコール内で出現回数が相対的に多いリターンアドレスよりも高いスコアを設定してもよい。
【００９１】
上述した実施形態では特に触れていないが、スコア設定部１２５は、システムコールが発生した時点においてコールスタックに格納されているリターンアドレスについて、そのシステムコール内で出現回数が絶対的に少ないリターンアドレスに対して、そのシステムコール内で出現回数が絶対的に多いリターンアドレスよりも高いスコアを設定してもよい。
【００９２】
上述した実施形態では特に触れていないが、スコア設定部１２５は、システムコールが発生した時点においてコールスタックに格納されているリターンアドレスについて、そのシステムコール内における出現回数の割合を考慮して、リターンアドレスにスコアを設定してもよい。
【００９３】
上述した実施形態では特に触れていないが、スコア設定部１２５は、複数のリターンアドレスの相関関係を考慮して、リターンアドレスにスコアを設定してもよい。
【００９４】
例えば、リターンアドレスＡとリターンアドレスＢとの相関が高いケースにおいて、リターンアドレスＢがリターンアドレスＡとともに出現する場合に、リターンアドレスＢが単独で出現する場合よりも、リターンアドレスＢに高いスコアを設定してもよい。リターンアドレスＡが出現した場合に、リターンアドレスＢにスコアを設定しなくてもよい。
【図面の簡単な説明】
【００９５】
【図１】第１実施形態に係るソフトウェア挙動モデル化装置１００の構成を示すブロック図である。
【図２】第１実施形態に係るスタック情報の一例を示す図である。
【図３】第１実施形態に係るソフトウェアの挙動モデルの生成の一例を示す図である。
【図４】第１実施形態に係るソフトウェア挙動モデル化方法を示すフロー図である。
【図５】第２実施形態に係るソフトウェア挙動検証装置２００の構成を示すブロック図である。
【図６】第２実施形態に係るソフトウェアの挙動の検証の一例を示す図である。
【図７】第２実施形態に係るソフトウェア挙動検証方法を示すフロー図である。
【符号の説明】
【００９６】
１００・・・ソフトウェア挙動モデル化装置、１１０・・・イベント情報取得部、１２０・・・スタック情報取得部、１２５・・・スコア設定部、１３０・・・挙動モデル生成部、２００・・・ソフトウェア挙動検証装置、２１０・・・イベント情報取得部、２２０・・・スタック情報取得部、２３０・・・挙動モデル取得部、２４０・・・挙動検証部
【図１】
2008243034.tif 000004
【図２】
2008243034.tif 000005
【図３】
2008243034.tif 000006
【図４】
2008243034.tif 000007
【図５】
2008243034.tif 000008
【図６】
2008243034.tif 000009
【図７】
2008243034.tif 000010