(57)【特許請求の範囲】
【請求項１】
監視対象のプログラムまたは監視対象のデータが記憶されるメモリ上の格納位置を特定する位置情報と、監視対象であることを識別する識別子とを対応付けて保持する保持部と、
前記メモリに記憶されるプログラムが実行される場合に、実行されるプログラムを記憶する前記位置情報に対応付けて前記識別子が、前記保持部に保持されているか否かを判定する判定部と、
前記判定部によって前記識別子が保持されていると判定された場合に、前記実行されるプログラムを監視対象と決定する決定部と、
前記決定部により監視対象と決定されたプログラムによりメモリに書き込まれたデータを監視対象と判定し、該データに監視対象であることを識別する識別子を付与して位置情報に対応付けて前記保持部に保持させる書き込み監視部と、
前記書き込み監視部により監視対象と判定されたデータがメモリから読み出されディスクに書き込まれた場合に、該データに監視対象であることを識別する識別子を付与して位置情報に対応付けて前記保持部に保持させる情報伝搬部と、
前記メモリに記憶されるデータへのアクセスが発生した際に、該データのアクセス元の位置情報に対応付けて前記識別子が、前記保持部に保持されている場合に、ログを生成する挙動監視部と
を有することを特徴とする情報処理装置。
【請求項２】
前記保持部は、前記監視対象のプログラムを前記メモリに展開する際に、前記監視対象のプログラムのコード部分が格納される前記位置情報に識別子を付与し、前記位置情報と前記識別子とを対応付けて保持することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記情報処理装置は、複数の仮想マシンを動作させる装置であって、
各仮想マシンは、前記保持部と前記判定部と前記決定部と書き込み監視部と情報伝搬部と挙動監視部とを有し、
前記保持部は、他の仮想マシンに記憶される監視対象のデータが自仮想マシンに書き込まれた場合に、書き込まれたデータが格納される仮想ディスクまたは仮想物理メモリ上の格納位置を示す位置情報に識別子を付与し、前記位置情報と前記識別子とを対応付けてさらに保持することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
情報処理装置で実行される監視方法であって、
監視対象のプログラムが記憶されるメモリ上の格納位置を特定する位置情報と、監視対象であることを識別する識別子とを対応付けて保持する保持部を参照し、
前記メモリに記憶されるプログラムが実行される場合に、実行されるプログラムを記憶する前記位置情報に対応付けて前記識別子が、前記保持部に保持されているか否かを判定する判定工程と、
前記判定工程によって前記識別子が保持されていると判定された場合に、前記実行されるプログラムを監視対象と決定する決定工程と、
前記決定工程において監視対象と決定されたプログラムによりメモリに書き込まれたデータを監視対象と判定し、該データに監視対象であることを識別する識別子を付与して位置情報に対応付けて前記保持部に保持させる書き込み監視工程と、
前記書き込み監視工程において監視対象と判定されたデータがメモリから読み出されディスクに書き込まれた場合に、該データに監視対象であることを識別する識別子を付与して位置情報に対応付けて前記保持部に保持させる情報伝搬工程と、
前記メモリに記憶されるデータへのアクセスが発生した際に、該データのアクセス元の位置情報に対応付けて前記識別子が、前記保持部に保持されている場合に、ログを生成する挙動監視工程と
を含んだことを特徴とする監視方法。
【請求項５】
監視対象のプログラムが記憶されるメモリ上の格納位置を特定する位置情報と、監視対象であることを識別する識別子とを対応付けた情報を保持する保持部を参照し、
前記メモリに記憶されるプログラムを実行する場合に、実行するプログラムが記憶される前記位置情報に対応付けて前記識別子が保持されているか否かを判定する判定ステップと、
前記識別子が記憶されていると判定した場合に、前記実行するプログラムを監視対象と決定する決定ステップと、
前記決定ステップにおいて監視対象と決定されたプログラムによりメモリに書き込まれたデータを監視対象と判定し、該データに監視対象であることを識別する識別子を付与して位置情報に対応付けて前記保持部に保持させる書き込み監視ステップと、
前記書き込み監視ステップにおいて監視対象と判定されたデータがメモリから読み出されディスクに書き込まれた場合に、該データに監視対象であることを識別する識別子を付与して位置情報に対応付けて前記保持部に保持させる情報伝搬ステップと、
前記メモリに記憶されるデータへのアクセスが発生した際に、該データのアクセス元の位置情報に対応付けて前記識別子が、前記保持部に保持されている場合に、ログを生成する挙動監視ステップと
をコンピュータに実行させることを特徴とする監視プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、監視方法および監視プログラムに関する。
【背景技術】
【０００２】
従来、仮想マシン上で動作するゲストＯＳ（Operating  System）のように、物理的または仮想的に隔離された汎用ＯＳなどの隔離環境で監視対象プログラムを実行し、監視対象プログラムの挙動を監視するプログラム解析手法が知られている。
【０００３】
例えば、監視対象プログラムが発行するＡＰＩ（Application  Program  Interface）を監視し、ＡＰＩ列と各ＡＰＩに渡される引数により、監視対象プログラムの挙動を把握することが行われている。また、ＡＰＩの代わりにシステムコールの発行を監視することも行われている。また、監視対象プログラムがアクセスするメモリアドレスを収集し、収集した情報を使ってプログラムを解析することも知られている。また、監視対象プログラムが実行する命令列を収集し、収集した情報を使ってプログラムを解析することも行われている。
【０００４】
そして、汎用ＯＳ上で動作するプログラムが監視対象か監視対象外かを識別する手法としては、プロセスＩＤ（ＰＩＤ）を利用する手法が一般的に知られている。例えば、ＡＰＩを発行したプロセスのＰＩＤと、予め記憶しておいた監視対象プログラムのＰＩＤと比較し、監視対象プログラムから発行されたＡＰＩか否かを識別することが行われている。また、ＰＩＤの代わりに各プロセスを識別する識別子としてＣＲ３レジスタの値を利用する手法も知られている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“Toward  Automated  Dynamic  Malware  Analysis  Using  CWSandbox”、IEEE  Security  and  Privacy、Vol.5、No.2、pp.32-39、2007
【非特許文献２】“TTAnalyze:  A  Tool  for  Analyzing  Malware”、15th  European  Institute  for  Computer  Antivirus  Research  （EICAR  2006）  Annual  Conference
【非特許文献３】“Memory  Behavior−Based  Automatic  Malware  Unpacking  in  Stealth  Debugging  Environment”、5th  International  Conference  on  Malicious  and  Unwanted  Software（MALWARE  2010）、2010
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来のＰＩＤやＣＲ３レジスタの値に基づく手法では、監視対象プログラムの誤識別が発生する場合があり、識別精度が必ずしも高くないという問題がある。
【０００７】
例えば、ＰＩＤやＣＲ３レジスタの値で監視対象プログラムを識別する手法では、コードインジェクションやファイル感染などの悪意のある手法が利用されると、検知漏れや誤り検知が発生してしまう。コードインジェクションとは、自身のコードを他のプロセスに注入し、注入されたプロセス内で悪意のある行動を行う手法である。ファイル感染とは、自身以外の実行形式のファイルに感染し、感染されたファイルが実行された場合に、自身の悪意のある動作も一緒に開始する手法である。
【０００８】
例えば、ＰＩＤで監視対象のＡＰＩを特定する状況で、コードインジェクションによって、監視対象のプロセスからコードが注入された感染プロセスがＡＰＩを発行した場合について説明する。この場合、コードが注入された感染プロセスのＰＩＤが監視対象外に設定されていると、この感染プロセスから発行されたＡＰＩは、本来監視対象となるはずが監視対象外と識別される。また、コードインジェクションでは、注入先のプロセスを監視対象に入れると、そのプロセスの正規の動作で発行されるＡＰＩも監視してしまう。つまり、コードインジェクションによって、誤り検知や検知漏れが発生する。
【０００９】
また、ファイル感染の場合、監視対象のＰＩＤを有するプログラムがファイル感染によって不正なプログラムを付与された場合、元々のプログラムと不正なプログラムとが同じＰＩＤで動作することになるので、ＡＰＩが混在し、正確に識別することができない。つまり、元々のプログラムと不正なプログラムの区別ができず、全てを監視対象とするか、全てを監視対象外とするか、の２択しかないことで、誤り検知や検知漏れが発生する。
【００１０】
本発明は、上記に鑑みてなされたものであって、監視対象プログラムか否かを識別する精度を向上させることができる情報処理装置、監視方法および監視プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するために、本発明に係る情報処理装置は、監視対象のプログラムが記憶されるメモリ上の格納位置を特定する位置情報と、監視対象であることを識別する識別子とを対応付けて保持する保持部と、前記メモリに記憶されるプログラムが実行される場合に、実行されるプログラムを記憶する前記位置情報に対応付けて前記識別子が、前記保持部に保持されているか否かを判定する判定部と、前記判定部によって前記識別子が保持されていると判定された場合に、前記実行されるプログラムを監視対象と決定する決定部とを有する。
【発明の効果】
【００１２】
本発明にかかる情報処理装置、監視方法および監視プログラムは、監視対象プログラムか否かを識別する精度を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、情報処理装置の全体構成を示す図である。
【図２】図２は、仮想マシンの機能構成例を示す機能ブロック図である。
【図３】図３は、シャドウメモリに記憶される情報の例を示す図である。
【図４】図４は、シャドウディスクに記憶される情報の例を示す図である。
【図５】図５は、シャドウメモリと仮想物理メモリとの関係性を示す図である。
【図６】図６は、テイントタグの伝搬例を説明する図である。
【図７】図７は、実行対象のプログラムを実行した場合の処理の流れを示すフローチャートである。
【図８】図８は、挙動解析処理の流れを示すフローチャートである。
【図９】図９は、メモリへのデータ書込みが発生した場合の処理の流れを示すフローチャートである。
【図１０】図１０は、監視プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１４】
以下に、本発明にかかる情報処理装置、監視方法および監視プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態によりこの発明が限定されるものではない。
【００１５】
［第１の実施形態］
［全体構成］
図１は、情報処理装置の全体構成を示す図である。図１に示すように、情報処理装置は、ハードウェア１、ホストＯＳ２、仮想マシンソフトウェア３、仮想マシン１０、仮想マシン２０を有する。
【００１６】
ハードウェア１は、情報処理装置を構成する電子回路や周辺機器であり、例えば、メモリ、ＣＰＵ（Central  Processing  Unit）などである。ホストＯＳ２は、仮想マシンを動作させる基盤となるＯＳであり、ハードウェア１を用いて実行される。仮想マシンソフトウェア３は、ハードウェア１を用いて仮想マシンを提供するソフトウェアであり、ここでは、仮想マシン１０と仮想マシン２０とを動作させる。例えば、仮想マシンソフトウェア３は、仮想ディスク、仮想物理メモリ、仮想ＣＰＵなどをゲストＯＳに割当てて、仮想マシンを動作させる。
【００１７】
仮想マシン１０と仮想マシン２０は、仮想マシンソフトウェア３から提供された仮想ディスク、仮想物理メモリ、仮想ＣＰＵなどを用いてゲストＯＳを動作させて、各種処理を実行する仮想的な情報処理装置である。
【００１８】
このような構成において、情報処理装置は、隔離された環境である仮想マシン１０または仮想マシン２０内で、挙動を解析する対象となるプログラムを監視する。具体的には、各仮想マシンは、監視対象のプログラムが記憶される仮想物理メモリ上の格納位置を特定する位置情報と、監視対象であることを識別するテイントタグとを対応付けて保持する。各仮想マシンは、仮想物理メモリに記憶されるプログラムが実行される場合に、実行されるプログラムを記憶する位置情報に対応付けてテイントタグが保持されているか否かを判定する。そして、各仮想マシンは、テイントタグが保持されていると判定された場合に、実行する当該プログラムを監視対象と決定する。
【００１９】
このように、情報処理装置は、プログラムの挙動解析をする場合においてプログラムの実行を監視する際に、テイントタグがついているプログラムが実行されていた場合は監視対象とし、テイントタグがついていないときは監視対象外とする。この結果、情報処理装置は、正確に監視対象と対象外のプログラムの区別を行うことができ、監視対象プログラムか否かを識別する精度を向上させることができる。
【００２０】
［仮想マシンの構成］
次に、図１に示した情報処理装置において監視対象プログラムを監視する仮想マシンの構成を説明する。なお、ハードウェア１、ホストＯＳ２、仮想マシンソフトウェア３については、一般的な構成と同様の構成を有するので、詳細な説明は省略する。また、仮想マシン１０と仮想マシン２０は、同様の構成を有するので、ここでは、仮想マシン１０を例にして説明する。
【００２１】
図２は、仮想マシンの機能構成例を示す機能ブロック図である。図２に示すように、仮想マシン１０は、仮想物理メモリ１０ａ、シャドウメモリ１０ｂ、仮想ディスク１１ａ、シャドウディスク１１ｂ、仮想ＣＰＵ１２、仮想ＨＷコントローラ１８を有する。
【００２２】
仮想物理メモリ１０ａは、情報処理装置が有する物理メモリにおける所定領域を仮想マシン１０で動作するゲストＯＳが使用するメモリとして割り当てることで実現された仮想的なメモリである。例えば、仮想物理メモリ１０ａは、仮想ＣＰＵ１２によって仮想ディスク１１ａから読み出されたプログラムやデータを記憶する。
【００２３】
シャドウメモリ１０ｂは、監視対象であることを示すテイントタグと、監視対象のプログラムが記憶される仮想物理メモリ１０ａ上の格納位置を特定する位置情報とを対応付けて記憶するデータ構造体である。例えば、シャドウメモリ１０ｂの構造としては、単純な配列構造でもよいし、ツリー構造としてテイントタグを保持してもよい。また、格納する情報としては、テイントタグとしての値を持たせてもよいし、テイント情報を保持させたデータ構造体へのポインタとして持たせてもよい。このシャドウメモリ１０ｂは、パフォーマンスやメモリ消費量などによって任意に実装形態を変更することができる。
【００２４】
例えば、パフォーマンスを重視する場合、仮想物理メモリ１０ａと同等のサイズの領域を予め用意し、それをシャドウメモリとして利用することができる。一方、メモリ消費量を抑えたい場合は、テイントタグを設定したデータに関する要素のみを保持させることもできる。テイントタグのサイズは、どれほどの種類のデータを識別したいかに依存する。例えば、１種類だけのタグでよければ、１ビットで識別すればよく、２５６種類を識別する場合には、８ビットのサイズを用いる。また、データ構造体へのポインタとしてテイントタグを持たせる場合は、アドレスのサイズ分をサイズとして用いることもできる。なお、メモリ上の位置は、仮想アドレスで指定してもよいし、物理アドレスで指定してもよく、その他でも格納位置を特定できる位置情報であればよい。
【００２５】
ここで、シャドウメモリ１０ｂの一例を説明する。図３は、シャドウメモリに記憶される情報の例を示す図である。図３に示すように、シャドウメモリ１０ｂは、「仮想物理メモリのアドレス」と２ビットの「テイントタグ」とを対応付けて記憶する。「仮想物理メモリのアドレス」は、仮想物理メモリ１０ａ上の格納位置を示す位置情報であり、「テイントタグ」は、監視対象であることを識別する識別子である。また、ここでは、「テイントタグ」の２ビット情報が「１」である場合には、監視対象のデータがプログラムのコードであることを示す。
【００２６】
図３の場合、仮想物理メモリ１０ａのアドレス「００００から０２００」に格納されている監視対象のプログラムコードに対して、テイントタグ「１１」が付与されていることを示す。また、仮想物理メモリ１０ａのアドレス「０３１０から０３５０」に格納されている監視対象のデータに対して、テイントタグ「０５」が付与されていることを示す。なお、図３に示した数値等は、あくまで例示であり、値等を限定するものではない。
【００２７】
仮想ディスク１１ａは、情報処理装置が有する物理ディスクにおける所定領域を仮想マシン１０で動作するゲストＯＳが使用する領域として割り当てることで実現された仮想的なディスクである。例えば、仮想ディスク１１ａは、仮想ＣＰＵ１２が実行対象とするプログラムや、プログラムの処理対象となるデータ等を記憶する。
【００２８】
シャドウディスク１１ｂは、監視対象であることを示すテイントタグと、監視対象のプログラムが記憶される仮想ディスク１１ａ上の格納位置を特定する位置情報とを対応付けて記憶するデータ構造体である。例えば、シャドウディスク１１ｂの構造としては、単純な配列構造でもよいし、ツリー構造としてテイントタグを保持してもよい。また、格納する情報としては、テイントタグとしての値を持たせてもよいし、テイント情報を保持させたデータ構造体へのポインタとして持たせてもよい。このシャドウディスク１１ｂは、シャドウメモリ１０ｂと同様、パフォーマンスやメモリ消費量などによって任意に実装形態を変更することができる。
【００２９】
ここで、シャドウディスク１１ｂの一例を説明する。図４は、シャドウディスクに記憶される情報の例を示す図である。図４に示すように、シャドウディスク１１ｂは、「仮想ディスクのアドレス」と２ビットの「テイントタグ」とを対応付けて記憶する。「仮想ディスクのアドレス」は、仮想ディスク１１ａ上の格納位置を示す位置情報であり、「テイントタグ」は、監視対象であることを識別する識別子である。また、ここでは、「テイントタグ」の２ビット情報が「１」である場合には、監視対象のデータがプログラムのコードであることを示す。
【００３０】
図４の場合、仮想ディスク１１ａのアドレス「１０００から１２００」に格納されている監視対象のプログラムコードに対して、テイントタグ「１７」が付与されていることを示す。また、仮想ディスク１１ａのアドレス「１４１０から１４５０」に格納されている監視対象のデータに対して、テイントタグ「０５」が付与されていることを示す。なお、図４に示した数値等は、あくまで例示であり、値等を限定するものではない。
【００３１】
仮想ＣＰＵ１２は、情報処理装置が有する物理ＣＰＵにおける所定処理能力を仮想マシン１０で動作するゲストＯＳが使用するＣＰＵとして割り当てることで実現された仮想的なＣＰＵである。この仮想ＣＰＵ１２は、プログラム実行部１３、テイントタグ付与部１４、判定部１５、書込み監視部１６、挙動監視部１７を有し、これらによって各種処理を実行する。
【００３２】
プログラム実行部１３は、仮想ディスク１１ａに記憶されるプログラムを実行する処理部である。例えば、プログラム実行部１３は、仮想ディスク１１ａからプログラムを読み出して仮想物理メモリ１０ａに展開する。つまり、プログラム実行部１３は、実行対象のプログラムを仮想ディスク１１ａから読み出して仮想物理メモリ１０ａに格納した後、仮想物理メモリ１０ａに記憶させた実行対象のプログラムを実行する。
【００３３】
テイントタグ付与部１４は、プログラム実行部１３によって仮想物理メモリ１０ａ上に展開されるプログラムが監視対象である場合に、テイントタグを付与する処理部である。例えば、テイントタグ付与部１４は、プログラム実行部１３が仮想物理メモリ１０ａにプログラムを格納したことを検知すると、当該プログラムが監視対象であるか否かを判定する。そして、テイントタグ付与部１４は、監視対象であると判定した場合、当該プログラムが格納された仮想物理メモリ１０ａ上の位置に特定し、特定した位置に対応するシャドウメモリ１０ｂ上のエントリにテイントタグを格納する。
【００３４】
一例を挙げると、テイントタグ付与部１４は、監視対象のプログラムにおいて実行される命令の集合であるコード部分が記憶された仮想物理メモリ１０ａ上のアドレスとして、「０１５０〜０１６０」を特定する。そして、テイントタグ付与部１４は、特定したアドレス「０１５０〜０１６０」に対してテイントタグ「１４」を付与する。その後、テイントタグ付与部１４は、特定したアドレス「０１５０〜０１６０」と、付与したテイントタグ「１４」とを対応付けてシャドウメモリ１０ｂに格納する。
【００３５】
なお、監視対象であるか否かを判定する手法は、公知の様々な手法を用いることができる。例えば、予め監視対象のプログラム名等を指定しておき、仮想物理メモリ１０ａに展開されたプログラムが予め指定したプログラムと一致するか否かによって、監視対象か否かを判定することもできる。また、プログラム内を走査し、監視対象として指定される命令を含んでいる場合に、監視対象と判定することもできる。また、付与するテイントタグは、任意の値を設定することができる。
【００３６】
判定部１５は、実行されたプログラムが監視対象か否かを判定する処理部である。具体的には、判定部１５は、シャドウメモリ１０ｂを参照し、実行されたプログラムが格納される仮想物理メモリ１０ａ上の位置情報に対応付けて、監視対象を表すテイントタグが格納されている場合に、監視対象であると判定する。そして、判定部１５は、実行されたプログラムが監視対象であることを挙動監視部１７に通知する。
【００３７】
一例を挙げると、判定部１５は、プログラム実行部１３が仮想物理メモリ１０ａのアドレス「００００〜０２００」からプログラムを読み出したことを検知すると、読み出し先のアドレス「００００〜０２００」を特定する。そして、判定部１５は、シャドウメモリ１０ｂを参照し、アドレス「００００〜０２００」に対応付けてテイントタグ「１１」が格納されていることを特定する。すると、判定部１５は、アドレス「００００〜０２００」から読み出されて実行されたプログラムを監視対象と判定する。
【００３８】
書込み監視部１６は、仮想物理メモリ１０ａへのデータ書き込みを監視し、監視対象のデータが書き込まれた場合に、書き込まれたデータにテイントタグを付与する処理部である。具体的には、書込み監視部１６は、監視対象と決定されたプログラムが仮想物理メモリ１０ａにデータを書き込んだ場合に、書き込まれたデータが格納される位置に対応するシャドウメモリ１０ｂ上のエントリにテイントタグを格納する。すなわち、書込み監視部１６は、データを書き込んだ命令がテイントタグに対応付けられたプログラムコードに含まれる命令である場合に、書き込まれたデータを監視対象と判定する。
【００３９】
一例を挙げると、書込み監視部１６は、仮想物理メモリ１０ａへのデータが書き込まれたことを検知すると、当該データを書き込んだプログラムを特定する。そして、書込み監視部１６は、特定したプログラムの格納先を示すアドレス「００００〜０２００」を仮想物理メモリ１０ａ等から特定する。続いて、書込み監視部１６は、シャドウメモリ１０ｂを参照し、特定したアドレス「００００〜０２００」に対応付けてテイントタグ「１１」が格納されていると判定する。この場合、書込み監視部１６は、テイントタグが付与されたプログラムによってデータが書き込まれたことになるので、書き込まれたデータを監視対象と判定する。
【００４０】
すると、書込み監視部１６は、仮想物理メモリ１０ａを参照して、データが書き込まれたアドレス「００１０〜００１２」を抽出し、抽出したアドレス「００１０〜００１２」にテイントタグ「０４」を付与する。そして、書込み監視部１６は、抽出したアドレス「００１０〜００１２」と、付与したテイントタグ「０４」とを対応付けて、シャドウメモリ１０ｂに格納する。このとき、書込み監視部１６は、書き込んだプログラムのテイントタグと同一の値を、書き込まれたデータのテイントタグとして付与してもよい。
【００４１】
一方、書込み監視部１６は、データ書き込みを行ったプログラムの格納先がアドレス「０５００〜０６００」である場合には、シャドウメモリ１０ｂに対応するテイントタグが格納されていないので、書き込まれたデータを監視対象外と判定する。なお、書込み監視部１６は、プログラムが仮想物理メモリ１０ａに新たに書き込まれたデータや、仮想ディスク１１ａから読み出して仮想物理メモリ１０ａに書き込まれたデータについて、監視対象か否かを判定する。
【００４２】
また、書込み監視部１６は、仮想ディスク１１ａ等から読み出されたデータが仮想物理メモリ１０ａに書き込まれ、書き込まれたデータに対するテイントタグがシャドウディスク１１ｂに格納されていた場合には、書き込まれたデータを監視対象と判定する。そして、書込み監視部１６は、書き込まれた仮想物理メモリ１０ａ上のアドレスにテイントタグを付与して、シャドウメモリ１０ｂに格納する。すなわち、書込み監視部１６は、シャドウディスク１１ｂからシャドウメモリ１０ｂへのテイントタグを伝搬させる。このとき、書込み監視部１６は、書き込まれたデータに元々付与されていたテイントタグと同一の値を、書き込まれたデータのテイントタグとして付与してもよい。
【００４３】
挙動監視部１７は、監視対象のプログラムの挙動を監視する処理部である。例えば、挙動監視部１７は、監視対象のプログラムが実行されてから終了するまでの時間、アクセスしたデータやレジストリ、生成したデータやレジストリ値等を収集し、プログラムの挙動を監視する。一例を挙げると、挙動監視部１７は、監視対象プログラムが発行するＡＰＩやシステムコールを監視し、ＡＰＩ列と各ＡＰＩに渡される引数により、監視対象プログラムの挙動を把握する。また、挙動監視部１７は、監視対象プログラムがアクセスするメモリアドレスを収集し、収集した情報を使ってプログラムを解析する。また、監視対象プログラムが実行する命令列を収集し、収集した情報を使ってプログラムを解析する。
【００４４】
仮想ＨＷコントローラ１８は、仮想ディスク１１ａと仮想物理メモリ１０ａとの間、シャドウディスク１１ｂとシャドウメモリ１０ｂとの間のデータ送受信を制御する処理部である。例えば、仮想ＨＷコントローラ１８は、プログラム実行部１３が仮想ディスク１１ａから読み出したプログラムを仮想物理メモリ１０ａに格納する。また、仮想ＨＷコントローラ１８は、プログラム等によって仮想物理メモリ１０ａから読み出されたデータを仮想ディスク１１ａに格納する。このような仮想ＨＷコントローラ１８は、テイントタグの伝搬を実行するテイント情報伝搬部１８ａを有する。
【００４５】
テイント情報伝搬部１８ａは、仮想ディスク１１ａへのデータ書き込みを監視し、監視対象のデータが書き込まれた場合に、書き込まれたデータにテイントタグを付与する処理部である。すなわち、テイント情報伝搬部１８ａは、シャドウメモリ１０ｂからシャドウディスク１１ｂへのテイントタグを伝搬させる。具体的には、テイント情報伝搬部１８ａは、監視対象と決定されたプログラムが仮想ディスク１１ａにデータを書き込んだ場合に、書き込まれたデータが格納される位置に対応するシャドウディスク１１ｂ上のエントリにテイントタグを格納する。
【００４６】
なお、テイント情報伝搬部１８ａが実行する処理の内容は、書込み監視部１６と同様なので、詳細な説明は省略する。簡単に説明すると、テイント情報伝搬部１８ａは、仮想物理メモリ１０ａ等から読み出されたデータが仮想ディスク１１ａに書き込まれ、書き込まれたデータに対するテイントタグがシャドウメモリ１０ｂに格納されていた場合には、書き込まれたデータを監視対象と判定する。そして、テイント情報伝搬部１８ａは、書き込まれた仮想ディスク１１ａ上のアドレスにテイントタグを付与して、シャドウディスク１１ｂに格納する。このとき、テイント情報伝搬部１８ａは、書き込まれたデータに元々付与されていたテイントタグと同一の値を、書き込まれたデータのテイントタグとして付与してもよい。
【００４７】
［テイントタグの伝搬］
次に、図５と図６を用いて、テイントタグの伝搬例を説明する。ここでは、まず、図５を用いてシャドウメモリ１０ｂと仮想物理メモリ１０ａとの関係性を説明し、次に、図６を用いてテイントタグの伝搬例を説明する。
【００４８】
図５は、シャドウメモリと仮想物理メモリとの関係性を示す図である。この図は、シャドウメモリ１０ｂにおけるテイントタグの管理例である。また、シャドウディスク１１ｂと仮想ディスク１１ａについても、ここで説明する関係性と同様の関係性を有する。
【００４９】
図５に示すように、プログラム実行部１３が仮想ディスク１１ａから監視対象のプログラムＡを読み出して仮想物理メモリ１０ａに展開したとする。ここでは、プログラムＡのコード部が仮想ディスク１１ａの０２００番地から０４００番地に格納され、データ部が０４０１番地から０５００番地に格納され、ヒープ部が０５０１番地から０６００番地に格納されたとする。すると、テイントタグ付与部１４は、プログラムＡのコード部が格納されるアドレス「０２００番地から０４００番地」に対応するシャドウメモリ１０ｂ上のアドレス「０２００番地から０４００番地」にテイントタグ「１５」を格納する。このようにすることで、プログラムＡが監視対象に設定される。
【００５０】
また、図５では、データＸが格納される仮想物理メモリ１０ａのアドレス「０８００番地から０８２０番地」に対応するシャドウメモリ１０ｂ上のアドレス「０８００番地から０８２０番地」にテイントタグ「０５」が格納されている。このため、データＸも監視対象に設定されている。一方で、データＹが格納される仮想物理メモリ１０ａのアドレス「０７１５番地から０７２０番地」に対応するシャドウメモリ１０ｂ上のアドレス「０７１５番地から０７２０番地」にテイントタグが格納されていない。このため、データＹは監視対象外に設定されている。
【００５１】
続いて、テイントタグの伝搬例を説明する。図６は、テイントタグの伝搬例を説明する図である。図６に示すように、仮想ディスクのアドレス「４０００番地から４０２０番地」に格納されるデータＸ１には、シャドウディスク１１ｂ上のアドレス「４０００番地から４０２０番地」にテイントタグ「０９」が格納されている。このため、データＸ１は監視対象である。
【００５２】
このような状態において、データＸ１が、仮想ディスク１１ａから読み出されて仮想物理メモリ１０ａ上のアドレス「０６９０番地から０７１０番地」に格納されたとする。この場合、書込み監視部１６は、データＸ１にテイントタグが付与されていることから、仮想物理メモリ１０ａに書き込まれたデータＸ１についても監視対象と判定する。この結果、書込み監視部１６は、仮想物理メモリ１０ａ上のアドレス「０６９０番地から０７１０番地」に対応するシャドウメモリ１０ｂ上のアドレス「０６９０番地から０７１０番地」にテイントタグ「０９」を格納する。
【００５３】
さらにその後、仮想物理メモリ１０ａ上のアドレス「０６９０番地から０７１０番地」に格納されるデータＸ１がデータＸ２に更新されて、仮想ディスク１１ａ上のアドレス「４０００番地から４０２０番地」に格納されたとする。この場合、書込み監視部１６は、更新前のデータＸ１にテイントタグが付与されていることから、更新後のデータＸ２についても監視対象と判定する。この結果、書込み監視部１６は、仮想ディスク１１ａ上のアドレス「４０００番地から４０２０番地」に対応するシャドウディスク１１ｂ上のアドレス「４０００番地から４０２０番地」にテイントタグ「０９」を格納する。このようにして、一度監視対象と判定されたデータについては、テイントタグを伝搬させることで、監視し続けることができる。
【００５４】
また、別例として、監視対象のプログラムＡが、仮想物理メモリ１０ａ上のアドレス「０１１０番地から０１５０番地」にデータＺを書き込んだとする。この場合、書込み監視部１６は、データＺを書き込んだプログラムＡが監視対象であることから、書き込まれたデータＺについても監視対象と判定する。この結果、書込み監視部１６は、データＺが書き込まれた仮想物理メモリ１０ａ上のアドレス「０１１０番地から０１５０番地」に対応するシャドウメモリ１０ｂ上のアドレス「０１１０番地から０１５０番地」にテイントタグ「０３」を格納する。
【００５５】
さらにその後、仮想物理メモリ１０ａ上のアドレス「０１１０番地から０１５０番地」に格納されるデータＺが、仮想ディスク１１ａ上のアドレス「２２８０番地から２３２０番地」に格納されたとする。この場合、書込み監視部１６は、データＺにテイントタグが元々付与されていることから、仮想ディスク１１ａに書き込まれたデータＺについても監視対象と判定する。この結果、書込み監視部１６は、仮想ディスク１１ａ上のアドレス「２２８０番地から２３２０」に対応するシャドウディスク１１ｂ上のアドレス「２２８０番地から２３２０」にテイントタグ「０３」を格納する。
【００５６】
［処理の流れ］
次に、実行対象のプログラムを仮想ディスク１１ａから仮想物理メモリ１０ａにロードした場合の処理、挙動解析処理、データの書込みが発生した場合の処理の各々について説明する。
【００５７】
（ロードした場合の処理）
図７は、実行対象のプログラムを実行した場合の処理の流れを示すフローチャートである。図７に示すように、仮想マシン１０のプログラム実行部１３は、実行対象のプログラムを仮想ディスク１１ａから仮想物理メモリ１０ａにロードする（Ｓ１０１）。
【００５８】
そして、テイントタグ付与部１４は、ロードされたプログラムが監視対象のプログラムか否かを判定する（Ｓ１０２）。なお、テイントタグ付与部１４は、ロードされたプログラムが監視対象のプログラムではないと判定した場合（Ｓ１０２Ｎｏ）、処理を終了する。
【００５９】
一方、テイントタグ付与部１４は、ロードされたプログラムが監視対象のプログラムであると判定した場合（Ｓ１０２Ｙｅｓ）、監視対象のプログラムがロードされた仮想物理メモリ１０ａ上の位置情報を特定する（Ｓ１０３）。
【００６０】
続いて、テイントタグ付与部１４は、特定した位置情報にテイントタグを付与し（Ｓ１０４）、位置情報とテイントタグとを対応付けてシャドウメモリ１０ｂに格納する（Ｓ１０５）。そして、挙動監視部１７は、シャドウメモリ１０ｂに格納されたプログラムを監視対象に設定し（Ｓ１０６）、プログラム実行部１３は、仮想物理メモリ１０ａにロードしたプログラムを実行する（Ｓ１０７）。
【００６１】
（挙動解析処理）
図８は、挙動解析処理の流れを示すフローチャートである。なお、ここでは、メモリ上へのデータアクセスが発生した場合にアクセス元が監視対象であるか否かを判定して挙動解析を実行する例を説明するが、ディスクであっても同様に処理することができる。
【００６２】
図８に示すように、仮想マシン１０の判定部１５は、仮想物理メモリ１０ａに格納されるデータへのアクセスが発生した場合（Ｓ２０１Ｙｅｓ）、データのアクセス元の位置情報を特定する（Ｓ２０２）。
【００６３】
続いて、判定部１５は、シャドウメモリ１０ｂを参照し、特定した位置情報にテイントタグが対応付けられているか判定する（Ｓ２０３）。すなわち、判定部１５は、データにアクセスした命令にテイントタグが付与されているか否かを判定する。そして、挙動監視部１７は、判定部１５によって位置情報にテイントタグが対応付けられていると判定された場合（Ｓ２０４Ｙｅｓ）、監視対象の命令がデータにアクセスしたこと示すログを生成して保持する（Ｓ２０５）。例えば、挙動監視部１７は、アクセスした日時、データにアクセスした命令、当該命令の格納位置、当該命令がアクセスしたデータ、当該データの格納位置等をログとして抽出する。このようにして抽出されたログは、挙動監視部１７による挙動解析に用いられる。
【００６４】
一方、判定部１５は、位置情報にテイントタグが対応付けられていないと判定された場合（Ｓ２０４Ｎｏ）、アクセス元が監視対象外であると判定して、処理を終了する。
【００６５】
（データの書込みが発生した場合の処理）
図９は、メモリへのデータ書込みが発生した場合の処理の流れを示すフローチャートである。なお、ここでは、メモリ上へのデータアクセスを例にして説明するが、ディスク上のデータについても同様に処理することができる。
【００６６】
図９に示すように、仮想マシン１０の書込み監視部１６は、仮想物理メモリ１０ａへのデータ書込みが発生した場合（Ｓ３０１Ｙｅｓ）、データを書き込んだプログラムが格納される仮想物理メモリ１０ａ上の位置情報を特定する（Ｓ３０２）。
【００６７】
続いて、書込み監視部１６は、シャドウメモリ１０ｂを参照し、データを書き込んだプログラムが格納される位置情報にテイントタグが対応付けられているか判定する（Ｓ３０３）。なお、書込み監視部１６は、当該プログラムの位置情報にテイントタグが対応付けられていないと判定した場合（Ｓ３０４Ｎｏ）、処理を終了する。
【００６８】
一方、書込み監視部１６は、当該プログラムの位置情報にテイントタグが対応付けられていると判定した場合（Ｓ３０４Ｙｅｓ）、書き込まれたデータの仮想物理メモリ１０ａ上の位置情報を特定する（Ｓ３０５）。
【００６９】
続いて、書込み監視部１６は、特定した位置情報にテイントタグを付与し（Ｓ３０６）、位置情報とテイントタグとを対応付けてシャドウメモリ１０ｂに格納する（Ｓ３０７）。そして、挙動監視部１７は、シャドウメモリ１０ｂに格納されたプログラムを監視対象に設定する（Ｓ３０８）。
【００７０】
［効果］
このように、情報処理装置は、正確に監視対象と対象外のプログラムの区別を行うことができ、監視対象プログラムか否かを識別する精度を向上させることができる。例えば、コードインジェクションにより他のプロセスにプログラムコードが注入された場合でも、そのプロセス内で、注入されたコードと、そのプロセスの元々のコードとはテイントタグを見ることで区別することができる。また、ファイル感染により他プログラムファイルにプログラムコードが付与された場合でも、付与されたコード部分と、そのファイルが元々持っているコード部分をテイントタグに値に基づいて区別することができる。
【００７１】
また、監視対象のプログラムを仮想物理メモリ１０ａに展開する際にテイントタグを付与するので、監視漏れを抑制できる。さらに、監視対象のプログラムが仮想物理メモリ１０ａや仮想ディスク１１ａに書き込んだデータ等を監視対象に設定することができるので、挙動を正確に監視することができる。したがって、プログラムによって扱われるデータに対して、テイントタグを付与し、そのデータが利用や操作される際に、テイントタグを伝搬させることで当該データのフローを解析することができる。
【００７２】
また、プラグイン形式のプログラムの解析を行う際、プラグインの挙動とプラグインを実行するフレームワークの挙動を区別することができ、正確にプラグイン形式のプログラムを解析することができる。
【００７３】
［第２の実施形態］
さて、これまで本発明の実施形態について説明したが、本発明は上述した実施形態以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施形態を説明する。
【００７４】
（解析環境）
第１の実施形態では、仮想マシン上で監視対象のプログラムを実行し、物理マシン上であっても同様に処理することができる。例えば、仮想マシンの代わりにエミュレータを利用することもできる。
【００７５】
（解析手法）
本発明を監視対象プログラムの特定に利用する具体的な例として、ＡＰＩの監視を例に説明すると、何かしらの方法でＡＰＩの呼び出しを捉えた時、そのＡＰＩの呼び出し元（スタックに積まれているリターンアドレス）が監視対象のテイントタグを持っているか否かでこのＡＰＩを監視対象とするかを判断することができる。さらには、ＡＰＩが呼ばれた際のコールスタックの中に監視対象のテイントタグを持ったアドレスが含まれるか否か、からそのＡＰＩ呼び出しを監視対象とするか否かを判断してもよい。また、監視対象のテイントタグの付いた制御遷移命令（callやjmpなど）の実行から監視対象プログラムからのＡＰＩの呼び出しを取得することもできる。
【００７６】
（仮想マシンの実行形態）
第１の実施形態では、ホストＯＳ２で実行される仮想マシンソフトウェア３で仮想マシン１０等を動作させる例を説明したが、仮想マシンの実行形態はこれに限定されるものではない。例えば、プロセスレベルの仮想マシンを用いてもよい。さらには、仮想マシンを使わずに、図２で説明した各処理部をモジュールとして実装し、ＯＳの中で動作させてもよい。
【００７７】
仮想マシンやエミュレータを使う場合は、仮想化されたＣＰＵの中で、図２で説明した書込み監視部１６等を動作することができる。また、ＯＳ内にモジュールとしてインストールする場合は、書込み監視部１６等は、監視対象プログラムのすべてのメモリアクセスを取得するために、例えば監視対象プログラムの全プロセスアドレス空間のＰｒｅｓｅｎｔ  Ｂｉｔを落とし、メモリアクセスするたびにページフォルトを発生させるなど方法ですべてのメモリアクセスを取得することができる。なお、上記実施例で説明した各処理部は、ハードウェアで実装することもできる。
【００７８】
（仮想マシン間の移動）
第１の実施形態では、仮想マシン間でテイントタグを遷移させる場合について説明したが、これに限定されるものではなく、仮想マシン間でテイントタグを遷移させることもできる。
【００７９】
例えば、仮想マシン１０が仮想マシン２０の仮想ディスクに、テイントタグが付与されたデータを格納したとする。この場合、仮想マシン２０は、格納されたデータにテイントタグが付与されていたか否かを仮想マシン１０に問い合わせる。そして、仮想マシン２０は、テイントタグが付与されていたことが通知されると、格納された仮想ディスクの位置情報に対応するシャドウディスクのエントリに、テイントタグを設定する。
【００８０】
（システム構成等）
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示された構成要素と同一であることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、図２に示した書込み監視部１６と挙動監視部１７とを統合してもよい。また、シャドウメモリ１０ｂとシャドウディスク１１ｂとを、メモリのアドレスかディスクのアドレスかを区別する情報をさらに用いることで、１つのデータ構造体として管理することもできる。このシャドウメモリ１０ｂやシャドウディスク１１ｂは、物理マシン上で用いる場合にはハードウェアで実現してもよく、仮想マシン上で用いる場合にはソフトウェアで実現することができる。
【００８１】
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００８２】
（プログラム）
また、上記実施例１に係る情報処理装置が実行する処理をコンピュータが実行可能な言語で記述した監視プログラムを作成することもできる。この場合、コンピュータが監視プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる監視プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された監視プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、図１等に示した情報処理装置と同様の機能を実現する監視プログラムを実行するコンピュータの一例を説明する。
【００８３】
図１０は、監視プログラムを実行するコンピュータを示す図である。図１０に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００８４】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１００およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【００８５】
ここで、図１０に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。上記実施形態で説明した監視対象のプログラムは、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【００８６】
また、監視プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０９０に記憶される。具体的には、上記実施形態で説明したプログラム実行部１３と同様の情報処理を実行するプログラム実行手順と、テイントタグ付与部１４と同様の情報処理を実行するテイントタグ付与手順と、判定部１５と同様の情報処理を実行する判定手順と、書込み監視部１６と同様の情報処理を実行する書込み監視手順と、挙動監視部１７と同様の情報処理を実行する挙動監視手順とが記述されたプログラムモジュールが、ハードディスクドライブ１０９０に記憶される。
【００８７】
また、監視プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュールやプログラムデータを必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００８８】
なお、監視プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、監視プログラムに係るプログラムモジュールやプログラムデータは、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００８９】
１  ハードウェア
２  ホストＯＳ
３  仮想マシンソフトウェア
１０  仮想マシン
１０ａ  仮想物理メモリ
１０ｂ  シャドウメモリ
１１ａ  仮想ディスク
１１ｂ  シャドウディスク
１２  仮想ＣＰＵ
１３  プログラム実行部
１４  テイントタグ付与部
１５  判定部
１６  書込み監視部
１７  挙動監視部
１８  仮想ＨＷコントローラ
１８ａ  テイント情報伝搬部
２０  仮想マシン
１０１０  メモリ
１０１１  ＲＯＭ
１０１２  ＲＡＭ
１０２０  ＣＰＵ
１０３０  ハードディスクドライブインタフェース
１０４０  ディスクドライブインタフェース
１０５０  シリアルポートインタフェース
１０５１  マウス
１０５２  キーボード
１０６０  ビデオアダプタ
１０６１  ディスプレイ
１０７０  ネットワークインタフェース
１０８０  バス
１０９０  ハードディスクドライブ
１０９１  ＯＳ
１０９２  アプリケーションプログラム
１０９３  プログラムモジュール
１０９４  プログラムデータ
１１００  ディスクドライブ
１１１０  マウス
１１２０  キーボード
１１３０  ディスプレイ
【図１】
0005766650.tif 000002
【図２】
0005766650.tif 000003
【図３】
0005766650.tif 000004
【図４】
0005766650.tif 000005
【図５】
0005766650.tif 000006
【図６】
0005766650.tif 000007
【図７】
0005766650.tif 000008
【図８】
0005766650.tif 000009
【図９】
0005766650.tif 000010
【図１０】
0005766650.tif 000011