(57)【特許請求の範囲】
【請求項１】
解析対象であるプログラムによって通信先装置から受信したデータに、当該通信先装置を識別可能なタグを付与する付与部と、
新たなプログラムの起動又は起動予約を検出したときに、当該新たなプログラムが実行するデータに前記タグが付与されているか否かを判断し、前記タグが付与されている場合に、当該タグにより識別される通信先装置を特定する特定部と
を有することを特徴とする情報処理装置。
【請求項２】
前記付与部は、前記タグと、前記通信先装置の識別子とを対応付けた通信先情報を生成するとともに、前記データの記憶領域における格納位置を示す情報と、前記タグとを対応付けた位置情報を生成することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記付与部は、前記通信先装置から受信したデータを含むパケットから前記通信先装置の識別子を抽出することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記付与部は、監視対象命令が呼び出された際に、当該監視対象命令の記憶領域における格納位置に対応付けて当該監視対象命令が通信用であることを示す通信情報が記憶されている場合、当該監視対象命令から前記通信先装置の識別子を抽出することを特徴とする請求項２又は３に記載の情報処理装置。
【請求項５】
前記データのフローに応じて、前記位置情報を更新する更新部を更に有することを特徴とする請求項２又は３に記載の情報処理装置。
【請求項６】
前記特定部は、監視対象命令が呼び出された際に、当該監視対象命令の記憶領域における格納位置に対応付けてプログラムの起動用又はプログラムの起動予約用であることを示す起動情報が記憶されている場合、プログラムの起動又は起動予約を検出することを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記特定部は、実行する機械語命令の記憶領域における格納位置に対応付けて前記タグが付与されている場合、当該タグにより識別される通信先装置を特定することを特徴とする請求項１に記載の情報処理装置。
【請求項８】
コンピュータが、
解析対象であるプログラムによって通信先装置から受信されたデータに、当該通信先装置を識別可能なタグを付与する付与工程と、
新たなプログラムの起動又は起動予約を検出したときに、当該新たなプログラムが実行するデータに前記タグが付与されている場合、当該タグにより識別される通信先装置を特定する特定工程と
を含んだことを特徴とする特定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び特定方法に関する。
【背景技術】
【０００２】
従来、マルウェアの解析手法には、大別して静的解析と動的解析とがある。静的解析は、マルウェアのプログラムコードを解析することでマルウェアが備える機能を把握する手法である。ただし、静的解析は、マルウェアが備える機能を網羅的に解析するので、多くの人手による作業が伴う。一方、動的解析は、マルウェアの振る舞いを記録する環境を用意し、この環境内でマルウェアを動作させることで、マルウェアの機能を解析する手法である。動的解析は、マルウェアの振る舞いを抽出する解析であるので、静的解析と比較して自動化が容易である。【０００３】
こうしたマルウェアの動的解析の１つとして、動的テイント解析がある。動的テイント解析では、例えば仮想マシンにおいて、仮想ＣＰＵ（Central  Processing  Unit）が、仮想メモリや仮想ディスク等でマルウェアが読み書きするデータの流れを追跡する。より具体的には、動的テイント解析は、テイントタグの付与、テイントタグの伝搬、テイントタグの検出という３つのフェーズから構成される。【０００４】
例えば、マルウェアによる機密情報の漏洩を検出する場合、仮想ＣＰＵは、以下の処理を実行する。まず、第１のフェーズでは、仮想ＣＰＵは、マルウェアを動作させる。そして、仮想ＣＰＵは、機密情報を含むファイルがメモリに読み込まれる段階で、機密情報を含むファイルのメモリにおける格納位置に対応付けて、機密情報を意味するテイントタグを付与する。通常、このテイントタグは、ＯＳ（Operating  System）が管理する物理メモリとは別に用意された領域（「シャドウメモリ」とも呼ばれる）に格納される。この領域は、ＯＳやアプリケーション（マルウェアを含む）からはアクセスできないように実装される。【０００５】
その後、第２のフェーズでは、仮想ＣＰＵは、レジスタとメモリ領域との間の転送命令等を監視することで、機密情報のコピーに応じてテイントタグが伝搬する。そして、第３のフェーズでは、仮想ＣＰＵは、ネットワークインタフェースから出力されるデータに、機密情報を意味するテイントタグが付与されているかを確認する。仮想ＣＰＵは、出力されるデータにテイントタグが付与されている場合、機密情報が外部へ出力されようとしたことを検出する。【０００６】
また、動的テイント解析を応用した例として、デバッガにおけるブレークポイントをテイントタグにより実現する技術がある。この技術では、利用者が、プログラムを中断させたい箇所（「ブレークポイント」を設定する箇所）に対して、テイントタグを事前に割り当てる。そして、仮想ＣＰＵは、実行する命令に対応付けてテイントタグが付与されているかを検査し、テイントタグが付与されている場合にプログラムを中断する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−８３７９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記の従来技術では、マルウェアの配布先を特定することができないという問題がある。【０００９】
例えば、マルウェアによる通信をネットワークで遮断することは、マルウェアによる被害を抑制する効果を期待できる。一方、動的解析において得られるマルウェアの通信先には、端末内の情報を漏洩させる先以外にも、様々なホストが含まれる。例えば、新たなマルウェアを配布するサイト（「マルウェア配布サイト」という）や、マルウェア自身がネットワークに接続されていることを確認するためのサイトなどがある。マルウェア自身がネットワークに接続されていることを確認するためのサイトは、一般的な検索エンジンなどの正規サイトであることが多い。【００１０】
このため、マルウェアの通信先の全てを一般ユーザがアクセスすべきでない通信先として扱う場合、一般ユーザは、例えば検索エンジンなどの正規サイトへもアクセスできなくなる。すなわち、マルウェアの通信先をネットワークでのマルウェア対策に活用することは困難である。このようなことから、マルウェア配布サイトを特定する手法が望まれる。【００１１】
開示の技術は、上述に鑑みてなされたものであって、マルウェアの配布先を特定することを目的とする。
【課題を解決するための手段】
【００１２】
本願の開示する情報処理装置は、付与部と、特定部とを有する。付与部は、解析対象であるプログラムによって通信先装置から受信されたデータに、当該通信先装置を識別可能なタグを付与する。特定部は、新たなプログラムの起動又は起動予約を検出したときに、当該新たなプログラムが実行するデータに前記タグが付与されている場合、当該タグにより識別される通信先装置を特定する。
【発明の効果】
【００１３】
開示する情報処理装置の一つの態様によれば、マルウェアの配布先を特定することができるという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】図１は、情報処理装置の構成例を示す図である。
【図２】図２は、仮想ハードウェアの構成を示す機能ブロック図である。
【図３】図３は、通信先情報テーブルが記憶する情報の一例を示す図である。
【図４】図４は、付与部による処理動作を説明するための図である。
【図５】図５は、付与部によるテイントタグを付与する処理の手順を示すフローチャートである。
【図６】図６は、特定部によるマルウェア配布サイトを特定する処理の手順を示すフローチャートである。
【図７】図７は、コンピュータシステムによる処理を実行するための特定プログラムによる情報処理がコンピュータを用いて具体的に実現されることを示す図である。
【発明を実施するための形態】
【００１５】
以下に、開示する情報処理装置及び特定方法の実施形態について、図面に基づいて詳細に説明する。なお、本実施形態により開示する発明が限定されるものではない。
【００１６】
（第１の実施形態）
図１は、情報処理装置１０の構成例を示す図である。図１に示すように、情報処理装置１０は、物理マシン２０と、仮想マシン３０とを有する。物理マシン２０は、ハードウェア２１と、ホストＯＳ（Operating  System）２２と、仮想マシンソフトウェア２３とを有する。
【００１７】
ハードウェア２１は、情報処理装置１０を構成する電子回路や周辺機器であり、例えば、メモリ、ＣＰＵ（Central  Processing  Unit）などである。また、ハードウェア２１は、後述する解析対象プログラム３３とその解析を行うための環境を格納したディスクのイメージファイルを記憶する。つまり、ハードウェア２１は、仮想マシン３０上で起動させるゲストＯＳ３２のイメージを記憶する。なお、ゲストＯＳ３２については、後述する。
【００１８】
ホストＯＳ２２は、仮想マシン３０を動作させる基盤となるＯＳであり、ハードウェア２１を用いて実行される。仮想マシンソフトウェア２３は、ハードウェア２１を用いて仮想マシン３０を提供するソフトウェアであり、ここでは、仮想マシン３０を動作させる。例えば、仮想マシンソフトウェア２３は、仮想ディスク、仮想メモリ、仮想ＣＰＵなどを含んだ仮想ハードウェア３１をゲストＯＳ３２に割り当てて、仮想マシン３０を動作させる。
【００１９】
仮想マシン３０は、例えば、仮想ハードウェア３１と、ゲストＯＳ３２と、解析対象プログラム３３とを有する。仮想ハードウェア３１は、仮想マシンソフトウェア２３から提供された仮想ディスク、仮想物理メモリ、仮想ＣＰＵなどを用いてゲストＯＳ３２を動作させて、各種処理を実行する仮想的な情報処理装置である。ゲストＯＳ３２は、解析対象プログラム３３を動作させる。解析対象プログラム３３は、情報処理装置１０において解析対象であるプログラムやアプリケーションであり、例えばマルウェアである。
【００２０】
また、図１に示す例では、情報処理装置１０は、任意のネットワーク５を介して、複数の通信先装置２ａ〜２ｃと接続する。ここでは、通信先装置２ａは、マルウェア配布サイトであり、通信先装置２ｂは、検索サイトであり、通信先装置２ｃは、機密情報漏洩先サイトであるものとする。マルウェア配布サイトは、マルウェアに対してデータを送信する装置である。検索サイトは、例えば、検索エンジンを含んだ装置であり、マルウェアによって通信の接続を確認するのに利用される。機密情報漏洩先サイトは、マルウェアが取得した例えば機密情報を受信する装置である。なお、マルウェア配布サイトと機密情報漏洩先サイトとが同一であってもよい。また、以下では、通信先装置２ａ〜２ｃを区別することなしに一般化して呼ぶ場合には、通信先装置２と記載する。なお、情報処理装置１０が接続する通信先装置２の数は、図１に図示した数に限定されるものではない。
【００２１】
このような構成において、情報処理装置１０の仮想マシン３０は、解析対象プログラム３３によって通信先装置２から受信されたデータに、当該通信先装置２を識別可能なテイントタグを付与する。そして、仮想マシン３０は、新たなプログラムの起動又は起動予約を検出したときに、当該新たなプログラムが実行するデータにテイントタグが付与されている場合、当該テイントタグにより識別される通信先装置２をマルウェア配布サイトとして特定する。
【００２２】
次に、図２を用いて、図１に示した仮想ハードウェア３１の機能構成を説明する。図２は、仮想ハードウェア３１の構成を示す機能ブロック図である。仮想ハードウェア３１は、ゲストＯＳ３２を動作させて、各種処理を実行する仮想的な情報処理装置であり、仮想メモリ４１ａ、シャドウメモリ４１ｂ、仮想ディスク４２ａ、シャドウディスク４２ｂ、仮想ＮＩＣ（Network  Interface  Card）４３、通信先情報テーブル４４、及び仮想ＣＰＵ４５を有する。なお、仮想メモリ４１ａ、シャドウメモリ４１ｂ、仮想ディスク４２ａ、シャドウディスク４２ｂ、仮想ＮＩＣ４３、通信先情報テーブル４４、及び仮想ＣＰＵ４５などは、仮想マシンソフトウェア２３から提供される。
【００２３】
仮想メモリ４１ａは、情報処理装置１０が有する物理メモリにおける所定領域を仮想マシン３０で動作するゲストＯＳ３２が使用するメモリとして割り当てることで実現された仮想的なメモリである。例えば、仮想メモリ４１ａは、仮想ＣＰＵ４５によって仮想ディスク４２ａから読み出されたプログラムやデータを記憶する。
【００２４】
シャドウメモリ４１ｂは、データが記憶される仮想メモリ４１ａ上の格納位置を特定する情報と、データが監視対象であることを示すテイントタグとを対応付けた位置情報を記憶するデータ構造体である。例えば、シャドウメモリ４１ｂの構造としては、単純な配列構造でもよいし、ツリー構造としてテイントタグを保持してもよい。また、格納する情報としては、テイントタグとしての値を持たせてもよいし、テイント情報を保持させたデータ構造体へのポインタとして持たせてもよい。
【００２５】
また、シャドウメモリ４１ｂは、ＡＰＩやシステムコールが記憶される仮想メモリ４１ａ上の格納位置を特定する情報と、ブレークポイント情報とを対応付けて記憶するデータ構造体である。ここで言う「ブレークポイント情報」とは、解析対象プログラム３３により生成されたプロセスを停止させて、解析用の処理を実行することを示す情報である。具体的には、ブレークポイント情報には、ＡＰＩやシステムコールが通信用であることを示す通信用情報や、ＡＰＩやシステムコールが新たなプログラムの起動用又はプログラムの起動予約用であることを示す起動用情報が含まれる。なお、これらのブレークポイント情報は、利用者によって事前に設定される。
【００２６】
また、シャドウメモリ４１ｂが記憶するＡＰＩやシステムコールには、ネットワーク通信用の標準ＡＰＩ、新たなプログラムの起動や起動予約をするシステムコールや標準ＡＰＩ等が含まれる。より具体的には、例えば、ＯＳがＷｉｎｄｏｗｓ（登録商標）である場合、新たなプログラムの起動や起動予約を実行するシステムコールには、ＮｔＣｒｅａｔｅＰｒｏｃｅｓｓが含まれ、新たなプログラムの起動や起動予約を実行する標準ＡＰＩには、ＣｒｅａｔｅＰｒｏｃｅｓｓ／ＷｉｎＥｘｅｃ／ＣｒｅａｔｅＳｅｒｖｉｃｅが含まれる。また、例えば、ＯＳがＬｉｎｕｘ（登録商標）である場合、新たなプログラムの起動や起動予約を実行するシステムコールには、ｅｘｅｃｖｅが含まれ、新たなプログラムの起動や起動予約を実行する標準ＡＰＩには、ｓｙｓｔｅｍ／ｅｘｅｃｌが含まれる。
【００２７】
また、ＯＳがＷｉｎｄｏｗｓ（登録商標）である場合、ＯＳ起動時に実行されるスタートアップフォルダや特定のレジストリへの書き込みも、新たなプログラムの起動予約に使われる。このため、シャドウメモリ４１ｂは、ＯＳ起動時に実行されるスタートアップフォルダや特定のレジストリへ書き込むシステムコールや標準ＡＰＩが記憶される仮想メモリ４１ａ上の格納位置を示す情報と、起動用情報（ブレークポイント情報）とを対応付けて記憶する。
【００２８】
また、新たなプログラムが動的リンクライブラリの形態をとる場合もある。この動的リンクライブラリを読み込む標準ＡＰＩには、ＬｏａｄＬｉｂｒａｒｙ（Ｗｉｎｄｏｗｓ（登録商標）の標準ＡＰＩ）が含まれる。このため、シャドウメモリ４１ｂは、ＬｏａｄＬｉｂｒａｒｙなどの動的リンクライブラリを読み込むシステムコールや標準ＡＰＩが記憶される仮想メモリ４１ａ上の格納位置を示す情報と、起動用情報（ブレークポイント情報）とを対応付けて記憶する。なお、以下では、システムコールや標準ＡＰＩのことを「監視対象命令」と言う場合がある。
【００２９】
仮想ディスク４２ａは、情報処理装置１０が有する物理ディスクにおける所定領域を仮想マシン３０で動作するゲストＯＳ３２が使用する領域として割り当てることで実現された仮想的なディスクである。例えば、仮想ディスク４２ａは、仮想ＣＰＵ４５が実行対象とするプログラムや、プログラムの処理対象となるデータ等を記憶する。
【００３０】
シャドウディスク４２ｂは、データが記憶される仮想ディスク４２ａ上の格納位置を特定する情報と、データが監視対象であることを示すテイントタグとを対応付けた位置情報を記憶するデータ構造体である。例えば、シャドウディスク４２ｂの構造としては、単純な配列構造でもよいし、ツリー構造としてテイントタグを保持してもよい。また、格納する情報としては、テイントタグとしての値を持たせてもよいし、テイント情報を保持させたデータ構造体へのポインタとして持たせてもよい。
【００３１】
また、シャドウディスク４２ｂは、ＡＰＩやシステムコールが記憶される仮想メモリ４１ａ上の格納位置を特定する情報と、ブレークポイント情報とを対応付けて記憶するデータ構造体である。なお、シャドウディスク４２ｂが記憶するＡＰＩやシステムコール及びブレークポイント情報は、シャドウメモリ４１ｂが記憶するＡＰＩやシステムコール及びブレークポイント情報と同様であるので、詳細な説明は省略する。
【００３２】
仮想ＮＩＣ４３は、ゲストＯＳ３２からＮＩＣとして認識され、物理ＣＰＵで動作するソフトウェアとして実現される。また仮想ＮＩＣ４３が物理ＮＩＣを制御することで、ゲストＯＳ３２は物理ＮＩＣを通じて通信先装置２と通信することができる。
【００３３】
通信先情報テーブル４４は、テイントタグが付与されたデータの送信元の通信先装置２を示す情報を記憶する。言い換えると、通信先情報テーブル４４は、テイントタグと通信先情報とを関連付けて管理する。図３は、通信先情報テーブル４４が記憶する情報の一例を示す図である。図３に示すように、通信先情報テーブル４４は、「テイントタグ」、「ＩＰ（Internet  Protocol）バージョン」、「送信元アドレス」、「宛先アドレス」、「ＩＰプロトコル」、「送信元ポート番号」、及び「宛先ポート番号」を対応付けた情報を記憶する。
【００３４】
ここで、通信先情報テーブル４４が記憶する「テイントタグ」は、テイントタグの識別子を示す。例えば、「テイントタグ」には、「１」、「２」等のデータ値が格納される。また、通信先情報テーブル４４が記憶する「ＩＰバージョン」は、ＩＰプロトコルのバージョンを示す。例えば、「ＩＰバージョン」には、ＩＰｖ４であることを示す「４」等のデータ値が格納される。また、通信先情報テーブル４４が記憶する「送信元アドレス」は、パケットの送信元装置のアドレスを示す。例えば、「送信元アドレス」には、「１９２．１６８．０．１」、「１７２．１６．０．１」等のデータ値が格納される。また、通信先情報テーブル４４が記憶する「宛先アドレス」は、パケットの受信装置のアドレスを示す。言い換えると、「宛先アドレス」は、情報処理装置１０に割り当てられたアドレスを示す。例えば、「宛先アドレス」には、「１０．０．０．１」が格納される。また、通信先情報テーブル４４が記憶する「ＩＰプロトコル」は、プロトコル番号を示す。例えば、「ＩＰプロトコル」には、ＴＣＰ（Transmission  Control  Protocol）であることを示す「６」、ＵＤＰ（User  Datagram  Protocol）であることを示す「１７」等のデータ値が格納される。また、通信先情報テーブル４４が記憶する「送信元ポート番号」は、送信元のプログラムを特定するポート番号を示す。例えば、「送信元ポート番号」には、「８０」、「２００００」等のデータ値が格納される。また、通信先情報テーブル４４が記憶する「宛先ポート番号」は、受信元のプログラムを特定するポート番号を示す。例えば、「宛先ポート番号」には、「１００００」、「１０００１」等のデータ値が格納される。
【００３５】
一例をあげると、図３に示す通信先情報テーブル４４は、テイントタグ「１」が付与されたデータは、送信元アドレスが「１９２．１６８．０．１」である装置からＩＰｖ４のプロトコルでＴＣＰ層による通信によって受信したことを示す。なお、「送信元ポート番号」と「宛先ポート番号」に関しては、ＩＰプロトコルが６か１７の場合のみ取得される。
【００３６】
仮想ＣＰＵ４５は、情報処理装置１０が有する物理ＣＰＵにおける所定処理能力を仮想マシン３０で動作するゲストＯＳ３２が使用するＣＰＵとして割り当てることで実現された仮想的なＣＰＵである。仮想ＣＰＵ４５は、例えば、プログラム実行部４５ａと、付与部４５ｂと、更新部４５ｃと、特定部４５ｄとを有する。
【００３７】
また、仮想ＣＰＵ４５は、図示しない仮想レジスタとシャドウレジスタとを有する。仮想レジスタは、情報処理装置１０が有する物理レジスタ・物理メモリ・物理ディスクにおける所定領域を仮想マシン３０で動作するゲストＯＳ３２が使用する領域として割り当てることで実現された仮想的なレジスタである。例えば、仮想レジスタは、仮想ＣＰＵ４５によって仮想メモリ４１ａから読み出されたプログラムやデータを記憶する。また、シャドウレジスタは、データが記憶される仮想レジスタ上の格納位置を特定する情報と、データが監視対象であることを示すテイントタグとを対応付けた位置情報を記憶するデータ構造体である。
【００３８】
また、シャドウレジスタは、ＡＰＩやシステムコールが記憶される仮想レジスタ上の格納位置を特定する情報と、ブレークポイント情報とを対応付けて記憶するデータ構造体である。なお、シャドウレジスタが記憶するＡＰＩやシステムコール及びブレークポイント情報は、シャドウメモリ４１ｂが記憶するＡＰＩやシステムコール及びブレークポイント情報と同様であるので、詳細な説明は省略する。
【００３９】
プログラム実行部４５ａは、仮想ディスク４２ａに記憶されるプログラムを実行する処理部である。例えば、プログラム実行部４５ａは、仮想ディスク４２ａからプログラムを読み出して仮想メモリ４１ａに展開する。つまり、プログラム実行部４５ａは、実行対象のプログラムを仮想ディスク４２ａから読み出して仮想メモリ４１ａに格納した後、仮想メモリ４１ａに記憶させた実行対象のプログラムを実行する。
【００４０】
付与部４５ｂは、解析対象プログラム３３によって通信先装置２から受信されたデータに、当該通信先装置２を識別可能なタグを付与する。例えば、付与部４５ｂは、仮想ＮＩＣ４３がパケットを受信したことを検出すると、当該パケット内から通信先情報を取得し、通信先情報テーブル４４内に存在しないテイントタグを生成する。そして、付与部４５ｂは、通信先情報とテイントタグとを関連付けた状態で、通信先情報テーブル４４に格納する。また、付与部４５ｂは、受信したパケットに含まれるデータが抽出され、仮想メモリ４１ａにコピーされる際に、テイントタグを書き込み先の仮想メモリ４１ａと対応するシャドウメモリ４１ｂに格納する。ここで、パケットから抽出されたデータには、プログラム及びプログラムが参照するデータが含まれる。なお、以下では、プログラム及びプログラムが参照するデータのことを単に「データ」と呼ぶ。
【００４１】
図４を用いて、付与部４５ｂによる処理動作を説明する。図４は、付与部４５ｂによる処理動作を説明するための図である。図４に示す例では、図３に示した通信先情報テーブル４４に、新たな通信先情報を格納する場合を説明する。付与部４５ｂは、通信先情報を取得し、テイントタグを生成する。ここで、付与部４５ｂは、図３に示した例では、テイントタグとして１から５までが使用されていたので、新たなテイントタグとして「６」を生成する。なお、付与部４５ｂは、通信先情報テーブル４４内で同じ通信先情報のレコードが存在する場合、このレコードのテイントタグをここで利用するテイントタグとしてもよい。
【００４２】
そして、付与部４５ｂは、通信先情報（ここではＩＰバージョン・送信元アドレス・宛先アドレス・ＩＰプロトコル・送信元ポート番号・宛先ポート番号）とテイントタグ（ここでは「６」）とを関連付けた状態で、通信先情報テーブル４４に格納する。図４に示す例では、付与部４５ｂは、テイントタグ「６」に対応付けて、ＩＰバージョンが「４」、送信元アドレスが「１９２．１６８．３．１」、宛先アドレスが「１０．０．０．１」、ＩＰプロトコルが「６」、送信元ポート番号が「８０」、宛先ポート番号が「１０００３」を通信先情報として通信先情報テーブル４４に格納する。
【００４３】
更新部４５ｃは、データのフローに応じて、データの格納位置を示す情報と、タグとを対応付けた位置情報を更新する。例えば、更新部４５ｃは、プログラム実行部４５ａが解析対象プログラム３３を実行している間、データがコピーされて他の記憶領域に格納されたり、他の記憶領域に移動されたりすると、コピー先や移動先となる記憶領域の格納位置に関連付けて、テイントタグを格納する。なお、ここで言う「記憶領域」には、仮想レジスタ、仮想メモリ４１ａ及び仮想ディスク４２ａが含まれる。
【００４４】
より具体的には、更新部４５ｃは、解析対象プログラム３３を実行している最中に生じる仮想レジスタと仮想メモリ４１ａ間及び仮想メモリ４１ａと仮想ディスク４２ａ間のデータのコピーや、演算命令が生じた場合、データのコピー先や移動先となる記憶領域の格納位置に関連付けて、各記憶領域に対応するシャドウレジスタ、シャドウメモリ４１ｂ及びシャドウディスク４２ｂにテイントタグを格納する。言い換えると、更新部４５ｃは、コピー先や移動先となる記憶領域の格納位置に対して、テイントタグを伝搬させる。なお、以下では、シャドウレジスタ、シャドウメモリ４１ｂ及びシャドウディスク４２ｂをあわせてシャドウ領域と呼ぶ場合がある。
【００４５】
また、更新部４５ｃは、解析対象プログラム３３を実行している最中にＡＰＩやシステムコールのコピーや移動が生じた場合、ＡＰＩやシステムコールのコピー先や移動先となる記憶領域の格納位置に関連付けて、各記憶領域に対応するシャドウ領域にブレークポイント情報を格納する。言い換えると、更新部４５ｃは、コピー先や移動先となる記憶領域の格納位置に対して、ブレークポイント情報を伝搬させる。
【００４６】
特定部４５ｄは、新たなプログラムの起動又は起動予約を検出したときに、当該新たなプログラムが実行するデータにテイントタグが付与されているか否かを判断し、テイントタグが付与されている場合に、当該テイントタグにより識別される通信先装置２を特定する。例えば、特定部４５ｄは、プログラム実行部４５ａが解析対象プログラム３３を実行している間、新たなプログラムの起動や起動予約の実施を常に監視する。新たなプログラムの起動や起動予約は、ゲストＯＳ３２が提供するシステムコールや標準ＡＰＩを介して実施される場合がある。このため、特定部４５ｄは、例えば、解析対象プログラム３３によって呼び出されたシステムコールや標準ＡＰＩの格納位置に対応付けて起動用情報（ブレークポイント情報）が設定されているか否かを判定する。ここで、特定部４５ｄは、システムコールや標準ＡＰＩの格納位置に対応付けて起動用情報（ブレークポイント情報）が設定されている場合、新たなプログラムの起動や起動予約の実施を検出する。
【００４７】
また、特定部４５ｄは、新たなプログラムの起動や起動予約の実施を検出した場合、新たに実行又は実行予約されるプログラムの格納領域に対応するシャドウ領域から、対応するテイントタグが存在するか否かを判定する。なお、ここでいうプログラムの格納領域とは、仮想ディスク４２ａに格納されたファイルを意味する。例えば、Ｗｉｎｄｏｗｓ（登録商標）の標準ＡＰＩであるＷｉｎＥｘｅｃには、その引数として、コマンドラインへのポインタが指定される。また、特定部４５ｄは、プログラムの起動を検出した場合は、プログラムの格納領域に対応するシャドウ領域に、テイントタグが存在するか否かを判定し、プログラムの起動予約を検出した場合は、プログラム及びプログラムが参照するデータの格納領域に対応するシャドウ領域に、テイントタグが存在するか否かを判定する。
【００４８】
特定部４５ｄは、新たに実行又は実行予約されるプログラムの格納領域に対応するシャドウ領域に、テイントタグが存在すると判定した場合、このテイントタグを取得する。そして、特定部４５ｄは、当該テイントタグに対応する通信先情報を通信先情報テーブル４４から取得し、取得した通信先情報をマルウェア配布サイトの通信先情報に特定する。
【００４９】
一例をあげると、特定部４５ｄは、通信先情報テーブル４４が図３に示した情報を記憶する場合であり、シャドウ領域から取得したテイントタグを「４」とすると、テイントタグ「４」に対応する通信先情報を特定する。すなわち、特定部４５ｄは、アドレスが「１９２．１６８．１．１」、プロトコルが「６」、ポート番号が「８０」である通信先装置２を特定する。そして、特定部４５ｄは、特定した通信先装置２をマルウェア配布サイトに関する情報として利用者に提供する。なお、特定部４５ｄは、テイントタグが存在しないと判定した場合、引き続きプログラムの実行を続ける。
【００５０】
また、解析対象プログラム３３によって、システムコールや標準ＡＰＩ（監視対象命令）を介さずに、メモリ上に新たに展開されたプログラムが直接実行される場合がある。このため特定部４５ｄは、システムコールや標準ＡＰＩが実行されることを検出したとき以外にも、実行する機械語命令の格納位置に対応付けてテイントタグが付与されているか否かを判定する。ここで、特定部４５ｄは、機械語命令の格納位置に対応付けてテイントタグが付与されていると判定した場合、テイントタグに対応する通信先情報を通信先情報テーブル４４から取得し、取得した通信先情報をマルウェア配布サイトの通信先情報に特定する。
【００５１】
次に、図５及び図６を用いて、仮想ＣＰＵ４５による処理の手順を説明する。図５は、付与部４５ｂによるテイントタグを付与する処理の手順を示すフローチャートである。図５に示すように、付与部４５ｂは、パケットを受信したか否かを判定する（ステップＳ１０１）。ここで、付与部４５ｂは、パケットを受信したと判定した場合（ステップＳ１０１、Ｙｅｓ）、受信したパケットから通信先情報を抽出する（ステップＳ１０２）。なお、付与部４５ｂは、パケットを受信しなかったと判定した場合（ステップＳ１０１、Ｎｏ）、ステップＳ１０１の判定処理を繰り返す。
【００５２】
付与部４５ｂは、ステップＳ１０２の処理の後、テイントタグを生成する（ステップＳ１０３）。そして、付与部４５ｂは、通信先情報とテイントタグとを対応付けて、通信先情報テーブル４４に格納する（ステップＳ１０４）。また、付与部４５ｂは、受信したデータを仮想メモリ４１ａに格納し（ステップＳ１０５）、テイントタグをシャドウメモリ４１ｂに格納する（ステップＳ１０６）。
【００５３】
図６は、特定部４５ｄによるマルウェア配布サイトを特定する処理の手順を示すフローチャートである。図６に示すように、特定部４５ｄは、新たなプログラムの起動又は起動予約の実施を検出したか否かを判定する（ステップＳ２０１）。ここで、特定部４５ｄは、新たなプログラムの起動又は起動予約の実施を検出したと判定した場合（ステップＳ２０１、Ｙｅｓ）、プログラムの格納領域を特定する（ステップＳ２０２）。なお、特定部４５ｄは、新たなプログラムの起動又は起動予約の実施を検出しなかったと判定した場合（ステップＳ２０１、Ｎｏ）、ステップＳ２０１の判定処理を繰り返す。
【００５４】
特定部４５ｄは、ステップＳ２０２の処理の後、シャドウ領域にテイントタグが存在するか否かを判定する（ステップＳ２０３）。ここで、特定部４５ｄは、シャドウ領域にテイントタグが存在すると判定した場合（ステップＳ２０３、Ｙｅｓ）、テイントタグを取得する（ステップＳ２０４）。なお、特定部４５ｄは、シャドウ領域にテイントタグが存在しないと判定した場合（ステップＳ２０３、Ｎｏ）、処理を終了する。
【００５５】
特定部４５ｄは、ステップＳ２０４の処理の後、通信先情報テーブル４４を参照してテイントタグに対応する通信先情報を取得する（ステップＳ２０５）。そして、特定部４５ｄは、マルウェア配布サイトを特定する（ステップＳ２０６）。
【００５６】
上述したように、第１の実施形態に係る情報処理装置１０において、仮想ＣＰＵ４５は、解析対象であるプログラムによって通信先装置から受信されたデータに、当該通信先装置を識別可能なテイントタグを付与する。そして、仮想ＣＰＵ４５は、新たなプログラムの起動又は起動予約を検出したときに、当該新たなプログラムが実行するデータにテイントタグが付与されている場合、当該テイントタグにより識別される通信先装置２を特定する。
【００５７】
ここで、マルウェアの中には、機能追加やバグ修正のために、新たなマルウェアをダウンロードし実行するものがある。一方、マルウェアの通信先は多種多様であり、新たなマルウェアのダウンロード元だけでなく、ほかにも情報漏洩先や攻撃者からの指令を配信しているサーバなどもある。第１の実施形態によれば、解析対象プログラム３３がネットワーク経由で新たなプログラムをダウンロードした際に、そのプログラムのダウンロード元である通信先装置２を特定する。すなわち、第１の実施形態によれば、マルウェアを解析することで、新たなマルウェアを配布しているホストを特定することができる。
【００５８】
また、仮想ＮＩＣ４３で取得可能な通信先情報は、一般的にレイヤ２（Ｅｔｈｅｒｎｅｔ（登録商標）等）の情報に限られる。レイヤ２から得られる情報では、ＵＲＬ（Uniform  Resource  Locator）を復元することが難しい場合がある。一方、例えば、ＨＴＴＰ（HyperText  Transfer  Protocol）通信時に利用されるＵＲＬは、まずホスト名部分に関して名前解決を行った後に、ＩＰアドレスを用いて通信が行われる。このようなことから、ＨＴＴＰ通信のＡＰＩを監視することで、通信先情報としてＵＲＬを取得することが可能になる。すなわち、通信用ＡＰＩで取得される通信先情報が仮想ＮＩＣ４３で取得可能な通信先情報よりも好ましい場合もある。このため上述した実施形態では、付与部４５ｂが、仮想ＮＩＣ４３がパケットを受信した際に、通信先情報を取得する場合を説明したが、ＯＳ等が提供するネットワーク通信用の標準ＡＰＩが呼び出された直後に、当該ＡＰＩに応じた通信先情報を取得してもよい。
【００５９】
かかる場合、付与部４５ｂは、解析対象プログラム３３によってＡＰＩが呼び出された場合、呼び出されたＡＰＩの格納位置に対応付けて、通信用情報（ブレークポイント情報）が記憶されているか否かを判定する。ここで付与部４５ｂは、呼び出されたＡＰＩの格納位置に対応付けて、通信用情報（ブレークポイント情報）が記憶されている場合、通信用ＡＰＩの呼び出しを検出する。そして、付与部４５ｂは、通信用ＡＰＩから通信先情報を取得する。また、付与部４５ｂは、取得した通信先情報を、通信先情報テーブル４４に格納する。
【００６０】
（第２の実施形態）
さて、これまで本発明の実施形態について説明したが、本発明は上述した実施形態以外にも、その他の実施形態にて実施されてもよい。そこで、以下では、その他の実施形態を示す。
【００６１】
（システム構成）
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については（例えば、図１〜図６）、特記する場合を除いて任意に変更することができる。
【００６２】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
【００６３】
（プログラム）
また、上記実施例１に係る情報処理装置が実行する処理をコンピュータが実行可能な言語で記述した特定プログラムを作成することもできる。この場合、コンピュータが特定プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。更に、かかる特定プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された特定プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、図１等に示した情報処理装置１０と同様の機能を実現する特定プログラムを実行するコンピュータの一例を説明する。
【００６４】
図７は、特定プログラムを実行するコンピュータ１０００を示す図である。図７に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００６５】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０及びキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【００６６】
ここで、図７に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３及びプログラムデータ１０９４を記憶する。上記実施形態で説明した特定プログラムは、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【００６７】
また、特定プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０９０に記憶される。具体的には、上記実施形態で説明した付与部４５ｂと同様の情報処理を実行する付与手順と、特定部４５ｄと同様の情報処理を実行する特定手順とが記述されたプログラムモジュールが、ハードディスクドライブ１０９０に記憶される。
【００６８】
また、特定プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュールやプログラムデータを必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００６９】
なお、特定プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、特定プログラムに係るプログラムモジュールやプログラムデータは、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【００７０】
（その他）
なお、本実施形態で説明した特定プログラムは、インターネットなどのネットワークを介して配布することができる。また、特定プログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【００７１】
１０      情報処理装置
２０      物理マシン
２１      ハードウェア
２２      ホストＯＳ
２３      仮想マシンソフトウェア
３０      仮想マシン
３１      仮想ハードウェア
３２      ゲストＯＳ
３３      解析対象プログラム
４１ａ    仮想メモリ
４１ｂ    シャドウメモリ
４２ａ    仮想ディスク
４２ｂ    シャドウディスク
４３      仮想ＮＩＣ
４４      通信先情報テーブル
４５      仮想ＣＰＵ
４５ａ    プログラム実行部
４５ｂ    付与部
４５ｃ    更新部
４５ｄ    特定部
１０００  コンピュータ
１０１０  メモリ
１０１１  ＲＯＭ
１０１２  ＲＡＭ
１０２０  ＣＰＵ
１０３０  ハードディスクドライブインタフェース
１０４０  ディスクドライブインタフェース
１０５０  シリアルポートインタフェース
１０６０  ビデオアダプタ
１０７０  ネットワークインタフェース
１０８０  バス
１０９０  ハードディスクドライブ
１０９１  ＯＳ
１０９２  アプリケーションプログラム
１０９３  プログラムモジュール
１０９４  プログラムデータ
１１００  ディスクドライブ
１１１０  マウス
１１２０  キーボード
１１３０  ディスプレイ
【図１】
0005965059.tif 000002
【図２】
0005965059.tif 000003
【図３】
0005965059.tif 000004
【図４】
0005965059.tif 000005
【図５】
0005965059.tif 000006
【図６】
0005965059.tif 000007
【図７】
0005965059.tif 000008