(57)【要約】【課題】攻撃コードを含むドキュメントの攻撃の検知・解析を容易にする。【解決手段】ドキュメントファイルに対してテイントタグを設定しておき、ドキュメントファイル操作プログラムにより、テイントタグの設定されたデータが仮想ＣＰＵで実行する命令に渡されたとき、このテイントタグを命令の実行結果に伝搬させる。仮想ＣＰＵにより実行される命令の保持しているタグが、ドキュメントに設定したものであるか否かを判断し、前記命令の保持しているタグが、前記ドキュメントに設定したものであるとき、前記ドキュメントファイルによる攻撃が行われたことを検知する。この攻撃の検知以降、前記ドキュメントファイルに設定されたタグを持つ命令を解析対象とする。【選択図】図５
2014225161.tif 000002
【特許請求の範囲】
【請求項１】
ドキュメントファイルに対して、前記ドキュメントファイルを識別するためのタグを設定するタグ付与部と、
プログラムを動作させ、前記ドキュメントファイルを読み込むプログラム実行部と、
前記タグの設定されたデータが前記プログラム実行部で実行する命令に渡されたとき、前記タグを命令の実行結果に伝搬させるテイント解析部と、
前記プログラム実行部により実行される命令の保持しているタグが、前記ドキュメントに設定したものであるか否かを判断し、前記命令の保持しているタグが、前記ドキュメントファイルに設定したものであるとき、前記ドキュメントファイルによる攻撃が行われた
ことを検知する判定部と、
前記判定部による攻撃の検知以降、前記ドキュメントファイルに設定されたタグを持つ命令を解析対象と判断する命令監視部と、
前記命令監視部において解析対象と判断された命令の実行を解析する解析実行部とを備えることを特徴とする情報処理装置。
【請求項２】
前記タグ付与部は、さらに、
前記プログラムに、前記プログラムを識別するためのタグを設定し、
前記テイント解析部は、さらに、
前記プログラムにより実行されるメモリへの書き込みデータに当該タグを設定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記テイント解析部は、さらに、
前記プログラムにより実行されるメモリへの書き込もうとしているデータに、前記プログラムに設定されたタグが設定されていない場合、前記データに、前記ドキュメントファイルに設定したタグと同じタグを設定することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
コンピュータが、
ドキュメントファイルに対して、前記ドキュメントファイルを識別するためのタグを設定するタグを設定するタグ付与ステップと、
前記ドキュメントファイルを読み込むためのプログラムを動作させ、前記ドキュメントファイルを読み込むプログラム実行ステップと、
前記タグの設定されたデータが前記プログラム実行ステップで実行する命令に渡されたとき、前記タグを命令の実行結果に伝搬させるテイント解析ステップと、
前記プログラム実行ステップにより実行される命令の保持しているタグが、前記ドキュメントに設定したものであるか否かを判断し、前記命令の保持しているタグが、前記ドキュメントに設定したものであるとき、前記ドキュメントファイルによる攻撃が行われたことを検知する判定ステップと、
前記判定ステップによる攻撃の検知以降、前記ドキュメントファイルに設定されたタグを持つ命令を解析対象と判断する命令監視ステップと、
前記命令監視ステップにおいて解析対象と判断された命令の実行を解析する解析実行ステップと実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、および、情報処理方法に関する。
【背景技術】
【０００２】
ドキュメントファイルを利用した攻撃が増加傾向にある。悪意のある攻撃コードを持たせたワード（登録商標）、エクセル（登録商標）、ＰＤＦ（Portable  Document  Format）といったドキュメントファイルをメール等に添付し、攻撃対象者に送りつけ、ドキュメントファイル操作用プログラムで開かせることで、ドキュメントファイル操作用プログラムの脆弱性を攻撃し、攻撃対象者の環境上で任意のコードを実行する。
【０００３】
ここでは、まず一般的なドキュメントファイルを利用した攻撃の流れを説明する。攻撃に利用するドキュメントファイルは、ドキュメントファイル操作用プログラムの脆弱性を攻撃する攻撃コードと、攻撃成功後、より複雑な処理を行うための実行コードとをデータとして自身のデータセクションに保持している。
【０００４】
このドキュメントファイルが、ドキュメントファイル操作用プログラムにより開かれると、攻撃コードが、このドキュメントファイル操作用プログラムの脆弱性を攻撃し、攻撃が成功すると制御が攻撃コードに移る。その後、攻撃コードがドキュメントファイル内のデータセクションから実行コードを取り出し、ファイルシステム上に実行可能ファイルとして保存する。そして、攻撃コードがその実行可能ファイルを実行することで、攻撃対象者のコンピュータにウイルス等が感染する。
【０００５】
このように攻撃コードを持つドキュメントファイル（以下、適宜、「悪意のあるドキュメントファイル」という）を検知・解析するためには、従来のマルウェア検知・解析のための手法と同じものが利用される。
【０００６】
大きく分けると、攻撃コードを含むドキュメントファイルをドキュメントファイル操作用プログラムにて実際に開き攻撃コードを実行させて調査する動的な検知・解析手法と、攻撃コードを実行させずに調査する静的な検知・解析手法とが存在する。
【０００７】
静的な検知・解析手法としては、予め攻撃コードを含むドキュメントファイルや攻撃コードに特徴的なバイト列をシグネチャという形で保持しておき、入力されたドキュメントファイルとシグネチャとのパターンマッチングを行う手法が存在する（非特許文献１参照）。この手法は、ドキュメントファイルを実際に開くことなく攻撃を検知できるので、攻撃の検知・解析を高速にかつ大量に行うことができる。
【０００８】
しかしながら、このパターンマッチングによる静的な解析手法は、ドキュメントファイル内のバイト列が難読化された場合、攻撃の検知漏れが発生する可能性がある。
【０００９】
これは、ドキュメントファイル内の攻撃コードが難読化されると、見た目の上でのバイト列が本来のバイト列から変化してしまうからである。例えば、攻撃コード部分とある特定の値とでＸＯＲを取っただけでも見た目上のバイト列が変わってしまい、従来の攻撃コードのパターンを表現しているシグネチャでは攻撃を検知することができない。ちなみに、難読化されたドキュメントファイルは、そのドキュメントファイルが開かれた場合、何かしらのデコード処理を走らせることで、実行時に本来のパターンが現れる。
【００１０】
一方、動的な検知・解析手法は、入力されたドキュメントファイルをドキュメントファイル操作用プログラムで開き、そのときの挙動を基に検知する手法である（非特許文献２参照）。この手法では実際にドキュメントファイルとドキュメントファイル操作用プログラムを動作させるので、攻撃コード自体にデコード処理を行わせることができる。そのため、例え悪意のあるコード部分に難読化等が施されていても問題になることはない。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】Michael  Ligh他、WILEY、Malware  Analysis’s  Cookbook  and  DVD、2010/11/2
【非特許文献２】Stefan  Axelsson、Intrusion  Detection  Systems:  A  Survey  and  Taxonomy、2000/03/14
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、ドキュメントファイルとドキュメントファイル操作用プログラムの挙動に基づく攻撃の検知・解析手法には次のような問題点がある。
【００１３】
一つは、動的な検知・解析手法は、検知基準となる悪意のある挙動を定義する必要がある。これは、ドキュメントファイルのタイプや攻撃種類ごとに挙動の定義が異なる。また、ドキュメントファイル操作プログラムのバージョンごとにも検知基準が異なる可能性がある。さらに、攻撃に利用される攻撃コード、マルウェアごとにも検知基準を調整する必要がある。そのため、挙動を基にした攻撃コードを含むドキュメントファイルの攻撃の検知は、誤検知や検知漏れがないようにするのが難しい。
【００１４】
もう一つは、攻撃コードを含むドキュメントファイルをドキュメントファイル操作用プログラムで開いた場合、攻撃コードを含むドキュメントファイルに関する部分による挙動と、ドキュメントファイル操作用のプログラム部分による挙動、つまり通常のドキュメントファイル操作用プログラムの動作との区別が難しい。これらの区別をつけるために例えばホワイトリストを作成し、全体の挙動からドキュメントファイル操作用プログラムの挙動を除外する方法が考えられるが、この場合もドキュメントファイル操作用プログラムごとに異なったホワイトリストを作成する必要があり、効率が悪い上に精度の高いホワイトリストを作成するのは容易ではない。
【００１５】
そこで、本発明は、前記した問題を解決し、攻撃コードを含むドキュメントの攻撃の検知・解析を容易にすることを課題とする。
【課題を解決するための手段】
【００１６】
前記した課題を解決するため、本発明にかかる情報処理装置は、ドキュメントファイルに対して、前記ドキュメントファイルを識別するためのタグを設定するタグ付与部と、プログラムを動作させ、前記ドキュメントファイルを読み込むプログラム実行部と、前記タグの設定されたデータが前記プログラム実行部で実行する命令に渡されたとき、前記タグを命令の実行結果に伝搬させるテイント解析部と、前記プログラム実行部により実行される命令の保持しているタグが、前記ドキュメントに設定したものであるか否かを判断し、前記命令の保持しているタグが、前記ドキュメントファイルに設定したものであるとき、前記ドキュメントファイルによる攻撃が行われたことを検知する判定部と、前記判定部による攻撃の検知以降、前記ドキュメントファイルに設定されたタグを持つ命令を解析対象と判断する命令監視部と、前記命令監視部において解析対象と判断された命令の実行を解析する解析実行部とを備える。
【発明の効果】
【００１７】
本発明によれば、攻撃コードを含むドキュメントの攻撃の検知・解析を容易にすることを目的とする。
【図面の簡単な説明】
【００１８】
【図１】図１は、情報処理装置の全体構成を示す図である。
【図２】図２は、仮想マシンの機能構成を示す図である。
【図３】図３は、シャドウメモリに記憶される情報の例を示す図である。
【図４】図４は、シャドウディスクに記憶される情報の例を示す図である。
【図５】図５は、仮想マシンによる攻撃コードによる攻撃の検知と解析の手順を示すフローチャートである。
【図６】図６は、第２の実施形態の仮想マシンの動作の概要を説明する図である。
【図７】図７は、第３の実施形態の仮想マシンの動作の概要を説明する図である。
【図８】図８は、仮想マシンが、ドキュメントファイル操作プログラムにより生成されたデータへのテイントタグ（例えば、Tag=WRITTEN）の設定をしつつ、このうちＪＩＴにより生成された部分へは、別のテイントタグ（例えば、Tag=JIT）を設定した場合の動作概要を説明する図である。
【図９】図９は、監視プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１９】
［第１の実施形態］
［全体構成］
以下、本発明を実施するための形態（実施形態）について説明する。図１は、情報処理装置の全体構成を示す図である。図１に示すように、情報処理装置は、ハードウェア１、ホストＯＳ２、仮想マシンソフトウェア３、仮想マシン１０を有する。
【００２０】
ハードウェア１は、情報処理装置を構成する電子回路や周辺機器であり、例えば、メモリ、ＣＰＵ（Central  Processing  Unit）等である。ホストＯＳ２は、仮想マシンを動作させる基盤となるＯＳであり、ハードウェア１を用いて実行される。仮想マシンソフトウェア３は、ハードウェア１を用いて仮想マシンを提供するソフトウェアであり、ここでは、仮想マシン１０を動作させる。例えば、仮想マシンソフトウェア３は、仮想ディスク、仮想物理メモリ、仮想ＣＰＵ等をゲストＯＳに割当てて、仮想マシンを動作させる。
【００２１】
仮想マシン１０は、例えば、エミュレータ型の仮想マシンであり、仮想マシンソフトウェア３から提供された仮想ディスク、仮想物理メモリ、仮想ＣＰＵ等を用いてゲストＯＳを動作させて、各種処理を実行する仮想的な情報処理装置である。
【００２２】
このような構成において情報処理装置は、まず攻撃コードを含むドキュメントファイルにテイントタグ（タグ）を設定しておく。そして、情報処理装置は、ドキュメントを読み込み、操作するためのドキュメントファイル操作用プログラムを動作させ、このドキュメントファイルを開く。その後、情報処理装置のＣＰＵ（仮想ＣＰＵ）が命令をフェッチした際、その命令が保持しているテイントタグをチェックする。ここで、チェックしたテイントタグが、前記したドキュメントファイルに設定したものだった場合、このドキュメントファイルによる攻撃を検知する。
【００２３】
つまり、通常のドキュメントファイルが、ドキュメントファイル操作用プログラムにより開かれ、仮想物理メモリ上にデータが書き出されても、書き出したデータが実行されることはない。しかし、仮想物理メモリ上に書き出されたデータが実行されたということは、そのドキュメントファイルに何らかの攻撃コードが含まれている可能性が高い、つまり、その実行処理はドキュメントファイル内の攻撃コードによる攻撃である可能性が高いと判断できる。
【００２４】
そして、このような攻撃検知後、情報処理装置は、ドキュメントファイルに設定されたテイントタグを持つ命令が実行されていれば、この命令を解析対象とする。例えば、情報処理装置は、この命令により実行されたＡＰＩ（Application  Programming  Interface）、システムコール、ライブラリ関数等を解析対象とする。一方、情報処理装置は、ドキュメントファイルに設定されたテイントタグを持たない命令が実行されていれば、この命令の実行は解析対象外とする。
【００２５】
このようにすることで、情報処理装置は、攻撃コードを含むドキュメントファイルの攻撃の検知および監視を行うことができる。
【００２６】
［仮想マシンの構成］
次に、図１に示した仮想マシンの構成を説明する。なお、ハードウェア１、ホストＯＳ２、仮想マシンソフトウェア３については、一般的な構成と同様の構成を有するので、詳細な説明は省略する。
【００２７】
図２は、仮想マシンの機能構成を示す図である。図２に示すように、仮想マシン１０は、仮想物理メモリ１０ａ、シャドウメモリ１０ｂ、仮想ディスク１１ａ、シャドウディスク１１ｂ、仮想ＣＰＵ１２、仮想ＨＷコントローラ１９、および、テイントタグ付与部１４を有する。
【００２８】
仮想物理メモリ１０ａは、情報処理装置が有する物理メモリにおける所定領域を仮想マシン１０で動作するゲストＯＳが使用するメモリとして割り当てることで実現された仮想的なメモリである。例えば、仮想物理メモリ１０ａは、仮想ＣＰＵ１２によって仮想ディスク１１ａから読み出されたプログラムやデータを記憶する。
【００２９】
シャドウメモリ１０ｂは、仮想物理メモリ１０ａ上の値に対して設定されたテイントタグの値を保持するデータ構造体である。
【００３０】
ここで、シャドウメモリ１０ｂの一例を説明する。図３は、シャドウメモリに記憶される情報の例を示す図である。図３に示すように、シャドウメモリ１０ｂは、「仮想物理メモリのアドレス」と「テイントタグ」とを対応付けて記憶する。「仮想物理メモリのアドレス」は、仮想物理メモリ１０ａ上の格納位置を示す位置情報であり、「テイントタグ」は、解析対象であること、または解析対象でないことを識別する識別子である。
【００３１】
図３の場合、仮想物理メモリ１０ａのアドレス「００００から０２００」に格納されている解析対象のプログラムコードに対して、テイントタグ「１１」が付与されていることを示す。また、仮想物理メモリ１０ａのアドレス「０３１０から０３５０」に格納されている解析対象のデータに対して、テイントタグ「０５」が付与されていることを示す。なお、図３に示した数値等は、あくまで例示であり、値等を限定するものではない。
【００３２】
仮想ディスク１１ａは、情報処理装置が有する物理ディスクにおける所定領域を仮想マシン１０で動作するゲストＯＳが使用する領域として割り当てることで実現された仮想的なディスクである。例えば、仮想ディスク１１ａは、仮想ＣＰＵ１２が実行対象とするプログラム（ドキュメントファイル操作用プログラム等）や、プログラムの処理対象となるデータ（攻撃コードの含まれている可能性のあるドキュメントファイル等）等を記憶する。
【００３３】
シャドウディスク１１ｂは、仮想ディスク１１ａ上の値に対して設定されたテイントタグの値を保持するデータ構造体である。
【００３４】
図２の仮想ＣＰＵ１２は、情報処理装置が有する物理ＣＰＵにおける所定処理能力を仮想マシン１０で動作するゲストＯＳが使用するＣＰＵとして割り当てることで実現された仮想的なＣＰＵである。この仮想ＣＰＵ１２は、物理ＣＰＵが保持しているテイントタグを保持するシャドウレジスタ（図示省略）を備える。この仮想ＣＰＵ１２は、プログラム実行部１３と、テイント解析部１５と、判定部１６と、命令監視部１７と、解析実行部１８とを備える。
【００３５】
プログラム実行部１３は、仮想ディスク１１ａに記憶されるプログラムを実行する。例えば、プログラム実行部１３は、仮想ディスク１１ａから、ドキュメントファイル操作用プログラムを読み出して仮想物理メモリ１０ａに展開し、実行する。また、プログラム実行部１３は、このドキュメントファイル操作用プログラムにより攻撃コードを含むドキュメントファイルが読み込まれた場合、この攻撃コードに基づく実行処理を行う。
【００３６】
テイント解析部１５は、テイントタグが設定されたデータが仮想ＣＰＵ１２（具体的にはプログラム実行部１３）で実行する命令に渡された際、テイントタグの伝搬ルールに基づいてテイントタグを命令の実行結果に伝搬させる。プログラム実行部１３で実行する命令にテイントタグが設定されたデータが渡されるとは、具体的には、命令のオペランドで渡された値がテイントタグを保持している場合である。
【００３７】
テイントタグの伝搬ルールとしては、以下のものが考えられる。例えば、仮想ＣＰＵ１２において機械語命令が実行される際、１つ以上のオペランドを伴う算術演算命令、論理演算命令、データ移動命令、データコピー命令の実行の際に、ソースオペランドの１つにテイントタグを持った値が渡された場合、その命令の実行結果を保存する箇所、ディスティネーションオペランドにもテイントタグを設定するというものである。
【００３８】
テイントタグの伝搬ルールは、様々なものが考えられるが、命令の実行結果が、読み込まれた値に依存して決定されている場合、テイントタグを伝搬させるといった基本的なルールにより構成される。つまり、テイント解析部１５は、プログラム実行部１３の命令のうち何かしらの形でデータを扱うものに関してはテイントタグの伝搬を伴う動作が行われる。
【００３９】
判定部１６は、プログラム実行部１３にて実行している命令に解析対象を示すテイントタグが設定されているか否かを判断し、設定されていた場合は攻撃が行われたと判断する。つまり、判定部１６は、ドキュメントファイルに基づく攻撃を検知する。
【００４０】
命令監視部１７は、判定部１６による攻撃の検知以降、そのドキュメントファイルに設定されたテイントタグを持つ命令を解析対象と判断する。
【００４１】
解析実行部１８は、命令監視部１７において解析対象と判断された命令の実行を監視し、攻撃コードによる命令の実行内容を解析する。例えば、解析実行部１８は、解析対象の命令の実行に関して詳細なトレースログを取得し、仮想ＣＰＵ１２のレジスタの情報や、スタックに関する情報を一緒に取得する。
【００４２】
仮想ＨＷコントローラ１９は、仮想ディスク１１ａと仮想物理メモリ１０ａとの間、シャドウディスク１１ｂとシャドウメモリ１０ｂとの間のデータ送受信を制御する。例えば、仮想ＨＷコントローラ１９は、プログラム実行部１３が仮想ディスク１１ａから読み出したプログラムを仮想物理メモリ１０ａに格納する。また、仮想ＨＷコントローラ１９は、プログラム等によって仮想物理メモリ１０ａから読み出されたデータを仮想ディスク１１ａに格納する。このような仮想ＨＷコントローラ１９は、テイントタグの伝搬を実行するテイント情報伝搬部１９ａを有する。
【００４３】
テイント情報伝搬部１９ａは、仮想ディスク１１ａと仮想物理メモリ１０ａとの間でテイントタグの伝播を行う。つまり、テイント情報伝搬部１９ａは、シャドウディスク１１ｂとシャドウメモリ１０ｂとの間でテイントタグを伝搬させる。例えば、仮想ＨＷコントローラ１８が、監視対象のプログラムによって仮想物理メモリ１０ａから読み出されたデータを仮想ディスク１１ａに格納するとき、これに伴い、シャドウメモリ１０ｂ上の当該読み出されたデータのテイントタグをシャドウディスク１１ｂ上に格納する。
【００４４】
テイントタグ付与部１４は、情報処理装置の入出力インタフェース経由で、解析対象であるドキュメントファイルに設定するテイントタグの入力を受け付ける。そして、テイントタグ付与部１４は、入力されたテイントタグを、解析対象であるドキュメントファイル、つまり、攻撃コードが含まれている可能性のあるドキュメントファイルに対して設定する。設定するテイントタグは、ドキュメントファイルであることが識別できればよく、ドキュメントファイル全体に対して同じテイントタグを設定してもよいし、そのドキュメントファイルのファイルフォーマットを解釈し、ファイルの意味のある区切りごとに異なるテイントタグの値を設定してもよい。
【００４５】
なお、このテイントタグは、解析対象のドキュメントファイルを開く前に仮想ディスク１１ａ上に保存されているドキュメントファイルに対して設定してもよいし、解析対象のドキュメントファイルを開いた直後の仮想物理メモリ１０ａ上にマッピングされたドキュメントファイルのデータに対して設定してもよい。
【００４６】
仮想ディスク１１ａ上に保存されているドキュメントファイルに対して設定する場合は、シャドウディスク１１ｂにテイントタグの値を保存する。仮想物理メモリ１０ａ上にマッピングされたドキュメントファイルのデータに対してテイントタグを設定する場合、シャドウメモリ１０ｂに対してテイントタグを設定する。
【００４７】
このような仮想マシン１０によれば、攻撃コードを含むドキュメントファイルを検知し、その攻撃コードに基づく挙動を監視することができる。
【００４８】
［検知と解析の手順］
次に、図５を用いて仮想マシン１０による攻撃コードによる攻撃の検知と解析の手順を説明する。図５は、仮想マシンによる攻撃コードによる攻撃の検知と解析の手順を示すフローチャートである。なお、仮想マシン１０は、事前にテイントタグ付与部１４により攻撃コードが含まれている可能性のあるドキュメントファイルにテイントタグを設定し、仮想ディスク１１ａ内に格納しておくものとする。
【００４９】
まず、仮想マシン１０のプログラム実行部１３は、ドキュメントファイル操作用プログラムを動作させ、仮想ディスク１１ａに格納されたドキュメントファイルを開く（Ｓ１）。その後、判定部１６は、プログラム実行部１３にて実行している命令が保持しているテイントタグを確認し（Ｓ２）、そのテイントタグがドキュメントファイルに設定されたものであれば（Ｓ３のＹｅｓ）、そのドキュメントファイルに含まれる攻撃コードによる攻撃であると判断する。以降、命令監視部１７は、そのドキュメントファイルに設定されたテイントタグを持つ命令を解析対象と判断し（Ｓ４）、解析実行部１８は、命令監視部１７により解析対象と判断された命令について、解析を実行する（Ｓ５）。つまり、解析実行部１８は、ドキュメントファイルに含まれる攻撃コードによる命令の実行内容を解析する。例えば、解析実行部１８は、解析対象の命令の実行に関して詳細なトレースログを取得し、仮想ＣＰＵ１２のレジスタの情報や、スタックに関する情報を一緒に取得する。
【００５０】
一方、Ｓ３において、判定部１６は、Ｓ２で確認したテイントタグがドキュメントファイルに設定されたものでなければ（Ｓ３のＮｏ）、処理を終了する。
【００５１】
このような仮想マシン１０によれば、攻撃コードを含むドキュメントファイルを検知し、その攻撃コードに基づく挙動を監視することができる。
【００５２】
［第２の実施形態］
次に、本発明の第２の実施形態について説明する。図６は、第２の実施形態の仮想マシンの動作の概要を説明する図である。
【００５３】
第２の実施形態の仮想マシン１０は、図６に示すように、第１の実施形態と同様、ドキュメントファイルにテイントタグを設定しておく。そして、仮想マシン１０のドキュメントファイル操作プログラムにより行われた仮想物理メモリ１０ａへのすべての書き込みに対してテイントタグを設定する。つまり、仮想物理メモリ１０ａにはドキュメントファイル内の攻撃コードを展開したオリジナルコードと、オリジナルコード以外の通常のデータとが書き込まれる可能性があるが、仮想マシン１０は、その両方にテイントタグを設定する。
【００５４】
具体的には、仮想マシン１０のテイントタグ付与部１４において、ドキュメントファイル操作プログラムに対してもこれを一意に特定できるテイントタグを設定しておく。そして、テイント解析部１５は、ドキュメントファイル操作プログラムによりプログラム実行部１３が行った書き込みに対して、解析対象であることを示すテイントタグを設定する。
【００５５】
このようにすることで、ドキュメントファイル内の攻撃コードが、ドキュメントファイル操作プログラムにより仮想物理メモリ１０ａ上に書き出される過程で、このドキュメントファイルに設定されたテイントタグが消失することにより、攻撃コードによる挙動を解析できないという事態を避けることができる。
【００５６】
なお、ドキュメントファイルに設定されたテイントタグが消失する場合としては、そのドキュメントファイル内の攻撃コードが難読化または暗号化されている場合が考えられる。つまり、仮想マシン１０において、ドキュメントファイル操作プログラムにより、その攻撃コードを読み込まれると、攻撃コードの難読化が解かれたり、復号化が行われたりする。その過程で、ドキュメントに設定されていたテイントタグが消失し、仮想物理メモリ１０ａ上に展開された攻撃コード（オリジナルコード）にはテイントタグが設定されていない状態が発生しうるが、本実施の形態はそのような場合を想定している。
【００５７】
なお、ドキュメントファイルに設定したテイントタグが消失しなかった場合は、ドキュメントファイル操作プログラムにより仮想物理メモリ１０ａ上に書き出される値に対して、そのテイントタグが設定される。
【００５８】
以下、第２の実施形態の仮想マシン１０を詳細に説明する。まず、テイントタグ付与部１４は、仮想ディスク１１ａ内のドキュメントファイル操作プログラムのコード部分にテイントタグを設定する。ここで設定するテイントタグの値は、ドキュメントファイルに設定したテイントタグとは異なる値とする。
【００５９】
例えば、ドキュメントファイルに設定したテイントタグを「Tag=DOC」とし、ドキュメントファイル操作用プログラムに設定したテイントタグを「Tag=DOC_OP」とする。プログラム実行部１３で、この「Tag=DOC_OP」のテイントタグが設定されている命令が何かしらの書き込み操作を行ったが、書き込まれる値が、ドキュメントファイルに設定したテイントタグ（Tag=DOC）を持っていない場合は、テイント解析部１５はその書き込み先に対して、解析対象を示すテイントタグ「Tag=WRITTEN（またはTag=DOC）」を設定する。
【００６０】
そして、判定部１６は、この解析対象を示すテイントタグ（例えば、Tag=DOCまたはTag=WRITTEN）を持った命令が実行された場合、攻撃コードによる攻撃であると判断する。そして、以降、命令監視部１７は、このテイントタグを持つ命令を解析対象とする。一方、この解析対象を示すテイントタグを持たない命令（例えば、Tag=DOC_OPのテイントタグを持つ命令）が実行された場合、攻撃コードによる攻撃ではないと判断し、命令監視部１７は、この命令を解析対象としない。
【００６１】
このようにすることで、ドキュメントファイル内の攻撃コードの検知および攻撃コードによる挙動の解析を確実に行うことができる。
【００６２】
［第３の実施形態］
また、仮想マシン１０において、ドキュメントファイル操作プログラムが、ＪＩＴ(Just  In  Time）コンパイラ機能を持ったプログラムである場合、テイントタグ付与部１４は、このＪＩＴにより生成されるコード（バイト列）に所定のテイントタグ（例えば、Tag=JIT）を設定してもよい。そして、判定部１６は、このテイントタグ（例えば、Tag=JIT）を持った命令が実行された場合は、攻撃コードによる攻撃ではないと判断するようにしてもよい。
【００６３】
図７は、第３の実施形態の仮想マシンの動作の概要を説明する図である。仮想マシン１０は、図７に示すようにドキュメントファイル操作プログラムにより仮想物理メモリ１０ａに書き込まれたデータのうち、ＪＩＴにより生成された命令列については所定のテイントタグ（例えば、Tag=JIT）を設定し、それ以外のデータについては、別のテイントタグを設定する。そして、仮想マシン１０は、ＪＩＴにより生成された命令列であることを示すテイントタグ（例えば、Tag=JIT）が設定されたバイト列が実行された場合は、これを解析対象外とし、それ以外のテイントタグ（例えば、Tag=WRITTEN）が設定されたデータが実行された場合は、これを解析対象とする。
【００６４】
なお、ＪＩＴコンパイラ機能を持ったドキュメントファイル操作プログラムは、例えば、Acrobat  Reader（登録商標）等である。このAcrobat  Reader（登録商標）は、ＪＩＴコンパイラ機能を持ったJavascript（登録商標）のエンジンを持っている。
【００６５】
このようにすることで、仮想マシン１０において、ドキュメントファイルの操作に、ＪＩＴコンパイラ機能を備えるドキュメントファイル操作プログラムを用いた場合でも、このドキュメントファイルの攻撃を検知し、解析を行うことができる。
【００６６】
すなわち、前記したとおり、仮想マシン１０の判定部１６は、仮想物理メモリ１０ａ上に書き出された、ドキュメントファイルのデータ（命令列）がプログラム実行部１３により実行されたときに、そのドキュメントファイルによる攻撃を検知する。ここで、ＪＩＴコンパイラ機能（以下、適宜「ＪＩＴ」と略す）を持つドキュメントファイル操作プログラムは、ドキュメントファイル内のスクリプト実行時に実行バイナリコードを仮想物理メモリ１０ａ上に書き出し、それを実行する。
【００６７】
このとき、仮想マシン１０のテイント解析部１５は、ＪＩＴで生成されたスクリプトの命令列について、ＪＩＴで生成された命令列であることを示すテイントタグを設定する。そして、判定部１６は、通常であれば、テイントタグを保持する命令について攻撃であると判断するが、このＪＩＴで生成された命令については攻撃ではないと判定する。このようにすることで、仮想マシン１０は、ＪＩＴで生成された命令について、誤って攻撃であると判定してしまうことを避けることができる。
【００６８】
なお、テイントタグ付与部１４は、仮想ディスク１１ａ内のドキュメントファイル操作プログラムのＪＩＴで生成されるバイト列を保持している場所（例えば、データセクション）に、ＪＩＴで生成されるバイト列であることを示すテイントタグを設定する。
【００６９】
例えば、ドキュメントファイル操作プログラム内のＪＩＴコンパイラ機能（ＪＩＴエンジン）が、以下の表１に例示するようなスクリプト→バイト列の変換テーブルを保持している場合、テイントタグ付与部１４は、この変換テーブルのバイト列の部分に、所定のテイントタグ（例えば、Tag=JIT）を設定しておく。
【００７０】
【表１】
2014225161.tif 000003
【００７１】
これにより、ドキュメントファイル操作プログラムのＪＩＴにより生成された部分には、所定のテイントタグ（例えば、Tag=JIT）が設定され、それ以外の部分には、通常のテイントタグ（例えば、Tag=WRITTEN）が設定される。したがって、判定部１６は、プログラム実行部１３により実行される命令のうち、ＪＩＴで生成された命令について攻撃ではないと判定する。
【００７２】
なお、ドキュメントファイル操作プログラムのＪＩＴにより生成された部分に設定されるテイントタグは、必ずしも「ＪＩＴにより生成されたことを示すテイントタグ」である必要はなく、単に解析対象外であることを示すテイントタグであってもよい。
【００７３】
さらに、仮想マシン１０は、ドキュメントファイル操作プログラムにより生成されたデータへのテイントタグ（例えば、Tag=WRITTEN）の設定をしつつ、このうちＪＩＴにより生成された部分へは、別のテイントタグ（例えば、Tag=JIT）を設定するようにしてもよい。
【００７４】
図８は、仮想マシンが、ドキュメントファイル操作プログラムにより生成されたデータへのテイントタグ（例えば、Tag=WRITTEN）の設定をしつつ、このうちＪＩＴにより生成された部分へは、別のテイントタグ（例えば、Tag=JIT）を設定した場合の動作概要を説明する図である。
【００７５】
仮想マシン１０は、図８に示すように、ドキュメントファイル操作プログラムにより、難読化された攻撃コードとスクリプトとを含むドキュメントファイルが読み込まれると、ＪＩＴで生成されたスクリプトの命令列には、所定のテイントタグ（例えば、Tag=JIT）を設定する。また、ドキュメントファイル操作プログラムにより、攻撃コードの難読化が解かれ、仮想物理メモリ１０ａ上にオリジナルコードが書き込まれた場合、そのオリジナルコード、また、その他の通常のデータ書き込みがあれば、仮想マシン１０は、そのデータにドキュメントファイル操作プログラムに設定されたテイントタググ（例えば、Tag=WRITTEN）を設定する。ここで、ドキュメントファイルに設定したテイントタグが消失していた場合、つまり、書き込まれる値が何もテイントタグを持っていなかった場合、仮想マシン１０は、Tag=WRITTENを書き込むが、テイントタグが消失していなかった場合は、伝搬してきたテイントタグ（Tag=DOC）をそのまま書き込む。
【００７６】
そして、仮想マシン１０はＪＩＴで生成されたスクリプトの命令列のテイントタグ（例えば、Tag=JIT）が設定された部分については解析対象外とし、ドキュメントファイル操作プログラムに設定されたテイントタグ（例えば、Tag=WRITTEN）が設定された部分については解析対象とする。また、仮想マシン１０は、伝搬してきたタグ（Tag=DOC）が設定されている部分についても解析対象とする。
【００７７】
このようにすることで、ドキュメントファイルが難読化または暗号化された攻撃コードを含み、かつ、ドキュメントファイル操作プログラムがＪＩＴ機能を備える場合でも、ドキュメントファイル内の攻撃コードの検知および攻撃コードによる挙動の解析を確実に行うことができる。
【００７８】
［その他の実施形態］
なお、第１の実施形態の仮想マシン１０において、プログラム実行部１３が、テイントタグが設定された命令が仮想物理メモリ１０ａに対して書き込みを行う場合、仮想物理メモリ１０ａに書き込まれる値が何もテイントタグを保持していないときに、テイント解析部１５が、解析対象を示すテイントタグ（例えば、ドキュメントファイルに設定されたテイントタグと同じタグ）を設定するようにしてもよい。
【００７９】
また、第２の実施形態および第３の実施形態の仮想マシン１０において、プログラム実行部１３が、テイントタグが設定された命令が仮想物理メモリ１０ａに対して書き込みを行う場合、仮想物理メモリ１０ａにドキュメントファイル操作プログラムまたはＪＩＴに設定されたテイントが設定されていないとき、テイント解析部１５が、解析対象を示すテイントタグ（例えば、ドキュメントファイルに設定されたテイントタグと同じタグ）を設定するようにしてもよい。
【００８０】
このようにすることで、仮想物理メモリ１０ａ上に書き込まれたデータに確実にテイントタグを設定することができる。これにより、仮想マシン１０はドキュメントファイルの攻撃を確実に検知し、解析を行うことができる。
【００８１】
また、テイント解析部１５は、プログラム実行部１３により、解析対象の命令から外部関数が呼ばれる場合、その外部関数が復帰した時点を捉え、その外部関数により書き込まれた仮想物理メモリ１０ａ上のデータを特定し、その書き込まれた全てのデータに対して解析対象を示すテイントタグを設定してもよい。このようにすることで、ドキュメントから外部関数が呼ばれることで攻撃がされる場合でも、解析を行うことができる。
【００８２】
また、判定部１６は、プログラム実行部１３で読み込んだ命令が分岐命令の場合、分岐先の命令にテイントタグが設定されていたとき、攻撃と判断してもよい。また、この分岐命令が、アドレスを指定して分岐する命令の場合、その指定されたアドレスに解析対象を示すテイントタグが設定されていたとき、攻撃と判断してもよい。なお、ここで言う分岐命令は条件分岐命令、無条件分岐命令の両者を含む。判定部１６は、上記のような分岐命令の実行前後の挙動だけでなく、全ての命令の実行を逐次的に確認してもよい。
【００８３】
さらに、解析実行部１８は、解析対象と判断された命令から呼び出されるライブラリ関数と、その詳細情報を取得してもよい。このライブラリ関数は、ＡＰＩ、システムコール、ローカル関数等であり、詳細情報としては、そのライブラリ関数のライブラリ名、モジュール名、引数の値や型、その関数を呼び出した位置情報やインスタンス情報等である。なお、解析実行部１８は、ライブラリ関数は呼び出された場合のみならず、ライブラリ関数から解析対象の命令へ実行が遷移する際にもその実行を捕らえ詳細情報を出力してもよい。
【００８４】
なお、仮想マシン１０は、Binary Instrumentationを利用し特定のプロセスのみを仮想化するプロセス型の仮想マシンを利用してもよいし、アプリケーションとして動作する仮想マシンモニタではなく、XenやKVM（Kernel-based Virtual Machine）のようにホストOSと仮想マシンモニタを同じ層に実装するような仮想化を利用してもよい。また、仮想化実装のため、Intel（登録商標）-VT（Virtualization Technology）のようなHW（ハードウェア）サポートを利用してもよい。
【００８５】
［プログラム］
また、情報処理装置が実行する処理をコンピュータが実行可能な言語で記述した監視プログラムを作成することもできる。この場合、コンピュータが監視プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる監視プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された監視プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、図１等に示した情報処理装置と同様の機能を実現する監視プログラムを実行するコンピュータの一例を説明する。
【００８６】
図９は、監視プログラムを実行するコンピュータを示す図である。図９に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００８７】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【００８８】
ここで、図９に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。上記実施形態で説明した監視対象のプログラムは、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【００８９】
また、監視プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０９０に記憶される。具体的には、プログラム実行部１３と、テイントタグ付与部１４、テイント解析部１５、判定部１６、命令監視部１７、解析実行部１８それぞれにおいて実行される指令が記述されたプログラムモジュールが、ハードディスクドライブ１０９０に記憶される。
【００９０】
また、監視プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュールやプログラムデータを必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００９１】
なお、監視プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、監視プログラムに係るプログラムモジュールやプログラムデータは、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００９２】
１      ハードウェア
３      仮想マシンソフトウェア
１０    仮想マシン
１０ａ  仮想物理メモリ
１０ｂ  シャドウメモリ
１１ａ  仮想ディスク
１１ｂ  シャドウディスク
１２    仮想ＣＰＵ
１３    プログラム実行部
１４    テイントタグ付与部（タグ付与部）
１５    テイント解析部
１６    判定部
１７    命令監視部
１８    解析実行部
１９    仮想ＨＷコントローラ
１９ａ  テイント情報伝搬部
【図１】
2014225161.tif 000004
【図２】
2014225161.tif 000005
【図３】
2014225161.tif 000006
【図４】
2014225161.tif 000007
【図５】
2014225161.tif 000008
【図６】
2014225161.tif 000009
【図７】
2014225161.tif 000010
【図８】
2014225161.tif 000011
【図９】
2014225161.tif 000012