(57)【要約】【課題】検知精度を高く保ちつつ、低速なメモリアクセスを伴うコールスタックの状況取得を簡略化することにより、ソフトウェア動作監視におけるオーバーヘッドを低減するソフトウェア動作モデル化装置を提供する。【解決手段】ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部120と、しきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を生成するしきい値生成部150と、しきい値を利用して、スタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部130と、スタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成部140とを備える。【選択図】図１
2007286656.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部と、
iを自然数とし、前記スタック情報取得部によって取得されたi-1番目のスタック情報とi番目のスタック情報との差分情報をしきい値生成用スタック差分情報とし、前記スタック情報の長さ、もしくは、前記しきい値生成用スタック差分情報の長さの分布を含んだしきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を生成するしきい値生成部と、
前記しきい値生成部によって生成されたしきい値を利用して、前記スタック情報取得部によって取得されたスタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部と、
前記スタック差分情報取得部によって取得されたスタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成部と
を備えることを特徴とするソフトウェア動作モデル化装置。
【請求項２】
前記スタック情報取得部は、前記スタック情報として復帰アドレスを取得することを特徴とする請求項１に記載のソフトウェア動作モデル化装置。
【請求項３】
前記しきい値生成部は、監視対象ソフトウェアのセキュリティレベルを更に入力とし、当該セキュリティレベルと前記しきい値生成用スタック差分情報の長さの分布とから、前記しきい値を生成することを特徴とする請求項１又は２に記載のソフトウェア動作モデル化装置。
【請求項４】
前記しきい値生成部は、監視対象ソフトウェアに要求される実行速度を更に入力とし、当該要求速度と前記しきい値生成用スタック差分情報の長さの分布とから、前記しきい値を生成することを特徴とする請求項１又は２に記載のソフトウェア動作モデル化装置。
【請求項５】
ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部と、
iを自然数とし、前記スタック情報取得部によって取得されたi-1番目のスタック情報とi番目のスタック情報とを底から比較し、異なるスタック情報を検知する一つ前のスタック情報を終端情報として取得する終端情報取得部と、
前記終端情報取得部によって取得された終端情報から、モデルの生成に必要なスタック探索間隔を表すステップ値を生成するステップ値生成部と、
前記ステップ値生成部によって生成されたステップ値を利用して、前記スタック情報取得部によって取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部と、
前記スタック差分情報取得部によって取得されたスタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成部と
を備えることを特徴とするソフトウェア動作モデル化装置。
【請求項６】
前記終端情報取得部は、前記スタック情報から、連続してコールスタックに積まれた復帰アドレスを取得し、当該復帰アドレスをループ情報として、前記終端情報とともに取得することを特徴とする請求項５に記載のソフトウェア動作モデル化装置。
【請求項７】
前記ステップ値生成部は、監視対象ソフトウェアのセキュリティレベルを更に入力とし、当該セキュリティレベルと前記終端情報とから、前記ステップ値を生成することを特徴とする請求項５又は６に記載のソフトウェア動作モデル化装置。
【請求項８】
前記ステップ値生成部は、監視対象ソフトウェアに要求される実行速度を更に入力とし、当該要求速度と前記終端情報とから、前記ステップ値を生成することを特徴とする請求項５又は６に記載のソフトウェア動作モデル化装置。
【請求項９】
ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部と、
iを自然数とし、前記スタック情報取得部によって取得されたi-1番目のスタック情報とi番目のスタック情報との差分情報をしきい値生成用スタック差分情報とし、前記スタック情報の長さ、もしくは、前記しきい値生成用スタック差分情報の長さの分布を含んだしきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を生成するしきい値生成部と、
前記スタック情報取得部によって取得されたi-1番目のスタック情報とi番目のスタック情報とを底から比較し、異なるスタック情報を検知する一つ前のスタック情報を終端情報として取得する終端情報取得部と、
前記終端情報取得部によって取得された終端情報から、モデルの生成に必要なスタック探索間隔を表すステップ値を生成するステップ値生成部と、
前記しきい値生成部によって生成されたしきい値と前記ステップ値生成部によって生成されたステップ値それぞれを用いた場合の必要となる復帰アドレス数を比較することにより、どちらの方法を用いたほうが効率がよいかを判断する方式判別部と、
前記方式判別部によって得られた結果に基づいて、前記スタック情報取得部によって取得されたスタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報、あるいは、前記スタック情報取得部によって取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部と、
前記スタック差分情報取得部によって取得されたスタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成部と
を備えることを特徴とするソフトウェア動作モデル化装置。
【請求項１０】
監視対象のソフトウェアが発行した特定のイベントと、当該特定のイベント間で実行された関数コールとの共起関係を示した動作モデルを取得するモデル取得部と、
ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部と、
iを自然数とし、前記スタック情報取得部によって取得されたi-1番目のスタック情報とi番目のスタック情報との差分情報をしきい値生成用スタック差分情報とし、前記スタック情報の長さ、もしくは、前記しきい値生成用スタック差分情報の長さの分布を含んだしきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を利用して、前記スタック情報取得部によって取得されたスタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部と、
前記スタック差分情報取得部によって取得された前記スタック差分情報と、前記モデル取得部によって取得された前記動作モデルとの乖離を判定する動作監視部と
を備えることを特徴とするソフトウェア動作監視装置。
【請求項１１】
監視対象のソフトウェアが発行した特定のイベントと、当該特定のイベント間で実行された関数コールとの共起関係を示した動作モデルを取得するモデル取得部と、
ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部と、
ソフトウェアの実行環境において、当該ソフトウェア実行中に、スタック情報上位から終端情報の有無を探索する終端情報探索部と、
前記終端情報探索部によって探索された終端情報に応じたステップ値を利用して、前記スタック情報取得部によって取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部と、
前記スタック差分情報取得部によって取得された前記スタック差分情報と、前記モデル取得部によって取得された前記動作モデルとの乖離を判定する動作監視部と
を備えることを特徴とするソフトウェア動作監視装置。
【請求項１２】
ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するステップと、
iを自然数とし、前記取得されたi-1番目のスタック情報とi番目のスタック情報との差分情報をしきい値生成用スタック差分情報とし、前記スタック情報の長さ、もしくは、前記しきい値生成用スタック差分情報の長さの分布を含んだしきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を生成するステップと、
前記生成されたしきい値を利用して、前記取得されたスタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報をスタック差分情報として取得するステップと、
前記取得されたスタック差分情報から、当該ソフトウェアの動作モデルを生成するステップと
を含むことを特徴とするソフトウェア動作モデル化方法。
【請求項１３】
ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するステップと、
iを自然数とし、前記取得されたi-1番目のスタック情報とi番目のスタック情報とを底から比較し、異なるスタック情報を検知する一つ前のスタック情報を終端情報として取得するステップと、
前記取得された終端情報から、モデルの生成に必要なスタック探索間隔を表すステップ値を生成するステップと、
前記生成されたステップ値を利用して、前記取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報として取得するステップと、
前記取得されたスタック差分情報から、当該ソフトウェアの動作モデルを生成するステップと
を含むことを特徴とするソフトウェア動作モデル化方法。
【請求項１４】
監視対象のソフトウェアが発行した特定のイベントと、当該特定のイベント間で実行された関数コールとの共起関係を示した動作モデルを取得するステップと、
ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するステップと、
iを自然数とし、前記取得されたi-1番目のスタック情報とi番目のスタック情報との差分情報をしきい値生成用スタック差分情報とし、前記スタック情報の長さ、もしくは、前記しきい値生成用スタック差分情報の長さの分布を含んだしきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を利用して、前記取得されたスタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報をスタック差分情報として取得するステップと、
前記取得された前記スタック差分情報と、前記取得された前記動作モデルとの乖離を判定するステップと
を含むことを特徴とするソフトウェア動作監視方法。
【請求項１５】
監視対象のソフトウェアが発行した特定のイベントと、当該特定のイベント間で実行された関数コールとの共起関係を示した動作モデルを取得するステップと、
ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するステップと、
ソフトウェアの実行環境において、当該ソフトウェア実行中に、スタック情報上位から終端情報の有無を探索するステップと、
前記探索された終端情報から生成された、終端情報に応じたステップ値を利用して、前記取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報として取得するステップと、
前記取得された前記スタック差分情報と、前記取得された前記動作モデルとの乖離を判定するステップと
を含むことを特徴とするソフトウェア動作監視方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法に関する。
【背景技術】
【０００２】
PCやワークステーション、サーバ、ルータ、携帯電話、PDAなど、すべての計算機は外部もしくは内部からの攻撃にさらされている。代表的な攻撃は、計算機上で実行されているソフトウェアの脆弱性を踏み台にしたものである。攻撃者はソフトウェアの脆弱性を利用した悪意のあるコードを計算機に送り込み、実行中のプロセスの制御を奪い、当該プロセスの権限を利用して不正操作をおこなう。
【０００３】
脆弱性を利用した攻撃、特に未知の攻撃を検知するために、プログラムの正常な動作をモデル化し、プログラム実行中にモデルからの乖離の有無を判定する異常検知システムがある。システムコールは、プロセスがカーネルにシステム上重要な処理を依頼する際に行う命令であり、攻撃者は、プロセスが依頼するシステムコールを用いて、システムに任意の行動をさせる。そのため、プログラムの動作を監視する際にシステムコールの正当性を検証することが行われる（例えば、非特許文献１参照。）。
【０００４】
非特許文献１に記載の攻撃検知システムでは、システムコールの正当性を検証するために、コールスタックの状況（コールスタックに積まれた復帰アドレスの列）を利用する。このシステムではまずプログラムを事前に実行し、得られた結果からモデルを学習する。プログラム実行中にシステムコール発生時のコールスタックの状況を取得し、システムコール発生時のプログラムカウンタとともに記録したVirtual Stack Listを生成し、また、現在のVirtual Stack Listと一つ前のVirtual Stack Listとの差分情報、すなわち比較対象のコールスタックの状況のスタック最下位より比較検証を順次行い異なる復帰アドレスを検出してから以降の復帰アドレスの列（Virtual Path）を生成する。生成されたVirtual Stack ListとVirtual Pathからハッシュテーブルを生成し、そのテーブルをプログラムのモデルとして利用する。プログラムを検証する際には、プログラム実行中に、Virtual Stack ListとVirtual Pathを生成し、モデルであるハッシュテーブルとのマッチングを行い、合致していればシステムコール要求に対し許可をし、合致しなければ、異常であると判定する。
【０００５】
LinuxをはじめとするOSにおいては、通常システムコールがWrapper関数を介して発行される。Wrapper関数はコード領域に存在しているため、システムコール発行元の関数は常にコード領域に存在する。また、攻撃として主流であるReturn-to-libc攻撃の場合、攻撃者はlibcへ復帰させて任意のシステムコールを発行する。非特許文献1記載の攻撃検知システムは、コールスタックに積まれた復帰アドレスを用いて検証をしているため、詳細なモデル化を行っているといえる。
【非特許文献１】H.Fengら, “Anomaly Detection Using Call Stack Information”, The proc. of IEEE Symposium on Security and Privacy 2003, pp.62.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
非特許文献１は、プログラムの動作をプログラム実行中に検証することを前提としているが、携帯電話など処理能力の低い計算機において、動作を検証するシステムを搭載するためには、限られた資源での処理の高速化、使用メモリ量の抑制が重要となる。
【０００７】
特に、非特許文献１では、精度を向上させるために、コールスタックの状況をモデルに含めており、検証の際にシステムコール発行のタイミングでコールスタックの状況を都度取得する必要がある。コールスタックの状況を取得するためには、スタックポインタ（SP）、ベースポインタ（BP）を利用してコールスタック内を探索し、復帰アドレスを順次取得する必要があるが、コールスタックはメモリ上に展開されているので、低速なメモリアクセスが頻繁に起き、時間オーバーヘッドが高い。
【０００８】
そこで、本発明は、上記の問題に鑑み、検知精度を高く保ちつつ、低速なメモリアクセスを伴うコールスタックの状況取得を簡略化することにより、ソフトウェア動作監視におけるオーバーヘッドを低減するソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の第1の特徴は、（ａ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部と、（ｂ）iを自然数とし、スタック情報取得部によって取得されたi-1番目のスタック情報とi番目のスタック情報との差分情報をしきい値生成用スタック差分情報とし、スタック情報の長さ、もしくは、しきい値生成用スタック差分情報の長さの分布を含んだしきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を生成するしきい値生成部と、（ｃ）しきい値生成部によって生成されたしきい値を利用して、スタック情報取得部によって取得されたスタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部と、（ｄ）スタック差分情報取得部によって取得されたスタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成部とを備えるソフトウェア動作モデル化装置であることを要旨とする。ここで、「コールスタックに積まれた順に基づいて」とは、スタックに積まれた逆順も含むものとする。
【００１０】
第1の特徴に係るソフトウェア動作モデル化装置において、例えば、スタック情報取得部は、スタック情報として復帰アドレスを取得する。
【００１１】
第1の特徴に係るソフトウェア動作モデル化装置によると、ソフトウェア実行において、i-1番目のスタック情報とi番目のスタック情報比較時に等しい情報を持ち、差分とならない復帰アドレスが多数存在することが考えられ、ソフトウェア監視時にこの復帰アドレスをすべて取得することは冗長である。しきい値を設定することにより、この冗長性を低減することを可能とするモデルを生成することができる。
【００１２】
又、第1の特徴に係るソフトウェア動作モデル化装置において、しきい値生成部は、監視対象ソフトウェアのセキュリティレベルを更に入力とし、当該セキュリティレベルとしきい値生成用スタック差分情報の長さの分布とから、しきい値を生成してもよい。
【００１３】
このソフトウェア動作モデル化装置によると、監視時にスタック情報の取得を中断するしきい値を、監視対象ソフトウェアに合わせて設定することが可能となる。又、携帯電話で動作させる場合、端末性能も考慮してしきい値を設定してもよい。
【００１４】
又、第1の特徴に係るソフトウェア動作モデル化装置において、しきい値生成部は、監視対象ソフトウェアに要求される実行速度を更に入力とし、当該要求速度としきい値生成用スタック差分情報の長さの分布とから、しきい値を生成してもよい。
【００１５】
このソフトウェア動作モデル化装置によると、監視時にスタック情報の取得を中断するしきい値を、監視対象ソフトウェアに合わせて設定することが可能となる。又、携帯電話で動作させる場合、端末性能も考慮してしきい値を設定してもよい。
【００１６】
本発明の第2の特徴は、（ａ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部と、（ｂ）iを自然数とし、スタック情報取得部によって取得されたi-1番目のスタック情報とi番目のスタック情報とを底から比較し、異なるスタック情報を検知する一つ前のスタック情報を終端情報として取得する終端情報取得部と、（ｃ）終端情報取得部によって取得された終端情報から、モデルの生成に必要なスタック探索間隔を表すステップ値を生成するステップ値生成部と、（ｄ）ステップ値生成部によって生成されたステップ値を利用して、スタック情報取得部によって取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部と、（ｅ）スタック差分情報取得部によって取得されたスタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成部とを備えるソフトウェア動作モデル化装置であることを要旨とする。
【００１７】
第2の特徴に係るソフトウェア動作モデル化装置において、例えば、終端情報取得部は、スタック情報から、連続してスタックに積まれた復帰アドレスを取得し、当該復帰アドレスをループ情報として、終端情報とともに取得する。
【００１８】
第2の特徴に係るソフトウェア動作モデル化装置によると、監視対象ソフトウェアにループが存在する場合、スタックリストには同じ復帰アドレスが繰り返されることが考えられる。ステップ値を用いることにより、同じ復帰アドレスを取得する必要がない場合、冗長性を低減することができる。
【００１９】
又、特に、終端情報記録手段は、スタック情報から、連続してコールスタックに積まれた復帰アドレスを取得し、その復帰アドレスをループ情報として、終端情報とともに記録することで、監視の際スタック探索において、ループが起きることを推測するための情報を記録できる。例えば、スタック情報上の復帰アドレスの組み合わせと特定のイベントとの相関規則をソフトウェアの動作モデルとした場合、相関規則では、ひとつのスタック情報における復帰アドレスの出現頻度は意味のない情報とする。この動作モデルを利用してソフトウェアの動作を監視する場合を考える。関数がループによって呼ばれると、スタック情報上に連続した同じ復帰アドレスが現れる。監視の際に、連続した復帰アドレスを逐一確認すると、相関規則との乖離判定をするには意味をなさない情報を逐一確認していることとなり、冗長である。そこで、ループ情報を記録するよう構成すると、モデル化の際にループ情報を記録しておき、監視の際にスタック探索中にループ情報と一致する復帰アドレスを検知した後は、スタック探索の間隔を増加するなど、監視の際の時間効率向上に効果のある情報を記録することができる。
【００２０】
又、第2の特徴に係るソフトウェア動作モデル化装置において、例えば、ステップ値生成部は、過去に出現した終端情報の種類を記録しておき、その出現種類数に応じてステップ値を生成することができる。
【００２１】
又、第2の特徴に係るソフトウェア動作モデル化装置において、ステップ値生成部は、監視対象ソフトウェアのセキュリティレベルを更に入力とし、当該セキュリティレベルと終端情報とから、ステップ値を生成してもよい。
【００２２】
このソフトウェア動作モデル化装置によると、監視時にスタック情報の取得を省略するステップ値を、監視対象ソフトウェアに合わせて設定することが可能となる。又、携帯電話で動作させる場合、端末性能も考慮に入れてステップ値を設定してもよい。
【００２３】
又、第2の特徴に係るソフトウェア動作モデル化装置において、ステップ値生成部は、監視対象ソフトウェアに要求される実行速度を更に入力とし、当該要求速度と終端情報とから、ステップ値を生成してもよい。
【００２４】
このソフトウェア動作モデル化装置によると、監視時にスタック情報取得の間隔を表すステップ値を、監視対象ソフトウェアに合わせて設定することが可能となる。又、携帯電話で動作させる場合、端末性能も考慮に入れてステップ値を設定してもよい。
【００２５】
本発明の第3の特徴は、（ａ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部と、（ｂ）iを自然数とし、スタック情報取得部によって取得されたi-1番目のスタック情報とi番目のスタック情報との差分情報をしきい値生成用スタック差分情報とし、スタック情報の長さ、もしくは、しきい値生成用スタック差分情報の長さの分布を含んだしきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を生成するしきい値生成部と、（ｃ）スタック情報取得部によって取得されたi-1番目のスタック情報とi番目のスタック情報とを底から比較し、異なるスタック情報を検知する一つ前のスタック情報を終端情報として取得する終端情報取得部と、（ｄ）終端情報取得部によって取得された終端情報から、モデルの生成に必要なスタック探索間隔を表すステップ値を生成するステップ値生成部と、（ｅ）しきい値生成部によって生成されたしきい値とステップ値生成部によって生成されたステップ値それぞれを用いた場合の必要となる復帰アドレス数を比較することにより、どちらの方法を用いたほうが効率がよいかを判断する方式判別部と、（ｆ）方式判別部によって得られた結果に基づいて、スタック情報取得部によって取得されたスタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報、あるいは、スタック情報取得部によって取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部と、（ｇ）スタック差分情報取得部によって取得されたスタック差分情報から、当該ソフトウェアの動作モデルを生成するモデル生成部とを備えるソフトウェア動作モデル化装置であることを要旨とする。
【００２６】
第3の特徴に係るソフトウェア動作モデル化装置によると、算出されたしきい値が大きくなり冗長性を低減できない場合、もしくは復帰アドレスの繰り返しが少ないためステップしても冗長性を低減できない場合、もう一方の方法を採用することによって補完しあうことができる。
【００２７】
本発明の第4の特徴は、（ａ）監視対象のソフトウェアが発行した特定のイベントと、当該特定のイベント間で実行された関数コールとの共起関係を示した動作モデルを取得するモデル取得部と、（ｂ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部と、（ｃ）iを自然数とし、スタック情報取得部によって取得されたi-1番目のスタック情報とi番目のスタック情報との差分情報をしきい値生成用スタック差分情報とし、スタック情報の長さ、もしくは、しきい値生成用スタック差分情報の長さの分布を含んだしきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を利用して、スタック情報取得部によって取得されたスタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部と、（ｄ）スタック差分情報取得部によって取得されたスタック差分情報と、モデル取得部によって取得された動作モデルとの乖離を判定する動作監視部とを備えるソフトウェア動作監視装置であることを要旨とする。
【００２８】
第4の特徴に係るソフトウェア動作監視装置によると、スタック上位から必要なリストのみを取り出すことができ、プログラム監視中に低速なメモリアクセスを伴うスタック情報取得回数を削減することができる。
【００２９】
本発明の第5の特徴は、（ａ）監視対象のソフトウェアが発行した特定のイベントと、当該特定のイベント間で実行された関数コールとの共起関係を示した動作モデルを取得するモデル取得部と、（ｂ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、スタック情報上位から終端情報の有無を探索する終端情報探索部と、（ｃ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するスタック情報取得部と、（ｄ）終端情報探索部によって探索された終端情報から生成された、モデルの生成に必要なスタック探索間隔を表すステップ値を利用して、スタック情報取得部によって取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報として取得するスタック差分情報取得部と、（ｅ）スタック差分情報取得部によって取得されたスタック差分情報と、モデル取得部によって取得された動作モデルとの乖離を判定する動作監視部とを備えるソフトウェア動作監視装置であることを要旨とする。
【００３０】
第5の特徴に係るソフトウェア動作監視装置によると、コールスタックから必要なリストのみを取り出すことができ、プログラム監視中に低速なメモリアクセスを伴うスタック情報取得回数を削減することができる。
【００３１】
本発明の第6の特徴は、（ａ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するステップと、（ｂ）iを自然数とし、取得されたi-1番目のスタック情報とi番目のスタック情報との差分情報をしきい値生成用スタック差分情報とし、スタック情報の長さ、もしくは、しきい値生成用スタック差分情報の長さの分布を含んだしきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を生成するステップと、（ｃ）生成されたしきい値を利用して、取得されたスタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報をスタック差分情報として取得するステップと、（ｄ）取得されたスタック差分情報から、当該ソフトウェアの動作モデルを生成するステップとを含むソフトウェア動作モデル化方法であることを要旨とする。
【００３２】
又、本発明の第7の特徴は、（ａ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するステップと、（ｂ）iを自然数とし、取得されたi-1番目のスタック情報とi番目のスタック情報とを底から比較し、異なるスタック情報を検知する一つ前のスタック情報を終端情報として取得するステップと、（ｃ）取得された終端情報から、モデルの生成に必要なスタック探索間隔を表すステップ値を生成するステップと、（ｄ）生成されたステップ値を利用して、取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報として取得するステップと、（ｅ）取得されたスタック差分情報から、当該ソフトウェアの動作モデルを生成するステップとを含むソフトウェア動作モデル化方法であることを要旨とする。
【００３３】
又、本発明の第8の特徴は、（ａ）監視対象のソフトウェアが発行した特定のイベントと、当該特定のイベント間で実行された関数コールとの共起関係を示した動作モデルを取得するステップと、（ｂ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するステップと、（ｃ）iを自然数とし、取得されたi-1番目のスタック情報とi番目のスタック情報との差分情報をしきい値生成用スタック差分情報とし、スタック情報の長さ、もしくは、しきい値生成用スタック差分情報の長さの分布を含んだしきい値生成用情報に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を利用して、取得されたスタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報をスタック差分情報として取得するステップと、（ｄ）取得されたスタック差分情報と、取得された動作モデルとの乖離を判定するステップとを含むソフトウェア動作監視方法であることを要旨とする。
【００３４】
本発明の第9の特徴は、（ａ）監視対象のソフトウェアが発行した特定のイベントと、当該特定のイベント間で実行された関数コールとの共起関係を示した動作モデルを取得するステップと、（ｂ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、スタック情報上位から終端情報の有無を探索するステップと、（ｃ）ソフトウェアの実行環境において、当該ソフトウェア実行中に、特定のイベントが発生した時点でのコールスタックに積まれた情報であるスタック情報を、コールスタックに積まれた順に基づいて取得するステップと、（ｄ）探索された終端情報から生成された、モデルの生成に必要なスタック探索間隔を表すステップ値を利用して、取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報として取得するステップと、（ｅ）取得されたスタック差分情報と、取得された動作モデルとの乖離を判定するステップとを含むソフトウェア動作監視方法であることを要旨とする。
【００３５】
第6〜第9の特徴に係るソフトウェア動作モデル化方法あるいはソフトウェア動作監視方法によると、検知精度を高く保ちつつ、低速なメモリアクセスを伴うコールスタックの状況取得を簡略化することにより、ソフトウェア動作監視におけるオーバーヘッドを低減することができる。
【発明の効果】
【００３６】
本発明によると、検知精度を高く保ちつつ、低速なメモリアクセスを伴うコールスタックの状況取得を簡略化することにより、ソフトウェア動作監視におけるオーバーヘッドを低減するソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法を提供することができる。
【発明を実施するための最良の形態】
【００３７】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。
【００３８】
＜第1の実施形態＞
（ソフトウェア動作モデル化装置）
図1は、第1の実施形態に係るソフトウェア動作モデル化装置の構成例を示すブロック図である。
【００３９】
ソフトウェア動作モデル化装置100は、システムコール情報取得部110と、スタック情報取得部120と、スタック差分情報取得部130と、モデル生成部140と、しきい値生成部150と、セキュリティレベル／要求速度取得部190とを備える。ソフトウェア動作モデル化装置100は、監視対象プログラム10の正常動作をモデル化し、モデル50と、しきい値情報40を出力する。ここで、「監視対象プログラム10」とは、ソフトウェアの動作を監視すべきソフトウェアの実行形態をいう。当該監視対象プログラム10の監視指示は、ユーザによって外部から与えられてもよく、ソフトウェア配信者がソフトウェアに付与したメタ情報によって与えられてもよい。
【００４０】
システムコール情報取得部110は、監視対象プログラム10が発行するシステムコール15を検知し、その時点からスタック情報取得部120がスタック情報を記録するまで、監視対象プログラム10を待ち状態にさせる。更に、システムコール15からシステムコール番号などを含むシステムコール情報115を取得する。システムコール情報取得部110は、デバッグツールで実現できるが、例えば、Linuxに実装されているptraceを利用することで、容易に実現できる。
【００４１】
なお、第1の実施形態に係るソフトウェア動作モデル化装置100では、特定のイベントとして監視対象プロセス10が発行するシステムコールとしているが、本特許はそれのみにこだわる必要はない。システムコール以外の特定のイベントとは、たとえば、jmp命令などがあげられる。たとえば、Linuxに実装されているptraceを利用し、1ステップ実行を行うことで、インストラクションを取得することが可能なので、ソフトウェア動作モデル化装置がjmp命令を検知できる。
【００４２】
スタック情報取得部120は、システムコール情報取得部110がシステムコールを検知した時点でのコールスタックの状況（スタック状況25）を、監視対象プロセスが利用するメモリ空間20から取得し、システムコールを検知した順に記録する。ここで、「スタック状況」とは、スタックフレームの積まれた状態をいう。スタック情報取得部120は、スタック状況25から、スタック情報125をコールスタックに積まれた順に基づいて取得する。ここで、「スタック情報」とは、特定のイベントが発生した時点でのコールスタックに積まれた情報であり、例えば、システムコールが発生した時の、プロセスコールスタックに関数コールで積まれた復帰アドレスの集合やカナリが挙げられる。
【００４３】
カナリは、バッファーオーバーフロー脆弱性をついたスタックスマッシング攻撃を防止するために用いられる、スタックフレームごとに挿入される値のことである。カナリが、スタックフレームが生成された時点と比較して異なる値を示した場合、スタックフレームがスタックスマッシング攻撃によって破壊されたとして検知することができる。このカナリは、攻撃者が推定できると意味を成さないので、乱数を利用することが多いが、このカナリに、スタックフレームを識別できる情報を含めることも可能である。そのようにカナリを設計することで、カナリを取得すれば、スタックフレームを識別することができる。
【００４４】
第1の実施形態では、復帰アドレスを用いてスタックフレームを識別するとして詳しく説明する。例えば、デバッグツール（Linuxのptraceなど）を用いることにより、ソフトウェアをシステムコール発生ごとに停止させることが出来、かつその時点でのレジスタの値をみることができる。例えば、スタックポインタやスタックベースポインタが格納されるレジスタの値を見れば、それぞれが指し示すアドレスを取得することが出来る。スタックベースポインタの直後のアドレスには、復帰アドレスが積まれているため、その値をピックアップすることで、スタック情報125を得ることができる。
【００４５】
図2は、スタック状況25からスタック情報125を取得する際の概念図である。尚、図2に示したコールスタック例では、スタック下位方向へ積まれていくものとする。状態i-1から状態iに移る際、システムコールCiが発行される。この時点でのスタック情報Siを取得し、Siの最下位にシステムコール発行時のプログラムカウンタ値Piを追加する。スタック情報取得部120は、システムコールCiを識別する識別子と、スタック情報Siを、例えば上述の仕組みで取得する。
【００４６】
又、スタック情報取得部120は、iを自然数とし、i-1番目のスタック情報とi番目のスタック情報との差分情報を、しきい値生成用スタック差分情報として取得する。そして、スタック情報取得部120は、スタック情報125の長さもしくはしきい値生成用スタック差分情報の長さの分布をしきい値生成用情報145として、しきい値生成部150に出力する。
【００４７】
セキュリティレベル／要求速度取得部190は、予め定義されたアクセス制御ポリシー30を参照し、監視対象プログラム10のセキュリティレベル、もしくは要求される実行速度を取得する。そして、セキュリティレベル／要求速度取得部190は、セキュリティレベル250もしくは要求速度を、しきい値生成部150に出力する。
【００４８】
しきい値生成部150は、スタック情報取得部120から取得したしきい値生成用情報145に基づいて、モデル生成に必要なスタック情報の長さを決定するしきい値を生成する。しきい値生成用情報145とは、スタック情報の長さもしくはしきい値生成用スタック差分情報の長さの分布である。
【００４９】
又、しきい値生成部150は、セキュリティレベル／要求速度取得部190から取得したセキュリティレベル250と、しきい値生成用スタック差分情報の長さの分布から、しきい値を生成してもよい。
【００５０】
更に、しきい値生成部150は、セキュリティレベル／要求速度取得部190から取得した要求速度と、しきい値生成用スタック差分情報の長さの分布から、しきい値を生成してもよい。
【００５１】
スタック差分情報取得部130は、システムコール情報115と、スタック情報125と、しきい値生成部150が生成したしきい値15とを入力として、スタック情報125のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報を、スタック差分情報135として取得する。即ち、スタック差分情報135とは、現在受け取ったスタック情報125と、それ以前に受け取ったスタック情報125との差分を表す情報である。
【００５２】
図3は、しきい値155を用いてスタック差分情報135を生成する際の概念を示す図である。しきい値155を用いる場合は、スタック情報Si-1とスタック情報Siの最下位からしきい値分のスタック情報を合わせたものをスタック情報135とする（本例ではしきい値は2）。スタック差分情報Diは、スタック情報Si-1の最下位から「2」まで、スタック情報Siの「3」から最下位までをこの順序で並べたものである。
【００５３】
モデル生成部140は、スタック差分情報取得部130によって生成されたスタック差分情報135から、当該ソフトウェアの動作モデルの生成をする。
【００５４】
図4は、ソフトウェア動作モデル化装置200のハードウェア構成図である。CPU201、主記憶装置であるRAM202、およびROM203、入力デバイス204、HDD205などを含むコンピュータシステムとして構成されている。上述したソフトウェア動作のモデル化の際には、HDD205上に読み込ませたソフトウェアをCPU201の制御の下で動作させる。
【００５５】
（ソフトウェア動作モデル化方法）
次に、第1の実施形態に係るソフトウェア動作モデル化方法について、図5を用いて説明する。
【００５６】
まず、システムコール情報取得部110は、監視対象プログラム10がシステムコール15を発生した際の情報を得て、これをシステムコール情報としてスタック情報取得部120に伝える（ステップS100）。
【００５７】
ここで、システムコールは、スタック情報取得部120が取得する特定のイベントの例であり、システムコール以外にも、jmpやbranch命令、プロセッサ例外時などがあげられる。システムコールは、システム上重要な処理を行うための命令であるため、重要な監視ポイントである。第1の実施形態では、システムコールすべてを特定のイベントとする。
【００５８】
次に、スタック情報取得部120は、監視対象プログラム10が利用するメモリ空間20からスタック状況25を得て、ソフトウェアの特定のイベント発生（例えばシステムコール15）時に、コールスタック情報を取得し、これをしきい値生成部150、スタック差分情報取得部130に伝える（ステップS101）。そして、コールスタック情報を得たしきい値生成部150は、セキュリティレベル、要求速度取得部190より得たレベルに応じてしきい値を生成し、これをしきい値情報40として出力、およびしきい値155をスタック差分情報取得部130へ伝える（ステップS102）。
【００５９】
次に、スタック情報125、しきい値155を得たスタック差分情報取得部130は、しきい値に応じてコールスタックの差分を求め、スタック差分情報135を生成する。そして、スタック差分情報取得部130は、スタック差分情報135をモデル生成部140に伝える（ステップS103）。
【００６０】
次に、モデル生成部140は、モデル50を生成し、出力する（ステップS104）。
【００６１】
次に、図5のステップS101における、スタック情報取得部の動作例について、図6を用いて説明する。
【００６２】
スタック情報取得部120は、監視対象ソフトウェアの終了判定（ステップS200）を経て、ソフトウェアが終了していなければ、ソフトウェアが発行するシステムコールをフックする（ステップS201）。フックするためにptraceなどを用いることが出来る。システムコールをフックすると、スタック情報を読み込み（ステップS202）、スタック情報を生成し（ステップS203）、スタック情報を記録する（ステップS204）。ステップS200でソフトウェアが終了したと判定した場合は、スタック情報取得処理を終了する。
【００６３】
ここで得られたスタック情報の例を図7に示す。この図では使用するスタック情報として復帰アドレスを例にあげる。左側の枠に囲まれた箇所はシステムコール番号であり、発行順に列として記録されている。右側の枠に囲まれた箇所は復帰アドレスであり、システムコール番号と対応している。すなわち、システムコール122番が最初に発行され、この時点でのコールスタックに積まれた復帰アドレスは、コールスタックの下から0x80000001、 0x80000123、 0x80000345の順（すなわち、0x80000345から処理される）である。次に、システムコール4番が発行され、この時点でのスタックに積まれた復帰アドレスは、コールスタックの下から、0x80000001、 0x80000456、 0x80000567である。次に、システムコール4番が発行され、この時点でのコールスタックに積まれた復帰アドレスは、コールスタックの下から、0x80000001、 0x80000321、 0x80000654である。同様に、システムコールが発行されるたびに、復帰アドレスを記録していく。
【００６４】
次に、図5のステップS102における、しきい値生成部150の動作例について、図8を用いて説明する。
【００６５】
しきい値生成部150は、全スタックリストの差分を求め（ステップS300）、その長さの分布を調べて必要なスタックリストの長さを判断する（ステップS301）。その結果と監視対象プログラム10のセキュリティレベル、もしくは要求速度を考慮し、しきい値を生成する（ステップS302）。
【００６６】
（作用及び効果）
第1の実施形態に係るソフトウェア動作モデル化装置及びソフトウェア動作モデル化方法によると、しきい値を利用することにより、スタック下位から必要なリストのみを取り出すことができ、プログラム監視中に低速なメモリアクセスを伴うスタック情報取得回数を削減することを可能とするモデルを生成することができる。
【００６７】
又、第1の実施形態に係るソフトウェア動作モデル化装置100において、例えば、スタック情報取得部120は、スタック情報として復帰アドレスを取得する。
【００６８】
このソフトウェア動作モデル化装置100によると、ソフトウェア実行において、i-1番目のスタック情報とi番目のスタック情報比較時に等しい情報を持ち、差分とならない復帰アドレスが多数存在することが考えられ、ソフトウェア監視時にこの復帰アドレスをすべて取得することは冗長である。しきい値を設定することにより、この冗長性を低減することができる。
【００６９】
又、しきい値生成部150は、監視対象ソフトウェアのセキュリティレベルを更に入力とし、当該セキュリティレベルとしきい値生成用スタック差分情報の長さの分布とから、しきい値を生成してもよい。
【００７０】
このソフトウェア動作モデル化装置100によると、監視時にスタック情報の取得を中断するしきい値を、監視対象ソフトウェアに合わせて設定することが可能となる。又、携帯電話で動作させる場合、端末性能も考慮に入れてしきい値を設定してもよい。
【００７１】
又、しきい値生成部150は、監視対象ソフトウェアに要求される実行速度を更に入力とし、当該要求速度としきい値生成用スタック差分情報の長さの分布とから、しきい値を生成してもよい。
【００７２】
このソフトウェア動作モデル化装置100によると、監視時にスタック情報の取得を中断するしきい値を、監視対象ソフトウェアに合わせて設定することが可能となる。又、携帯電話で動作させる場合、端末性能も考慮に入れてしきい値を設定してもよい。
【００７３】
＜第2の実施形態＞
図9は、第2の実施形態に係る、ソフトウェア動作モデル化装置の構成例を示すブロック図である。
【００７４】
ソフトウェア動作モデル化装置100は、システムコール情報取得部110と、スタック情報取得部120と、スタック差分情報取得部130と、モデル生成部140と、ステップ値生成部160と、終端情報取得部170、セキュリティレベル／要求速度取得部190とを備える。ソフトウェア動作モデル化装置100は、監視対象プログラム10の正常動作をモデル化し、モデル50と、ステップ値情報41、終端情報42を出力する。
【００７５】
システムコール情報取得部110は、第1の実施形態と同様であるので、ここでは説明を省略する。
【００７６】
スタック情報取得部120は、監視対象プロセスが利用するメモリ空間20からコールスタックの状況25と、終端情報555と、スキップ値とを入力とし、スタック情報525を出力する。スタック情報取得部120は、更に、後述するループ情報とスキップ値を利用して、コールスタックの探索をスキップさせる。コールスタックの探索のスキップのさせ方は、例えば、後述する図12に示したフローチャートで実現できる。
【００７７】
終端情報取得部170は、ｉを自然数とし、スタック情報取得部120によって取得されたi-1番目のスタック情報と、i番目のスタック情報とを底から順に比較し、異なる復帰アドレスを検知する前の一つ前の復帰アドレスを終端情報42として取得する。
【００７８】
更に、第2の実施形態においては、各スタック情報の中で、同一の復帰アドレスがコールスタックに連続して積まれていることを検知し、そのような復帰アドレスをループ情報として記録する。この情報は、監視の際スタック探索において、ループが起きることを推測するための情報として利用できる。例えば、スタック情報上の復帰アドレスの組み合わせと特定のイベント（システムコールなど）との相関規則をソフトウェアの動作モデルとした場合、相関規則では、ひとつのスタック情報における復帰アドレスの出現頻度はあまり意味のない情報である。この動作モデルを利用して、ソフトウェア動作を監視する場合を考える。関数がループによって呼ばれると、スタック情報上に連続した同じ復帰アドレスが現れることとなるが、監視の際に、連続した復帰アドレスを逐一確認するとなると、相関規則との乖離判定をするためには意味をなさない情報を逐一確認していることとなり冗長であるといえる。そこで、ループ情報を利用する。ループ情報は、モデル化の際に取得した、ループが実際に起きたことのある復帰アドレスであるので、監視の際にこの情報を利用することで、ループが起きることを推測できる。例えば、監視の際スタック探索において、ループ情報と一致する復帰アドレスを検知した場合、スタック探索の間隔を増加させるなど、監視の際の時間効率向上に効果のある情報を記録することができる。
【００７９】
ステップ値生成部160は、終端情報取得部170によって得られた終端情報42から、モデルの生成に必要なスタック探索間隔を表すステップ値を生成する。
【００８０】
又、ステップ値生成部160は、終端情報42とセキュリティレベル／要求速度取得部190から取得したセキュリティレベル250とから、モデルの生成に必要なスタック探索間隔を表すステップ値を生成してもよい。又、携帯電話で動作させる場合、端末性能も考慮に入れてステップ値を設定してもよい。
【００８１】
更に、ステップ値生成部160は、終端情報42とセキュリティレベル／要求速度取得部190から取得した要求速度とから、モデルの生成に必要なスタック探索間隔を表すステップ値を生成してもよい。又、携帯電話で動作させる場合、端末性能も考慮に入れてステップ値を設定してもよい。
【００８２】
スタック差分情報取得部130は、ステップ値生成部160によって生成されたステップ値を利用して、スタック情報取得部120によって取得されたスタック情報のスタック上位からステップ値に従って得られる情報をお互いつなぎ合わせた情報をスタック差分情報135として取得する。
【００８３】
図10は、ステップ値156を用いてスタック差分情報135を取得する際の概念を示す図である。ステップ値156を用いる場合は、スタック情報Si-1とスタック情報Siの最下位からステップ値分とばしてスタック情報を読み、それらを合わせたものをスタック情報135とする（本例ではステップ値は2）。スタック差分情報Diは、スタック情報Si-1の最下位から「1」を読み、「2」をとばして「3」まで読み、スタック情報Siの「6」を読み、「5」をとばして「4」まで読み、この順序で並べたものである。
【００８４】
このようにして得られたスタック差分情報Diは、システムコールCiが発行されるまでに起こったリターンとコールの順序を推測する情報といえる。ソフトウェア動作監視において、システムコールの発生のみをモデルに加えたものには、偽装攻撃（Mimicry Attack）の脆弱性があるといわれており、その解決のために関数コールやリターンをモデルに加える提案が多数されてきた。関数コールやリターンは、システムコールと比較すると、OSからすれば他のインストラクション（movやjmpなど）と同じレベルの命令であるため、関数コールやリターンを正しく取得するためには、ソフトウェアをステップ実行するしかない。しかし、ステップ実行はソフトウェア実行速度への大きなオーバーヘッドとなり、携帯電話など計算能力が低い計算機では実用的でない。一方、スタック差分情報はシステムコール発生時に取得可能な情報なので、ソフトウェアはシステムコール発生時にとめるよう実行すればよい。これはステップ実行よりもはるかに実行速度へのオーバーヘッドを低減できる。また、すべてのスタック情報を読み込むのではなく、厳選されたもののみを読み込むことにより、低速なメモリアクセスをより削減することができる。
【００８５】
モデル生成部140は、スタック差分情報135から監視対象プログラム10の動作モデルを生成する。例えば、非特許文献１のようにスタック差分情報135のハッシュ値をとる、システムコール識別子とスタック差分情報との相関規則を導出する等である。
【００８６】
（ソフトウェア動作モデル化方法）
第2の実施形態に係るソフトウェア動作モデル化方法は、図5に示す第1の実施形態とおおまかな流れは同様であるが、ステップS102において、しきい値生成処理ではなく、終端情報取得処理及びステップ値生成処理が行われることが大きく異なる。
【００８７】
次に、第2の実施形態係るソフトウェア動作モデル化方法において、終端情報取得部170がループ情報を取得するときの動作例について、図11を用いて説明する。
【００８８】
まず、終端情報取得部170は、ループ情報として出力するために一時格納するためのListと、ひとつ前の復帰アドレスを格納するためのpast復帰アドレスを初期化する（ステップS1000）。そして、スタック情報を順次取得し（ステップS1010）、ループの回数を格納するcountを初期化する（ステップS1020）。次に、スタック情報から、復帰アドレスを順次取得し（ステップS1030）、復帰アドレスがpast復帰アドレスと一致しているかを検証する（ステップS1040）。一致の場合には、countを1加算する（ステップS1050）。不一致の場合には、past復帰アドレスとcountをListに記録して（ステップS1070）、countを0にする（ステップS1080）。一致の場合、不一致の場合ともに、past復帰アドレスに復帰アドレスを代入する（ステップS1060）。尚、ステップS1030からS1060までの処理を、復帰アドレス取得が終了するまで続ける。その後、ステップS1010からステップS1060までの処理を、スタック情報取得が終了するまで続ける。最終的に得られたListをループ情報として出力する。なお、外部からあたえるなどして得たしきい値を利用して、Listからループ回数の少ない復帰アドレスを除外して出力してもよい。
【００８９】
尚、スタック差分情報取得部130の動作において、このループ情報をさらに入力して、スタック情報125をスタック上位から確認して行く際、ループ情報と一致する復帰アドレスを検知した場合、復帰アドレス取得の間隔を増加させながら、行ってもよい。間隔によっては、ループ情報と一致しない復帰アドレスの取得ができない可能性がある。モデル化の際には、ループ情報を使わずにモデルを生成し、監視の際にはループ情報を使って検証するとなると、検知精度が低くなる恐れがある。モデル化の際にループ情報を利用することで、監視とのギャップを埋めることができる。
【００９０】
図12は、スタック差分情報取得部130が、ループ情報を利用して、スタック探索のスキップ動作を行うときの動作例である。
【００９１】
まず、スタック差分情報取得部130は、ループ情報とスキップ値を取得する（ステップS1500）。スキップ値は、ループと推定された箇所での探索間隔であり、事前にソフトウェア動作モデル化装置100に与えるなどして入力する。次に、探索間隔の変数であるsearchとループと推定された箇所でコールスタックに積まれている復帰アドレスを格納するloopを初期化する。Searchの初期値はここでは1としているが、1でなくてもよい。次にsearchに従って、順次スタック情報から復帰アドレスを取得する（ステップS1530）。loopが0でないことを確認し（ステップS1540）、0でない場合は、復帰アドレスがloopと一致しているかを検証する（ステップS1550）。ここで不一致の場合は、searchを1に戻し、loopを0に初期化する（ステップS1560）。一致の場合は、スタック情報が終了するまで、ステップS1530からS1560までの処理を繰り返す。ステップS1540において、loopが0である場合は、ループ情報を順次取得し（ステップS1570）、復帰アドレスとループ情報が一致しているかを検証する（ステップS1580）。ここで、一致の場合は、searchにスキップ値を代入し、loopに復帰アドレスを代入し（ステップS1590）、ループを抜ける。ループ情報の取得が終了するまで、ステップS1570からS1590までの処理を繰り返す。ステップS1530で取得した復帰アドレスは、終端情報であるか否かをさらに検証され、スタック差分情報生成に用いられる。
【００９２】
又、終端情報取得部170は、次のようにも動作する。スタック情報上の復帰アドレスの組み合わせと特定のイベント（システムコールなど）との相関規則をソフトウェアの動作モデルとした場合、相関規則では、ひとつのスタック情報における復帰アドレスの出現頻度はあまり意味のない情報であるので、一度取得した復帰アドレスは再び取得する必要がない。プログラム動作中、得られた終端情報の数と復帰アドレスを記録し、終端情報の数と復帰アドレスの種類数の関係を調べ、終端情報の数に対して復帰アドレスの種類数の増加量が小さいときは過去に取得した復帰アドレスが繰り返されていることが分かるため、ステップ値を大きくする。
【００９３】
図13は、上述した終端情報を利用して、スタック探索のスキップ動作を行うときの動作例である。
【００９４】
まず、終端情報取得部170は、終端情報の数を表すcount、終端情報の種類を表すtype、countとtypeの関係を表すarg1を用い、これらを初期化する（ステップS1100）。監視対象プログラム実行中にスタック情報を取得し（ステップS1101）、取得されたi-1番目(iは2以上の整数)のスタック情報とi番目のスタック情報との差分情報をとり、スタック差分情報とする（ステップS1102）。スタックリストの差分となる一つ前の復帰アドレスを終端情報として記録し（ステップS1103）、countを1増やす（ステップS1104）。得られた終端情報が、過去に取得されたものかを判断し（ステップS1105）、過去に取得されたものと異なる場合、typeを1増やし（ステップS1106）、過去に取得されたものであれば、そのままarg2をtypeをcountで割ることにより計算する（ステップS1107）。このarg2と前コールスタックのargであるarg1とを比較し（ステップS1108）、差が大きかった場合はステップ値を大きくし（ステップS1109）、現コールスタックのarg2をarg1とする（ステップS1110）。この作業をスタック探索が終わるまで繰り返す。
【００９５】
（作用及び効果）
第2の実施形態に係るソフトウェア動作モデル化装置及びソフトウェア動作モデル化方法によると、ステップ値を利用することにより、コールスタックから必要なリストのみを取り出すことができ、プログラム監視中に低速なメモリアクセスを伴うスタック情報取得回数を削減することができる。
【００９６】
又、第2の実施形態に係るソフトウェア動作モデル化装置100において、終端情報取得部170は、スタック情報から、連続してコールスタックに積まれた復帰アドレスを取得し、当該復帰アドレスをループ情報として、終端情報とともに取得する。
【００９７】
このソフトウェア動作モデル化装置100によると、監視対象ソフトウェアにループが存在する場合、スタックリストには同じ復帰アドレスが繰り返されることが考えられる。ステップ値を用いることにより、同じ復帰アドレスを取得する必要がない場合、冗長性を低減することができる。
【００９８】
又、特に、終端情報記録手段は、スタック情報から、連続してコールスタックに積まれた復帰アドレスを取得し、その復帰アドレスをループ情報として、終端情報とともに記録することで、監視の際スタック探索において、ループが起きることを推測するための情報を記録できる。例えば、スタック情報上の復帰アドレスの組み合わせと特定のイベントとの相関規則をソフトウェアの動作モデルとした場合、相関規則では、ひとつのスタック情報における復帰アドレスの出現頻度は意味のない情報とする。この動作モデルを利用してソフトウェアの動作を監視する場合を考える。関数がループによって呼ばれると、スタック情報上に連続した同じ復帰アドレスが現れる。監視の際に、連続した復帰アドレスを逐一確認すると、相関規則との乖離判定をするには意味をなさない情報を逐一確認していることとなり、冗長である。そこで、ループ情報を記録するよう構成すると、モデル化の際にループ情報を記録しておき、監視の際にスタック探索中にループ情報と一致する復帰アドレスを検知した後は、スタック探索の間隔を増加するなど、監視の際の時間効率向上に効果のある情報を記録することができる。
【００９９】
又、ステップ値生成部160は、監視対象ソフトウェアのセキュリティレベルを更に入力とし、当該セキュリティレベルと終端情報とから、ステップ値を生成する。
【０１００】
このソフトウェア動作モデル化装置100によると、監視時にスタック情報の取得を省略するステップ値を、監視対象ソフトウェアに合わせて設定することが可能となる。又、携帯電話で動作させる場合、端末性能も考慮してしきい値を設定してもよい。
【０１０１】
又、ステップ値生成部160は、監視対象ソフトウェアに要求される実行速度を更に入力とし、当該要求速度と終端情報とから、ステップ値を生成してもよい。
【０１０２】
このソフトウェア動作モデル化装置100によると、監視時にスタック情報取得の間隔を表すステップ値を、監視対象ソフトウェアに合わせて設定することが可能となる。又、携帯電話で動作させる場合、端末性能も考慮してしきい値を設定してもよい。
【０１０３】
＜第3の実施形態＞
図14は、第3の実施形態に係る、ソフトウェア動作モデル化装置100の構成例を示すブロック図である。
【０１０４】
ソフトウェア動作モデル化装置100は、システムコール情報取得部110と、スタック情報取得部120と、スタック差分情報取得部130と、モデル生成部140と、しきい値生成部150と、ステップ値生成部160と、終端情報取得部170と、方式判別部180と、セキュリティレベル／要求速度取得部190とを備える。
【０１０５】
システムコール情報取得部110、スタック情報取得部120、モデル生成部140、しきい値生成部150、ステップ値生成部160、終端情報取得部170、セキュリティレベル／要求速度取得部190は、第1及び第2の実施形態と同様であるので、ここでは説明を省略する。
【０１０６】
方式判別部180は、しきい値とステップ値それぞれを用いた場合の必要なる復帰アドレス数を比較することにより、どちらの方法を用いたほうが効率がよいかを判断する。
【０１０７】
スタック差分情報取得部130は、方式判別部180によって得られた結果に基づいて、スタック差分情報を生成する。
【０１０８】
（ソフトウェア動作モデル化方法）
次に、第3の実施形態に係るソフトウェア動作モデル化方法について、図15を用いて説明する。
【０１０９】
まず、ステップ値生成部160は、ステップ値を生成し（ステップS400）、しきい値生成部150は、しきい値を生成する（ステップS401）。ステップ値を用いた場合としきい値を用いた場合の必要となる復帰アドレスの数を調べ、どちらを用いるとよりオーバーヘッドが低減できるかを判断し（ステップS402）、しきい値のほうがよければしきい値を出力し（ステップS403）、ステップ値のほうがよければステップ値を出力する（ステップS404）。
【０１１０】
（作用及び効果）
第3の実施形態に係るソフトウェア動作モデル化装置及びソフトウェア動作モデル化方法によると、算出されたしきい値が大きくなり冗長性を低減できない場合、もしくは復帰アドレスの繰り返しが少ないためステップしても冗長性を低減できない場合、もう一方の方法を採用することによって補完しあうことができる。
【０１１１】
＜第4の実施形態＞
図16は、第4の実施形態に係るソフトウェア動作モデル化装置の構成例を示すブロック図である。
【０１１２】
ソフトウェア動作監視装置500は、システムコール情報取得部510、スタック情報取得部520、スタック差分情報取得部530、モデル検証部540、モデル取得部550とを備える。ソフトウェア動作監視装置500は、監視対象プログラム10の動作を、モデル50を用いて検証し、検証結果90を出力する。
【０１１３】
システムコール情報取得部510は、監視対象プログラム10が発行するシステムコール15を検知し、その時点からスタック情報取得部520がスタック情報の取得を終了するまで、監視対象プログラム10を待ち状態にさせる。更に、システムコール15からシステムコール情報を取得する。システムコール情報取得部510はLinuxに実装されているptraceを利用することで、容易に実現できる。
【０１１４】
スタック情報取得部520は、監視対象プログラム10が利用するメモリ空間20からスタック状況25を得て、スタック情報525を取得し、特定のイベント発生順に記録する。
【０１１５】
スタック差分情報取得部530は、システムコール情報515、スタック情報525、しきい値情報40を入力とし、スタック情報のスタック上位からしきい値分までの情報をお互いつなぎ合わせた情報をスタック差分情報として取得する。
【０１１６】
モデル取得部560は、第1あるいは第3の実施形態に係るソフトウェア動作モデル化装置によって生成された、監視対象のソフトウェアが発行した特定のイベントと、当該特定のイベント間で実行された関数コールとの共起関係を示した動作モデル50を取得する。
【０１１７】
モデル検証部540は、スタック差分情報取得部530によって生成されたスタック差分情報535とモデル取得部560によって取得されたモデル50との乖離を判定し、検証結果90として出力する。
【０１１８】
（ソフトウェア動作監視方法）
次に、第4の実施形態に係るソフトウェア動作監視方法について、図17を用いて説明する。
【０１１９】
まず、モデル取得部560は、ソフトウェア動作モデル化装置によって生成されたモデル50を取得する。（ステップS500）。システムコール情報取得部510は、監視対象プログラム10がシステムコール15を発生した際の情報を得て、これをシステムコール情報としてスタック差分情報取得部530に伝える（ステップS501）。
【０１２０】
スタック情報取得部520は、監視対象プログラム10が利用するメモリ空間20からスタック状況を得て、ソフトウェアの特定のイベント発生時に、スタック情報525を取得し、これをスタック差分情報取得部530に伝える（ステップS502）。スタック情報を得たスタック差分情報取得部530は、ソフトウェア動作モデル化装置から得たしきい値555に応じてスタック差分情報を生成する（ステップS503）。得られたスタック差分情報535とモデル取得部560によって取得されたモデルを比較しソフトウェアの動作を検証する（ステップS504）。
【０１２１】
（作用及び効果）
第4の実施形態に係るソフトウェア動作監視装置及びソフトウェア動作監視方法によると、スタック下位から必要なリストのみを取り出すことができ、プログラム監視中に低速なメモリアクセスを伴うスタック情報取得回数を削減することができる。
【０１２２】
＜第5の実施形態＞
図18は、第5の実施形態に係るソフトウェア動作モデル化装置の構成例を示すブロック図である。
【０１２３】
ソフトウェア動作監視装置500は、システムコール情報取得部510と、スタック情報取得部520と、スタック差分情報取得部530と、モデル検証部540と、モデル取得部550と、終端情報探索部560とを備える。ソフトウェア動作監視装置500は、監視対象プログラム10の動作を、モデル50を用いて検証し、検証結果90を出力する。
【０１２４】
システムコール情報取得部510は、監視対象プログラム10が発行するシステムコール15を検知し、その時点からスタック情報取得部520がスタック情報の取得を終了するまで、監視対象プログラム10を待ち状態にさせる。更に、システムコール15からシステムコール情報を取得する。
【０１２５】
終端情報探索部560は、ソフトウェア実行中に、i-1番目のスタック情報とi番目のスタック情報とを底から比較し、異なるスタック情報を検知する一つ前のスタック情報である終端情報42を探索する。そして、終端情報探索部560は、スタックリストに終端情報が含まれているかどうかを判断し、終端判断545をスタック情報取得部520に出力する。
【０１２６】
スタック情報取得部520は、監視対象プログラム10が利用するメモリ空間20から得たスタック状況25、及び、終端情報探索部560から得た終端判断545を入力とし、スタック情報525を取得し、特定のイベント発生順に記録する。
【０１２７】
スタック差分情報取得部530は、システムコール情報515、スタック情報525、終端情報探索部560によって探索された終端情報から生成された、モデルの生成に必要なスタック探索間隔を表すステップ値情報41を入力として、スタック情報のスタック上位からステップ値に基づいて得た情報をお互いつなぎ合わせた情報をスタック差分情報として生成する。
【０１２８】
モデル取得部560は、第2あるいは第3の実施形態に係るソフトウェア動作モデル化装置によって生成された、監視対象のソフトウェアが発行した特定のイベントと、当該特定のイベント間で実行された関数コールとの共起関係を示した動作モデル50を取得する。
【０１２９】
モデル検証部540は、スタック差分情報取得部530によって生成されたスタック差分情報535とモデル取得部560によって取得されたモデル50との乖離を判定し、検証結果90として出力する。
【０１３０】
（ソフトウェア動作監視方法）
次に、第5の実施形態に係るソフトウェア動作監視方法について、図19を用いて説明する。
【０１３１】
まず、モデル取得部550は、ソフトウェア動作モデル化装置によって生成されたモデルを取得する（ステップS600）。システムコール情報取得部510は、監視対象プログラム10がシステムコール15を発生した際の情報を得て、これをシステムコール情報としてスタック情報取得部520に伝える（ステップS601）。
【０１３２】
スタック情報取得部520は、監視対象プログラム10が利用するメモリ空間20からスタック状況を得て、ソフトウェアの特定のイベント発生時に、コールスタック情報を取得し、これをスタック差分情報取得部530に伝える（ステップS602）。又、スタック情報取得部520は、終端情報探索部560によってスタックに終端情報が含まれていないかを探索した判断結果を取得する（ステップS603）。
【０１３３】
スタック情報を得たスタック差分情報取得部530は、ソフトウェア動作モデル化装置から得たステップ値に応じてスタック差分情報を生成する（ステップS604）。モデル検証部540は、得られたスタック差分情報とモデル取得部によって取得されたモデルを比較し、ソフトウェアを検証する（ステップS605）。
【０１３４】
（作用及び効果）
第5の実施形態に係るソフトウェア動作監視装置及びソフトウェア動作監視方法によると、コールスタックから必要なリストのみを取り出すことができ、プログラム監視中に低速なメモリアクセスを伴うスタック情報取得回数を削減することができる。
【０１３５】
＜その他の実施形態＞
例えば、第1〜第3の実施形態に係るソフトウェア動作モデル化装置は、システムコール情報取得部110、スタック情報取得部120、スタック差分情報取得部130、モデル生成部140、しきい値生成部150を備えると説明したが、それらが二つあるいはそれ以上の装置に分かれていても構わない。その際はそれらのソフトウェア動作モデル化装置間でデータのやりとりが行えるようにバスなどで装置間を接続しているとする。第4及び第5の実施形態に係るソフトウェア動作監視装置に関しても同様である。
【０１３６】
又、本発明に係るソフトウェア動作モデル化装置、あるいはソフトウェア動作監視装置は、PCやワークステーション、サーバ、ルータ、携帯電話、PDAなど、外部もしくは内部からの攻撃にさらされる計算機上に配置されてもよい。
【０１３７】
このように、本発明はここでは記載していない様々な実施の形態等を含むことは勿論である。従って、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
【図面の簡単な説明】
【０１３８】
【図１】第1の実施形態に係るソフトウェア動作モデル化装置の構成ブロック図である。
【図２】第1の実施形態に係るスタック情報取得部の動作を示す概念図である。
【図３】第1の実施形態に係るスタック差分情報取得部の動作を示す概念図である。
【図４】第1の実施形態に係るソフトウェア動作モデル化装置のハードウェア構成図である。
【図５】第1の実施形態に係るソフトウェア動作モデル化方法を示すフローチャートである。
【図６】第1の実施形態に係るスタック情報取得方法を示すフローチャートである。
【図７】第1の実施形態に係るスタック情報の例である。
【図８】第1の実施形態に係るしきい値生成方法を示すフローチャートである。
【図９】第2の実施形態に係るソフトウェア動作モデル化装置の構成ブロック図である。
【図１０】第2の実施形態に係るスタック差分情報取得部の動作を示す概念図である。
【図１１】第2の実施形態に係る終端情報取得方法を示すフローチャートである。
【図１２】第2の実施形態に係るスタック探索方法を示すフローチャートである（その１）。
【図１３】第2の実施形態に係るスタック探索方法を示すフローチャートである（その２）。
【図１４】第3の実施形態に係るソフトウェア動作モデル化装置の構成ブロック図である。
【図１５】第3の実施形態に係るソフトウェア動作モデル化方法を示すフローチャートである。
【図１６】第4の実施形態に係るソフトウェア動作監視装置の構成ブロック図である。
【図１７】第4の実施形態に係るソフトウェア動作監視方法を示すフローチャートである。
【図１８】第5の実施形態に係るソフトウェア動作監視装置の構成ブロック図である。
【図１９】第5の実施形態に係るソフトウェア動作監視方法を示すフローチャートである。
【符号の説明】
【０１３９】
10…監視対象プログラム
15…システムコール
20…メモリ空間
25…スタック状況
30…アクセス制御ポリシー
40…しきい値情報
41…ステップ値情報
42…終端情報
50…動作モデル
90…検証結果
100…ソフトウェア動作モデル化装置
110…システムコール情報取得部
115…システムコール情報
120…スタック情報取得部
122…システムコール
125…スタック情報
130…スタック差分情報取得部
135…スタック差分情報
140…モデル生成部
145…しきい値生成用情報
150…しきい値生成部
155…しきい値
156…ステップ値
160…ステップ値生成部
170…終端情報取得部
180…方式判別部
190…セキュリティレベル／要求速度取得部
200…ソフトウェアモデル化装置
201…CPU
202…RAM
203…ROM
204…入力デバイス
205…HDD
250…セキュリティレベル
500…ソフトウェア動作監視装置
510…システムコール情報取得部
515…システムコール情報
520…スタック情報取得部
525…スタック情報
530…スタック差分情報取得部
535…スタック差分情報
540…モデル検証部
545…終端判断
550…モデル取得部
555…終端情報
560…モデル取得部
560…終端情報探索部
【図１】
2007286656.tif 000003
【図２】
2007286656.tif 000004
【図３】
2007286656.tif 000005
【図４】
2007286656.tif 000006
【図５】
2007286656.tif 000007
【図６】
2007286656.tif 000008
【図７】
2007286656.tif 000009
【図８】
2007286656.tif 000010
【図９】
2007286656.tif 000011
【図１０】
2007286656.tif 000012
【図１１】
2007286656.tif 000013
【図１２】
2007286656.tif 000014
【図１３】
2007286656.tif 000015
【図１４】
2007286656.tif 000016
【図１５】
2007286656.tif 000017
【図１６】
2007286656.tif 000018
【図１７】
2007286656.tif 000019
【図１８】
2007286656.tif 000020
【図１９】
2007286656.tif 000021