(57)【要約】【課題】攻撃を正確に検知し、ソフトウェア動作監視における時間及び空間オーバーヘッドを削減するソフトウェア動作モデル化装置を提供する。【解決手段】ソフトウェア動作モデル化装置100は、スタック情報記録部120と、iを自然数とし、スタック情報記録部によって記録されたi-1番目のスタック情報とi番目のスタック情報とを、コールスタック底から順に比較して行き、一致部分と不一致部分との境界をつくるスタックフレーム情報である終端情報と、終端情報が出現したコールスタック底からの位置とを記録し、コールスタック底からの位置を用いて採用する終端情報を決定する終端情報記録部150と、終端情報記録部150が記録した終端情報を用いて、スタック差分情報生成部130と、スタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成部140とを備える。【選択図】図１
2007334767.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアの実行環境において、ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれたスタックフレームを識別するスタックフレーム情報を、コールスタックに積まれた順がわかるように取得し、特定のイベント発生順に記録するスタック情報記録部と、
iを自然数とし、前記スタック情報記録部によって記録されたi-1番目のスタック情報とi番目のスタック情報とを、コールスタック底から順に比較して行き、前記スタックフレーム情報と出現位置が一致している部分を一致部分、異なる前記スタックフレーム情報を検知してから以降の部分を不一致部分とし、一致部分と不一致部分との境界である終端をつくるスタックフレーム情報である終端情報と、該終端情報が出現した位置とを記録し、該出現位置を用いて採用する終端情報を決定する終端情報記録部と、
前記終端情報記録部が記録した終端情報を用いて、前記スタックフレーム情報のスタック上位から終端情報が検知されるまでの情報をお互い連結させた情報をスタック差分情報として生成するスタック差分情報生成部と、
前記スタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成部と
を備えることを特徴とするソフトウェア動作モデル化装置。
【請求項２】
前記スタックフレーム情報は、復帰アドレスであることを特徴とする請求項１に記載のソフトウェア動作モデル化装置。
【請求項３】
前記終端情報記録部は、前記終端より下位に出現するスタックフレーム情報と、該スタックフレーム情報の出現位置とを記録し、前記スタックフレーム情報の出現位置を用いて採用する終端情報を決定することを特徴とする請求項１に記載のソフトウェア動作モデル化装置。
【請求項４】
前記終端情報記録部は、前記終端より下位に出現するスタックフレーム情報と、該スタックフレーム情報の出現位置とを記録し、終端情報が決定するごとに、前記スタックフレーム情報の出現位置を変化させることにより、採用する終端情報を決定することを特徴とする請求項３に記載のソフトウェア動作モデル化装置。
【請求項５】
前記終端情報記録部は、前記スタックフレーム情報が前記終端より下位の同位置に連続して出現する期間を記録し、前記連続して出現する期間を用いて採用する終端情報を決定することを特徴とする請求項１に記載のソフトウェア動作モデル化装置。
【請求項６】
前記終端情報記録部は、取得した終端情報と同値の情報が、コールスタックの終端より上位に出現する回数を記録し、前記上位に出現する回数を用いて、採用する終端情報を決定することを特徴とする請求項１に記載のソフトウェア動作モデル化装置。
【請求項７】
前記終端情報記録部は、スタックフレーム情報ごとに、コールスタックの終端より下位に出現する回数と、終端より上位に出現する回数を記録し、前記下位に出現する回数及び前記上位に出現する回数を用いて、採用する終端情報を決定することを特徴とする請求項１に記載のソフトウェア動作モデル化装置。
【請求項８】
前記終端情報記録部は、採用する終端情報を決定した後、その終端情報が終端より上位に出現する回数と出現する位置と終端より下位に出現する回数と出現する位置とを記録し、前記上位に出現する回数と該出現する位置と前記終端より下位に出現する回数と該出現する位置により、再度採用する終端情報を最適化することを特徴とする請求項１に記載のソフトウェア動作モデル化装置。
【請求項９】
ソフトウェアの実行環境において、ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれたスタックフレームを識別するスタックフレーム情報を、スタックに積まれた順がわかるように取得し、特定のイベント発生順に記録するスタック情報記録ステップと、
iを自然数とし、前記記録されたi-1番目のスタック情報とi番目のスタック情報とを、コールスタック底から順に比較して行き、前記スタックフレーム情報と出現位置が一致している部分を一致部分、異なる前記スタックフレーム情報を検知してから以降の部分を不一致部分とし、一致部分と不一致部分との境界である終端をつくるスタックフレーム情報である終端情報と、該終端情報が出現した位置とを記録し、位置を用いて採用する終端情報を決定する終端情報記録ステップと、
前記記録した終端情報を用いて、前記スタックフレーム情報のスタック上位から終端情報が検知されるまでの情報をお互い連結させた情報をスタック差分情報として生成するスタック差分生成ステップと
前記スタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成ステップと、
を含むことを特徴とするソフトウェア動作モデル化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア動作モデル化装置及びソフトウェア動作モデル化方法に関する。
【背景技術】
【０００２】
PCやワークステーション、サーバ、ルータ、携帯電話、PDAなど、すべての計算機は外部もしくは内部からの攻撃にさらされている。代表的な攻撃は、計算機上で実行されているソフトウェアの脆弱性を踏み台にしたものである。攻撃者は、ソフトウェアの脆弱性を利用した悪意のあるコードを計算機に送り込み、実行中のプロセスの制御を奪い、当該プロセスの権限を利用して不正操作をおこなう。
【０００３】
脆弱性を利用した攻撃、特に未知の攻撃を検知するために、ソフトウェアの正常な動作をモデル化し、ソフトウェア実行中にモデルからの乖離の有無を判定する異常検知システムがある。システムコールは、プロセスがカーネルにシステム上重要な処理を依頼する際に行う命令であり、攻撃者は、プロセスが依頼するシステムコールを用いて、システムに任意の行動をさせる。そのため、ソフトウェアの動作を監視する際にシステムコールの正当性を検証することが行われる（例えば、特許文献１、非特許文献１、非特許文献２参照。）。
【０００４】
特許文献１に記載の攻撃対策装置では、システムコール発行元の関数がメモリのコード領域に存在することを正常とし、ソフトウェア（タスク）から発行されたシステムコール要求を入力し、正当性検査機能へのジャンプアドレスを出力するシステムコールテーブルと、システムコール要求発行時にOSによって特定のメモリ領域に格納されるシステムコール呼び出し元の復帰アドレスから、システムコール要求の正当性を判定し判定結果を出力するとともに、不正なシステムコール要求と断定した場合、そのシステムコール要求を棄却する正当性検査機能部と、正当性検査機能部の不正システムコール要求判定結果を入力し、対策を講ずる攻撃対策機能部と、正当性検査機能部の正当システムコール要求判定結果を入力して呼び出され、命令を実行するシステムコールとを備える。
【０００５】
非特許文献１に記載の攻撃検知システムでは、システムコールの正当性を検証するために、コールスタックの状況（スタックに積まれた復帰アドレスの列）を利用する。このシステムでは、まずソフトウェアを事前に実行し、得られた結果からモデルを学習する。プログラム実行中にシステムコール発生時のコールスタックの状況を取得し、システムコール発生時のプログラムカウンタとともに記録したVirtual Stack Listを生成し、又、現在のVirtual Stack Listと一つ前のVirtual Stack Listとの差分情報、すなわち比較対象のコールスタックの状況のスタック最下位より比較検証を順次行い異なる復帰アドレスを検出してから以降の復帰アドレスの列（Virtual Path）を生成する。生成されたVirtual Stack ListとVirtual Pathからそれぞれハッシュテーブルを生成し、そのテーブルをソフトウェアのモデルとして利用する。ソフトウェアの動作を検証する際には、ソフトウェア実行中に、Virtual Stack ListとVirtual Pathを生成し、モデルであるハッシュテーブルとのマッチングを行い、合致していればシステムコール要求に対し許可をし、合致しなければ、異常であると判定する。
【０００６】
非特許文献２に記載の攻撃検知システムでは、システムコールの正当性を検証するために、コールスタックの状況（スタックに積まれた復帰アドレスの列）を利用する。このシステムでは、監視対象ソフトウェアのバイナリコードを解析することによって、関数定義と、関数定義のオートマトンを生成する。このオートマトンは関数ごとに作られ、ソフトウェアの制御フローを監視するために用いられる。節点は、（１）関数の入り口、（２）関数の出口、（３）関数の呼び出しのいずれかとして定義されている。監視対象ソフトウェアの実行中、このシステムは、システムコールが発行されるたびに当該ソフトウェアを停止させ、その時点のコールスタックの状況を調べる。そして、復帰アドレス列から、呼び出されている関数のリスト（スタックバックトレースと呼ぶ）をつくる。そして、iを自然数とすると、i-1番目のスタックバックトレースと、i番目のスタックバックトレースを比較し、前者から後者に至る制御フローがモデル（オートマトン）に存在しているか否かを検証する。
【０００７】
LinuxをはじめとするOSにおいては、通常システムコールがWrapper関数を介して発行される。Wrapper関数はコード領域に存在しているため、システムコール発行元の関数は常にコード領域に存在する。又、攻撃として主流であるReturn-to-libc攻撃の場合、攻撃者はlibcへ復帰させて任意のシステムコールを発行する。以上の状況を考えると、システムコール発行元の関数のアドレスがコード領域にあることで正当とみなしてしまう特許文献１記載の攻撃対策装置では、検知できない攻撃が存在する。又、非特許文献１、非特許文献２記載の攻撃検知システムは、コールスタックに積まれた復帰アドレスの列を用いて検証をしているため、特許文献１記載の攻撃対策装置よりも詳細なモデル化を行っているといえる。そのため、攻撃見逃しを特許文献１よりも低減している。
【０００８】
非特許文献３記載の手法では、終端情報を出現する回数で選択する。そのため、オーバーヘッドを効率よく低減し、精度を高く保つ終端情報が選択できないといった問題がある。
【特許文献１】特開２００４−１２６８５４号公報
【非特許文献１】H.Fengら, “Anomaly Detection Using Call Stack Information”, The proc. of IEEE Symposium on Security and Privacy 2003, pp.62.
【非特許文献２】阿部ら，“静的解析に基づく侵入検知システムの最適化”，情報処理学会論文誌：コンピューティングシステム，vol.45，No.SIG3 (ACS 5)，pp.11-20
【非特許文献３】金野晃ら,第102回情報処理学会システムソフトウェアとオペレーティングシステム研究会 (1) 携帯端末向けソフトウェア異常検知技術
【発明の開示】
【発明が解決しようとする課題】
【０００９】
特許文献１、非特許文献１ともに、ソフトウェアの動作をプログラム実行中に検証することを前提としているが、携帯電話など処理能力の低い計算機において、動作を検証するシステムを搭載するためには、限られた資源での処理の高速化、使用メモリ量の抑制が重要となる。
【００１０】
特に、非特許文献１では、精度を向上させるために、コールスタックの状況をモデルに含めており、検証の際にシステムコール発行のタイミングでコールスタックの状況を都度取得する必要がある。コールスタックの状況を取得するためには、スタックポインタ（SP）、ベースポインタ（BP）を利用してコールスタック内を探索し、スタックフレームを識別するスタックフレーム情報（位置、復帰アドレス、カナリなど）を順次取得する必要があるが、コールスタックはメモリ上に展開されているので、低速なメモリアクセスが頻繁に起き、時間オーバーヘッドが高い。
【００１１】
又、特に、非特許文献２では、精度向上のために、コールスタックの状況を監視しているが、スタックバックトレースにリストアップされた関数ごとにモデルを読み込み、制御フローの検証を行う必要がある。監視の速度を高速にするためには、読み込んだモデルをLRUアルゴリズムによってキャッシングすることが考えられるが、組み込み機器ではメモリ量が限られてしまうため、結果的には使用されないかもしれないモデルをメモリにおいておくことは、使用メモリ量を圧迫させてしまい、監視対象ソフトウェアの処理を著しく悪化させてしまう可能性がある。
【００１２】
そこで、本発明は、上記の問題に鑑み、攻撃を正確に検知し、ソフトウェア動作監視における時間及び空間オーバーヘッドを削減するソフトウェア動作モデル化装置及びソフトウェア動作モデル化方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、本発明の第１の特徴は、（ａ）ソフトウェアの実行環境において、ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれたスタックフレームを識別するスタックフレーム情報を、コールスタックに積まれた順がわかるように取得し、特定のイベント発生順に記録するスタック情報記録部と、（ｂ）iを自然数とし、スタック情報記録部によって記録されたi-1番目のスタック情報とi番目のスタック情報とを、コールスタック底から順に比較して行き、スタックフレーム情報と出現位置が一致している部分を一致部分、異なるスタックフレーム情報を検知してから以降の部分を不一致部分とし、一致部分と不一致部分との境界である終端をつくるスタックフレーム情報である終端情報と、終端情報が出現した位置とを記録し、位置を用いて採用する終端情報を決定する終端情報記録部と、（ｃ）終端情報記録部が記録した終端情報を用いて、スタックフレーム情報のスタック上位から終端情報が検知されるまでの情報をお互い連結させた情報をスタック差分情報として生成するスタック差分情報生成部と、（ｄ）スタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成部とを備えるソフトウェア動作モデル化装置であることを要旨とする。
【００１４】
第１の特徴に係るソフトウェア動作モデル化装置によると、採用する終端情報を、終端情報として出現する位置を考慮して決定することにより、より多くのスタック探索を省略することができる終端情報を決定することができ、攻撃を正確に検知し、効率的にソフトウェア動作監視における時間及び空間オーバーヘッドを削減することができる。
【００１５】
又、第１の特徴に係るソフトウェア動作モデル化装置において、スタックフレーム情報は、復帰アドレスであってもよい。
【００１６】
このソフトウェア動作モデル化装置によると、コールスタックを修正することなく、スタックフレームを識別する情報を取得することができる。
【００１７】
又、第１の特徴に係るソフトウェア動作モデル化装置の終端情報記録部は、終端より下位に出現するスタックフレーム情報と、スタックフレーム情報の出現位置とを記録し、スタックフレーム情報の出現位置を用いて採用する終端情報を決定してもよい。
【００１８】
このソフトウェア動作モデル化装置によると、終端より下位のスタックフレーム情報も終端情報として採用することができるため、終端情報が見つからずスタック底までスタックを探索してしまうことを防ぐことができ、オーバーヘッド低減のためにより効率のよい終端情報を得ることができる。
【００１９】
又、第１の特徴に係るソフトウェア動作モデル化装置の終端情報記録部は、終端より下位に出現するスタックフレーム情報と、スタックフレーム情報の出現位置とを記録し、終端情報が決定するごとに、スタックフレーム情報の出現位置を変化させることにより、採用する終端情報を決定してもよい。
【００２０】
このソフトウェア動作モデル化装置によると、終端より下位のスタックフレーム情報も終端情報として採用することができるため、終端情報が見つからずコールスタック底までスタックを探索してしまうことを防ぐことができ、オーバーヘッド低減のためにより効率のよい終端情報を得ることができる。又、終端情報が決定されるごとにパラメータを変更することにより、不必要な終端情報の決定を防ぐことができる。
【００２１】
又、第１の特徴に係るソフトウェア動作モデル化装置の終端情報記録部は、スタックフレーム情報が終端より下位の同位置に連続して出現する期間を記録し、連続して出現する期間を用いて採用する終端情報を決定してもよい。
【００２２】
このソフトウェア動作モデル化装置によると、終端に限らず、終端より下位における有効な終端情報を設定することができる。
【００２３】
又、第１の特徴に係るソフトウェア動作モデル化装置の終端情報記録部は、取得した終端情報と同値の情報が、コールスタックの終端より上位に出現する回数を記録し、上位に出現する回数を用いて、採用する終端情報を決定してもよい。
【００２４】
このソフトウェア動作モデル化装置によると、誤った位置で終端情報を発見してしまう誤検出を減少させることができるため、検知精度の向上につながる。
【００２５】
又、第１の特徴に係るソフトウェア動作モデル化装置の終端情報記録部は、スタックフレーム情報ごとに、コールスタックの終端より下位に出現する回数と、終端より上位に出現する回数を記録し、下位に出現する回数及び上位に出現する回数を用いて、採用する終端情報を決定してもよい。
【００２６】
このソフトウェア動作モデル化装置によると、終端より下位のスタックフレーム情報も終端情報として採用することができるため、終端情報が見つからずスタック底までスタックを探索してしまうことを防ぐことができ、オーバーヘッド低減のためにより効率のよい終端情報を得ることができる。又、誤った位置で終端情報を発見してしまう誤検出を減少させることができるため、検知精度の向上につながる。
【００２７】
又、第１の特徴に係るソフトウェア動作モデル化装置の終端情報記録部は、採用する終端情報を決定した後、その終端情報が終端より上位に出現する回数と出現する位置と終端より下位に出現する回数と出現する位置とを記録し、上位に出現する回数と出現する位置と終端より下位に出現する回数と出現する位置により、再度採用する終端情報を最適化してもよい。
【００２８】
このソフトウェア動作モデル化装置によると、終端より極端に下位まで探索することを防ぐことができ、より効率のよいオーバーヘッド低減ができる。又、終端より上位でスタック探索を中断してしまうことが少なくなり、誤った位置で終端情報を発見してしまう誤検出を減少させることができるため、精度の向上につながる。
【００２９】
本発明の第２の特徴は、（ａ）ソフトウェアの実行環境において、ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれたスタックフレームを識別するスタックフレーム情報を、スタックに積まれた順がわかるように取得し、特定のイベント発生順に記録するスタック情報記録ステップと、（ｂ）iを自然数とし、記録されたi-1番目のスタック情報とi番目のスタック情報とを、コールスタック底から順に比較して行き、スタックフレーム情報と出現位置が一致している部分を一致部分、異なるスタックフレーム情報を検知してから以降の部分を不一致部分とし、一致部分と不一致部分との境界である終端をつくるスタックフレーム情報である終端情報と、終端情報が出現した位置とを記録し、位置を用いて採用する終端情報を決定する終端情報記録ステップと、（ｃ）記録した終端情報を用いて、スタックフレーム情報のスタック上位から終端情報が検知されるまでの情報をお互い連結させた情報をスタック差分情報として生成するスタック差分生成ステップと、（ｄ）スタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成ステップとを含むソフトウェア動作モデル化方法であることを要旨とする。
【００３０】
第２の特徴に係るソフトウェア動作モデル化方法によると、採用する終端情報を、終端情報として出現する位置を考慮して決定することにより、より多くのスタック探索を省略することができる終端情報を決定することができ、攻撃を正確に検知し、効率的にソフトウェア動作監視における時間及び空間オーバーヘッドを削減することができる。
【発明の効果】
【００３１】
本発明によると、攻撃を正確に検知し、ソフトウェア動作監視における時間及び空間オーバーヘッドを削減するソフトウェア動作モデル化装置及びソフトウェア動作モデル化方法を提供することができる。
【発明を実施するための最良の形態】
【００３２】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。
【００３３】
（ソフトウェア動作モデル化装置）
本実施形態に係るソフトウェア動作モデル化装置100は、図１に示すように、監視対象プロセス10、監視対象プロセスが利用するメモリ空間20、任意でしきい値30を用いて、監視対象プロセス10の正常な動作を表すモデル情報50と、終端情報40を生成し、出力する。ここで、「監視対象プロセス10」とは、ソフトウェアの動作を監視すべきソフトウェアの実行形態をいう。当該監視対象プロセス10の監視指示は、ユーザによって外部から与えられてもよく、ソフトウェア配信者がソフトウェアに付与したメタ情報によって与えられてもよい。
【００３４】
ソフトウェア動作モデル化装置100は、システムコール情報取得部110と、スタック情報記録部120と、スタック差分情報生成部130と、モデル生成部140と、終端情報記録部150とを備える。
【００３５】
システムコール情報取得部110は、監視対象プロセス10が発行するシステムコール15を検知し、その時点からスタック情報記録部120がスタック情報を記録するまで、監視対象プロセス10を待ち状態にさせる。更に、システムコール15からシステムコール番号などを含むシステムコール情報115を取得する。システムコール情報取得部110は、デバッグツールで実現できるが、例えば、Linuxに実装されているptraceを利用することで、容易に実現できる。
【００３６】
尚、本実施形態に係るソフトウェア動作モデル化装置100では、特定のイベントとして監視対象プロセス10が発行するシステムコールとしているが、本発明はそれのみにこだわる必要はない。システムコール以外の特定のイベントとは、たとえば、jmp命令などがあげられる。たとえば、Linuxに実装されているptraceを利用し、1ステップ実行を行うことで、インストラクションを取得することが可能なので、ソフトウェア動作モデル化装置がjmp命令を検知できる。
【００３７】
スタック情報記録部120は、システムコール情報取得部110がシステムコールを検知した時点でのコールスタックの状況25を、監視対象プロセスが利用するメモリ空間20から取得する。ここで、「コールスタックの状況」とは、スタックフレームの積まれた状態をいう。コールスタックの状況から、スタックフレームを識別する情報を取得する。ここで、「スタックフレームを識別する情報」とは、例えば、復帰アドレスやカナリなどがあげられる。カナリは、バッファーオーバーフロー脆弱性をついたスタックスマッシング攻撃を防止するために用いられる、スタックフレームごとに挿入される値のことである。カナリが、スタックフレームが生成された時点と比較して異なる値を示した場合、スタックフレームがスタックスマッシング攻撃によって破壊されたとして検知することができる。このカナリは、攻撃者が推定できると意味を成さないので、乱数を利用することが多いが、このカナリに、スタックフレームを識別できる情報を含めることも可能である。そのようにカナリを設計することで、カナリを取得すれば、スタックフレームを識別することができる。
【００３８】
本実施形態では、復帰アドレスを用いてスタックフレームを識別するとして詳しく説明する。すなわち、コールスタックの状況から復帰アドレスのみを抽出して、スタック情報として出力する。抽出の仕方はいろいろあるが、x86やARMなどのコールスタックでは、復帰アドレスはスタックフレームの最上位（底部の逆）に存在しているので、例えば、レジスタに保持されたスタックポインタとベースポインタを利用して、ベースポインタの直下の値を取得することで実現できる。スタック情報は、スタック情報記録部120によってシステムコールが発行されたタイミングで、時系列順に記録される。
【００３９】
終端情報記録部150は、スタック情報記録部120によって記録されたi-1番目のスタック情報と、i番目のスタック情報とを底から順に比較し、位置と復帰アドレスが一致している部分を一致部分、異なる復帰アドレスを検知してから以降の部分を不一致部分とし、一致部分と不一致部分の境界を作る。この不一致部分の端を「終端」といい、ここに位置する復帰アドレスを「終端情報」という。尚、iは自然数である。
【００４０】
図2は、スタック情報、一致部分、不一致部分、スタック差分情報、終端情報の例を示している。図2(a)に示すように、i-1番目のスタック情報(A)と、i番目のスタック情報(B)とを比較すると、一致部分が図2（b）に示すように、不一致部分が図2（c）に示すようになる。一致部分と不一致部分を分かつ復帰アドレスは“x”であるので、図2（e）に示すように、終端情報はxとなる。又、モデル化に利用するスタック差分情報とは、図2（d）に示すように、不一致部分を連結した情報である。スタック差分情報を生成する際には、スタック情報から一致部分を除外し、不一致部分を抽出する処理を行う。この場合、スタック情報は底から検証する必要がある。コールスタックの探索においては、スタックポインタがスタック上位（底と逆）に存在しているため、スタック上位から底に向かって探索が行われるため、コールスタックに積まれたすべての復帰アドレスを取得する必要があるといえる。しかし、この終端情報は“除外すべき情報”と“抽出すべき情報”の境界に存在しているので、この終端情報を事前にリストアップしておき、コールスタックの探索時に利用することで、すべての復帰アドレスを取得することなく、コールスタック途中で中断することができる。
【００４１】
終端情報記録部150は、スタック情報記録部120が記録したスタック情報125Aから、任意でしきい値30を利用して、終端情報40を記録する。終端情報は、記録したスタック情報の中に多く存在するので、そのすべてをリストアップしてもよいが、コールスタックの探索時に有用な情報を抽出してもよい。例えば、スタック情報はシステムコール時に生成されたので、システムコール識別子と終端情報の共起関係を把握し、共起頻度の高い終端情報を記録することがあげられる。
【００４２】
本実施形態では、任意のしきい値以上のパラメータを有する終端情報を抽出する例を詳細に説明する。ここで言うパラメータとは、例えば、ある終端情報の出現するスタック底からの位置を意味する。ここでは、スタック底からの位置をパラメータとして用いた場合について説明する。終端情報はスタック情報取得を簡略化するためのものであるので、出現頻度が高く、又、コールスタック上位に位置するものを終端情報として採用するほうが有利である。そのため、例えば各終端情報について出現位置の総和を計算し、この値が大きいほうから優先的に終端情報として採用することによって、より有効な終端情報を採用することができる。又、単に出現位置の高い値を持つ終端情報から採用してもよい。更に、このパラメータを、連続して出現するというパラメータと共に用い、例えば、連続して上位に出現したものを優先的に採用するという方法も考えられる。
【００４３】
図3（a）は、スタック情報記録部120が記録したスタック情報(A)の例である。X, a,b以下は前後で同じ復帰アドレスが積まれているとすると、それらは“除外すべき情報”であり、X,a,bは終端情報として定義されるべきである。スタック情報の中で、Xは出現頻度の高い復帰アドレスの例である。このような復帰アドレスのパラメータは図3(b)のように大きな値を持つ。又、図3(A)の復帰アドレスaは、スタック上位に出てくる復帰アドレスの例であり、このような復帰アドレスも評価パラメータは図3(b)のように大きな値を持つ。ここで、しきい値をあたえ、しきい値以上の値をもつ復帰アドレスを終端情報として抽出してもよい。図3（b）では、しきい値が25である場合で、Xとaが終端情報(B)として抽出される。
【００４４】
又、本実施形態では、より有用な終端情報を抽出する例を詳細に説明する。終端情報のうち採用されなかった終端情報をもつコールスタックでは、コールスタックを底まで探索してしまう。その場合、十分なオーバーヘッド低減ができないので、終端よりさらに下位にある復帰アドレスも終端情報として定義できるようにする。
【００４５】
例えば、終端より下位に出現する復帰アドレスと、復帰アドレスの出現位置を記録し、この値をパラメータとし、採用する終端情報を決定する。この出現位置とはスタック底からの位置でもよいし、終端からの位置でもよい。又、底からの位置を使用する際には、各復帰アドレスについてそのパラメータの和をとり、大きいものから終端情報として採用してもよい。終端からの位置を使用する際には各復帰アドレスについて、そのパラメータの逆数の和をとり、大きいものから終端情報として採用してもよい。
【００４６】
又、これらのパラメータを、終端情報の決定が行われるごとに変化させ、調節することもできる。例えば、各復帰アドレスの出現位置をコールスタックごとに記録して表を作る。この出現位置とはスタック底からの位置でもよいし、終端からの位置でもよく、終端からの位置を用いる場合には逆数をとってもよいし、終端をゼロとし、それ以下をマイナスの値をとるとしてもよい。同コールスタックに同じ復帰アドレスが出現する場合は上位のもののみ記録する。この表において出現位置の総和を計算し、この値の大きいものを終端情報とする。次にここで選ばれた終端情報より下位に出現する復帰アドレスの出現位置を表から削除し、総和を再計算する。この作業を繰り返すことにより、最適な終端情報の抽出が可能となる。
【００４７】
更に、終端より下位において、定位置に連続して出現する期間が長いものを優先して終端情報としてもよい。連続して出現し、間をおいて再度連続して出現するような場合は、これらの期間を足してもよいし、単独で評価してもよい。
【００４８】
次に、本実施形態において、より正確なスタック差分情報を取得するための終端情報の決定方法を説明する。終端に位置する復帰アドレスは、終端情報として定義されるが、この復帰アドレスがすべて終端に位置するとは限らない。スタックにおいて終端より上位に出現することも考えられ、この場合、終端情報以下は“除外すべき情報”であると定義すると、“抽出すべき情報”まで除外してしまう恐れがある。そのような状況を減少させるための手法を詳しく説明する。
【００４９】
終端情報記録部150は、終端に出現する終端情報を記録し、これらが終端より上位に出現する回数をカウントし、記録する。このカウントが少ないものから順に終端情報として採用する。又、終端に出現する復帰アドレスに限らず、各復帰アドレスについて、終端より下位に出現する回数と上位に出現する回数をカウントし、これらの値を用いて終端情報を決定してもよい。例えば上位に出現するカウント数を上位と下位に出現するカウント数の和で割った値の小さいものから終端情報として採用してもよいし、下位に出現するカウント数を上位と下位に出現するカウント数の和で割った値の大きいものから終端情報として採用してもよい。
【００５０】
上述した、パラメータとして、終端情報がコールスタックの終端より上位に出現するカウント（回数）を用いる方法や、終端より下位に出現するカウント（回数）及び上位に出現するカウント（回数）を用いる方法は、単独で用いてもよいし、終端情報が出現したコールスタック底からの位置、終端より下位に出現する復帰アドレスの出現位置、終端情報が決定するごとに変化させた復帰アドレスの出現位置、復帰アドレスが終端より下位の同位置に連続して出現する期間等のパラメータと合わせて用いてもよい。又、終端情報が出現したコールスタック底からの位置、終端より下位に出現する復帰アドレスの出現位置、終端情報が決定するごとに変化させた復帰アドレスの出現位置、復帰アドレスが終端より下位の同位置に連続して出現する期間等のパラメータを用いて決定された終端情報を、更にカウント（回数）を用いる手法で評価するといった、二段階の評価を用いてもよい。
【００５１】
更に、スタック探索のオーバーヘッドを効率よく低減し、精度の低下を引き起こさないために、決定した終端情報を更に最適化する手法を説明する。
【００５２】
終端情報記録部150は、まずすべてのスタックを探索し、終端の位置を記録すると共に、上述したパラメータ（終端情報が出現したコールスタック底からの位置、終端より下位に出現する復帰アドレスの出現位置、終端情報が決定するごとに変化させた復帰アドレスの出現位置、復帰アドレスが終端より下位の同位置に連続して出現する期間、カウント（回数）など）を用いて終端情報を決定する。次に、終端情報記録部150は、決定した終端情報を用いて、これらを見つけ次第スタック探索を中断し、次のスタックに移るというスタック探索を行う。その際、初めのスタック探索で記録した終端と比較して、どの程度上位もしくは下位でスタック探索を中断してしまったかを、採用された終端情報と共に記録する。この記録した値を用いて、再度終端情報を決定する。決定する方法は、終端より上位で中断する回数が多い終端情報から除外していってもよいし、終端より上位で中断する場合の終端から終端情報までの距離を終端情報ごとに加算し、この値が大きいものから除外してもよい。又、下位でスタック探索を中断した場合、その終端情報を除外し、上述したパラメータを用いる方法で終端情報を再決定してもよい。
【００５３】
ソフトウェア動作モデル化装置100は、終端情報記録部150により得た終端情報40を出力し、更に、終端情報155を用いてスタック差分情報を生成する。
【００５４】
スタック差分情報生成部130は、スタック情報と、終端情報40と、システムコール情報115とを入力として、スタック差分情報135を生成する。スタック差分情報生成部130では、i-1番目のスタック情報とi番目のスタック情報から不一致部分を抽出し、得られた不一致部分を連結させて、スタック差分情報を生成する。
【００５５】
モデル生成部140は、スタック差分情報135から監視対象プロセス10の動作モデルを生成する。例えば、非特許文献１のようにスタック差分情報135のハッシュ値をとる、システムコール識別子とスタック差分情報との相関規則を導出する等である。
【００５６】
（ソフトウェア動作監視装置）
次に、本実施形態に係る、監視対象プロセス10の動作の正常異常判定を行うソフトウェア動作監視装置について、図4を用いて説明する。
【００５７】
本実施形態に係るソフトウェア動作監視装置500は、図4に示すように、監視対象プロセスが利用するメモリ空間20、終端情報40、モデル情報50、ソフトウェア識別子70を利用して、判定結果60を出力する。
【００５８】
ソフトウェア動作監視装置500は、システムコール情報取得部510と、スタック情報取得部520と、終端情報取得部550と、スタック差分情報生成部530と、動作検証部540と、モデル取得部560とを備える。
【００５９】
ソフトウェア動作監視装置500は、ソフトウェアがロードされると、ソフトウェア識別子70とモデル情報50から、監視対象プロセス10の監視に適したモデル565を取得するモデル取得部560を起動させる。
【００６０】
システムコール情報取得部510は、監視対象プロセス10が発行するシステムコール15を検知し、その時点からスタック情報取得部520がスタック情報の取得を終了するまで、監視対象プロセス10を待ち状態にさせる。更に、システムコール15からシステムコール情報を取得する。システムコール情報取得部510はLinuxに実装されているptraceを利用することで、容易に実現できる。
【００６１】
終端情報取得部550は、ソフトウェア識別子70と、終端情報40から、監視対象プロセスに適した終端情報555を取得し、スタック情報取得手部520に伝える。終端情報がシステムコール識別子ごとに記録されている場合、終端情報取得部550にさらにシステムコール情報515Aを入力して、監視対象プロセス10によって発行されたシステムコールごとに終端情報を決定する。
【００６２】
スタック情報取得部520は、監視対象プロセスが利用するメモリ空間20からスタックの状況25を取得し、更に、終端情報555を利用し、スタック情報525を生成する。スタック情報取得部520は、スタックの状況から、スタックフレームを識別する情報を取得する。
【００６３】
本実施形態では、復帰アドレスを用いてスタックフレームを識別するとして詳しく説明する。すなわち、スタック情報取得部520は、スタックの状況25から、復帰アドレスを取得する。更に、スタック情報取得部520は、終端情報555を利用して、スタックフレームを識別する情報（本実施形態では復帰アドレス）の取得を中断する。
【００６４】
図5は、終端情報を利用してスタック情報取得を中断する例を示している。図5（a）は、終端情報取得部550が取得した終端情報(A)の例である。又、図5（b）は、ある時点でのスタックの状況の例である。システムコールが発行され、図5（b）上に示すスタックの状況から、図5(b)下に示すスタックの状況(B)に遷移が起こった場合を考える。尚、スタックの状況には復帰アドレスだけでなく関数に渡される引数などが存在するが、説明を簡単にするために、復帰アドレスのみを示している。図5（b）上に示すスタックの状況から、スタック上位より復帰アドレスを順次取得していく。取得しながら、終端情報と比較をしていくと、終端情報と一致するxを検知する。この時点で、復帰アドレス取得を中断(C)し、記録していた復帰アドレスをスタック情報として出力する（図中のs,r,p,q）。図5（b）下に示すスタックの状況からも同様に、終端情報と一致するxを検知した時点で、復帰アドレス取得を中断し、記録していた復帰アドレスをスタック情報として出力する（図中のh,g,f）。こうして得られたスタック情報は、次ステップであるスタック差分情報生成部530によって結合されスタック差分情報(D)となる（図5(b)右）。
【００６５】
又、図6は、終端情報を利用してスタック情報取得を中断する別の例を示している。図6（a）は、終端情報取得部550が取得した終端情報(A)の例である。図5と異なり、システムコール識別子と対になっている。スタック情報取得部520は、システムコール情報取得部510が取得したシステムコール番号を用いて、システムコールにあわせて終端情報を切り替える。図6（b）は、ある時点でのスタックの状況の例である。システムコールが発行され、図6（b）上に示すスタックの状況から、図6（b）下に示すスタックの状況(B)に遷移が起こった場合を考える。尚、スタックの状況には復帰アドレスだけでなく関数に渡される引数などが存在するが、説明を簡単にするために、復帰アドレスのみを示している。図6（b）上のスタック状況は、システムコール番号4が発行されて得られた情報であることから、終端情報は、xとなる。スタックの上位から順次復帰アドレスを取得し、終端情報と比較し、終端情報xと一致する復帰アドレスを検知した時点で、復帰アドレス取得を中断し、記録していた復帰アドレスをスタック情報として出力する（図中のs,r,p,q）。同様に、図6（b）下のスタック状況の場合、システムコール番号6が発行されて得られた情報であることから、mが終端情報となる。スタックの上位から順次復帰アドレスを取得し、終端情報と比較し、終端情報mと一致する復帰アドレスを検知した時点で、復帰アドレス取得を中断(C)し、記録していた復帰アドレスをスタック情報として出力する（図中のh,g,f,x,y）。こうして得られたスタック情報は、次ステップであるスタック差分情報生成部530によって結合され、スタック差分情報(D)となる。
【００６６】
スタック差分情報生成部530は、スタック情報525と、システムコール情報515Bを入力として、スタック差分情報335を生成する。スタック差分情報生成部530では、i-1番目のスタック情報とi番目のスタック情報から不一致部分を抽出し、得られた不一致部分を連結させて、スタック差分情報を生成する。
【００６７】
動作検証部540は、スタック差分情報生成部520が生成したスタック差分情報535と、モデル取得部560が取得した動作モデル530との乖離を判定し、判定結果60として出力する。
【００６８】
（ソフトウェア動作モデル化方法）
本実施形態に係るソフトウェア動作モデル化方法について、図7を参照して説明する。
【００６９】
まず、システムコール情報取得部110は、監視対象プロセス10が発行するシステムコール15を検知し、その時点からスタック情報記録部120がスタック情報を記録するまで、監視対象プロセス10を待ち状態にさせる。更に、システムコール15からシステムコール番号などを含むシステムコール情報115を取得する（ステップS10）。
【００７０】
次に、スタック情報記録部120は、システムコール情報取得部110がシステムコールを検知した時点でのプロセススタックの状況25を、監視対象プロセスが利用するメモリ空間20から取得し、記録する（ステップS11）。
【００７１】
次に、終端情報記録部150は、スタック情報記録部120が記録したスタック情報125Aから、任意でしきい値30を利用して、終端情報40を記録する（ステップS12）。尚、終端情報記録部150の動作例については、後に詳述する。
【００７２】
次に、スタック差分情報生成部130は、スタック情報125と、終端情報40と、システムコール情報115とを入力として、スタック差分情報135を生成する（ステップS13）。尚、スタック差分情報生成部130の動作例については、後に詳述する。
【００７３】
次に、モデル生成部140は、スタック差分情報135から監視対象プロセス10の動作モデルを生成する（ステップS14）。
【００７４】
次に、ステップS12の動作例について、図8を参照して詳細に説明する。ここでは、コールスタック底から見た位置を各終端情報について加算したものをパラメータとして用いた場合について説明する。
【００７５】
まず、終端情報が記載された終端情報リストを初期化し（ステップS100）、スタック情報取得を開始する。次に一つ前のスタックリストを取得し（ステップS110）、現コールスタックの上位から復帰アドレスを取得していく（ステップS120）。続けて、取得した復帰アドレスを前スタックリストと比較し、終端かどうかを判断する。終端であった場合はその復帰アドレスと、コールスタック底からの位置を終端情報リストに記録する（ステップS130）。終端でなかった場合は何もせず次へ進む。これをコールスタック底まで繰り返し、全てのスタック情報の読み込み終了後、終端情報リストに記録された底からの位置を、各復帰アドレスごとに加算し（ステップS140）、その値の大きい順に並び替える（ステップS150）。
【００７６】
又、ステップS12の別の動作例を図9に示す。
【００７７】
まず、終端情報が記載された終端情報リストを取得し（ステップS200）、終端より上位に位置する終端情報をカウントするcountAおよび終端にある終端情報の数をカウントするcountBを初期化した後（ステップS210）、スタック情報取得を開始する。一つ前のスタックリストを取得し（ステップS220）、現コールスタックの上位から復帰アドレスを取得していく（ステップS230）。続けて、取得した復帰アドレスを前スタックリストと比較し、終端かどうかを判断する。終端であった場合はその終端情報のcountBに1プラスする（ステップS250）。ない場合はその復帰アドレスが終端情報リストにあるかどうかを調べ、ある場合はその終端情報のcountAに1プラスする（ステップS240）。終端情報リストにない場合は何もせず、先のスタックへ進む。スタック情報の読み込みが終了するまでこれを行い、countAの少ない順に並び替える（ステップS260）。この並び替えは、countAとcountBを用いて、例えばcountB/(countA+countB)などの値の順に並び替えてもよい。
【００７８】
次に、ステップS13での終端情報を用いた不一致部分抽出ステップの動作例について、図10を参照して詳細に説明する。
【００７９】
まず、スタック差分情報生成部130は、終端情報を取得する（ステップS300）。次に、スタック情報より復帰アドレスを取得する（ステップS310）。次に、終端情報と復帰アドレスが一致しているか否かを検証し（ステップS320）、一致していた場合は、不一致部分抽出ステップを終了する。不一致の場合は、ステップS320を終端情報が終了するまで続ける。終端情報が終わった場合は、ステップS310で取得した復帰アドレスは不一致部分のアイテムであると判断し、記録する（ステップS330）。ステップS310〜S330をスタック情報が終了するまで続ける。
【００８０】
スタック差分情報生成部130は、こうして得られたi番目の不一致部分と前回得たi-1番目の不一致部分とを結合する。結合のさせ方について例で示す。図5（b）に示すスタック差分情報(D)は、図5（b）の不一致部分を結合する際に、システムコールi番目のスタック情報から得た不一致部分の順序を逆にして結合している。これは非特許文献１に習ってそうしているが、順序を逆にしなくてもよい。というのも、モデルをスタック差分情報上の復帰アドレスとシステムコール識別子との相関規則で生成する場合、順序は意味をなさないからである。スタック差分情報は、システムコール識別子とともに出力され、モデル生成部140に伝えられる。
【００８１】
（ソフトウェア動作監視方法）
次に、本実施形態に係るソフトウェア動作監視方法について、図11を参照して説明する。
【００８２】
まず、システムコール情報取得部510は、監視対象プロセス10が発行するシステムコール15を検知し、その時点からスタック情報取得部520がスタック情報の取得を終了するまで、監視対象プロセス10を待ち状態にさせる。更に、システムコール15からシステムコール情報を取得する（ステップS20）。
【００８３】
次に、終端情報取得部550は、ソフトウェア識別子70と、終端情報40から、監視対象プロセスに適した終端情報555を取得し、スタック情報取得手部520に伝える（ステップS21）。
【００８４】
次に、スタック情報取得部520は、監視対象プロセスが利用するメモリ空間20からスタックの状況25を取得し、更に、終端情報555を利用し、スタック情報525を取得する（ステップS22）。尚、スタック差分情報取得部520の動作例については、後に詳述する。
【００８５】
次に、スタック差分情報生成部530は、スタック情報525と、システムコール情報515Bを入力として、スタック差分情報335を生成する（ステップS23）。
【００８６】
一方、ソフトウェアがロードされると、モデル取得部560は、ソフトウェア識別子70とモデル情報50から、監視対象プロセス10の監視に適したモデル565を取得する（ステップS24）。
【００８７】
次に、動作検証部540は、スタック差分情報生成部520が生成したスタック差分情報535と、モデル取得部560が取得した動作モデル530との乖離を判定し、判定結果60として出力する（ステップS25）。
【００８８】
次に、ステップS22の動作例について、図12を参照して詳細に説明する。
【００８９】
まず、スタック情報取得部520は、終端情報取得部550から終端情報を得る（ステップS500）。次に、スタックの状況25より、順次スタックフレームを取得し（ステップS510）、当該スタックフレームの復帰アドレスを取得する（ステップS520）。
【００９０】
次に、スタック情報取得部520は、終端情報を順次読み込み、ステップS520で取得した復帰アドレスと終端情報とを比較する（ステップS530）。ステップS530は、終端情報が終わるまで、もしくは、復帰アドレスと終端情報との一致が確認されるまで続ける。終端情報が終わるまで一致が確認されなかった場合は、復帰アドレスをスタック情報として記録し（ステップS540）、スタックフレームが終わるまで、ステップS510からステップS540までを繰り返す。ステップS530で一致が確認された場合は、ループを抜け、スタック情報取得処理を終了する。
【００９１】
（作用及び効果）
本実施形態に係るソフトウェア動作モデル化装置は、記録した終端情報を抽出し、終端情報に基づいて、スタック情報からソフトウェアの動作モデルを生成する。
【００９２】
このため、本実施形態に係るソフトウェア動作モデル化装置100によると、監視の際にスタック探索を中断する箇所を本来の終端情報の位置（場合によってはその近傍）に設定するための終端情報をソフトウェア毎に記録することができる。又、監視の際に、終端情報を用いてスタック探索を中断する場合でも利用可能なモデルを生成することができる。
【００９３】
特に、特定のイベント（システムコールなど）との共起関係の強い終端情報を記録することで、監視の際に、特定のイベントごとに特化した終端情報を利用することができる。
【００９４】
又、終端情報記録部120は、終端情報の出現位置を記録し、この値によって採用する終端情報を決定する。このため、より効率よくオーバーヘッドを低減することができる終端情報を採用することができる。
【００９５】
又、スタックフレーム情報は、復帰アドレスである場合、コールスタックを修正することなく、スタックフレームを識別する情報を取得することができる。
【００９６】
又、終端情報記録部120は、終端より下位に出現する復帰アドレスと、復帰アドレスの出現位置とを記録し、復帰アドレスの出現位置を用いて採用する終端情報を決定する。このため、終端より下位の復帰アドレスも終端情報として採用することができるため、終端情報が見つからずコールスタック底までスタックを探索してしまうことを防ぐことができ、オーバーヘッド低減のためにより効率のよい終端情報を得ることができる。
【００９７】
又、終端情報記録部120は、終端より下位に出現する復帰アドレスと、復帰アドレスの出現位置とを記録し、終端情報が決定するごとに、復帰アドレスの出願位置を変化させることにより、採用する終端情報を決定する。このため、終端より下位の復帰アドレスも終端情報として採用することができるため、終端情報が見つからずコールスタック底までスタックを探索してしまうことを防ぐことができ、オーバーヘッド低減のためにより効率のよい終端情報を得ることができる。又、終端情報が決定されるごとにパラメータを変更することにより、不必要な終端情報の決定を防ぐことができる。
【００９８】
又、終端情報記録部120は、復帰アドレスが終端より下位の同位置に連続して出現する期間を記録し、連続して出現する期間を用いて採用する終端情報を決定する。このため、終端に限らず、終端より下位における有効な終端情報を設定することができる。
【００９９】
又、終端情報記録部120は、取得した終端情報と同値の情報が、コールスタックの終端より上位に出現する回数を記録し、上位に出現する回数を用いて、採用する終端情報を決定する。このため、誤った位置で終端情報を発見してしまう誤検出を減少させることができるため、検知精度の向上につながる。
【０１００】
又、終端情報記録部120は、復帰アドレスごとに、コールスタックの終端より下位に出現する回数と、終端より上位に出現する回数を記録し、下位に出現する回数及び上位に出現する回数を用いて、採用する終端情報を決定する。このため、終端より下位の復帰アドレスも終端情報として採用することができるため、終端情報が見つからずコールスタック底までスタックを探索してしまうことを防ぐことができ、オーバーヘッド低減のためにより効率のよい終端情報を得ることができる。又、誤った位置で終端情報を発見してしまう誤検出を減少させることができるため、検知精度の向上につながる。
【０１０１】
又、終端情報記録部120は、採用する終端情報を決定した後、その終端情報が終端より上位に出現する回数と出現する位置と終端より下位に出現する回数と出現する位置とを記録し、上位に出現する回数と出現する位置と終端より下位に出現する回数と出現する位置により、再度終端情報を最適化する。このため、終端より極端に下位まで探索することを防ぐことができ、より効率のよいオーバーヘッド低減ができる。又、終端より上位でスタック探索を中断してしまうことが少なくなり、誤った位置で終端情報を発見してしまう誤検出を減少させることができるため、精度の向上につながる。
【０１０２】
又、本実施形態に係るソフトウェア監視装置500は、スタック検索の際に、終端情報とマッチする復帰アドレスの検知を契機に、スタック探索を中断し、その時点までで得られたスタック情報で動作検証を行う。
【０１０３】
このため、本実施形態に係るソフトウェア監視装置500によると、監視対象ソフトウェアの動作をソフトウェア実行中に監視する際、学習時に得られた終端情報を利用して、スタック探索を中断でき、監視にかかるオーバーヘッドを軽減することができる。
【０１０４】
特に、終端情報取得部550は、事前に取得した特定のイベントの識別子と終端情報の共起頻度の高い終端情報を特定のイベントの識別子とともに記録した情報を、特定のイベントの識別子に基づいて取得することで、スタック探索の中断の確認において，特定のイベントとの共起関係の強い終端情報を用いることができるので、特定のイベントに適した中断を行うことができる。
【０１０５】
又、終端情報取得部550は、出現位置を考慮して終端情報を決定することにより、又、終端より下位の情報も終端情報の候補とすることにより、より効率のよいオーバーヘッド低減が実現できる。又、コールスタックにおいて終端より上位の復帰アドレスを調べることにより、誤った終端情報の使用を防止することができ、精度の低下を防ぐことができる。
【図面の簡単な説明】
【０１０６】
【図１】本実施形態に係るソフトウェア動作モデル化装置の構成ブロック図である。
【図２】本実施形態に係るスタック情報、スタック差分情報及び終端情報の例である。
【図３】本実施形態に係るスタック情報及び終端情報の例である。
【図４】本実施形態に係るソフトウェア動作監視装置の構成ブロック図である。
【図５】本実施形態に係る終端情報を利用してスタック情報取得を中断する例である（その１）。
【図６】本実施形態に係る終端情報を利用してスタック情報取得を中断する例である（その２）。
【図７】本実施形態に係るソフトウェア動作モデル化方法を示すフローチャートである。
【図８】図７のS12の詳細を示すフローチャートである（その１）。
【図９】図７のS12の詳細を示すフローチャートである（その２）。
【図１０】図７のS13の詳細を示すフローチャートである。
【図１１】本実施形態に係るソフトウェア動作監視方法を示すフローチャートである。
【図１２】図１１のステップS22の詳細を示すフローチャートである。
【符号の説明】
【０１０７】
10…監視対象プロセス
15…システムコール
20…メモリ空間
25…スタック状況
30…しきい値
40…終端情報
50…モデル情報
60…判定結果
70…ソフトウェア識別子
100…ソフトウェア動作モデル化装置
110…システムコール情報取得部
115…システムコール情報
120…スタック情報記録部
125A,125B…スタック情報
130…スタック差分情報生成部
135…スタック差分情報
140…モデル生成部
150…終端情報記録部
155…終端情報
335…スタック差分情報
500…ソフトウェア動作監視装置
510…システムコール情報取得部
515A…システムコール情報
515B…システムコール情報
520…スタック差分情報取得部
520…スタック差分情報生成部
520…スタック情報取得手部
520…スタック情報取得部
525…スタック情報
530…スタック差分情報生成部
530…動作モデル
535…スタック差分情報
540…動作検証部
550…終端情報取得部
555…終端情報
560…モデル取得部
565…モデル
【図１】
2007334767.tif 000003
【図２】
2007334767.tif 000004
【図３】
2007334767.tif 000005
【図４】
2007334767.tif 000006
【図５】
2007334767.tif 000007
【図６】
2007334767.tif 000008
【図７】
2007334767.tif 000009
【図８】
2007334767.tif 000010
【図９】
2007334767.tif 000011
【図１０】
2007334767.tif 000012
【図１１】
2007334767.tif 000013
【図１２】
2007334767.tif 000014