(57)【特許請求の範囲】
【請求項１】
監視対象のデータと前記監視対象のデータを処理する環境とを格納したディスクのイメージファイルが起動される前に、前記ディスクのイメージファイル上で、前記監視対象のデータが格納される格納位置を特定する特定部と、
前記特定部によって特定された格納位置を示す位置情報に対して、監視対象であることを示す識別子を付与する付与部と、
前記付与部によって識別子が付与された前記位置情報と前記識別子とを対応付けて保持する保持部と
を有することを特徴とする情報処理装置。
【請求項２】
前記特定部は、前記ディスクのイメージファイルが起動されてオペレーティングシステムが動作し、前記識別子が付与された監視対象のデータがメモリに格納された場合に、前記メモリ上で前記監視対象のデータが格納される格納位置を特定し、
前記付与部は、前記特定部によって特定された前記メモリ上の格納位置を示す位置情報に対して、前記識別子を付与し、
前記保持部は、前記付与部によって識別子が付与された前記メモリ上の格納位置を示す位置情報と前記識別子とを対応付けて保持することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記特定部は、前記メモリに格納された前記監視対象のデータが前記メモリ内の他の位置に移動した場合に、移動先の格納位置を特定し、
前記付与部は、前記特定部によって特定された前記メモリ上の移動先の格納位置を示す位置情報に対して、前記識別子を付与し、
前記保持部は、前記付与部によって識別子が付与された前記メモリ上の移動先の格納位置を示す位置情報と前記識別子とを対応付けて保持することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記特定部は、前記メモリに格納された前記監視対象のデータが前記ディスクに格納された場合に、前記ディスク上で前記監視対象のデータが格納される格納位置を特定し、
前記付与部は、前記特定部によって特定された前記ディスク上の格納位置を示す位置情報に対して、前記識別子を付与し、
前記保持部は、前記付与部によって識別子が付与された前記ディスク上の格納位置を示す位置情報と前記識別子とを対応付けて保持することを特徴とする請求項２に記載の情報処理装置。
【請求項５】
情報処理装置で実行される監視方法であって、
監視対象のデータと前記監視対象のデータを処理する環境とを格納したディスクのイメージファイルが起動される前に、前記ディスクのイメージファイル上で、前記監視対象のデータが格納される格納位置を特定する特定工程と、
前記特定工程によって特定された格納位置を示す位置情報に対して、監視対象であることを示す識別子を付与する付与工程と、
前記付与工程によって識別子が付与された前記位置情報と前記識別子とを対応付けて保持する保持工程と
を含んだことを特徴とする監視方法。
【請求項６】
監視対象のデータと前記監視対象のデータを処理する環境とを格納したディスクのイメージファイルが起動される前に、前記ディスクのイメージファイル上で、前記監視対象のデータが格納される格納位置を特定するステップと、
特定した格納位置を示す位置情報に対して、監視対象であることを示す識別子を付与するステップと、
前記識別子を付与した前記位置情報と前記識別子とを対応付けて保持するステップと
をコンピュータに実行させることを特徴とする監視プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、監視方法および監視プログラムに関する。
【背景技術】
【０００２】
従来、データフローを解析する方法としてテイント解析が知られている。テイント解析は、監視したいメモリ上のデータに対してテイントタグと言われる識別子を付与してシャドウメモリに保存する。シャドウメモリとは、テイントタグを保存するためのデータ構造体であり、シャドウメモリの各エントリは、メモリ上の各データに対応している。
【０００３】
テイントタグが付与されたメモリ上のデータが何らかの命令により操作され、別のメモリ上の場所にコピーまたは移動された場合、当該データに付与されているテイントタグをデータの移動先の場所に対応するシャドウメモリ上のエントリにコピーまたは移動させる。このようにして、データの移動先でテイントタグを確認することで、データがどこから来たのかを識別する。
【０００４】
また、テイント解析をプログラムの実行の制御に利用することも行われている。例えば、テイントタグをブレークポイントの代わりに使用し、ＣＰＵ（Central  Processing  Unit）がテイントタグ付きの命令を実行しようとした場合、その実行を停止または予め関連づけた処理を行わせる手法も知られている。テイントタグを利用することで、仮に監視対象の命令が別の場所へコピーされたとしても、同時にテイントタグも伝搬する。このため、コピー先でその命令が実行された場合でも、その実行を停止させることができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“Argos：an  Emulator  for  Fingerprinting  Zero-Day  Attacks”、in  Proceedings  of  ACM  SIGOPS/EUROSYS  2006、European  Conference  on  Computer  Systems  2006
【非特許文献２】“メモリ拡張によるアドレスに依存しないブレークポイント技術の提案”、マルウェア対策研究人材育成ワークショップ2010
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、テイント解析等の対象となるデータにテイントタグが付加される前に、当該データの移動やコピーが発生し、監視対象のデータを監視できないという問題がある。
【０００７】
例えば、従来の技術は、監視対象のデータに対してテイントタグを付加する処理が、監視対象のデータのコピーや移動よりも前もって行われていることを前提としている。したがって、監視対象のデータのコピーや移動が、テイントタグを付加する前に行われてしまった場合、そのコピーや移動の行為を見逃すことになるので、正確に監視対象のデータの挙動を捉えられなくなる。
【０００８】
本発明は、上記に鑑みてなされたものであって、監視対象のデータの監視漏れを抑制することができる情報処理装置、監視方法および監視プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明に係る情報処理装置は、監視対象のデータと前記監視対象のデータを処理する環境とを格納したディスクのイメージファイルが起動される前に、前記ディスクのイメージファイル上で、前記監視対象のデータが格納される格納位置を特定する特定部と、前記特定部によって特定された格納位置を示す位置情報に対して、監視対象であることを示す識別子を付与する付与部と、前記付与部によって識別子が付与された前記位置情報と前記識別子とを対応付けて保持する保持部とを有する。
【発明の効果】
【００１０】
本発明にかかる情報処理装置、監視方法および監視プログラムは、監視対象のデータの監視漏れを抑制することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、情報処理装置の全体構成を示す図である。
【図２】図２は、情報処理装置の構成を示す機能ブロック図である。
【図３】図３は、シャドウメモリに記憶される情報の例を示す図である。
【図４】図４は、シャドウディスクに記憶される情報の例を示す図である。
【図５】図５は、テイントタグの伝搬例を説明する図である。
【図６】図６は、イメージファイルを走査して監視対象のデータを特定する処理の流れを示すフローチャートである。
【図７】図７は、データの移動に伴ってテイントタグを遷移させる処理の流れを示すフローチャートである。
【図８】図８は、監視プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１２】
以下に、本発明にかかる情報処理装置、監視方法および監視プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態によりこの発明が限定されるものではない。
【００１３】
［第１の実施形態］
［全体構成］
図１は、情報処理装置の全体構成を示す図である。図１に示すように、情報処理装置は、ハードウェア１、ホストＯＳ２、仮想マシンソフトウェア３、仮想マシン１０、仮想マシン２０を有する。なお、本実施の形態では、説明上、仮想マシンソフトウェア３、仮想マシン１０、仮想マシン２０を含めて物理マシン５と呼ぶこととする。
【００１４】
ハードウェア１は、情報処理装置を構成する電子回路や周辺機器であり、例えば、メモリ、ＣＰＵ（Central  Processing  Unit）などである。また、ハードウェア１は、解析対象プログラムとその解析を行うための環境を格納したディスクのイメージファイルを記憶する。つまり、ハードウェア１は、仮想マシン上で起動させるゲストＯＳのイメージを記憶する。
【００１５】
ホストＯＳ２は、仮想マシンを動作させる基盤となるＯＳであり、ハードウェア１を用いて実行される。仮想マシンソフトウェア３は、ハードウェア１を用いて仮想マシンを提供するソフトウェアであり、ここでは、仮想マシン１０と仮想マシン２０とを動作させる。例えば、仮想マシンソフトウェア３は、仮想ディスク、仮想物理メモリ、仮想ＣＰＵなどをゲストＯＳに割当てて、仮想マシンを動作させる。
【００１６】
仮想マシン１０と仮想マシン２０は、仮想マシンソフトウェア３から提供された仮想ディスク、仮想物理メモリ、仮想ＣＰＵなどを用いてゲストＯＳを動作させて、各種処理を実行する仮想的な情報処理装置である。例えば、各仮想マシンの仮想ＣＰＵは、ハードウェア１からディスクのイメージファイルを読み出して実行し、仮想マシン内でゲストＯＳを動作させる。
【００１７】
このような構成において、情報処理装置の物理マシン５は、ディスクのイメージファイルが起動される前に、ディスクのイメージファイル上で、解析対象のプログラムなど監視対象のデータが格納される格納位置を特定する。そして、情報処理装置の物理マシン５は、特定された格納位置を示す位置情報に対して、監視対象であることを示す識別子を付与する。その後、情報処理装置の物理マシン５は、識別子が付与された位置情報と識別子とを対応付けて保持する。なお、監視対象データの一例としては、解析対象のプログラムのコード部、解析対象のプログラムがアクセスするデータ等が該当する。
【００１８】
このように、情報処理装置は、例えばテイント解析を用いて、プログラムの挙動を解析する場合において、ディスクイメージファイルが起動される前に、ディスクイメージファイルを走査して、監視対象プログラムが実行される前にテイントタグを設定することができる。このため、情報処理装置は、テイント解析の対象となるデータにテイントタグが付加される前に、当該データの移動やコピーが発生することを抑止でき、監視対象のデータの監視漏れを抑制することができる。
【００１９】
［情報処理装置の構成］
次に、図２を用いて、図１に示した物理マシンの機能構成と仮想マシンの機能構成とを説明する。図２は、情報処理装置の構成を示す機能ブロック図である。なお、仮想マシン１０と仮想マシン２０とは同様の構成を有するので、ここでは、仮想マシン１０を例にして説明する。
【００２０】
（物理マシンの構成）
図２に示すように、物理マシン５は、ＨＤＤ（Hard  Disk  Drive）５ａとＣＰＵ５ｃとを有する。ＨＤＤ５ａは、ＣＰＵ５ｃが実行するプログラムやデータ、ディスクのイメージファイル５ｂ等を記憶する記憶装置である。ディスクのイメージファイル５ｂは、解析対象のプログラムなどの監視対象のデータと、解析を実行する環境すなわち監視対象のデータを処理する環境とを格納する。言い換えると、ディスクのイメージファイル５ｂは、仮想マシン上で起動させるゲストＯＳのイメージを格納する。
【００２１】
ＣＰＵ５ｃは、情報処理装置全体を司る物理的なプロセッサであり、特定部５ｄと付与部５ｅと設定部５ｆとを有する。なお、特定部５ｄ、付与部５ｅ、設定部５ｆは、例えばＣＰＵ５ｃが実行する処理部である。また、仮想マシンが特定部５ｄ、付与部５ｅ、設定部５ｆを有し、以下で説明する処理を仮想マシンが実行してもよい。
【００２２】
特定部５ｄは、ディスクのイメージファイル５ｂが起動される前に、ディスクのイメージファイル５ｂ上で、解析対象のプログラムの解析に用いる監視対象のデータが格納される格納位置を特定する処理部である。具体的には、特定部５ｄは、ディスクのイメージファイル５ｂを走査して、監視対象のデータのイメージファイル５ｂ上での位置を示す位置情報等を特定し、特定した位置情報を付与部５ｅに出力する。ここで特定される位置情報の例としては、ディスクのイメージファイル５ｂに対する、ヘッダ数、シリンダ数、セクタ数を用いたＣＨＳ（Cylinder  Head  Sector）形式、やＬＢＡ（Logical  Block  Addressing）形式などが挙げられる。
【００２３】
例えば、特定部５ｄは、監視対象のデータが含まれるファイル名とそのファイルの先頭からのオフセットを入力値として管理者等から受け取り、その監視対象のデータのイメージファイル５ｂ上での位置を特定する。
【００２４】
別例としては、特定部５ｄは、特定のライブラリがエクスポートするすべての関数に対してテイントタグを設定したい場合は、まず、ライブラリファイル名を入力として収集する。そして、特定部５ｄは、そのライブラリファイルの位置を特定し、ヘッダファイルを読み込む。その後、特定部５ｄは、読み込んだヘッダファイルからライブラリがエクスポートする関数に対するオフセットを抽出し、そのオフセット値とライブラリファイルの位置からテイントタグを設定する監視対象のデータのアドレスを特定する。なお、ファイルの先頭からのオフセットやライブラリファイル名は、管理者等が予め指定することができる。
【００２５】
付与部５ｅは、特定部５ｄによって特定された格納位置を示す位置情報に対して、監視対象であることを示す識別子を付与する。例えば、付与部５ｅは、特定部５ｄから入力された位置情報にテイントタグを付与する。一例を挙げると、付与部５ｅは、監視対象のプログラムの格納位置を示すＣＨＳに対しては、２ビットのテイントタグのうち２ビット目を「１」に設定したテイントタグを付与する。また、付与部５ｅは、監視対象のデータの格納位置を示すＣＨＳに対しては、２ビットのテイントタグのうち２ビット目を「０」に設定したテイントタグを付与する。
【００２６】
他にも、付与部５ｅは、特定部５ｄが特定したヘッダ情報からセクション情報（データ領域とかコード領域）を読み取って、それぞれの領域全域にテイントを付与することもできる。さらには、付与部５ｅは、特定部５ｄが特定したファイル名だけを指定して、ファイル全体に対してテイントを付与することもできる。なお、テイントタグのサイズは、どれほどの種類のデータを識別したいかに依存する。例えば、１種類だけのタグでよければ、１ビットで識別すればよく、２５６種類を識別する場合には、８ビットのサイズを用いる。
【００２７】
設定部５ｆは、付与部５ｅによってテイントタグが付与された位置情報とテイントタグとを対応付けてシャドウディスク１１ｂに保持させる処理部である。例えば、設定部５ｆは、特定部５ｄが特定した「Ｃ＝１、Ｈ＝０、Ｓ＝２」に、付与部５ｅがテイントタグ「１７」を付与した場合、「Ｃ＝１、Ｈ＝０、Ｓ＝２」と「１７」とを対応付けてシャドウディスク１１ｂに格納する。なお、設定部５ｆは、図示しない仮想ＮＩＣ（Network  Interface  Card）等のインタフェースを介して、シャドウディスク１１ｂにアクセスする。なお、設定部５ｆは、シャドウディスク１１ｂに対する、監視対象のプログラムや監視対象のデータの情報の格納が完了すると、事前設定が完了したことを仮想マシン１０に通知する。
【００２８】
（仮想マシンの構成）
図２に示すように、仮想マシン１０は、仮想物理メモリ１０ａ、シャドウメモリ１０ｂ、仮想ディスク１１ａ、シャドウディスク１１ｂ、起動部１２、仮想ＣＰＵ１３、仮想ＨＷコントローラ１７を有する。この構成はあくまで一例であり、仮想マシンが上述した特定部５ｄ、付与部５ｅ、設定部５ｆを有しいてもよい。
【００２９】
仮想物理メモリ１０ａは、情報処理装置が有する物理メモリにおける所定領域を仮想マシン１０で動作するゲストＯＳが使用するメモリとして割り当てることで実現された仮想的なメモリである。例えば、仮想物理メモリ１０ａは、仮想ＣＰＵ１３によって仮想ディスク１１ａから読み出されたプログラムやデータを記憶する。
【００３０】
シャドウメモリ１０ｂは、監視対象であることを示すテイントタグと、監視対象のプログラムが記憶される仮想物理メモリ１０ａ上の格納位置を特定する位置情報とを対応付けて記憶するデータ構造体である。例えば、シャドウメモリ１０ｂの構造としては、単純な配列構造でもよいし、ツリー構造としてテイントタグを保持してもよい。また、格納する情報としては、テイントタグとしての値を持たせてもよいし、テイント情報を保持させたデータ構造体へのポインタとして持たせてもよい。このシャドウメモリ１０ｂは、パフォーマンスやメモリ消費量などによって任意に実装形態を変更することができる。
【００３１】
例えば、パフォーマンスを重視する場合、仮想物理メモリ１０ａと同等のサイズの領域を予め用意し、それをシャドウメモリ１０ｂとして利用することができる。一方、メモリ消費量を抑えたい場合は、テイントタグを設定したデータに関する要素のみを保持させることもできる。また、データ構造体へのポインタとしてテイントタグを持たせる場合は、テイントタグのサイズをアドレスサイズにあわせることが好ましい。
【００３２】
ここで、シャドウメモリ１０ｂの一例を説明する。図３は、シャドウメモリに記憶される情報の例を示す図である。図３に示すように、シャドウメモリ１０ｂは、「仮想物理メモリのアドレス」と２ビットの「テイントタグ」とを対応付けて記憶する。「仮想物理メモリのアドレス」は、仮想物理メモリ１０ａ上の格納位置を示す位置情報であり、「テイントタグ」は、監視対象であることを識別する識別子である。また、ここでは、「テイントタグ」の２ビット情報が「１」である場合には、監視対象のデータがプログラムのコードであることを示す。
【００３３】
図３の場合、仮想物理メモリ１０ａのアドレス「００００から０２００」に格納されている監視対象のプログラムコードに対して、テイントタグ「１１」が付与されていることを示す。また、仮想物理メモリ１０ａのアドレス「０３１０から０３５０」に格納されている監視対象のデータに対して、テイントタグ「０５」が付与されていることを示す。なお、図３に示した数値等は、あくまで例示であり、値等を限定するものではない。また、ここでのアドレスは、仮想アドレスで指定してもよいし、物理アドレスで指定してもよく、メモリ上の位置を特定できる情報であればよい。
【００３４】
仮想ディスク１１ａは、情報処理装置が有する物理ディスクにおける所定領域を仮想マシン１０で動作するゲストＯＳが使用する領域として割り当てることで実現された仮想的なディスクである。例えば、仮想ディスク１１ａは、仮想ＣＰＵ１３が実行対象とするプログラムや、プログラムの処理対象となるデータ等を記憶する。
【００３５】
シャドウディスク１１ｂは、監視対象であることを示すテイントタグと、監視対象のプログラムが記憶される仮想ディスク１１ａ上の格納位置を特定する位置情報とを対応付けて記憶するデータ構造体である。例えば、シャドウディスク１１ｂの構造としては、単純な配列構造でもよいし、ツリー構造としてテイントタグを保持してもよい。また、格納する情報としては、テイントタグとしての値を持たせてもよいし、テイント情報を保持させたデータ構造体へのポインタとして持たせてもよい。このシャドウディスク１１ｂは、シャドウメモリ１０ｂと同様、パフォーマンスやメモリ消費量などによって任意に実装形態を変更することができる。
【００３６】
ここで、シャドウディスク１１ｂの一例を説明する。図４は、シャドウディスクに記憶される情報の例を示す図である。図４に示すように、シャドウディスク１１ｂは、「仮想ディスクの位置情報」と２ビットの「テイントタグ」とを対応付けて記憶する。「仮想ディスクの位置情報」は、仮想ディスク１１ａ上の格納位置を示すＣＨＳ情報などであり、「テイントタグ」は、監視対象であることを識別する識別子である。また、ここでは、「テイントタグ」の２ビット情報が「１」である場合には、監視対象のデータがプログラムのコードであることを示す。
【００３７】
図４の場合、仮想ディスク１１ａにおいて「Ｃ＝１、Ｈ＝０、Ｓ＝２」で特定される位置に格納される監視対象のプログラムコードに対して、テイントタグ「１７」が付与されていることを示す。また、仮想ディスク１１ａにおいて「Ｃ＝２、Ｈ＝１、Ｓ＝１」で特定される位置に格納される監視対象のデータに対して、テイントタグ「０５」が付与されていることを示す。なお、図４に示した数値等は、あくまで例示であり、値等を限定するものではない。また、ここでの位置情報は、ＣＨＳ形式に限定されるものではなく、例えばＬＢＳ方式など他の形式を用いることができる。
【００３８】
起動部１２は、物理マシン５によってシャドウディスク１１ｂに監視対象のプログラムや監視対象のデータの情報が格納されると、ゲストＯＳを起動する処理部である。例えば、起動部１２は、物理マシン５から事前設定が完了したことが通知されると、物理マシン５のＨＤＤ５ａに記憶されるディスクのイメージファイル５ｂを読み出し、イメージファイル５ｂに記憶されるゲストＯＳのイメージを仮想物理メモリ１０ａに展開する。このようにして、起動部１２は、仮想マシン１０上にゲストＯＳを実行する。なお、起動部１２の一例としては、仮想ＢＩＯＳ等が挙げられる。
【００３９】
仮想ＣＰＵ１３は、情報処理装置が有する物理ＣＰＵにおける所定処理能力を仮想マシン１０で動作するゲストＯＳが使用するＣＰＵとして割り当てることで実現された仮想的なＣＰＵである。この仮想ＣＰＵ１３は、プログラム実行部１４、テイント監視部１５、挙動監視部１６を有し、これらによって各種処理を実行する。
【００４０】
プログラム実行部１４は、仮想ディスク１１ａに記憶されるプログラムを実行する処理部である。例えば、プログラム実行部１４は、仮想ディスク１１ａからプログラムを読み出して仮想物理メモリ１０ａに展開する。つまり、プログラム実行部１４は、実行対象のプログラムを仮想ディスク１１ａから読み出して仮想物理メモリ１０ａに格納した後、仮想物理メモリ１０ａに記憶させた実行対象のプログラムを実行する。
【００４１】
テイント監視部１５は、仮想物理メモリ１０ａに格納されるプログラムやデータが監視対象であるか否かを監視する処理部である。具体的には、シャドウメモリ１０ｂまたはシャドウディスク１１ｂ上でテイントタグが付与されているアドレスから読み出されたデータが仮想物理メモリ１０ａに書き込まれたとする。この場合に、テイント監視部１５は、書き込まれたデータが格納される位置に対応するシャドウメモリ１０ｂ上のエントリにテイントタグを格納する。このとき、テイント監視部１５は、シャドウメモリ１０ｂまたはシャドウディスク１１ｂ上で元々管理されているテイントタグと同一の値を付与してもよい。
【００４２】
例えば、テイント監視部１５は、プログラム実行部１４が仮想ディスク１１ａから読み出して仮想物理メモリ１０ａに格納したプログラムやデータに対して、当該プログラムやデータの読み出し元のアドレスにテイントタグが付与されているか否かを判定する。つまり、テイント監視部１５は、シャドウディスク１１ｂでテイントタグが付与されているプログラムやデータが仮想物理メモリ１０ａに格納されたか否かを判定する。そして、テイント監視部１５は、格納されたプログラムやデータにテイントタグが元々付与されている場合には、格納されたデータ等を監視対象と判定し、シャドウメモリ１０ｂ上で管理する。
【００４３】
一例を挙げると、テイント監視部１５は、仮想ＣＰＵ１２のＩＮ命令等を監視し、仮想ディスク１１ａからデータが読み出されることを検知する。そして、テイント監視部１５は、仮想ＨＷコントローラ１７のテイント情報伝搬部１７ａから、仮想ディスク１１ａの位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」から読み出されたデータが仮想物理メモリ１０ａのアドレス「０３００〜０３４０」に書き込まれたことが通知される。
【００４４】
そして、テイント監視部１５は、シャドウディスク１１ｂを参照し、読み出し元の位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」にテイントタグ「０５」が付与されていることから、仮想物理メモリ１０ａに格納されたデータを監視対象と判定する。その後、テイント監視部１５は、データが格納された仮想物理メモリ１０ａのアドレス「０３００〜０３４０」にテイントタグ「０５」を付与し、アドレス「０３００〜０３４０」とテイントタグ「０５」とを対応付けてシャドウメモリ１０ｂに格納する。
【００４５】
また、テイント監視部１５は、仮想ディスク１１ａから仮想物理メモリ１０ａへのデータ格納だけではなく、同様の手法を用いて、仮想物理メモリ１０ａ内のデータ移動についても同様に監視する。例えば、テイント監視部１５は、仮想物理メモリ１０ａのアドレス「０３００〜０５００」にデータが格納されたことを検知する。すると、テイント監視部１５は、仮想物理メモリ１０ａに格納されたデータが仮想物理メモリ１０ａのアドレス「００００〜０２００」から読み出されたデータであることを特定する。
【００４６】
そして、テイント監視部１５は、シャドウメモリ１０ｂを参照し、読み出し元のアドレス「００００〜０２００」にテイントタグ「１１」が付与されていることから、仮想物理メモリ１０ａに格納されたデータを監視対象と判定する。その後、テイント監視部１５は、データが格納された仮想物理メモリ１０ａのアドレス「０３００〜０５００」にテイントタグ「１１」を付与し、アドレス「０３００〜０５００」とテイントタグ「１１」とを対応付けてシャドウメモリ１０ｂに格納する。
【００４７】
挙動監視部１６は、監視対象のプログラムや監視対象データの挙動を監視する処理部である。例えば、挙動監視部１６は、監視対象のプログラムが実行されてから終了するまでの時間、実行した命令や、アクセスしたデータやレジストリ、実行されたＡＰＩやシステムコールとその引数情報、生成したデータやレジストリ値等を収集し、プログラムの挙動を特定する。また、挙動監視部１６は、監視対象のデータの更新履歴や移動履歴等を監視する。一例を挙げると、挙動監視部１６は、テイント解析等を用いて一般的なプログラム解析を実行する。
【００４８】
具体的には、挙動監視部１６は、テイントタグをブレークポイントの代わりに用いて監視対象プログラムが発行するＡＰＩやシステムコールを監視し、ＡＰＩ列と各ＡＰＩに渡される引数により、監視対象プログラムの挙動を把握する。また、挙動監視部１６は、監視対象プログラムがアクセスするメモリアドレスを収集し、収集した情報を使ってプログラムを解析する。また、監視対象プログラムが実行する命令列を収集し、収集した情報を使ってプログラムを解析する。
【００４９】
仮想ＨＷコントローラ１７は、仮想ディスク１１ａと仮想物理メモリ１０ａとの間、シャドウディスク１１ｂとシャドウメモリ１０ｂとの間のデータ送受信を制御する処理部である。例えば、仮想ＨＷコントローラ１７は、プログラム実行部１４が仮想ディスク１１ａから読み出したプログラムを仮想物理メモリ１０ａに格納する。また、仮想ＨＷコントローラ１７は、プログラム等によって仮想物理メモリ１０ａから読み出されたデータを仮想ディスク１１ａに格納する。このような仮想ＨＷコントローラ１７は、テイントタグの伝搬を実行するテイント情報伝搬部１７ａを有する。
【００５０】
テイント情報伝搬部１７ａは、仮想物理メモリ１０ａへのデータ書き込みを監視する処理部である。例えば、テイント情報伝搬部１７ａは、ＤＭＡ（Dynamic  Memory  Access）を監視し、仮想ディスク１１ａから読み出されて仮想物理メモリ１０ａへ書き込まれるデータを監視する。そして、テイント情報伝搬部１７ａは、データが読み出された仮想ディスク１１ａ上の位置や、データが書き込まれた仮想物理メモリ１０ａ上の位置を特定して、仮想ＣＰＵ１３のテイント監視部１５に通知する。
【００５１】
また、テイント情報伝搬部１７ａは、仮想ディスク１１ａへのデータ書き込みを監視し、監視対象のデータが書き込まれた場合に、書き込まれたデータにテイントタグを付与する処理部である。すなわち、テイント情報伝搬部１７ａは、シャドウメモリ１０ｂからシャドウディスク１１ｂへのテイントタグを伝搬させる。具体的には、テイント情報伝搬部１７ａは、シャドウメモリ１０ｂ上でテイントタグが付与されているアドレスから読み出されたデータが、仮想ディスク１１ａに書き込まれた場合に、書き込まれたデータが格納される位置に対応するシャドウディスク１１ｂ上のエントリにテイントタグを格納する。
【００５２】
なお、テイント情報伝搬部１７ａが実行する処理の内容は、テイント監視部１５と同様なので、詳細な説明は省略する。例えば、テイント情報伝搬部１７ａは、仮想ＣＰＵ１３の中で、ゲストＯＳが実行する命令列を監視し、仮にテイントタグの付いた監視対象データが、仮想物理メモリ１０ａ上の他の場所へコピーまたは移動された場合は、移動先の場所に対応するシャドウメモリ１０ｂのエントリにテイント情報を伝搬させる。
【００５３】
簡単に説明すると、テイント情報伝搬部１７ａは、仮想物理メモリ１０ａ等から読み出されたデータが仮想ディスク１１ａに書き込まれ、書き込まれたデータに対するテイントタグがシャドウメモリ１０ｂに格納されていた場合には、書き込まれたデータを監視対象と判定する。そして、テイント情報伝搬部１７ａは、書き込まれた仮想ディスク１１ａ上の位置情報にテイントタグを付与して、シャドウディスク１１ｂに格納する。このとき、テイント情報伝搬部１７ａは、書き込まれたデータに元々付与されていたテイントタグと同一の値を、書き込まれたデータのテイントタグとして付与してもよい。
【００５４】
［テイントタグの伝搬］
次に、テイントタグの伝搬例を説明する。図５は、テイントタグの伝搬例を説明する図である。
【００５５】
図５に示すよう、物理マシン５は、ディスクのイメージファイル５ｂを走査して、アドレス「４０００番地〜４０２０番地」に監視対象のデータＸ１が格納されることを特定する。この場合、物理マシン５は、監視対象のデータＸ１が格納される位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」に対応するシャドウディスク１１ｂ上の位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」にテイントタグ「０９」を格納する。このようにすることで、プログラムＡが監視対象に設定される。
【００５６】
その後、仮想マシン１０の起動部１２は、イメージファイル５ｂを読み出して仮想ディスク１１ａに展開する。すると、仮想ディスク１１ａの位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」には、データＸ１が記憶されることになる。
【００５７】
さらに、プログラム実行部１４が実行したプログラムは、仮想ディスク１１ａの位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」からデータＸ１を読み出して、仮想物理メモリ１０ａのアドレス「０６９０番地〜０７１０番地」に格納する。この場合、テイント監視部１５は、読み出し元の仮想ディスク１１ａの位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」に対応するシャドウディスク１１ｂ上の位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」にテイントタグ「０９」が格納されていることを特定する。
【００５８】
この結果、テイント監視部１５は、仮想物理メモリ１０ａに格納されたデータＸ１を監視対象と判定する。そして、テイント監視部１５は、データＸ１が格納された仮想物理メモリ１０ａのアドレス「０６９０番地〜０７１０番地」に対応するシャドウメモリ１０ｂ上のアドレス「０６９０番地〜０７１０番地」にテイントタグ「０９」を設定する。
【００５９】
その後、プログラム実行部１４が実行したプログラムは、仮想物理メモリ１０ａのアドレス「０６９０番地〜０７１０番地」からデータＸ１を読み出してデータＸ２に更新した後、仮想物理メモリ１０ａのアドレス「０４９０番地〜０５１０番地」に格納する。この場合、テイント監視部１５は、読み出し元の仮想物理メモリ１０ａのアドレス「０６９０番地〜０７１０番地」に対応するシャドウメモリ１０ｂ上のアドレス「０６９０番地〜０７１０番地」にテイントタグ「０９」が格納されていることを特定する。
【００６０】
この結果、テイント監視部１５は、仮想物理メモリ１０ａに格納されたデータＸ２を監視対象と判定する。そして、テイント監視部１５は、データＸ２が格納された仮想物理メモリ１０ａのアドレス「０４９０番地〜０５１０番地」に対応するシャドウメモリ１０ｂ上のアドレス「０４９０番地〜０５１０番地」にテイントタグ「０９」を設定する。
【００６１】
さらにその後、プログラム実行部１４が実行したプログラムは、仮想物理メモリ１０ａのアドレス「０４９０番地〜０５１０番地」からデータＸ２を読み出して、仮想ディスク１１ａの位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」に格納する。この場合、テイント監視部１５は、読み出し元の仮想物理メモリ１０ａのアドレス「０４９０番地〜０５１０番地」に対応するシャドウメモリ１０ｂ上のアドレス「０４９０番地〜０５１０番地」にテイントタグ「０９」が格納されていることを特定する。
【００６２】
この結果、テイント監視部１５は、仮想ディスク１１ａに格納されたデータＸ２を監視対象と判定する。そして、テイント監視部１５は、データＸ２が格納された仮想ディスク１１ａの位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」に対応するシャドウディスク１１ｂ上の位置情報「Ｃ＝１、Ｈ＝０、Ｓ＝２」にテイントタグ「０９」を設定する。
【００６３】
［処理の流れ］
次に、イメージファイルを走査して監視対象のデータを特定する処理と、テイントタグの遷移させる処理との各々について説明する。
【００６４】
（イメージファイルの走査）
図６は、イメージファイルを走査して監視対象のデータを特定する処理の流れを示すフローチャートである。
【００６５】
図６に示すように、物理マシン５の特定部５ｄは、ＨＤＤ５ａに記憶されるディスクのイメージファイル５ｂを走査し（Ｓ１０１）、監視対象のデータが格納される位置情報を特定する（Ｓ１０２）。
【００６６】
続いて、付与部５ｅは、特定された位置情報にテイントタグを付与し（Ｓ１０３）、設定部５ｆは、位置情報とテイントタグとを対応付けてシャドウディスク１１ｂに格納する（Ｓ１０４）。
【００６７】
そして、物理マシン５は、イメージファイル５ｂの中に格納される全監視対象のデータにテイントタグが付与されるまで（Ｓ１０５Ｎｏ）、Ｓ１０２以降を繰り返す。
【００６８】
その後、イメージファイル５ｂの中に格納される全監視対象のデータにテイントタグが付与された場合（Ｓ１０５Ｙｅｓ）、仮想マシン１０の起動部１２は、イメージファイル５ｂを読み出して仮想ディスク１１ａに展開し、ゲストＯＳを起動する（Ｓ１０６）。そして、仮想マシン１０のプログラム実行部１４は、仮想ディスク１１ａに格納される解析対象のプログラムを読み出して実行する（Ｓ１０７）。
【００６９】
（テイントタグの遷移）
図７は、データの移動に伴ってテイントタグを遷移させる処理の流れを示すフローチャートである。図７に示すように、仮想マシン１０のテイント監視部１５は、監視対象のデータが移動したことを検知すると（Ｓ２０１Ｙｅｓ）、移動先が仮想物理メモリ１０ａか否かを判定する（Ｓ２０２）。
【００７０】
そして、テイント監視部１５は、移動先が仮想物理メモリ１０ａであると判定すると（Ｓ２０２Ｙｅｓ）、監視対象データが移動した仮想物理メモリ１０ａ上の位置情報を特定する（Ｓ２０３）。
【００７１】
その後、テイント監視部１５は、監視対象データが移動した仮想物理メモリ１０ａ上の位置情報にテイントタグを付与し（Ｓ２０４）、位置情報とテイントタグとを対応付けてシャドウメモリ１０ｂに格納する（Ｓ２０５）。
【００７２】
一方、テイント監視部１５は、移動先が仮想物理メモリ１０ａではないと判定すると（Ｓ２０２Ｎｏ）、すなわち移動先が仮想ディスク１１ａである判定すると、監視対象データが移動した仮想ディスク１１ａ上の位置情報を特定する（Ｓ２０６）。
【００７３】
その後、テイント監視部１５は、監視対象データが移動した仮想ディスク１１ａ上の位置情報にテイントタグを付与し（Ｓ２０７）、位置情報とテイントタグとを対応付けてシャドウディスク１１ｂに格納する（Ｓ２０８）。
【００７４】
［効果］
このように、情報処理装置は、仮想マシンを用いて、ゲストＯＳ内で監視対象プログラムを解析する環境において、ゲストＯＳを起動する前に、ゲストＯＳと解析対象プログラムが保持されているディスクイメージファイルを走査し、監視対象のデータのディスクイメージファイル上での位置を特定し、その位置に対応するシャドウディスクのエントリに対してテイントタグを割り付ける。この結果、テイント解析の対象となるデータにテイントタグが付加される前に、当該データの移動やコピーが発生することを抑止でき、解析対象のデータの監視漏れを抑制することができる。
【００７５】
また、仮想物理メモリ１０ａ上にロードされた監視対象のデータに対してコピーや移動といった操作が行われた場合は、テイントタグもコピーまたは移動する。また、仮想物理メモリ１０ａ上の監視対象データが仮想ディスク１１ａに対して書き出された場合、そのデータに対応するシャドウメモリ１０ｂ上のデータを書き出した仮想ディスク１１ａの位置に対応するシャドウディスク１１ｂのエントリにテイントタグを伝搬させる。このように、監視対象のデータのテイントタグは仮想物理メモリ１０ａ上にロードされるタイミングと同時にシャドウメモリ１０ｂ上に設置されることになり、そのデータに対してコピーや移動といった操作が行われる前に、テイントタグを割り振ることが可能になる。
【００７６】
また、データが仮想ディスク１１ａにあるか、仮想物理メモリ１０ａに既にロード済みかを意識する必要がなくなる。例えば、ゲストＯＳが起動後にあるファイル内のデータに対してテイントタグを設定しようとした場合、そのファイルが既に仮想物理メモリ１０ａにロード済みか、それともまだファイルにあるかを判断する必要がない。この結果として、実装を簡略化することができる。
【００７７】
［第２の実施形態］
さて、これまで本発明の実施形態について説明したが、本発明は上述した実施形態以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施形態を説明する。
【００７８】
（解析環境）
第１の実施形態では、仮想マシン上で監視対象のプログラムを実行し、物理マシン上であっても同様に処理することができる。例えば、仮想マシンの代わりにエミュレータを利用することもできる。
【００７９】
（解析対象）
第１の実施形態では、解析対象のプログラムと解析を実行する環境とを格納したイメージファイル５ｂが展開される前に、解析対象のプログラムのコード部等にテイントタグを付与して監視対象を設定する例を説明したが、本発明はこれに限定されるものではない。具体的には、イメージファイル５ｂ上の監視対象のファイルにテイントタグを付与し、ファイルの変更や移動等を監視することもできる。
【００８０】
例えば、機密情報が記載されたディスクのイメージファイル上のファイルに対してテイントタグを設定し、そのファイル内のデータが仮想マシン外部に送信されるか否かを検出するか確認するためにも利用することができる。また、実行の制御を行うテイントタグをライブラリ関数へ設定することにより、ライブラリ関数の実行履歴を観測することができる。また、例えばマルウェアなど、ある特定のプログラムの解析に利用できる。一般的なパーソナルコンピュータに適用すれば情報漏えいを防ぐためにも利用することができる。
【００８１】
（仮想マシンの実行形態）
第１の実施形態では、ホストＯＳ２で実行される仮想マシンソフトウェア３で仮想マシン１０等を動作させる例を説明したが、仮想マシンの実行形態はこれに限定されるものではない。例えば、プロセスレベルの仮想マシンを用いてもよい。さらには、仮想マシンを使わずに、図２で説明した各処理部をモジュールとして実装し、ＯＳの中で動作させてもよい。
【００８２】
仮想マシンやエミュレータを使う場合は、仮想化されたＣＰＵの中で、図２で説明した各処理部等を動作することができる。また、ＯＳ内にモジュールとしてインストールする場合は、各処理部は、監視対象プログラムのすべてのメモリアクセスを取得するために、例えば監視対象プログラムの全プロセスアドレス空間のＰｒｅｓｅｎｔ  Ｂｉｔを落とし、メモリアクセスするたびにページフォルトを発生させるなど方法ですべてのメモリアクセスを取得することができる。なお、上記実施例で説明した各処理部は、ハードウェアで実装することもできる。
【００８３】
（仮想マシン間の移動）
第１の実施形態では、仮想マシン間でテイントタグを遷移させる場合について説明したが、これに限定されるものではなく、仮想マシン間でテイントタグを遷移させることもできる。
【００８４】
例えば、仮想マシン１０が仮想マシン２０の仮想ディスクに、テイントタグが付与されたデータを格納したとする。この場合、仮想マシン２０は、格納されたデータにテイントタグが付与されていたか否かを仮想マシン１０に問い合わせる。そして、仮想マシン２０は、テイントタグが付与されていたことが通知されると、格納された仮想ディスクの位置情報に対応するシャドウディスクのエントリに、テイントタグを設定する。
【００８５】
（システム構成等）
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示された構成要素と同一であることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、図２に示したテイント監視部１５と挙動監視部１６とを統合してもよい。また、シャドウメモリ１０ｂとシャドウディスク１１ｂとを、メモリのアドレスかディスクのアドレスかを区別する情報をさらに用いることで、１つのデータ構造体として管理することもできる。このシャドウメモリ１０ｂやシャドウディスク１１ｂは、物理マシン上で用いる場合にはハードウェアで実現してもよく、仮想マシン上で用いる場合にはソフトウェアで実現することができる。
【００８６】
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００８７】
（プログラム）
また、上記実施例１に係る情報処理装置が実行する処理をコンピュータが実行可能な言語で記述した監視プログラムを作成することもできる。この場合、コンピュータが監視プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる監視プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された監視プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、図１等に示した情報処理装置と同様の機能を実現する監視プログラムを実行するコンピュータの一例を説明する。
【００８８】
図８は、監視プログラムを実行するコンピュータを示す図である。図８に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００８９】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【００９０】
ここで、図８に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。上記実施形態で説明した監視対象のプログラムは、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【００９１】
また、監視プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０９０に記憶される。具体的には、上記実施形態で説明した起動部１２と同様の情報処理を実行する起動手順と、プログラム実行部１４と同様の情報処理を実行するプログラム実行手順と、テイント監視部１５と同様の情報処理を実行するテイント監視手順と、挙動監視部１６と同様の情報処理を実行する挙動監視手順とが記述されたプログラムモジュールが、ハードディスクドライブ１０９０に記憶される。
【００９２】
また、監視プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュールやプログラムデータを必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００９３】
なお、監視プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、監視プログラムに係るプログラムモジュールやプログラムデータは、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００９４】
１  ハードウェア
２  ホストＯＳ
３  仮想マシンソフトウェア
５  物理マシン
１０  仮想マシン
１０ａ  仮想物理メモリ
１０ｂ  シャドウメモリ
１１ａ  仮想ディスク
１１ｂ  シャドウディスク
１２  起動部
１３  仮想ＣＰＵ
１４  プログラム実行部
１５  テイント監視部
１６  挙動監視部
１７  仮想ＨＷコントローラ
１７ａ  テイント情報伝搬部
１８  仮想ＮＩＣ
２０  仮想マシン
１０１０  メモリ
１０１１  ＲＯＭ
１０１２  ＲＡＭ
１０２０  ＣＰＵ
１０３０  ハードディスクドライブインタフェース
１０４０  ディスクドライブインタフェース
１０５０  シリアルポートインタフェース
１０５１  マウス
１０５２  キーボード
１０６０  ビデオアダプタ
１０６１  ディスプレイ
１０７０  ネットワークインタフェース
１０８０  バス
１０９０  ハードディスクドライブ
１０９１  ＯＳ
１０９２  アプリケーションプログラム
１０９３  プログラムモジュール
１０９４  プログラムデータ
１１００  ディスクドライブ
１１１０  マウス
１１２０  キーボード
１１３０  ディスプレイ
【図１】
0005710547.tif 000002
【図２】
0005710547.tif 000003
【図３】
0005710547.tif 000004
【図４】
0005710547.tif 000005
【図５】
0005710547.tif 000006
【図６】
0005710547.tif 000007
【図７】
0005710547.tif 000008
【図８】
0005710547.tif 000009