JP4913353B2 - ソフトウェア動作モデル化装置及びソフトウェア動作監視装置 - Google Patents

ソフトウェア動作モデル化装置及びソフトウェア動作監視装置 Download PDF

Info

Publication number
JP4913353B2
JP4913353B2 JP2005089891A JP2005089891A JP4913353B2 JP 4913353 B2 JP4913353 B2 JP 4913353B2 JP 2005089891 A JP2005089891 A JP 2005089891A JP 2005089891 A JP2005089891 A JP 2005089891A JP 4913353 B2 JP4913353 B2 JP 4913353B2
Authority
JP
Japan
Prior art keywords
model
software
instruction
storage unit
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2005089891A
Other languages
English (en)
Other versions
JP2006268775A (ja
JP2006268775A5 (ja
Inventor
晃 金野
雄大 中山
敦 竹下
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NTT Docomo Inc
Original Assignee
NTT Docomo Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NTT Docomo Inc filed Critical NTT Docomo Inc
Priority to JP2005089891A priority Critical patent/JP4913353B2/ja
Publication of JP2006268775A publication Critical patent/JP2006268775A/ja
Publication of JP2006268775A5 publication Critical patent/JP2006268775A5/ja
Application granted granted Critical
Publication of JP4913353B2 publication Critical patent/JP4913353B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、ソフトウェア動作モデル化装置及びソフトウェア動作監視装置に関する。
PCやワークステーション、サーバ、ルータ、携帯電話、PDAなど、すべての計算機は外部もしくは内部からの攻撃にさらされている。代表的な攻撃は、計算機上で実行されているソフトウェアの脆弱性を踏み台にしたものである。攻撃者はソフトウェアの脆弱性を利用した悪意のある実行コードを計算機に送り込み、実行中のプロセスの制御を奪い、当該プロセスの権限を利用して不正操作をおこなう。ソフトウェアの脆弱性を利用した攻撃の対策として、実行中ソフトウェアの異常を検知するシステムが開示されている(例えば、非特許文献1及び非特許文献2参照。)。
非特許文献1に記載のシステムは、ソフトウェアのソースコードを予め取得しておき、ソースコードを静的解析することによってソフトウェアの正常な動作、すなわち、正常動作時に発行されるシステムコールの発行パターンを表すモデルを作成し、ソフトウェアの実行系列がこのモデルに受理されるどうかを検査することによって、正常動作からの乖離すなわち異常動作を検知するものである。モデルの生成はコンパイラによって行われ、モデルが決定性有限オートマトンで記述されることがこのシステムの特徴である。ソフトウェアのソースコードには条件分岐や関数呼び出しなど非決定性を生む箇所が多数存在するため、静的解析からは非決定性オートマトンのクラスでしかモデルの生成ができないが、関数ごとに生成されたオートマトンの直列接続および独自システムコールの追加および修正を行うことで非決定性を削減している。又、関数ポインタやlongjmp命令、シグナルは、性質上静的解析によってオートマトンに反映させることが不可能であるとされるが、監視対象ソフトウェアを動作させながら、モデルへ動的に反映させることで対応していることも特徴である。
非特許文献2に記載のシステムも、非特許文献1同様ソフトウェアの正常な動作、すなわち、システムコールの発行パターンを表すモデルを作成するが、ソースコードを利用せず、攻撃から隔離された環境下でソフトウェアを動作させ、そこで得られる入出力などのログを取得しモデルを学習するものである。システムコール、コールスタックの状況、プログラムカウンタを入力系列とし、プログラムカウンタを状態、システムコール、コールスタックの状況を辺とした非決定性有限オートマトンを学習により生成することが特徴である。システムコールのプログラムカウンタは学習時と検証時に変わってしまう可能性がある(例:動的リンクライブラリ利用時)が、システムコールのプログラムカウンタを直近の静的リンク関数のアドレスとすることで、検証時に、学習したオートマトンを利用できるようにしている。
又、正常動作で発行されるインストラクション集合をあらかじめ設定しておき、コンピュータの動作中に取得したインストラクションが、あらかじめ設定してあった正常動作で発行されるインストラクション集合の中に含まれているか否かを検証するコンピュータ作動状況監視装置も開示されている(例えば、特許文献1参照。)。これは、正常動作では発行されるはずのないインストラクションが発行された場合は、異常であると判定するものである。
特開平11−219304号公報 L. Lamら "Automatic Extraction of Accurate Application-Specific Sandboxing Policy", EUROCOM International Symposium on Recent Advances in Intrusion Detection (RAID) 2004, September 2004 D.Gaoら "On Gray-Box Program Tracking for Anomaly Detection", 13th USENIX Security Symposium, August 2004
非特許文献1に記載のシステムでは、ソフトウェアのソースコードを予め取得しておかなければならないが、ソフトウェア提供者はソフトウェアの不正な流用を防ぐためにソースコードを開示しないことが容易に考えられる。ソフトウェア提供者がソースコードを静的に解析し生成したモデルを端末側に送ることも考えられるが、モデルはソースコードとほぼ同等の意味をもつため、ソースコードを開示したこととほぼ同じとなる。そのため、ソフトウェア提供者はモデルの開示さえしないと考えられる。又、このシステムは条件分岐や関数ポインタなど実行コードの制御が移り変わる箇所の検証を考慮しているが、条件分岐がソースコードどおりに動作しているかを検証していない。
又、非特許文献2に記載のシステムでは、システムコールのプログラムカウンタではない値をシステムコールのプログラムカウンタとしている。そのため、攻撃者はプログラムカウンタの値を偽装し、モデルに受理される攻撃コードを生成することが可能である。攻撃者がこの偽装を行うためには、モデルに受理されるプログラムカウンタの値を知る必要がある。そのため、偽装から守るためにプログラムカウンタをランダム化し、プログラムカウンタの値を秘匿化することが考えられるが、完全に秘匿化するためにはソースコードが必要となってしまう。以上により、非特許文献1に記載のシステムと同様の理由で、適用することが難しい。又、モデルがプログラムカウンタを状態とするオートマトンで記述される。オートマトンは過去の検証結果を現在の検証に利用しない場合に効率的なモデルであるが、プログラムカウンタを状態としているため、条件分岐などによって入り線が複数の状態が存在することになり、条件分岐を正しく検証しようとすると、過去の条件分岐の結果を保持する必要があるため、非効率である。
更に、非特許文献1、非特許文献2に記載のシステムはともに、システムコールの発生パターンをモデルとしているが、システムコールの発行は、ソフトウェアの動作の一部をモデル化しているにすぎない。そのため、攻撃者はバッファーオーバーフローなどを用いて、モデルに受理されるようにプログラムカウンタやリターンアドレスを偽装し、システムコールの発行を行い、かつ悪意ある実行コードを実行することが可能であった(偽装攻撃)。
又、特許文献1に記載のコンピュータ作動状況監視装置は、システムコールよりも詳細なデータであるインストラクションを利用した監視を行っているが、インストラクションの時系列を考慮していないため、正常動作中に発行されるインストラクションのみを用いて攻撃コードを記述することが容易にできてしまう。したがって、攻撃を確実に検知できるとはいえない。
又、実際のソフトウェアの動作から発行されるシステムコールやインストラクションからモデルを学習する、非特許文献2、特許文献1に記載の技術は、監視対象ソフトウェアの動作すべてを学習の段階で試行しなければならないが、データ領域に格納されたデータを含めて試行することや、すべての動作の組み合わせを試行することは一般的に不可能である。そのため、ソフトウェアの動作検証時に、本来ソフトウェアの正常動作であるが未学習であるため、正常動作ではないと判断せざるを得ない(誤検出)。
そこで、本発明は、上記の課題に鑑み、偽装攻撃を防止するとともに、未学習動作が検知された場合の善悪判断を行うことができるソフトウェア動作モデル化装置及びソフトウェア動作監視装置を提供することを目的とする。
上記目的を達成するため、本発明の第1の特徴は、監視対象ソフトウェアの正常動作をモデル化するソフトウェア動作モデル化装置であって、監視対象ソフトウェアを複数回試行させて、(a)監視対象ソフトウェアが動作中に発行したインストラクションを取得するインストラクション取得部と、(b)取得したインストラクションを試行毎に時系列で蓄積するインストラクション蓄積部と、(c)インストラクション蓄積部に蓄積されたインストラクションの時系列を試行毎に読み込み、インストラクションの時系列から動作モデルを作成するモデル生成部と、(d)モデル生成部が前回の読み込みまでで生成した監視対象ソフトウェアの動作モデルを蓄積するモデル蓄積部とを備え、モデル蓄積部は、(e)モデル生成部が前回の読み込みまでで生成した木構造モデルを蓄積する第1のモデル蓄積部と、(f)モデル生成部が前回の読み込みまでで生成したインストラクション発行の統計量を特徴量とする動作モデルを蓄積する第2のモデル蓄積部とを有し、モデル生成部は、(g)今回読み込んだインストラクションの時系列を学習系列とし、学習系列と第1のモデル蓄積部に蓄積された動作モデルとから木構造モデルを生成する第1のモデル生成部と、(h)学習系列から統計量を導出し、更に、第2のモデル蓄積部に蓄積された動作モデルを、統計量を用いて学習する第2のモデル生成部とを有するソフトウェア動作モデル化装置であることを要旨とする。
第1の特徴に係るソフトウェア動作モデル化装置によると、システムコールよりも詳細なデータであるインストラクションの時系列を利用した監視を行うことができ、偽装攻撃をほぼ不可能にできるモデルを生成できる。かつ、木構造モデルの各点は、プログラムカウンタなど入り線を複数にする情報を含めないため、過去の条件分岐の結果はモデルが保持していることとなる。すなわち、条件分岐を正しく検証することが可能なモデルを生成できる。
又、木構造モデルだけでは未学習動作を異常動作として判定せざるを得ないが、インストラクション発行の統計量を特徴とした動作モデルを、木構造モデル生成と同時に生成することができる。
又、第1の特徴に係るソフトウェア動作モデル化装置において、第2のモデル蓄積部は、モデル生成部が前回の読み込みまでで生成したインストラクションの共起頻度を特徴量とする動作モデルを蓄積し、第2のモデル生成部は、学習系列から統計量を導出し、更に、第2のモデル蓄積部に蓄積された動作モデルを、共起頻度を用いて学習してもよい。
ソフトウェアの脆弱性をつき攻撃を行うためには、脆弱性をつく攻撃コードを注入する必要があるが、この攻撃コードは監視対象プログラムにはそもそも存在しなかった可能性が高く、統計的に正常挙動との乖離が考えられる。一方、本来正常動作であるが未学習である挙動の場合は、正常動作である以上、監視対象プログラムに存在していたルーチンや関数を呼び出すわけであり、統計的に正常挙動と近いものが得られる可能性が高いといえる。
このソフトウェア動作モデル化装置によると、正常状態のインストラクションの共起頻度を把握することができ、ソフトウェアの動作の変化をとらえることのできるモデルを生成することができる。動作の検証をする際、オートマトンや木構造モデルによる検証では未学習の動作を検知したら異常と判断せざるを得なかったが、インストラクションの共起頻度を利用するため、統計的に善悪の判断をすることが可能である。
又、第1の特徴に係るソフトウェア動作モデル化装置において、監視対象ソフトウェアの異常動作が入力された場合、取得したインストラクションから、異常動作によって生じたインストラクションの時系列を分離する負例分離部を更に備え、負例分離部は、取得したインストラクションを、第1のモデル蓄積部に蓄積された動作モデル上でトレースし、動作モデルと異なるインストラクションが現れた時点からのインストラクション時系列を異常動作によって生じたインストラクション列である負例であると判断し、第2のモデル生成部は、負例を用いて、異常動作のモデルを生成してもよい。
統計的なモデルで判別分析を行う際、負例を学習することで、正確な判別を行うことが可能である。しかし、負例を入力するためには、異常状態のソフトウェアの動作から、異常動作によって生じたインストラクションを抽出する必要がある。
このソフトウェア動作モデル化装置によると、正例との差分をとることができ、負例を抽出することができる。
又、第1の特徴に係るソフトウェア動作モデル化装置は、監視対象ソフトウェアを動作させた計算機環境情報を、生成した動作モデルにメタ情報として付与するメタ情報付与部を更に備えてもよい。
インストラクションは計算機環境によって異なる。そのため、ソフトウェアの動作を検証する際には、計算機環境が同一のモデルを選択する、もしくは、検証時の環境にモデル上のインストラクションを変更する必要がある。
このソフトウェア動作モデル化装置によると、動作モデルに計算機環境情報を付与することができ、検証時におけるモデル選択や、インストラクションの変更を可能にする。
本発明の第2の特徴は、監視対象ソフトウェアの動作を監視するソフトウェア動作監視装置であって、(a)監視対象ソフトウェアが動作中に発行したインストラクションを取得するインストラクション取得部と、(b)取得したインストラクションを時系列で蓄積するインストラクション蓄積部と、(c)監視対象ソフトウェアの木構造モデルを蓄積した第1のモデル蓄積部から木構造モデルを取得し、インストラクション取得部がインストラクションを取得する度に、木構造モデル上でトレースすることで、正常動作との乖離を判定する第1の検証部と、(d)インストラクション蓄積部が蓄積したインストラクションの時系列のうち、第1の検証部が乖離と判断した時点からの時系列を検証系列とし、監視対象ソフトウェアのインストラクション発行の統計量を特徴量とした動作モデルを蓄積した第2のモデル蓄積部から動作モデルを取得し、検証系列からの統計量を生成し、動作モデルとの判別分析によって、正常動作との乖離を判定する第2の検証部とを備えるソフトウェア動作監視装置であることを要旨とする。
第2の特徴に係るソフトウェア動作監視装置によると、インストラクションをひとつずつ監視していくことで正常状態を確実に判別できる木構造モデルと、インストラクションの時系列を監視することで未学習動作と異常動作を判別できる統計モデルとを利用することができる。 木構造モデルを利用して監視している間、統計モデルを生成、取得する必要がなくなるため、効率がよい。また、未学習の動作の善悪判断が可能になる。
又、第2の特徴に係るソフトウェア動作監視装置において、第2のモデル蓄積部は、監視対象ソフトウェアが発行したインストラクションの共起頻度を特徴量とする動作モデルを蓄積し、第2のモデル検証部は、検証系列からインストラクションの共起頻度を導出し、動作モデルとの判別分析によって、正常動作との乖離を判定してもよい。
このソフトウェア動作監視装置によると、動作の検証をする際、オートマトンや木構造モデルによる検証では未学習の動作を検知したら異常と判断せざるを得なかったが、インストラクションの共起頻度を利用した善悪判断をすることが可能となる。
又、第2の特徴に係るソフトウェア動作監視装置において、インストラクション蓄積部が蓄積したインストラクションの時系列を学習系列とし、第1のモデル蓄積部に蓄積された木構造モデルと、第2のモデル蓄積部に蓄積されたインストラクション発行の統計量を特徴量とする動作モデルとを、学習系列を利用して学習するモデル学習部を更に備え、モデル学習部は、第2の検証部が、監視対象ソフトウェアの動作が正常であると判定した場合のみ、モデルを学習してもよい。
統計量を利用した動作モデルは、インストラクションの時系列から統計量を計算するコストが発生するため、できる限り利用しないようにしたほうがよい。
このソフトウェア動作監視装置によると、未学習動作を木構造モデルへ反映することができるため、次回の監視が効率よく行える。
又、第2の特徴に係るソフトウェア動作監視装置において、検証系列は、監視対象ソフトウェアが終了するまでに発行されたインストラクションの時系列の部分列の集合であってもよい。又、この部分列は、インストラクションの時系列を監視対象ソフトウェアがシステムコールを発行するタイミングで区切ることで生成されてもよい。
第2の検証部で統計量を計算することになるが、終了までのインストラクションの列を統計量計算の対象とするよりも、サブシーケンスを対象としたほうが、異常検知を早く行うことが可能であり、かつ、シーケンスに攻撃コードが含まれる場合には、統計量を計算するシーケンスのうち攻撃コードが閉める割合が大きくなり、より正常動作との乖離を判定しやすくなる。サブシーケンスの終了を決定するトリガは、あらかじめ与えた定数分のインストラクションが発行される、システムコールが発行される、jmp、call、retなど現在動作しているアドレスから離れたアドレスへ動作を遷移させるインストラクションが発行される、などである。特にシステムコールを利用したものは、システムコールがどのようなインストラクション発行を経て発行されたのかを検査するよいタイミングである。攻撃者がプログラムの脆弱性をついてシステムになんらかの影響を与えるためには、システムコールを発行しなければならないが、システムコールの発行タイミングでサブシーケンスを区切ることで、脆弱性をつく攻撃コードを検知できる可能性が高くなる。
本発明によると、偽装攻撃を防止するとともに、未学習動作が検知された場合の善悪判断を行うことができるソフトウェア動作モデル化装置及びソフトウェア動作監視装置を提供することができる。
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。但し、図面は模式的なものであることに留意すべきである。
<第1の実施の形態>
第1の実施の形態に係るソフトウェア動作モデル化装置100は、図1に示すように、監視対象ソフトウェア10を複数回試行させて、監視対象ソフトウェアの動作を表す動作モデルを生成する。又、第1の実施の形態に係るソフトウェア動作監視装置200は、図2に示すように、ソフトウェア動作モデル化装置100が生成した動作モデルを利用して監視対象ソフトウェア10の動作を監視し、異常動作がないかを検証する。
(ソフトウェア動作モデル化装置)
ソフトウェア動作モデル化装置100は、図1に示すように、監視対象ソフトウェア10が動作中に発行するインストラクションを取得するインストラクション取得部110と、取得したインストラクションの時系列を蓄積するインストラクション蓄積部120と、インストラクション蓄積部120に蓄積されたインストラクション時系列を学習系列とみなし、動作モデルを生成するモデル生成部130と、モデル生成部130によって生成された木構造モデルを蓄積する第1のモデル蓄積部140と、モデル生成部130によって生成された共起頻度モデルを蓄積する第2のモデル蓄積部150とを備える。モデル生成部130は、インストラクション蓄積部120に蓄積されたインストラクション時系列より木構造モデルを生成する第1のモデル生成部131と、共起頻度モデルを生成する第2のモデル生成部132とを有する。
インストラクション取得部110は、LinuxのPTRACEを利用するなどして監視対象ソフトウェアがインストラクションを発行するたびにインストラクションを取得する。
インストラクション蓄積部120は、取得したインストラクションを試行毎に時系列で蓄積する。
第1のモデル生成部131は、動作モデルと学習系列とを時系列で比較し、動作モデルと異なるインストラクションが学習系列上に現れた時点で、動作モデルに新たな辺を追加することで木構造モデルを生成する。
第1のモデル蓄積部140は、第1のモデル生成部131が前回の読み込みまでで生成した木構造モデルを蓄積する。
第2のモデル生成部132は、学習系列から共起頻度などの統計量を導出し、更に、第2のモデル蓄積部に蓄積された動作モデルを、統計量を用いて学習する。
第2のモデル蓄積部150は、第2のモデル生成部132が前回の読み込みまでで生成したインストラクション発行の共起頻度などの統計量を特徴量とする動作モデルを蓄積する。
メタ情報付与部170は、監視対象ソフトウェア10を動作させた計算機環境情報を、生成した動作モデルにメタ情報として付与する。
図3に動作モデルのデータ構造の例を示す。動作モデルのデータ構造は、インストラクションテーブル30、分岐先アドレステーブル40から構成される。インストラクションテーブル30は、インストラクションの識別子を記録するインストラクション名列31と、分岐先アドレステーブルへのポインタを記録する分岐ポインタ列32とから構成され、インストラクションの時系列、すなわち、木構造の辺を表す。分岐先アドレステーブル40は、インストラクションテーブルのアドレスを格納する分岐先アドレス列41の配列であり、分岐前のインストラクションと、分岐先の辺をリンクする。
(ソフトウェア動作モデル化方法)
次に、第1の実施の形態に係るソフトウェア動作モデル化方法について、図4〜7を用いて説明する。図4は、第1のモデル生成部131が、インストラクション蓄積部120に蓄積されたインストラクション時系列より木構造モデルを生成するフローチャートの例である。木構造モデル化には、モデル化関数、モデル化関数に呼ばれ初期モデルを生成する生成関数、モデル化関数に呼ばれ第1のモデル蓄積部140に蓄積された木構造モデルを学習する学習関数が用いられる。
まず、ステップS101において、モデル化関数は、第1のモデル蓄積部140に蓄積された監視対象ソフトウェアの動作モデルを取得する。
次に、ステップS102において、モデル取得に成功したか否か判断し、成功した場合は、ステップS103へ進み、学習関数を呼び出し、失敗した場合は、ステップS104へ進み、生成関数を呼び出す。ステップS103の学習処理と、ステップS104の生成処理は、後に詳述する。
次に、ステップS105において、生成もしくは学習された動作モデルを第1のモデル蓄積部140へ蓄積する。この際、インストラクションを取得した際の環境情報(例えば、インテルx86プロセッサ等のプロセッサ情報。プロセッサが変わればインストラクション名も変わる)をモデルへ付与することによって、次回、モデルを学習する際や、検証時に、適したモデルを選択することができる。環境情報の取得とメタ情報の付与は、メタ情報付与部170が行う。環境情報の取得は、環境情報を格納している箇所、たとえば、Linuxの場合、/proc/cpuinfoにはCPUの情報がおかれているが、/proc/cpuinfoなどを見るなどして取得する。取得した情報はメタ情報としてモデルへ付与される。
次に、図4のステップS104の詳細について、図5を用いて説明する。
ステップS201において、生成関数は、インストラクション蓄積部120より監視対象ソフトウェアのインストラクション時系列を取得する。
次に、ステップS202において、取得に成功したか否かを判断し、取得に失敗した場合、ステップS203へ進み、エラー処理を行い、関数を終了する。一方、成功した場合、ステップS204へ進み、インストラクションを時系列の先頭から順に読み込む。
次に、ステップS205において、インストラクション読み込みが終了した場合、生成関数を終了する。
一方、ステップS205において、インストラクション読み込みが終了していなければ、ステップS206において、インストラクションテーブルを作成し、ステップS207において、インストラクション名をインストラクション名列に、ヌルを分岐ポインタ列へ格納する。そして、ステップS204へ戻り、次のインストラクションを取得する。
次に、図4のステップS103の詳細について、図6を用いて説明する。
まず、ステップS301において、学習関数は、インストラクション蓄積部120より監視対象ソフトウェアのインストラクション時系列を取得する。
ステップS302において、取得に成功したか否か判断し、取得に失敗した場合、ステップS303へ進み、エラー処理を行い、関数を終了する。一方、成功した場合、ステップS304へ進み、インストラクションを時系列の先頭から順に読み込む。
次に、インストラクション読み込みが終了したか否か判断し、終了した場合、生成関数を終了する。終了していなければ、ステップS306へ進み、木をトレースする。木トレースについては、後に詳述する。
次に、ステップS307において、トレースした結果、「読み込んだインストラクションは存在している」と判断すると、次のインストラクションを取得し、「新しい」と判断した場合、ステップS308へ進む。そして、ステップS308において、インストラクションテーブルを生成し、ステップS309において、分岐先アドレステーブルを生成し、新規に生成したインストラクションテーブルのアドレスを分岐先アドレス列に格納する。そして、ステップS310において、インストラクション名をインストラクション名列に、分岐先アドレステーブルのアドレスを分岐ポインタ列へ格納し、ステップS304へ戻り、次のインストラクションを取得する。
次に、図6のステップS306の詳細について、図7を用いて説明する。
まず、ステップS401において、現在トレースしているアドレスを示す現在位置を利用して、インストラクションテーブルの内容を確認する。
次に、ステップS402において、インストラクション名に取得したインストラクションが登録されているかを確認し、登録されていれば(インストラクションが新規でない場合)、ステップS410へ進み、存在していると判断する。そして、ステップS405において、現在位置を次のアドレスに更新し、木トレースを終了する。
一方、ステップS402において、登録されていなければ、分岐ポインタの値を確認し、ヌルであれば、ステップS404へ進み、新規インストラクションであると判断し、ステップS405において、現在位置を次のアドレスに更新し木トレースを終了する。
ステップS403において、ヌルでなければ、ステップS406において、分岐ポインタの値を利用して分岐先アドレステーブルを引き、分岐先アドレスを順に取得する。
次に、ステップS407において、取得が成功したか否か判断し、成功した場合は、ステップS408へ進み、分岐先アドレスが引くインストラクションテーブルの先頭のインストラクション名を確認する。そして、ステップS409において、取得したインストラクションが登録されているかを確認し、登録されていれば(インストラクションが新規でない場合)、ステップS410へ進み、存在していると判断する。そして、ステップS405において、現在位置を次のアドレスに更新し、木トレースを終了する。一方、ステップS409において、登録されていなければ、ステップS406へ戻り、次の分岐先アドレスを取得する。
一方、ステップS407において、取得が失敗した場合、ステップ
S404において、新規インストラクションであると判断し、ステップS405において、現在位置を次のアドレスに更新し、木トレースを終了する。
次に、図8〜10を用いて、モデルが学習される様子を説明する。
図8は、インストラクション蓄積部120に蓄積されたインストラクション時系列である。最左列には通し番号がふられており、1から順に読み込まれ、モデルに変換される。
図9は2番のインストラクション時系列を読み込んで学習が終了した時点のモデルである。時系列上6番目のインストラクションにおいて、1番の時系列ではjmp、2番の時系列ではpopが存在しているため、jmpの分岐ポインタ列には分岐先アドレステーブルへのアドレス(AAAAAAAA)が登録され、分岐先アドレステーブルによって、第2のインストラクションテーブルが引かれるように学習されている。
図10は、3番のインストラクション時系列を読み込んで学習が終了した時点のモデルである。順次インストラクション時系列が読み込まれるが、3番のインストラクション時系列上の19番目のインストラクションにおいて、図8のモデルに登録されていない新たなインストラクションmovが存在しているため、jmpの分岐ポインタ列には分岐アドレステーブルへのアドレス(BBBBBBBB)が登録され、分岐先アドレステーブルによって第3のインストラクションテーブルが引かれるよう学習されている。
次に、第1の実施の形態に係るソフトウェア動作モデル化方法について、図11〜図13を用いて説明する。第2のモデル生成部132は、インストラクション蓄積部120に蓄積されたインストラクションの時系列からN-gramを生成し、各N-gramの出現確率を動作モデルとして生成することを特徴とする。ここで計算される出現確率は、各N-gramの出現頻度を、生成したすべてのN-gramの出現頻度の総和で除算して求めるが、この分母は、複数回の試行により得られたインストラクションの時系列から生成されたN-gramを総合して求めてもよいし、試行ごと求めてもよい。
図11に、第2のモデル生成部132の動作例を表すフローチャートを示す。第2のモデル生成部132は、モデル化関数、生成関数、学習関数からなる。
まず、ステップS501において、モデル化関数は、第2のモデル蓄積部150から監視対象ソフトウェアに対応するモデルを取得する。
そして、ステップS502において、取得に成功した場合は、ステップS503へ進み、取得に失敗した場合は、ステップS504へ進む。ステップS503及びステップS504の詳細は、後に詳述する。
次に、ステップS505において、学習、生成されたモデルを第2のモデル蓄積部150に蓄積する。蓄積の際には、インストラクションを取得した際の環境情報をモデルへ付与することによって、次回モデルを学習する際や、検証時に、適したモデルを選択することができる。
次に、図11のステップS504の詳細について、図12を用いて説明する。
まず、ステップS601において、生成関数では、インストラクション蓄積部120からインストラクション時系列を取得する。ステップS602において、取得に成功した場合、ステップS304へ進み、N-gramを生成する。そして、ステップS305において、各N-gramの出現頻度を計算し、生成を終了する。
一方、ステップS602において、取得失敗した場合、エラー処理後に生成を終了する。
ここで生成されるN-gramは、たとえばひとつのインストラクションを1ワードとした連続Nワードの列であり、たとえば“A New Method of N-gram Statistics for Large Number of n and Automatic Extraction of Words and Phrases from Large Text Data of Japanese”に記載のアルゴリズムを用いるなどして生成される。本実施形態では、ひとつのインストラクションを1ワードとして取り扱うが、複数のインストラクションを1ワードとしてもよく、機能を限定するものではない。
次に、図11のステップS503の詳細について、図13を用いて説明する。
まず、ステップS701において、学習関数では、インストラクション蓄積部110からインストラクション時系列を取得し、取得に成功した場合、ステップS704において、上記の方法を用いるなどしてN-gramを生成し、ステップS705において、モデルの各N-gramの出現頻度の更新および新しいエントリを追加する。
一方、ステップS702において、取得に失敗した場合、エラー処理後に生成を終了する。
図14にN-gramの例を示す。最右に位置する数字が出現頻度である。本実施形態では3-gramを例としているが、Nの数を限定するものではない。
N-gramとは、言語処理の手法の一つで、ストリーム上の連続したN個の文字あるいは単語の列であり、軽量なアルゴリズムで文字や単語の共起関係を把握できる、優れた手法である。ソフトウェアとは、ソースコードとソースコードから呼ばれるライブラリ上のバイナリコードで構成される。すなわち、動作の異なるソフトウェアを生成するためには、おおむねソースコードを変更することになる。又、ソフトウェアには、外部からの実行コードの参入を許し、動的に動作を変更できるものも存在するが、ソフトウェア実行中に発行されるインストラクションは、動作の変更にともない変化する。すなわち、どちらの場合においても、動作が変化すれば正常状態とは異なる共起関係を有するインストラクション時系列を発行する。
正常かつ未学習の動作の場合は、同一のソースコードから発行されるインストラクションであれば、モデルと統計的に近いサンプルが得られる可能性が高い。なぜならば、同一の環境下でコンパイラを通って生成されたインストラクションであるからである。攻撃者の作成する攻撃コードは、アセンブラ(又は機械語)でかかれることが多く、ソフトウェアの被攻撃時には、実行コードが発行するインストラクションとは異なる共起関係を有するインストラクション時系列を発行する可能性が高い。
(ソフトウェア動作監視装置)
ソフトウェア動作監視装置200は、図2に示すように、監視対象ソフトウェア10を入力とし、ソフトウェア動作モデル化装置100によって生成された木構造モデルを蓄積する第1のモデル蓄積部250と、インストラクション発行の統計量(例えばインストラクションの共起頻度)を特徴とした動作モデルを蓄積する第2のモデル蓄積部260と接続する。
又、第1の実施の形態に係るソフトウェア動作監視装置200は、監視対象ソフトウェア10が動作中に発行したインストラクションを取得するインストラクション取得部210と、取得したインストラクションを時系列で蓄積するインストラクション蓄積部220と、インストラクション取得部210がインストラクションを取得するたびに第1のモデル蓄積部250から取得した木構造モデルで監視対象ソフトウェアの発行するインストラクションを検証する第1の検証部230と、インストラクション蓄積部220に蓄積したインストラクション時系列のうち、第1の検証部230が動作の異常を検知してからのインストラクションを検証系列としてとらえ、第2のモデル蓄積部260から取得したインストラクション発行の統計量(例えばインストラクションの共起頻度)を特徴とした動作モデルで監視対象ソフトウェアの発行するインストラクションを検証する第2の検証部240とを備え、第2の検証部240は、第1の検証部230がソフトウェア動作に異常を検知した場合にのみ動作する。
即ち、第1の検証部230は、監視対象ソフトウェアの木構造モデルを蓄積した第1のモデル蓄積部250から木構造モデルを取得し、インストラクション取得部210がインストラクションを取得する度に、木構造モデル上でトレースすることで、正常動作との乖離を判定する。
又、第2の検証部240は、インストラクション蓄積部220が蓄積したインストラクションの時系列のうち、第1の検証部230が乖離と判断した時点からの時系列を検証系列とし、監視対象ソフトウェアのインストラクション発行の共起頻度などの統計量を特徴量とした動作モデルを蓄積した第2のモデル蓄積部260から動作モデルを取得し、検証系列からの統計量を生成し、動作モデルとの判別分析によって、正常動作との乖離を判定する。
モデル学習部270は、インストラクション蓄積部220が蓄積したインストラクションの時系列を学習系列とし、第1のモデル蓄積部250に蓄積された木構造モデルと、第2のモデル蓄積部260に蓄積されたインストラクション発行の統計量を特徴量とする動作モデルとを、学習系列を利用して学習する。そして、モデル学習部270は、第2の検証部240が、監視対象ソフトウェアの動作が正常であると判定した場合のみ、モデルを学習する。
又、検証系列は、監視対象ソフトウェアが終了するまでに発行されたインストラクションの時系列の部分列の集合である。この部分列は、インストラクションの時系列を監視対象ソフトウェアがシステムコールを発行するタイミングで区切ることで生成される。
尚、第1のモデル蓄積部140と第1のモデル蓄積部250は同一のものでもよい。又、第2のモデル蓄積部150と第2のモデル蓄積部260は同一のものでもよい。
(ソフトウェア動作監視方法)
次に、第1の実施の形態に係るソフトウェア動作監視方法について、図15及び図16を用いて説明する。
図15は、第1の検証部230の動作例を示すフローチャートである
まず、ステップS901において、監視対象ソフトウェアの動作モデルを第1のモデル蓄積部250から取得する。このとき、監視対象ソフトウェアの動作環境を取得しておいて、動作モデルに付与されているメタ情報と突合し、動作環境にあわせたモデルを取得するとよい。
次に、ステップS902において、インストラクション蓄積部220に蓄積されたインストラクションを順次取得する。そして、ステップS903において、終了したか否か判断し、終了したならば、ステップS904において、正常と判定して、ステップS908において、判定結果を出力し、監視を終了する。
一方、ステップS903において、終了していなければ、ステップS905において、木トレース(詳細は、図7参照。)を呼び出す。
次に、ステップS906において、判定結果が新規であるか否か判断し、新規である場合は、ステップS907において、異常と判定し、ステップS908において、結果を出力し、監視を終了する。
一方、ステップS906において、判定結果が新規でない場合、即ち、存在であった場合、ステップS902へ戻り、次のインストラクションを取得する。
以下、図8〜図10を用いて、監視対象ソフトウェアが監視される様子を説明する。
第1のモデル蓄積部250に、モデル生成のときに説明した図9記載のモデルが蓄積されているとし、図8記載のインストラクション時系列の1番がインストラクション蓄積部220に蓄積されているとする。
インストラクション時系列の先頭からインストラクションが順次読み込まれ、モデルとの乖離判定を行う。この場合、インストラクション時系列上のすべてのインストラクションが、モデル上に存在している(木トレースの結果が「存在」)ことから、動作検証部は正常である旨の結果を出力する。
次に、第1のモデル蓄積部250に、モデル生成のときに説明した図9記載のモデルが蓄積されているとし、図8記載のインストラクション時系列の3番がインストラクション蓄積部220に蓄積されているとする。インストラクション時系列の先頭からインストラクションが順次読み込まれ、モデルとの乖離判定を行う。この場合、19番目のインストラクションにおいて、新規インストラクションmovが検知され、動作検証部は異常である旨の結果を出力する。
図16は、第2の検証部240の動作例を示すフローチャートである。
まず、ステップS1001において、第2の検証部240は、監視対象ソフトウェアの動作モデルを第2のモデル蓄積部260から取得する。このとき、監視対象ソフトウェアの動作環境を取得しておいて、動作モデルに付与されているメタ情報と突合し、動作環境にあわせたモデルを取得するとよい。
次に、ステップS1002において、インストラクション蓄積部220に蓄積されたインストラクション時系列から 検証系列を取得する。検証系列とは異常判定が起きたインストラクションから終了までのインストラクションの列、あるいはそのサブシーケンスである。第2の検証部240が統計的な判断を行う際、統計量を計算することになるが、終了までのインストラクションの列を統計量計算の対象とするよりも、サブシーケンスを対象としたほうが、異常検知を早く行うことが可能であり、かつ、シーケンスに攻撃コードが含まれる場合には、統計量を計算するシーケンスのうち攻撃コードが閉める割合が大きくなり、より正常動作との乖離を判定しやすくなる。サブシーケンスの終了を決定するトリガは、あらかじめ与えた定数分のインストラクションが発行される、システムコールが発行される、jmp、call、retなど現在動作しているアドレスから離れたアドレスへ動作を遷移させるインストラクションが発行される、などである。特にシステムコールを利用したものは、システムコールがどのようなインストラクション発行を経て発行されたのかを検査するよいタイミングである。攻撃者がプログラムの脆弱性をついてシステムになんらかの影響を与えるためには、システムコールを発行しなければならないが、システムコールの発行タイミングでサブシーケンスを区切ることで、脆弱性をつく攻撃コードを検知できる可能性が高くなる。ただし、本実施例では、サブシーケンスの場合の説明をするが、機能を限定するものではない。
次に、ステップS1003において、インストラクションの時系列を取得し、取得が終了したか否か判断し、取得が終了した場合、ステップS1004において、正常動作であると判定する。そして、ステップS1005において、判定結果を出力して監視を終了する。
一方、ステップS1003において、取得が終了していなければ、ステップS1006において、時系列よりN-gramを生成し、ステップS1007において、各N-gramの出現頻度を計算し、出現確率を導出しておく。
次に、ステップS1008において、取得していた動作モデルと、先ほど生成したN-gramの出現確率を判別分析にかける。判別分析は、適当に閾値を定めることによる線形判別分析を用いるなどして、外れ値を検知する。
ステップS1009において、判別分析の結果、正常であるか否か判断し、正常である場合は、ステップS1002へ戻り、次のインストラクション時系列を取得する。
一方、ステップS1009において、異常であると判定された場合は、ステップS1010において、異常であると判断し、ステップS1011において、異常である旨を出力して、監視を終了する。
(作用及び効果)
第1の実施の形態に係るソフトウェアモデル動作モデル化装置及びソフトウェアモデル化方法によると、木構造モデル化を行うことによって、システムコールよりも詳細なデータであるインストラクションの時系列を利用した監視を行うことができ、偽装攻撃をほぼ不可能にできるモデルを生成できる。かつ、モデルの各状態は、プログラムカウンタなど入り線を複数にする情報を含めないため、過去の条件分岐の結果はモデルが保持していることとなる。すなわち、条件分岐を正しく検証することが可能なモデルを生成できる。
又、学習系列から統計量を導出し、第2のモデル蓄積部150に蓄積された動作モデルを、統計量を用いて学習することによって、正常状態のインストラクションの共起関係を把握することができ、ソフトウェアの動作の変化をとらえることのできるモデルを生成することができる。動作の検証をする際、オートマトンによる検証では未学習の動作を検知したら異常と判断せざるを得なかったが、インストラクションの共起関係を利用するため、統計的に正常と判断することが可能である。
ただし、本実施例では共起頻度を計測する手法としてN-gramをあげているが、アソシエーションルールなど、共起頻度が計測できればよく、これにこだわるものではない。
又、第1の実施の形態に係るソフトウェア動作監視装置及びソフトウェア動作監視方法によると、インストラクションの共起頻度を利用した監視を行うことができ、未学習動作の正常、異常判別を確率的に求めることができる。
又、第1の検証部230のあとに第2の検証部240を配置することで、インストラクションをひとつずつ監視していくことで正常状態を確実に判別できる木構造モデルと、インストラクションの時系列を監視することで未学習動作と異常動作を判別できるN-gramモデルを利用することができる。木構造モデルを利用して監視している間、N-gramの出現頻度を計算する必要がなくなるため、効率がよい。
又、ソフトウェア動作監視装置200は、モデル学習部270をさらに配置し、第2の検証部240の検証により、ソフトウェア動作が正常であると判定された場合に、第2の検証部240で用いた検証系列を、木構造モデルに追加してもよい。N-gramのような統計量を特徴量とする動作モデルは、統計量を計算するコストが発生するため、計算コストを考慮するとできる限り利用しないようにしたほうがよい。上記の構成をとることによって、未学習動作を木構造モデルへ反映することができるため、次回の監視が効率よく行える。
<第2の実施の形態>
判別分析を効率よく行う手法として、負例を与えることが挙げられる。第1の実施の形態では、正例のみを扱っていたが、第2の実施の形態では、負例をともに扱うことについて説明する。
(ソフトウェア動作モデル化装置)
第2の実施の形態に係るソフトウェア動作モデル化装置は、図17に示すように、図1に示すソフトウェア動作モデル化装置に加え、負例分離部160を備える。
負例分離部160は、監視対象ソフトウェアの異常動作(例:被攻撃、バグによる動作)が入力された場合、取得したインストラクションから、異常動作によって生じたインストラクションの時系列を分離する。又、負例分離部160は、取得したインストラクションを、第1のモデル蓄積部140に蓄積された動作モデル上でトレースし、動作モデルと異なるインストラクションが現れた時点からのインストラクション時系列を異常動作によって生じたインストラクション列である負例であると判断する。
第2のモデル生成部132は、負例を用いて、異常動作のモデルを生成する。
インストラクション取得部110、インストラクション蓄積部120、第1のモデル生成部131、第1のモデル蓄積部140、第2のモデル蓄積部150については、第1の実施の形態と同様であるので、ここでは、説明を省略する。
(ソフトウェア動作モデル化方法)
次に、第2の実施の形態に係るソフトウェア動作モデル化方法について、図18を用いて説明する。
まず、ステップS801において、第1のモデル蓄積部140よりモデルを、インストラクション蓄積部110よりインストラクション時系列をそれぞれ取得する。
次に、ステップS802において、取得に成功したか否かを判断し、失敗した場合は、ステップS803へ進み、エラー処理をして終了する。一方、ステップS802において、成功した場合は、ステップS804において、インストラクション時系列からインストラクションを順次読み込む。
次に、ステップS805において、読み込みが終了したか否か判断し、終了した場合は、ステップS806において、エラー処理をして終了する。一方、ステップS805において、読み込みが終了していなければ、木をトレースする(詳細は、図7参照。)。
次に、ステップS808において、木トレースの結果、新規であるか否か判断する。新規である場合は、ステップS809において、現在位置から終了までの時系列をサブシーケンス化し、このサブシーケンスを負例として抽出し、負例分離を終了する。一方、ステップS808において、新規でない場合は、ステップS804へ戻り、次にインストラクションを取得する。
(作用及び効果)
第2の実施の形態に係るソフトウェア動作モデル化装置及びソフトウェア動作モデル化方法によると、負例を分離することで、異常動作時純粋のデータをモデルにすることができるため、判別分析に効果的な判別空間を生成できる。
又、木構造モデルを用いることで、インストラクション発行パターンの変化点を正確に検知することができるので、正確な負例抽出が可能である。
<第3の実施の形態>
第1及び第2の実施の形態では、ソフトウェア動作モデル化装置とソフトウェア動作監視装置を異なる装置として説明したが、これらの装置を一つの装置として構成してもよい。
(ソフトウェア動作モデル化装置)
第3の実施の形態に係るソフトウェア動作モデル化装置100は、監視対象ソフトウェア10の動作モデルを生成、蓄積し、蓄積した動作モデルをもとに動作の監視を行う。
ソフトウェア動作監視装置200は、監視対象ソフトウェア10が動作中に発行するインストラクションを取得するインストラクション取得部210と、取得したインストラクションの時系列を蓄積するインストラクション蓄積部220と、インストラクション蓄積部に蓄積されたインストラクション時系列を学習系列とみなし、動作モデルを生成するモデル生成部130と、モデル生成部130によって生成された動作モデルを蓄積するモデル蓄積部280と、モデル蓄積部280に蓄積された動作モデルを用いて監視対象ソフトウェアの正常動作との乖離を判定する動作監視部290とを備える。
インストラクション取得部210は、LinuxのPTRACEを利用するなどして、監視対象ソフトウェア10がインストラクションを発行するたびにインストラクションを取得する。
モデル生成部130は、インストラクション蓄積部220に蓄積されたインストラクション時系列を学習系列とし、学習系列をもとに木構造モデルを生成する第1のモデル生成部131と、学習系列をもとにインストラクションの共起頻度を計算し、その統計量を特徴量とする動作モデルを生成する第2のモデル生成部132とを備える。
第1のモデル生成部131は、例えば、図4に示すフローチャートで動作し、図3に示す木構造データを出力する。第2のモデル生成部132は、例えば、図11に示すフローチャートで動作し、図14に示すN-gramを出力する。
モデル蓄積部280は、第1のモデル生成部131が生成した木構造モデルを蓄積する第1のモデル蓄積部250と、第2のモデル生成部132が生成したインストラクション発行の統計量(例えば共起頻度)を特徴量とする動作モデルを蓄積する第2のモデル蓄積部260とを備える。
動作監視部290は、インストラクション取得部210がインストラクションを取得するたびに第1のモデル蓄積部250から取得した木構造モデルで監視対象ソフトウェアの発行するインストラクションを検証する第1の検証部230と、インストラクション蓄積部220に蓄積したインストラクション時系列のうち、第1の検証部230が動作の異常を検知してからのインストラクションを検証系列としてとらえ、第2のモデル蓄積部260から取得したインストラクション発行の統計量(例えば、インストラクションの共起頻度)を特徴とした動作モデルで監視対象ソフトウェア10の発行するインストラクションを検証する第2の検証部240とを備え、第2の検証部240は、第1の検証部230がソフトウェア動作に異常を検知した場合にのみ動作する。
第1の検証部230は、例えば、図15に示すフローチャートで動作する。一方、第2の検証部240は、例えば、図16に示すフローチャートで動作する。
(作用及び効果)
第3の実施の形態に係るソフトウェア動作モデル監視装置によると、自らモデル化し、自ら検証する端末を開発することができる。同一の環境でモデル化、検証を行うことができるため、環境情報を伝えるメタ情報を付与する必要がなく、効率がよい。
第1の実施の形態に係るソフトウェア動作モデル化装置の構成ブロック図である。 第1の実施の形態に係るソフトウェア動作監視装置の構成ブロック図である。 第1の実施の形態において用いられる木構造の一例である。 第1の実施の形態に係るソフトウェア動作モデル化方法を示すフローチャートである(その1)。 第1の実施の形態に係るソフトウェア動作モデル化方法を示すフローチャートである(その2)。 第1の実施の形態に係るソフトウェア動作モデル化方法を示すフローチャートである(その3)。 第1の実施の形態に係るソフトウェア動作モデル化方法を示すフローチャートである(その4)。 第1の実施の形態において、蓄積されたインストラクション時系列の一例である。 第1の実施の形態において、動作モデルの一例である(その1)。 第1の実施の形態において、動作モデルの一例である(その2)。 第1の実施の形態に係るソフトウェア動作モデル化方法を示すフローチャートである(その5)。 第1の実施の形態に係るソフトウェア動作モデル化方法を示すフローチャートである(その6)。 第1の実施の形態に係るソフトウェア動作モデル化方法を示すフローチャートである(その7)。 第1の実施の形態において、N-gramの一例である。 第1の実施の形態に係るソフトウェア動作監視方法を示すフローチャートである(その1)。 第1の実施の形態に係るソフトウェア動作監視方法を示すフローチャートである(その2)。 第2の実施の形態に係るソフトウェア動作モデル化装置の構成ブロック図である。 第2の実施の形態に係るソフトウェア動作モデル化方法を示すフローチャートである。 第3の実施の形態に係るソフトウェア動作監視装置の構成ブロック図である。
符号の説明
10…監視対象ソフトウェア
30…インストラクションテーブル
31…インストラクション名列
32…分岐ポインタ列
40…分岐先アドレステーブル
41…分岐先アドレス列
100…ソフトウェア動作モデル化装置
110…インストラクション取得部
110…インストラクション蓄積部
120…インストラクション蓄積部
130…モデル生成部
131…第1のモデル生成部
132…第2のモデル生成部
140…第1のモデル蓄積部
150…第2のモデル蓄積部
160…負例分離部
170…メタ情報付与部
200…ソフトウェア動作監視装置
210…インストラクション取得部
220…インストラクション蓄積部
230…第1の検証部
240…第2の検証部
250…第1のモデル蓄積部
260…第2のモデル蓄積部
270…モデル学習部
280…モデル蓄積部
290…動作監視部

Claims (4)

  1. 監視対象ソフトウェアの正常動作をモデル化するソフトウェア動作モデル化装置と、前記監視対象ソフトウェアの動作を監視するソフトウェア動作監視装置とを含むソフトウェア動作監視システムであって、
    前記ソフトウェア動作モデル化装置は、
    前記監視対象ソフトウェアを複数回試行させて、前記監視対象ソフトウェアが発行したインストラクションを取得するモデル化装置側インストラクション取得部と、
    前記モデル化装置側インストラクション取得部が取得したインストラクションを試行毎に時系列で蓄積するモデル化装置側インストラクション蓄積部と、
    前記監視対象ソフトウェアの分岐命令による分岐フローに基づいて生成した木構造モデルである第1の動作モデルを蓄積するモデル化装置側第1のモデル蓄積部と、
    前記インストラクションの時系列から求めた共起頻度を特徴量とする動作モデルである第2の動作モデルを蓄積するモデル化装置側第2のモデル蓄積部と、
    今回読み込んだインストラクションの時系列を学習系列とし、前記学習系列と前記モデル化装置側第1のモデル蓄積部に蓄積された動作モデルとを時系列で比較し、前記動作モデルと異なるインストラクションが学習系列上に現れた時点で、前記動作モデルに新たな辺を追加することで木構造モデルを生成し、当該木構造モデルを新たな第1の動作モデルとして前記モデル化装置側第1のモデル蓄積部に蓄積する第1のモデル生成部と、
    前記学習系列から導出した共起頻度と、前記モデル化装置側第2のモデル蓄積部に蓄積された前記第2の動作モデルとから新たな共起頻度を導出し、当該共起頻度を特徴量とする動作モデルを生成し、当該動作モデルを新たな第2の動作モデルとして前記モデル化装置側第2のモデル蓄積部に蓄積する第2のモデル生成部と
    を備え、
    前記ソフトウェア動作監視装置は、
    前記監視対象ソフトウェアが動作中に発行したインストラクションを取得する監視装置側インストラクション取得部と、
    前記監視装置側インストラクション取得部が取得したインストラクションを時系列で蓄積する監視装置側インストラクション蓄積部と、
    前記ソフトウェア動作モデル化装置によって生成された前記第1の動作モデルを蓄積する監視装置側第1のモデル蓄積部と、
    前記ソフトウェア動作モデル化装置によって生成された前記第2の動作モデルを蓄積する監視装置側第2のモデル蓄積部と、
    前記監視装置側第1のモデル蓄積部から前記第1の動作モデルを取得し、前記監視装置側インストラクション取得部がインストラクションを取得する度に、前記第1の動作モデルに基づいてトレースし、乖離した場合に異常であると判定する第1の検証部と、
    前記監視装置側インストラクション蓄積部が蓄積したインストラクションの時系列のうち、前記第1の検証部が乖離と判断した時点からの時系列を検証系列とし、前記監視装置側第2のモデル蓄積部から前記第2の動作モデルを取得し、前記検証系列の共起頻度を導出し、前記第2の動作モデルとの判別分析によって、乖離が検出された場合に異常であると判定する第2の検証部と
    を備えることを特徴とするソフトウェア動作監視システム
  2. 前記検証系列は、前記監視対象ソフトウェアが終了するまでに発行されたインストラクションの時系列の部分列の集合であることを特徴とする請求項に記載のソフトウェア動作監視システム
  3. 前記部分列は、前記インストラクションの時系列を前記監視対象ソフトウェアがシステムコールを発行するタイミングで区切ることで生成されることを特徴とする請求項に記載のソフトウェア動作監視システム
  4. 監視対象ソフトウェアの正常動作をモデル化するとともに、前記監視対象ソフトウェアの動作を監視するソフトウェア動作監視システムであって、
    前記監視対象ソフトウェアを複数回試行させて前記監視対象ソフトウェアが発行したインストラクション、及び前記監視対象ソフトウェアが動作中に発行したインストラクションを取得するインストラクション取得部と、
    前記取得したインストラクションを時系列で蓄積するインストラクション蓄積部と、
    前記監視対象ソフトウェアを複数回試行させて前記監視対象ソフトウェアが発行したインストラクションのうち、前記監視対象ソフトウェアの分岐命令による分岐フローに基づいて生成した木構造モデルである第1の動作モデルを蓄積する第1のモデル蓄積部と、
    前記監視対象ソフトウェアを複数回試行させて前記監視対象ソフトウェアが発行した前記インストラクションの時系列から求めた共起頻度を特徴量とする動作モデルである第2の動作モデルを蓄積する第2のモデル蓄積部と、
    今回読み込んだインストラクションの時系列を学習系列とし、前記学習系列と前記第1のモデル蓄積部に蓄積された動作モデルとを時系列で比較し、前記動作モデルと異なるインストラクションが学習系列上に現れた時点で、前記動作モデルに新たな辺を追加することで木構造モデルを生成し、当該木構造モデルを新たな第1の動作モデルとして前記第1のモデル蓄積部に蓄積する第1のモデル生成部と、
    前記学習系列から導出した共起頻度と、前記第2のモデル蓄積部に蓄積された前記第2の動作モデルとから新たな共起頻度を導出し、当該共起頻度を特徴量とする動作モデルを生成し、当該動作モデルを新たな第2の動作モデルとして前記第2のモデル蓄積部に蓄積する第2のモデル生成部と、
    前記第1のモデル蓄積部から前記第1の動作モデルを取得し、前記監視対象ソフトウェアが動作中に発行したインストラクションを前記インストラクション取得部が取得する度に、前記第1の動作モデルに基づいてトレースし、乖離した場合に異常であると判定する第1の検証部と、
    前記監視対象ソフトウェアが動作中に発行したインストラクションであって、前記インストラクション蓄積部が蓄積したインストラクションの時系列のうち、前記第1の検証部が乖離と判断した時点からの時系列を検証系列とし、前記第2のモデル蓄積部から前記第2の動作モデルを取得し、前記検証系列の共起頻度を導出し、前記第2の動作モデルとの判別分析によって、乖離が検出された場合に異常であると判定する第2の検証部と
    を備えることを特徴とするソフトウェア動作監視システム。
JP2005089891A 2005-03-25 2005-03-25 ソフトウェア動作モデル化装置及びソフトウェア動作監視装置 Expired - Fee Related JP4913353B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005089891A JP4913353B2 (ja) 2005-03-25 2005-03-25 ソフトウェア動作モデル化装置及びソフトウェア動作監視装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005089891A JP4913353B2 (ja) 2005-03-25 2005-03-25 ソフトウェア動作モデル化装置及びソフトウェア動作監視装置

Publications (3)

Publication Number Publication Date
JP2006268775A JP2006268775A (ja) 2006-10-05
JP2006268775A5 JP2006268775A5 (ja) 2008-05-08
JP4913353B2 true JP4913353B2 (ja) 2012-04-11

Family

ID=37204621

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005089891A Expired - Fee Related JP4913353B2 (ja) 2005-03-25 2005-03-25 ソフトウェア動作モデル化装置及びソフトウェア動作監視装置

Country Status (1)

Country Link
JP (1) JP4913353B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008129714A (ja) * 2006-11-17 2008-06-05 Univ Of Tsukuba 異常検知方法、異常検知装置及び異常検知用プログラム並びに学習モデル生成方法
JP4962026B2 (ja) * 2007-01-31 2012-06-27 日本電気株式会社 プロセス管理機能をもつユーザレベルプロセス制御装置、その方法及びそのプログラム
JP5081480B2 (ja) * 2007-03-28 2012-11-28 株式会社エヌ・ティ・ティ・ドコモ ソフトウェア挙動モデル化装置、ソフトウェア挙動モデル化方法、ソフトウェア挙動検証装置及びソフトウェア挙動検証方法
US8099718B2 (en) * 2007-11-13 2012-01-17 Intel Corporation Method and system for whitelisting software components
JP5714543B2 (ja) * 2012-08-23 2015-05-07 トヨタ自動車株式会社 自己監視機能を備えたコンピュータ、監視プログラム
JP6892005B2 (ja) * 2018-03-01 2021-06-18 日本電気株式会社 情報処理装置、制御方法、及びプログラム

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004185345A (ja) * 2002-12-04 2004-07-02 Hitachi Ltd デバッグ方法およびシステム

Also Published As

Publication number Publication date
JP2006268775A (ja) 2006-10-05

Similar Documents

Publication Publication Date Title
JP4732874B2 (ja) ソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法
Cheng et al. Orpheus: Enforcing cyber-physical execution semantics to defend against data-oriented attacks
US10242043B2 (en) Software security via control flow integrity checking
US10387655B2 (en) Method, system and product for using a predictive model to predict if inputs reach a vulnerability of a program
Xu et al. A sharper sense of self: Probabilistic reasoning of program behaviors for anomaly detection with context sensitivity
JP5090661B2 (ja) ソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法
EP3566166B1 (en) Management of security vulnerabilities
CN106326737B (zh) 用于检测可在虚拟堆栈机上执行的有害文件的***和方法
WO2008055156A2 (en) Methods, media, and systems for detecting an anomalous sequence of function calls
JP4913353B2 (ja) ソフトウェア動作モデル化装置及びソフトウェア動作監視装置
EP3121749B1 (en) Method and apparatus for ensuring control flow integrity
CN109271789B (zh) 恶意进程检测方法、装置、电子设备及存储介质
CN110851352A (zh) 一种模糊测试***及终端设备
JP5868515B2 (ja) シグニチャ検証装置及びシグニチャ検証方法及びプログラム
CN117076301A (zh) ***性能测试方法、装置及电子设备
US20220335135A1 (en) Vulnerability analysis and reporting for embedded systems
EP3812940B1 (en) Vulnerability analyzer
JP5679347B2 (ja) 障害検知装置、障害検知方法、及びプログラム
Kim et al. Source code analysis for static prediction of dynamic memory usage
WO2020109252A1 (en) Test system and method for data analytics
CN117909956B (zh) 一种硬件辅助的嵌入式***程序控制流安全认证方法
US11989296B2 (en) Program execution anomaly detection for cybersecurity
Mohamed et al. A control flow representation for component-based software reliability analysis
CN110909351B (zh) 硬件协助的控制结构不变式挖掘方法
JP2007041777A (ja) 言語処理方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080321

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080321

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110628

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110829

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120110

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120119

R150 Certificate of patent or registration of utility model

Ref document number: 4913353

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150127

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees