(57)【特許請求の範囲】
【請求項１】
コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集システムであって、
前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作する情報収集手段を備え、
前記情報収集手段は、
前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得して前記ゲストＯＳまたは前記アプリケーションが実行しようとしているコードを把握し、把握した当該コードを前記情報を収集する命令が記述された情報収集コードに入れ替え、当該情報収集コードが当該ゲストＯＳまたは当該アプリケーションにおいて実行されるように、当該情報の収集対象となる当該ゲストＯＳまたは当該アプリケーションによってコードが実行されるメモリ空間に当該情報収集コードを挿入するコード挿入手段と、
前記ゲストＯＳまたは前記アプリケーションによって実行された前記情報収集コードの実行結果を収集することで、前記情報を収集する実行結果収集手段と、
を備えたことを特徴とする情報収集システム。
【請求項２】
前記コード挿入手段は、前記情報収集コードとして、前記ゲストＯＳ内または前記アプリケーション内のライブラリおよび／またはプログラムを利用して前記情報を収集する命令が記述された情報収集コードを、前記メモリ空間に挿入することを特徴とする請求項１に記載の情報収集システム。
【請求項３】
前記コード挿入手段は、前記実行結果収集手段によって収集された前記情報から前記ゲストＯＳまたは前記アプリケーションに異常性が確認された際には、前記情報収集コードとして、当該異常性を解決する命令が記述された情報収集コードを、前記メモリ空間にさらに挿入することを特徴とする請求項１または２に記載の情報収集システム。
【請求項４】
前記情報収集手段は、
所定のバイト列を予め記憶しているバイト列記憶手段と、
前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得して前記ゲストＯＳまたは前記アプリケーションが実行しようとしているコードを把握することで、当該ゲストＯＳまたは当該アプリケーションが実行するコードブロックを監視するコードブロック監視手段と、
前記コードブロック監視手段によって監視されたコードブロックが、前記バイト列記憶手段によって記憶されている所定のバイト列と一致するか否かを検査する検査手段と、
をさらに備えたことを特徴とする請求項１〜３のいずれか一つに記載の情報収集システム。
【請求項５】
前記情報収集手段は、
前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を利用することで、当該ゲストＯＳまたは当該アプリケーションがシステムコールを発行する際に実行する特殊命令を監視して当該システムコールの発行を監視する特殊命令監視手段をさらに備えたことを特徴とする請求項１〜４のいずれか一つに記載の情報収集システム。
【請求項６】
前記コード挿入手段は、前記情報収集コードとして、前記特殊命令監視手段によって監視されたシステムコールについて、当該システムコールを発行したプロセス、システムコール番号、当該システムコールに渡される引数のいずれか一つまたは複数を収集する命令が記述された情報収集コードを、前記メモリ空間に挿入することを特徴とする請求項５に記載の情報収集システム。
【請求項７】
前記情報収集手段は、
前記特殊命令監視手段によって監視されたシステムコールを発行した際の情報を取得するシステムコール情報取得手段をさらに備え、
前記実行結果収集手段は、前記システムコール情報取得手段によって取得された情報をさらに用いて前記情報を収集することを特徴とする請求項５または６に記載の情報収集システム。
【請求項８】
前記情報収集手段は、
前記ゲストＯＳまたは前記アプリケーションの所定の挙動を契機として当該ゲストＯＳまたは当該アプリケーションの実行状態のスナップショットを取得するスナップショット取得手段と、
前記スナップショット取得手段によって取得されたスナップショットを用いて、前記ゲストＯＳまたは前記アプリケーションの実行を再開させる実行再開手段と、
をさらに備えたことを特徴とする請求項１〜７のいずれか一つに記載の情報収集システム。
【請求項９】
前記情報収集手段は、
前記実行結果収集手段によって収集された前記情報を、前記ゲストＯＳまたは前記アプリケーション、および／または、当該ゲストＯＳまたは当該アプリケーション以外のソフトウェアに伝達する情報伝達手段をさらに備えたことを特徴とする請求項１〜８のいずれか一つに記載の情報収集システム。
【請求項１０】
コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集システムであって、
前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作する情報収集手段を備え、
前記情報収集手段は、
所定のバイト列を予め記憶しているバイト列記憶手段と、
前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得して前記ゲストＯＳまたは前記アプリケーションが実行しようとしているコードを把握することで、当該ゲストＯＳまたは当該アプリケーションが実行するコードブロックを監視するコードブロック監視手段と、
前記コードブロック監視手段によって監視されたコードブロックが、前記バイト列記憶手段によって記憶されている所定のバイト列と一致するか否かを検査する検査手段と、
を備えたことを特徴とする情報収集システム。
【請求項１１】
コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集システムであって、
前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作する情報収集手段を備え、
前記情報収集手段は、
前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を利用することで、当該ゲストＯＳまたは当該アプリケーションがシステムコールを発行する際に実行する特殊命令を監視して当該システムコールの発行を監視する特殊命令監視手段を備えたことを特徴とする情報収集システム。
【請求項１２】
コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集方法であって、
前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作するプログラムにより実行される情報収集工程を含み、
前記情報収集工程は、
前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得して当該ゲストＯＳまたは当該アプリケーションが実行しようとしているコードを把握し、把握した当該コードを前記情報を収集する命令が記述された情報収集コードに入れ替え、当該情報収集コードが当該ゲストＯＳまたは当該アプリケーションにおいて実行されるように、当該情報の収集対象となる当該ゲストＯＳまたは当該アプリケーションによってコードが実行されるメモリ空間に当該情報収集コードを挿入するコード挿入工程と、
前記ゲストＯＳまたは前記アプリケーションによって実行された前記情報収集コードの実行結果を収集することで、前記情報を収集する実行結果収集工程と、
を含んだことを特徴とする情報収集方法。
【請求項１３】
コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集方法であって、
前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作するプログラムにより実行される情報収集工程を含み、
前記情報収集工程は、
前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得して前記ゲストＯＳまたは前記アプリケーションが実行しようとしているコードを把握することで、当該ゲストＯＳまたは当該アプリケーションが実行するコードブロックを監視するコードブロック監視工程と、
前記コードブロック監視工程によって監視されたコードブロックが、所定のバイト列を予め記憶しているバイト列記憶部によって記憶されている所定のバイト列と一致するか否かを検査する検査工程と、
を含んだことを特徴とする情報収集方法。
【請求項１４】
コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集方法であって、
前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作するプログラムにより実行される情報収集工程を含み、
前記情報収集工程は、
前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を利用することで、当該ゲストＯＳまたは当該アプリケーションがシステムコールを発行する際に実行する特殊命令を監視して当該システムコールの発行を監視する特殊命令監視工程を含んだことを特徴とする情報収集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、情報収集システムおよび情報収集方法に関する。
【背景技術】
【０００２】
従来より、アンチウィルスソフト、ホスト型侵入検知システム（非特許文献１を参照）、パーソナルファイアウォール等のセキュリティソフトウェアは、保護対象がＯＳであれば、当該ＯＳ上で動作し、保護対象がアプリケーションであれば、当該アプリケーションがインストールされているＯＳ上（以下、保護対象システム内）で動作するものである。これらのセキュリティソフトウェアは、保護対象としているＯＳまたはそのＯＳ上で動作するアプリケーションの振る舞いを監視し、ＯＳやアプリケーションがアクセスする資源やその資源に対する操作を監視することで、不正なプログラムの不正な振る舞いを防止している。
【０００３】
しかし、マルウェア（例えば、ボット、ウィルス、Shellcode等、ソフトウェアの利用者が意図しない動作を行うプログラムやモジュール）の中には、ターゲットとするターゲットシステム内で起動されると、セキュリティソフトウェアの有無をチェックし、セキュリティソフトウェアがターゲットシステム内で動作していた場合、そのセキュリティソフトウェアを強制的に停止させてしまう機能を持つマルウェアが存在する（非特許文献２を参照）。
【０００４】
すなわち、セキュリティソフトウェアを保護対象システム内で動作させていると、マルウェアが、保護対象システム内（マルウェアにとってのターゲットシステム内）のセキュリティソフトウェアの有無をチェックし、強制的に停止させてしまう。言い換えると、保護対象システム内にマルウェアの侵入を許してしまった場合、マルウェアは保護対象システム内でセキュリティソフトウェアと同じ権限を取得することが可能となるため、セキュリティソフトウェアに対して攻撃を行うことが可能となってしまう。
【０００５】
このため、非特許文献３に示すように、保護対象システムを仮想マシン上でゲストソフトウェアとして動作させ、セキュリティソフトウェアはゲストソフトウェアの外側からゲストソフトウェアの内側を監視することで対応する、という研究が行われている。ここで、仮想マシンとは、コンピュータのハードウェア上で動作するＯＳ（以下、ホストＯＳ）にインストールされて仮想的に作り出されたコンピュータのことである。また、ゲストソフトウェアとは、仮想マシンを構成する仮想的なハードウェア上で動作するＯＳ（以下、ゲストＯＳ）や、ゲストＯＳにインストールされているアプリケーションのことである。かかる研究においては、ゲストソフトウェアの外からゲストソフトウェアに関する情報を収集し、収集した情報からゲストソフトウェアの内側で起きている事象を捉えたり、収集した情報を検査することで、ゲストソフトウェアの異常性を判断する手法が開示されている。
【０００６】
【非特許文献１】「ホストベースのＩＤＳの概要と適用について」、JNSA2001年度WG活動成果物、［online］、［平成１９年７月１１日検索］、インターネット＜http://www.jnsa.org/active/houkoku/IDSBasic.pdf＞
【非特許文献２】「ボットネット実態調査結果」、Black  Hat  Japan  2005、Telecom-ISAC  Japan  小山  覚
【非特許文献３】「A  Virtual  Machine  Introspection  Based  Architecture  for  Intrusion  Detection」、Tal  Garfinkel  and  Mendel  Rosenblum、In  the  Internet  Society’s  2003  Symposium  on  Network  and  Distributed  System  Security，page191-206、February  2003．
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、上記した従来の技術は、以下に説明するように、ゲストソフトウェアに関する情報を簡易に収集することができないという課題がある。ゲストソフトウェアから必要な情報を収集するにあたっては、通常、ゲストソフトウェア内で起こっている事象を正確に把握する必要があり、また、ゲストソフトウェアが利用しているメモリやディスクのどこに必要としている情報が配置されているかを正確に把握していなければならない。すなわち、従来技術の手法によれば、ゲストソフトウェアとして動作するＯＳやアプリケーションのデータ構造体やファイルシステムを完全に把握する必要があることから、ゲストソフトウェアとして動作するＯＳの種類や、ゲストソフトウェアのバージョンが変わるたびに、ゲストソフトウェアに関する情報を収集する手法を大きく変化させなければならないことになる。例えば、Ｗｉｎｄｏｗｓ（登録商標）などのＯＳに関するデータ構造体などは一般には公開されていない情報であるので、これらのゲストソフトウェアから必要とする情報を収集するのは非常に困難な作業となる。
【０００８】
そこで、この発明は、上記した従来技術の課題を解決するためになされたものであり、ゲストソフトウェアに関する情報を簡易に収集することが可能な情報収集システムおよび情報収集方法を提供することを第一の目的とする。
【０００９】
また、この発明は、ゲストソフトウェア内部で起きている事象を正確に把握することが可能な情報収集システムおよび情報収集方法を提供することを第二の目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本発明は、コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集システムであって、前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作する情報収集手段を備え、前記情報収集手段は、前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得して前記ゲストＯＳまたは前記アプリケーションが実行しようとしているコードを把握し、把握した当該コードを前記情報を収集する命令が記述された情報収集コードに入れ替え、当該情報収集コードが当該ゲストＯＳまたは当該アプリケーションにおいて実行されるように、当該情報の収集対象となる当該ゲストＯＳまたは当該アプリケーションによってコードが実行されるメモリ空間に当該情報収集コードを挿入するコード挿入手段と、前記ゲストＯＳまたは前記アプリケーションによって実行された前記情報収集コードの実行結果を収集することで、前記情報を収集する実行結果収集手段と、を備えたことを特徴とする。
【００１１】
また、本発明は、上記の発明において、前記コード挿入手段は、前記情報収集コードとして、前記ゲストＯＳ内または前記アプリケーション内のライブラリおよび／またはプログラムを利用して前記情報を収集する命令が記述された情報収集コードを、前記メモリ空間に挿入することを特徴とする。
【００１２】
また、本発明は、上記の発明において、前記コード挿入手段は、前記実行結果収集手段によって収集された前記情報から前記ゲストＯＳまたは前記アプリケーションに異常性が確認された際には、前記情報収集コードとして、当該異常性を解決する命令が記述された情報収集コードを、前記メモリ空間にさらに挿入することを特徴とする。
【００１３】
また、本発明は、上記の発明において、前記情報収集手段は、所定のバイト列を予め記憶しているバイト列記憶手段と、前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得して前記ゲストＯＳまたは前記アプリケーションが実行しようとしているコードを把握することで、当該ゲストＯＳまたは当該アプリケーションが実行するコードブロックを監視するコードブロック監視手段と、前記コードブロック監視手段によって監視されたコードブロックが、前記バイト列記憶手段によって記憶されている所定のバイト列と一致するか否かを検査する検査手段と、をさらに備えたことを特徴とする。
【００１４】
また、本発明は、上記の発明において、前記情報収集手段は、前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を利用することで、当該ゲストＯＳまたは当該アプリケーションがシステムコールを発行する際に実行する特殊命令を監視して当該システムコールの発行を監視する特殊命令監視手段をさらに備えたことを特徴とする。
【００１５】
また、本発明は、上記の発明において、前記コード挿入手段は、前記情報収集コードとして、前記特殊命令監視手段によって監視されたシステムコールについて、当該システムコールを発行したプロセス、システムコール番号、当該システムコールに渡される引数のいずれか一つまたは複数を収集する命令が記述された情報収集コードを、前記メモリ空間に挿入することを特徴とする。
【００１６】
また、本発明は、上記の発明において、前記情報収集手段は、前記特殊命令監視手段によって監視されたシステムコールを発行した際の情報を取得するシステムコール情報取得手段をさらに備え、前記実行結果収集手段は、前記システムコール情報取得手段によって取得された情報をさらに用いて前記情報を収集することを特徴とする。
【００１７】
また、本発明は、上記の発明において、前記情報収集手段は、前記ゲストＯＳまたは前記アプリケーションの所定の挙動を契機として当該ゲストＯＳまたは当該アプリケーションの実行状態のスナップショットを取得するスナップショット取得手段と、前記スナップショット取得手段によって取得されたスナップショットを用いて、前記ゲストＯＳまたは前記アプリケーションの実行を再開させる実行再開手段と、をさらに備えたことを特徴とする。
【００１８】
また、本発明は、上記の発明において、前記情報収集手段は、前記実行結果収集手段によって収集された前記情報を、前記ゲストＯＳまたは前記アプリケーション、および／または、当該ゲストＯＳまたは当該アプリケーション以外のソフトウェアに伝達する情報伝達手段をさらに備えたことを特徴とする。
【００１９】
また、本発明は、コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集システムであって、前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作する情報収集手段を備え、前記情報収集手段は、所定のバイト列を予め記憶しているバイト列記憶手段と、前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得して前記ゲストＯＳまたは前記アプリケーションが実行しようとしているコードを把握することで、当該ゲストＯＳまたは当該アプリケーションが実行するコードブロックを監視するコードブロック監視手段と、前記コードブロック監視手段によって監視されたコードブロックが、前記バイト列記憶手段によって記憶されている所定のバイト列と一致するか否かを検査する検査手段と、を備えたことを特徴とする。
【００２０】
また、本発明は、コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集システムであって、前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作する情報収集手段を備え、前記情報収集手段は、前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を利用することで、当該ゲストＯＳまたは当該アプリケーションがシステムコールを発行する際に実行する特殊命令を監視して当該システムコールの発行を監視する特殊命令監視手段を備えたことを特徴とする。
【００２１】
また、本発明は、コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集方法であって、前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作するプログラムにより実行される情報収集工程を含み、前記情報収集工程は、前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得して当該ゲストＯＳまたは当該アプリケーションが実行しようとしているコードを把握し、把握した当該コードを前記情報を収集する命令が記述された情報収集コードに入れ替え、当該情報収集コードが当該ゲストＯＳまたは当該アプリケーションにおいて実行されるように、当該情報の収集対象となる当該ゲストＯＳまたは当該アプリケーションによってコードが実行されるメモリ空間に当該情報収集コードを挿入するコード挿入工程と、前記ゲストＯＳまたは前記アプリケーションによって実行された前記情報収集コードの実行結果を収集することで、前記情報を収集する実行結果収集工程と、を含んだことを特徴とする。
【００２２】
また、本発明は、コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集方法であって、前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作するプログラムにより実行される情報収集工程を含み、前記情報収集工程は、前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得して前記ゲストＯＳまたは前記アプリケーションが実行しようとしているコードを把握することで、当該ゲストＯＳまたは当該アプリケーションが実行するコードブロックを監視するコードブロック監視工程と、前記コードブロック監視工程によって監視されたコードブロックが、所定のバイト列を予め記憶しているバイト列記憶部によって記憶されている所定のバイト列と一致するか否かを検査する検査工程と、を含んだことを特徴とする。
【００２３】
また、本発明は、コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集方法であって、前記情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、前記情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作するプログラムにより実行される情報収集工程を含み、前記情報収集工程は、前記仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を利用することで、当該ゲストＯＳまたは当該アプリケーションがシステムコールを発行する際に実行する特殊命令を監視して当該システムコールの発行を監視する特殊命令監視工程を含んだことを特徴とする。
【発明の効果】
【００２４】
本発明によれば、コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集システムであって、情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作し、仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得してゲストＯＳまたはアプリケーションが実行しようとしているコードを把握し、把握した当該コードを情報を収集する命令が記述された情報収集コードに入れ替え、情報収集コードが当該ゲストＯＳまたは当該アプリケーションにおいて実行されるように、情報の収集対象となる当該ゲストＯＳまたは当該アプリケーションによってコードが実行されるメモリ空間に情報収集コードを挿入し、ゲストＯＳまたはアプリケーションによって実行された情報収集コードの実行結果を収集することで、情報を収集するので、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００２５】
また、本発明によれば、情報収集コードとして、ゲストＯＳ内またはアプリケーション内のライブラリおよび／またはプログラムを利用して情報を収集する命令が記述された情報収集コードを、メモリ空間に挿入するので、ゲストソフトウェアに関する情報を簡易かつ効率的に収集することが可能になる。
【００２６】
また、本発明によれば、収集された情報からゲストＯＳまたはアプリケーションに異常性が確認された際には、情報収集コードとして、異常性を解決する命令が記述された情報収集コードを、メモリ空間にさらに挿入するので（例えば、コードを入れ替えて挿入してもよい）、ゲストソフトウェアに関する情報を簡易に収集することが可能になる他に、ゲストソフトウェアに異常性が確認された際には、異常性を解決することも可能になる。
【００２７】
また、本発明によれば、所定のバイト列を予め記憶し、仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得してゲストＯＳまたはアプリケーションが実行しようとしているコードを把握することで、ゲストＯＳまたはアプリケーションが実行するコードブロックを監視し、監視したコードブロックが、記憶している所定のバイト列と一致するか否かを検査するので、ゲストソフトウェア内部での事象を正確に把握した上で（例えば、ゲストソフトウェア上で動作しているプロセスの情報を取得した上で）、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００２８】
また、本発明によれば、仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を利用することで、当該ゲストＯＳまたは当該アプリケーションがシステムコールを発行する際に実行する特殊命令を監視して当該システムコールの発行を監視するので、ゲストソフトウェア内部での事象を正確に把握した上で、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００２９】
また、本発明によれば、情報収集コードとして、監視したシステムコールについて、当該システムコールを発行したプロセス、システムコール番号、当該システムコールに渡される引数のいずれか一つまたは複数を収集する命令が記述された情報収集コードを、メモリ空間に挿入するので、ゲストソフトウェア内部での事象を正確に把握した上で、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００３０】
また、本発明によれば、監視したシステムコールを発行した際の情報を取得し、取得した情報をさらに用いて情報を収集するので、ゲストソフトウェア内部での事象を正確に把握した上で、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００３１】
また、本発明によれば、ゲストＯＳまたはアプリケーションの所定の挙動を契機として当該ゲストＯＳまたは当該アプリケーションの実行状態のスナップショットを取得し、取得したスナップショットを用いて、ゲストＯＳまたはアプリケーションの実行を再開させるので、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００３２】
また、本発明によれば、収集した情報を、ゲストＯＳまたはアプリケーション、および／または、当該ゲストＯＳまたは当該アプリケーション以外のソフトウェアに伝達するので、ゲストソフトウェアに関する情報を簡易に収集することが可能になる他に、収集した情報を他のソフトウェアに伝達することが可能になる（アラートを挙げるなど）。
【００３３】
また、本発明によれば、コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集システムであって、情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作し、所定のバイト列を予め記憶し、仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得してゲストＯＳまたはアプリケーションが実行しようとしているコードを把握することで、当該ゲストＯＳまたは当該アプリケーションが実行するコードブロックを監視し、監視したコードブロックが、記憶している所定のバイト列と一致するか否かを検査するので、ゲストソフトウェア内部での事象を正確に把握（例えば、ゲストソフトウェア上で動作しているプロセスの情報を取得）することが可能になる。
【００３４】
また、本発明によれば、コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集システムであって、情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作し、仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を利用することで、当該ゲストＯＳまたは当該アプリケーションがシステムコールを発行する際に実行する特殊命令を監視して当該システムコールの発行を監視するので、ゲストソフトウェア内部での事象を正確に把握することが可能になる。
【発明を実施するための最良の形態】
【００３５】
以下に添付図面を参照して、この発明に係る情報収集システムおよび情報収集方法の実施例を詳細に説明する。
【実施例１】
【００３６】
以下の実施例１では、実施例１で用いる主要な用語、実施例１に係る情報収集システムの概要および特徴、情報収集システムの構成および処理の手順を順に説明し、最後に実施例１による効果を説明する。
【００３７】
［用語の説明］
最初に、以下の実施例で用いる主要な用語を説明する。「仮想マシン」とは、コンピュータの実体あるハードウェア上に仮想的に作り出されたコンピュータのことである。このような「仮想マシン」は、仮想化技術によって実現される。仮想化技術とは、コンピュータの実体あるハードウェア上で動作するＯＳ（Operating  System）に対して、仮想的なハードウェア・インタフェースを提供することで、１台のコンピュータ上で複数のＯＳが同時に動作することを可能にする技術である。具体的には、ＶＭＭ（Virtual  Machine  Monitor）と呼ばれるソフトウェアが、ＯＳに対して仮想的なハードウェア・インタフェースを提供し、ＶＭＭ上で動くＯＳに対して仮想的なハードウェアを提供する。
【００３８】
ここで、以下の実施例では、実体あるハードウェア上で動作するＯＳのことを「ホストＯＳ」と呼び、ＶＭＭ上で動くＯＳのことを「ゲストＯＳ」と呼ぶ。すなわち、「ホストＯＳ」にインストールされた一つのアプリケーションであるＶＭＭが「仮想マシン」であり、「ゲストＯＳ」は「仮想マシン」にインストールされているＯＳであるという関係にある。なお、「仮想マシン」上においては、複数の「ゲストＯＳ」が動作することが可能である。
【００３９】
ところで、「仮想マシン」上で動作する「ゲストＯＳ」や当該「ゲストＯＳ」にインストールされているアプリケーションなどのゲストソフトウェアは、「仮想マシン」が提供する仮想資源を利用することで、各種コードを実行するなどする。この実行の仕組みについて簡単に説明すると、まず、「仮想マシン」が、ゲストソフトウェアによって実行されたコードを変換して「ホストＯＳ」に渡し、「ホストＯＳ」が、渡されたコードについて実行した実行結果を「仮想マシン」に渡し、「仮想マシン」が、渡された実行結果を変換してゲストソフトウェアに渡す、といった仕組みになっている。
【００４０】
そうであるとすると、ゲストソフトウェアに関する情報を収集するにあたっては、ゲストソフトウェアが利用している「仮想マシン」のメモリやディスクについて、どこに必要としている情報が配置されているかを正確に把握した上で、「仮想マシン」のメモリやディスクから情報を収集するという手法が考えられる。しかしながら、このような手法では、ゲストソフトウェアとして動作するＯＳの種類や、ゲストソフトウェアのバージョンが変わるたびに、ゲストソフトウェアに関する情報を収集する手法を大きく変化させなければならない。本発明に係る情報収集システムは、このような課題を解決するものである。
【００４１】
［実施例１に係る情報収集システムの概要および特徴］
次に、図１を用いて、実施例１に係る情報収集システムの概要および特徴を説明する。図１は、実施例１に係る情報収集システムの概要および特徴を説明するための図である。なお、図１においては、本発明における情報収集部が、情報収集モジュール（ゲストソフトウェア監視モジュール）として仮想マシン（ＶＭＭ）内に実装される構成例について説明するが、本発明はこのような構成に限られるものではない。他の構成例については、実施例６で説明することとする。
【００４２】
実施例１に係る情報収集システムは、仮想マシンにゲストＯＳがインストールされている構成において、ゲストソフトウェア（ゲストＯＳ、当該ゲストＯＳにインストールされているアプリケーション）に関する情報を収集することを概要とし、ゲストソフトウェアに関する情報を簡易に収集することを主たる特徴とする。
【００４３】
この主たる特徴について簡単に説明すると、本発明に係る情報収集システムは、情報収集部を備えている。情報収集部は、情報の収集対象がゲストＯＳであれば、当該ゲストＯＳとは異なるＯＳ上（実施例１においては、ホストＯＳ）で動作し、かつ、情報の収集対象がアプリケーションであれば、当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上（実施例１においては、ホストＯＳ）で動作する。例えば、図１に示すように、情報収集部は、情報収集モジュール（ゲストソフトウェア監視モジュール）として仮想マシン内に実装される。
【００４４】
このような構成のもと、情報収集部は、まず、仮想マシンが提供する仮想的なＣＰＵ（Central  Processing  Unit）に読み込まれた情報を取得してゲストＯＳまたはアプリケーションが実行しようとしているコードを把握し、把握したコードを、ゲストソフトウェアに関する情報を収集する命令が記述された情報収集コードに入れ替え、情報収集コードがゲストＯＳまたはアプリケーションにおいて実行されるように、情報の収集対象となるゲストソフトウェアによってコードが実行されるメモリ空間（実行バッファ）に情報収集コードを挿入する（図１の（１）を参照）。
【００４５】
すると、ゲストソフトウェアは、情報収集部によってメモリ空間に挿入された情報収集コードを実行する（図１の（２）を参照）。
【００４６】
そして、情報収集部は、ゲストソフトウェアによって実行された情報収集コードの実行結果を収集することで、ゲストソフトウェアに関する情報を収集する（図１の（３）を参照）。
【００４７】
このように、実施例１に係る情報収集システムは、ゲストソフトウェアが利用している「仮想マシン」のメモリやディスクについて、どこに必要としている情報が配置されているかを正確に把握することなく情報を収集できることから、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００４８】
［実施例１に係る情報収集システムの構成］
続いて、図１〜５を用いて、実施例１に係る情報収集システムの構成を説明する。図２は、実施例１における情報収集部（攻撃検知システム）の構成を示すブロック図であり、図３は、パターンＤＢを説明するための図であり、図４は、情報収集モジュールライブラリを説明するための図であり、図５は、情報収集コードを説明するための図である。
【００４９】
図１に示すように、実施例１に係る情報収集システムにおいては、コンピュータのハードウェア上で動作するホストＯＳ２００に仮想マシン１００がインストールされ、仮想マシン１００にゲストＯＳ３０がインストールされている。また、情報収集部１０は、ゲストソフトウェア（ゲストＯＳ３０、アプリケーション３１）とは異なるＯＳ上（ホストＯＳ２００上）で動作する。具体的には、情報収集部１０は、情報収集モジュールとして仮想マシン１００内に実装される。なお、仮想資源２０は、ゲストＯＳ３０を動作させるために提供される仮想的なリソースである。
【００５０】
また、図２に示すように、実施例１における情報収集部１０は、パターンＤＢ１１と、情報収集モジュールライブラリ１２と、プログラム監視部１３と、コード挿入部１４とから構成される。なお、情報収集部１０は、特許請求の範囲に記載の「情報収集手段」に対応し、パターンＤＢ１１は、特許請求の範囲に記載の「バイト列記憶手段」に対応し、プログラム監視部１３は、特許請求の範囲に記載の「コードブロック監視手段」と「検査手段」とに対応し、コード挿入部１４は、特許請求の範囲に記載の「コード挿入手段」と「実行結果収集手段」とに対応する。
【００５１】
パターンＤＢ１１は、脆弱性を含むコードとして既知であるコード（既知の脆弱性を含むコード）について、当該コードの一部のバイト列をパターンとして持たせたシグネチャを、一つまたは複数記憶している。具体的には、パターンＤＢ１１は、一つまたは複数のシグネチャを、情報収集システムの利用者によって予め登録されるなどすることで予め記憶し、記憶しているシグネチャは、後述するプログラム監視部１３による処理に利用されるなどする。例えば、パターンＤＢ１１は、図３に示すようなシグネチャを予め記憶している。
【００５２】
情報収集モジュールライブラリ１２は、ゲストソフトウェア内のライブラリやプログラムを利用してゲストソフトウェアの情報を収集することを目的としたライブラリ群を記憶している。具体的には、情報収集モジュールライブラリ１２は、ライブラリ群を、情報収集システムの利用者によって予め登録されるなどすることで予め記憶し、記憶しているライブラリ群は、後述するコード挿入部１４による処理に利用されるなどする。例えば、情報収集モジュールライブラリ１２は、図４の（Ａ）に示すようなライブラリ群を予め記憶している。
【００５３】
ところで、情報収集モジュールライブラリ１２は、図４の（Ｂ）に示すように、各々の情報収集モジュール１２ａの中に、ゲストソフトウェアライブラリ検索部１２ｂと、ゲストソフトウェアライブラリ実行部１２ｃとを備えていてもよい。ゲストソフトウェアライブラリ検索部１２ｂは、情報収集に利用するゲストソフトウェア内のライブラリを、ゲストソフトウェアのメモリやディスクの中から探し出すことを目的として利用される。例えば、ゲストソフトウェア上のメモリ情報を管理する部分から引き出す手法や、メモリ空間をスキャンして特定のライブラリの場所を探し出す手法等が考えられる。また、ゲストソフトウェアライブラリ実行部１２ｃは、情報収集に利用するゲストソフトウェア内のライブラリを実際に呼び出すことを目的として利用される。
【００５４】
プログラム監視部１３は、ゲストソフトウェアがこれから実行するプログラムブロックをシグネチャと比較することで検査を行う。具体的には、プログラム監視部１３は、仮想マシン１００が提供する仮想的なＣＰＵに読み込まれた情報を取得してゲストソフトウェアが実行しようとしているコードを把握することで、ゲストソフトウェア上で実行されるプログラムブロックを取り出し、パターンＤＢ１１に記憶されているシグネチャと比較することで検査を行う。当該検査の結果次第で、コード挿入部１４による処理が行われるか否かが決定することになる。すなわち、プログラム監視部１３は、プログラムブロックとシグネチャとをマッチングすることによって検査を行い、一致した場合には、コード挿入部１４による処理が行われることになる。
【００５５】
コード挿入部１４は、仮想マシン１００が提供する仮想的なＣＰＵに読み込まれた情報を取得してゲストソフトウェアが実行しようとしているコードを把握し、把握した当該コードを情報を収集する命令が記述された情報収集コードに入れ替え、情報収集コードがゲストソフトウェアにおいて実行されるように、情報の収集対象となるゲストソフトウェアによってコードが実行されるメモリ空間に情報収集コードを挿入し、ゲストソフトウェアによって実行された実行結果を収集することで情報を収集する。具体的には、コード挿入部１４は、プログラム監視部１３による検査の結果、プログラムブロックとシグネチャとが一致した場合には、情報収集モジュールライブラリ１２によって記憶されているライブラリを利用することでコード（情報収集コード）を作成する。また、コード挿入部１４は、仮想マシン１００が提供する仮想的なＣＰＵに読み込まれた情報（例えば、ＥＩＰ（インストラクションポインタ）など）を取得し、ゲストソフトウェアがどのコードを実行しているかを把握する。そして、コード挿入部１４は、把握したコードを作成した情報収集コードに入れ替え、メモリ空間に挿入し、実行結果を収集する（図５は、『g_GetNameOfHandle』という情報収集ライブラリを利用して情報収集コードを作成した例である）。なお、コード挿入部１４は、情報収集モジュールライブラリ１２によって記憶されているライブラリを利用せずに、例えば、予め挿入する情報収集コードとして記憶している情報収集コードを仮想マシン１００のメモリ空間に挿入してもよい。
【００５６】
実施例１において、例えば、コード挿入部１４は、ゲストソフトウェアがこれから実行するプログラムブロックが、既知の脆弱性を狙った攻撃になりえるか否かを検査する情報収集コード（プログラム）を、仮想マシン１００のメモリ空間（ゲストソフトウェアの実行空間）に挿入する。また、例えば、コード挿入部１４は、情報収集コードの実行結果が「攻撃になりえる」との判断を示すものである場合には、ゲストソフトウェアおよびホストソフトウェアの両方または片方にアラートを伝達するなどしてもよい。また、例えば、コード挿入部１４は、運用方針によっては、その既知の脆弱性を狙った攻撃を回避するような情報収集コードを仮想マシン１００のメモリ空間にさらに挿入して実行させることで、その脆弱性への攻撃からゲストソフトウェアを保護するなどしてもよい。
【００５７】
［実施例１に係る情報収集システムの処理の手順］
次に、図６を用いて、実施例１に係る情報収集システムの処理の手順を説明する。図６は、実施例１に係る情報収集システムによる処理の手順を示すフローチャートである。
【００５８】
まず、情報収集部１０のプログラム監視部１３は、ゲストソフトウェアの実行ブロックを監視する（ステップＳ１０１）。具体的には、プログラム監視部１３は、仮想マシン１００が提供する仮想的なＣＰＵに読み込まれた情報を取得してゲストソフトウェアが実行しようとしているコードを把握することで、ゲストソフトウェア上で実行されるプログラムブロックを取り出す。
【００５９】
次に、情報収集部１０のプログラム監視部１３は、シグネチャと一致するか否かを判定する（ステップＳ１０２）。具体的には、プログラム監視部１３は、ステップＳ１０１で取り出したプログラムブロックとパターンＤＢ１１に記憶されているシグネチャとをマッチングすることによって、検査を行う。一致しない場合には（ステップＳ１０２否定）、プログラム監視部１３は、ゲストソフトウェアの実行ブロックを監視する処理に戻る。
【００６０】
一方、一致する場合には（ステップＳ１０２肯定）、続いて、情報収集部１０のコード挿入部１４が、情報収集コード（調査コード）を挿入する（ステップＳ１０３）。具体的には、コード挿入部１４は、仮想マシン１００が提供する仮想的なＣＰＵに読み込まれた情報を取得してゲストソフトウェアが実行しようとしているコードを把握し、把握したコードを、ゲストソフトウェアがこれから実行するプログラムブロックが、既知の脆弱性を狙った攻撃になりえるか否かを検査する情報収集コードに入れ替え、仮想マシン１００のメモリ空間（ゲストソフトウェアの実行空間）に情報収集コードを挿入する。
【００６１】
そして、情報収集部１０のコード挿入部１４は、攻撃か否かを判定する（ステップＳ１０４）。具体的には、コード挿入部１４は、調査コードの実行結果が「攻撃になりえる」との判断を示すものであるか否かを判定する。「攻撃になりえる」との判断を示すものでない場合には（ステップＳ１０４否定）、プログラム監視部１３において、ゲストソフトウェアの実行ブロックを監視する処理に戻る。
【００６２】
一方、「攻撃になりえる」との判断を示すものである場合には（ステップＳ１０４肯定）、その後、コード挿入部１４は、アラートを伝達する（ステップＳ１０５）。具体的には、コード挿入部１４は、ゲストソフトウェアおよびホストソフトウェアの両方または片方にアラートを伝達する。
【００６３】
さらに、コード挿入部１４は、運用方針によっては、攻撃を回避する（ステップＳ１０６）。具体的には、コード挿入部１４は、その既知の脆弱性を狙った攻撃を回避するようなコードやデータを仮想マシン１００のメモリ空間にさらに挿入して実行させることで、その脆弱性への攻撃からゲストソフトウェアを保護する。
【００６４】
このように、実施例１に係る情報収集システムは、ゲストソフトウェアが利用している「仮想マシン」のメモリやディスクについて、どこに必要としている情報が配置されているかを正確に把握することなく情報を収集できることから、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００６５】
なお、上記の実施例１においては、情報収集システムが、まず、プログラム監視部１３においてシグネチャと一致するか否かを判定し、一致すると判定した場合に、コード挿入部１４においてコードを挿入する手法について説明したが、本発明はこれに限られるものではない。プログラム監視部１３の判定如何に関わらず、コード挿入部１４においてコードを挿入する手法や、そもそもプログラム監視部１３による監視や判定を行わず、コード挿入部１４において適宜コードを挿入する手法などにも、本発明を同様に適用することができる。また、プログラム監視部１３による監視や判定のみを行い、コード挿入部１４における情報収集コードの挿入は行わない手法などにも、本発明を同様に適用することができる。
【００６６】
また、上記の実施例１においては、コード挿入部１４が、情報収集コードとして、プログラムブロックが既知の脆弱性を狙った攻撃になりえるか否かを検査する情報収集コードを挿入する手法について説明したが、本発明はこれに限られるものではない。ゲストソフトウェアに実行させる情報収集コードであって、ゲストソフトウェアに関する情報を収集するコードであれば、いかなる情報収集コードを挿入してもよい。
【００６７】
また、上記の実施例１においては、コード挿入部１４が、ステップＳ１０５やステップＳ１０６において、アラートを伝達したり、攻撃を回避する手法について説明したが、これらは、運用方針などによって適宜選択されて実施されればよいものである。例えば、本発明に係る情報収集システムは、ハニーポットとして適用されることも可能である。
【００６８】
［実施例１の効果］
上記してきたように、実施例１によれば、コンピュータのハードウェア上で動作するＯＳであるホストＯＳにインストールされて仮想的に作り出されたコンピュータである仮想マシンに、当該仮想マシンが提供する仮想的なハードウェア上で動作するＯＳであるゲストＯＳがインストールされている構成において、当該ゲストＯＳおよび／または当該ゲストＯＳにインストールされているアプリケーションに関する情報を収集する情報収集システムであって、情報の収集対象がゲストＯＳであれば当該ゲストＯＳとは異なるＯＳ上で動作し、かつ、情報の収集対象がアプリケーションであれば当該アプリケーションがインストールされているゲストＯＳとは異なるＯＳ上で動作し、仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得してゲストＯＳまたはアプリケーションが実行しようとしているコードを把握し、把握した当該コードを情報を収集する命令が記述された情報収集コードに入れ替え、情報収集コードが当該ゲストＯＳまたは当該アプリケーションにおいて実行されるように、情報の収集対象となる当該ゲストＯＳまたは当該アプリケーションによってコードが実行されるメモリ空間に情報収集コードを挿入し、ゲストＯＳまたはアプリケーションによって実行された情報収集コードの実行結果を収集することで、情報を収集するので、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００６９】
すなわち、実施例１によれば、仮想マシン上で動作するゲストソフトウェアを監視する際、ゲストソフトウェアの外側からゲストソフトウェア内部で起きている事象を把握し、効率よくゲストソフトウェアの内部の情報を取得することが可能になる。このため、本発明を利用して攻撃検知システムを構築することにより、ゲストソフトウェアの詳細な情報元に、安全な場所からゲストソフトウェアを監視するシステムを実現することが可能になる。
【００７０】
また、実施例１によれば、情報収集コードとして、ゲストＯＳ内またはアプリケーション内のライブラリおよび／またはプログラムを利用して情報を収集する命令が記述された情報収集コードを、メモリ空間に挿入するので、ゲストソフトウェアに関する情報を簡易かつ効率的に収集することが可能になる。
【００７１】
また、実施例１によれば、収集された情報からゲストＯＳまたはアプリケーションに異常性が確認された際には、情報収集コードとして、異常性を解決する命令が記述された情報収集コードを、メモリ空間にさらに挿入するので（例えば、コードを入れ替えて挿入してもよい）、ゲストソフトウェアに関する情報を簡易に収集することが可能になる他に、ゲストソフトウェアに異常性が確認された際には、異常性を解決することも可能になる。
【００７２】
また、実施例１によれば、所定のバイト列を予め記憶し、仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を取得してゲストＯＳまたはアプリケーションが実行しようとしているコードを把握することで、ゲストＯＳまたはアプリケーションが実行するコードブロックを監視し、監視したコードブロックが、記憶している所定のバイト列と一致するか否かを検査するので、ゲストソフトウェア内部での事象を正確に把握した上で（例えば、ゲストソフトウェア上で動作しているプロセスの情報を取得した上で）、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００７３】
言い換えると、実施例１によれば、ゲストソフトウェアが現在実行しているコードが前もって用意した特定のパターンと一致するか否かを確認することで、ゲストソフトウェアが現在実行しているプログラムを把握することが可能になる。
【００７４】
また、実施例１によれば、収集した情報を、ゲストＯＳまたはアプリケーション、および／または、当該ゲストＯＳまたは当該アプリケーション以外のソフトウェアに伝達するので、ゲストソフトウェアに関する情報を簡易に収集することが可能になる他に、収集した情報を他のソフトウェアに伝達することが可能になる（アラートを挙げるなど）。
【実施例２】
【００７５】
これまで、実施例１として、本発明に係る情報収集システムを、『既知の脆弱性を狙った攻撃検知システム』として利用する手法について説明してきたが、本発明はこれに限られるものではなく、本発明に係る情報収集システムを、『マルウェア検知システム』として利用してもよい。そこで、以下では、実施例２として、『マルウェア検知システム』の中でも、特に、『ユーザからのリクエストに応じて動作するマルウェア検知システム』の一例について、説明する。
【００７６】
まず、図７および８を用いて、実施例２に係る情報収集システムの構成を説明する。図７は、実施例２における情報収集部（マルウェア検知システム）の構成を示すブロック図であり、図８は、スナップショットデータ保存部を説明するための図である。図７に示すように、実施例２における情報収集部１０は、スナップショットデータ保存部１５と実行制御部１６とが追加されている点で、実施例１における情報収集部１０と異なる。なお、実行制御部１６は、特許請求の範囲に記載の「スナップショット取得手段」と「実行再開手段」とに対応する。
【００７７】
実施例２におけるパターンＤＢ１１は、マルウェアの特徴を表すコードについて、当該コードの一部のバイト列をパターンとして持たせたシグネチャを、一つまたは複数記憶している。具体的には、パターンＤＢ１１は、一つまたは複数のシグネチャを、情報収集システムの利用者によって予め登録されるなどすることで予め記憶し、記憶しているシグネチャは、コード挿入部１４による処理に利用されるなどする。
【００７８】
スナップショットデータ保存部１５は、現在実行中のゲストソフトウェアのその時点での実行状態のスナップショットを記憶する。具体的には、スナップショットデータ保存部１５は、実行制御部１６によって取得されたスナップショットを記憶し、記憶したスナップショットは、実行制御部１６によってゲストソフトウェアの実行状態が復元される処理に利用されるなどする。例えば、スナップショットデータ保存部１５は、図８に示すように、現在実行中のゲストソフトウェアのその時点での実行状態のスナップショットとして、レジストリデータ１５ａ、ディスクデータ１５ｂ、スタックデータ１５ｃ、ヒープ領域データ１５ｄなどを保存する。
【００７９】
実行制御部１６は、ユーザからのリクエストを受け付け、現在実行中のゲストソフトウェアのその時点での実行状態のスナップショットを取得したり、ゲストソフトウェアの実行状態を復元させ、ゲストソフトウェアを実行させる。具体的には、実行制御部１６は、ユーザからのリクエストを受け付けると、スナップショットを取得し、スナップショットデータ保存部１５に記憶させる。また、実行制御部１６は、コード挿入部１４によってゲストソフトウェアの状態に異常がないと判定された場合などに、スナップショットデータ保存部１５に記憶させていたスナップショットを利用して、ゲストソフトウェアの実行状態を復元させ、ゲストソフトウェアを実行させる。なお、実施例２においては、スナップショットデータ保存部１５の説明にもあるように、実行制御部１６が、スナップショットとして、レジストリデータ１５ａ、ディスクデータ１５ｂ、スタックデータ１５ｃ、ヒープ領域データ１５ｄなどを取得する手法について説明するが、本発明はこれに限られるものではない。実行制御部１６がこれらのデータの一部を取得する手法や、全部を取得する手法などにも、本発明を同様に適用することができる。
【００８０】
実施例２におけるコード挿入部１４は、例えば、ゲストソフトウェアの情報を収集する命令が記述されたコードを、仮想マシンのメモリ空間に挿入する。また、例えば、コード挿入部１４は、収集したゲストソフトウェアの情報とパターンＤＢ１１に記憶されているシグネチャとをマッチングすることによって、ゲストソフトウェアの状態に異常があるか否かを判定する。また、例えば、コード挿入部１４は、コードの実行結果が「ゲストソフトウェアの状態に異常がある」との判断を示すものである場合には、ゲストソフトウェアおよびホストソフトウェアの両方または片方にアラートを伝達するなどしてもよい。また、例えば、コード挿入部１４は、運用方針によっては、ゲストソフトウェア上でパターンＤＢ１１のシグネチャにマッチするコンピュータ資源を削除したり、実行不可能な形にするようなコードを仮想マシンのメモリ空間にさらに挿入して実行させることで、マルウェアからゲストソフトウェアを保護するなどしてもよい。
【００８１】
［実施例２に係る情報収集システムの処理の手順］
次に、図９を用いて、実施例２に係る情報収集システムの処理の手順を説明する。図９は、実施例２に係る情報収集システムによる処理の手順を示すフローチャートである。
【００８２】
まず、情報収集部１０の実行制御部１６は、外部からのリクエストを監視する（ステップＳ２０１）。具体的には、本マルウェア検知システムは、ユーザからのリクエストを契機として動作するものであるので、実行制御部１６は、外部からのリクエストを待機する。
【００８３】
そして、情報収集部１０の実行制御部１６は、リクエストを受け付けたか否かを判定する（ステップＳ２０２）。リクエストを受け付けていない場合には（ステップＳ２０２否定）、実行制御部１６は、外部からのリクエストを監視する処理に戻る。
【００８４】
一方、リクエストを受け付けた場合には（ステップＳ２０２肯定）、実行制御部１６は、スナップショットを保存する（ステップＳ２０３）。具体的には、実行制御部１６は、現在実行中のゲストソフトウェアのその時点での実行状態のスナップショットを取得し、スナップショットデータ保存部１５に記憶させる。
【００８５】
続いて、情報収集部１０のコード挿入部１４は、情報収集コード（調査コード）を挿入する（ステップＳ２０４）。具体的には、コード挿入部１４は、ゲストソフトウェアの情報を収集する情報収集コードを、仮想マシンのメモリ空間に挿入する。
【００８６】
そして、情報収集部１０のコード挿入部１４は、ゲストソフトウェアの状態に異常があるか否かを判定する（ステップＳ２０５）。具体的には、コード挿入部１４は、ステップＳ２０４で収集したゲストソフトウェアの情報とパターンＤＢ１１に記憶されているシグネチャとをマッチングすることによって、ゲストソフトウェアの状態に異常があるか否かを判定する。異常がないと判定された場合には（ステップＳ２０５否定）、実行制御部１６が、スナップショットデータ保存部１５に記憶させていたスナップショットを利用して、ゲストソフトウェアの実行状態を復元させ、ゲストソフトウェアを実行させ（ステップＳ２０６）、ステップＳ２０１へ戻る。
【００８７】
一方、異常があると判定された場合には（ステップＳ２０５肯定）、その後、コード挿入部１４は、アラートを伝達する（ステップＳ２０７）。具体的には、コード挿入部１４は、ゲストソフトウェアおよびホストソフトウェアの両方または片方にアラートを伝達する。
【００８８】
さらに、コード挿入部１４は、運用方針によっては、削除等対策を行う（ステップＳ２０８）。具体的には、コード挿入部１４は、ゲストソフトウェア上でパターンＤＢ１１のシグネチャにマッチするコンピュータ資源を削除したり、実行不可能な形にするようなコードを仮想マシンのメモリ空間にさらに挿入して実行させることで、マルウェアからゲストソフトウェアを保護する。
【００８９】
そして、実行制御部１６が、スナップショットデータ保存部１５に記憶させていたスナップショットを利用して、ゲストソフトウェアの実行状態を復元させ、ゲストソフトウェアを実行させ（ステップＳ２０９）、ステップＳ２０１へ戻る。
【００９０】
このように、実施例２に係る情報収集システムは、ゲストソフトウェアが利用している「仮想マシン」のメモリやディスクについて、どこに必要としている情報が配置されているかを正確に把握することなく情報を収集できることから、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【００９１】
［実施例２の効果］
上記してきたように、実施例２によれば、実施例１の効果の他に、仮想マシン上で動作するゲストソフトウェアを監視する際、ゲストソフトウェアの外側からゲストソフトウェア内部で起きている事象を把握し、効率よくゲストソフトウェアの内部の情報を取得することが可能になる。このため、本発明を利用してマルウェア検知システムを構築することにより、ゲストソフトウェアの詳細な情報元に、安全な場所からゲストソフトウェアを監視するシステムを実現することが可能になる。
【００９２】
また、実施例２によれば、ゲストＯＳまたはアプリケーションの所定の挙動を契機としてゲストＯＳまたはアプリケーションの実行状態のスナップショットを取得し、取得したスナップショットを用いて、ゲストＯＳまたはアプリケーションの実行を再開させるので、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【実施例３】
【００９３】
これまで、実施例２として、本発明に係る情報収集システムを、『ユーザからのリクエストに応じて動作するマルウェア検知システム』として利用する手法について説明してきたが、本発明はこれに限られるものではなく、本発明に係る情報収集システムを、『ゲストソフトウェアの呼び出すシステムコールを監視することでゲストソフトウェア内のマルウェアの実行を検知するマルウェア検知システム』として利用してもよい。そこで、以下では、実施例３として、『マルウェア検知システム』の中でも、特に、『ゲストソフトウェアの呼び出すシステムコールを監視することでゲストソフトウェア内のマルウェアの実行を検知するマルウェア検知システム』の一例について、説明する。
【００９４】
なお、実施例３におけるコード挿入部１４は、例えば、ゲストソフトウェアの情報として、特定のシステムコールを呼び出した際の引数や、それに関連するメモリやディスクの情報などを収集するコードを、仮想マシンのメモリ空間に挿入する。また、プログラム監視部１３は、特許請求の範囲に記載の「特殊命令監視手段」に対応する。
【００９５】
［実施例３に係る情報収集システムの処理の手順］
図１０を用いて、実施例３に係る情報収集システムの処理の手順を説明する。図１０は、実施例３に係る情報収集システムによる処理の手順を示すフローチャートである。
【００９６】
まず、情報収集部１０のプログラム監視部１３は、システムコールの呼び出しを監視する（ステップＳ３０１）。具体的には、本マルウェア検知システムは、ゲストウェアのシステムコールの呼び出しを行うための特定の特権命令の実行を契機として動作するものであるので、プログラム監視部１３は、仮想マシン１００が提供する仮想的なＣＰＵに読み込まれた情報を利用することで、ゲストソフトウェアがシステムコールを発行する際に実行する特殊命令を監視して、ゲストソフトウェア内からのシステムコールの呼び出しを監視する。具体的に例を挙げて説明すると、ゲストソフトウェアがシステムコールを発行すると、仮想的なＣＰＵには、特殊命令が読み込まれる。すると、仮想的なＣＰＵは、特殊命令が読み込まれたことをゲストソフトウェアに伝えるために、シグナルを発行する。このシグナルの発行にあたっては、仮想的なＣＰＵから関数が呼び出されるが、プログラム監視部１３は、この呼び出しを監視することで、ゲストソフトウェア内からのシステムコールの呼び出しを監視するのである。なお、プログラム監視部１３が、仮想的なＣＰＵに特殊命令が読み込まれたか否かを監視する手法にも、本発明を同様に適用することができる。
【００９７】
そして、情報収集部１０のプログラム監視部１３は、特権命令が実行されたか否かを判定する（ステップＳ３０２）。特権命令が実行されていない場合には（ステップＳ３０２否定）、プログラム監視部１３は、システムコールの呼び出しを監視する処理に戻る。
【００９８】
一方、特権命令が実行された場合には（ステップＳ３０２肯定）、実行制御部１６が、スナップショットを保存する（ステップＳ３０３）。具体的には、実行制御部１６は、現在実行中のゲストソフトウェアのその時点での実行状態のスナップショットを取得し、スナップショットデータ保存部１５に記憶させる。なお、実行制御部１６は、スナップショットとして、レジストリデータ１５ａ、ディスクデータ１５ｂ、スタックデータ１５ｃ、ヒープ領域データ１５ｄなどの一部を取得しても、全部を取得してもよい。
【００９９】
続いて、情報収集部１０のコード挿入部１４は、調査コードを挿入する（ステップＳ３０４）。具体的には、コード挿入部１４は、ゲストソフトウェアの情報を収集する調査コードを、仮想マシンのメモリ空間に挿入する。これによって、コード挿入部１４は、システムコールを呼び出したプロセスやシステムコール番号、システムコール呼び出しの際の引数などの情報を収集する。
【０１００】
そして、情報収集部１０のコード挿入部１４は、パターンマッチを行い、ゲストソフトウェアの状態に異常があるか否かを判定する（ステップＳ３０５）。具体的には、コード挿入部１４は、ステップＳ３０４で収集したゲストソフトウェアの情報とパターンＤＢ１１に記憶されているシグネチャとをマッチングすることによって、ゲストソフトウェアの状態に異常があるか否かを判定する。異常がないと判定された場合には（ステップＳ３０５否定）、実行制御部１６が、スナップショットデータ保存部１５に記憶させていたスナップショットを利用して、ゲストソフトウェアの実行状態を復元させ、ゲストソフトウェアを実行させ（ステップＳ３０６）、ステップＳ３０１へ戻る。
【０１０１】
一方、異常があると判定された場合には（ステップＳ３０５肯定）、その後、コード挿入部１４は、アラートを伝達する（ステップＳ３０７）。具体的には、コード挿入部１４は、ゲストソフトウェアおよびホストソフトウェアの両方または片方にアラートを伝達する。
【０１０２】
さらに、コード挿入部１４は、運用方針によっては、対策を行う（ステップＳ３０８）。具体的には、コード挿入部１４は、ゲストソフトウェア上でパターンＤＢ１１のシグネチャにマッチするコンピュータ資源を削除したり、実行不可能な形にするようなコードを仮想マシンのメモリ空間にさらに挿入して実行させることで、マルウェアからゲストソフトウェアを保護する。
【０１０３】
そして、実行制御部１６が、スナップショットデータ保存部１５に記憶させていたスナップショットを利用して、ゲストソフトウェアの実行状態を復元させ、ゲストソフトウェアを実行させ（ステップＳ３０９）、ステップＳ３０１へ戻る。
【０１０４】
このように、実施例３に係る情報収集システムは、ゲストソフトウェアが利用している「仮想マシン」のメモリやディスクについて、どこに必要としている情報が配置されているかを正確に把握することなく情報を収集できることから、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【０１０５】
なお、上記の実施例３においては、情報収集システムが、まず、プログラム監視部１３において、システムコールの呼び出しを監視し、特権命令が実行されたと判定した場合に、コード挿入部１４においてコードを挿入する手法について説明したが、本発明はこれに限られるものではない。プログラム監視部１３による監視や判定のみを行い、コード挿入部１４におけるコードの挿入は行わない手法などにも、本発明を同様に適用することができる。
【０１０６】
［実施例３の効果］
上記してきたように、実施例３によれば、実施例１や２の効果の他に、仮想マシンが提供する仮想的なＣＰＵに読み込まれた情報を利用することで、当該ゲストＯＳまたは当該アプリケーションがシステムコールを発行する際に実行する特殊命令を監視して当該システムコールの発行を監視するので、ゲストソフトウェア内部での事象を正確に把握した上で、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【０１０７】
また、情報収集コードとして、監視したシステムコールについて、当該システムコールを発行したプロセス、システムコール番号、当該システムコールに渡される引数のいずれか一つまたは複数を収集する命令が記述された情報収集コードを、メモリ空間に挿入するので、ゲストソフトウェア内部での事象を正確に把握した上で、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【実施例４】
【０１０８】
これまで、実施例３として、本発明に係る情報収集システムを、『ゲストソフトウェアの呼び出すシステムコールを監視することでゲストソフトウェア内のマルウェアの実行を検知するマルウェア検知システム』として利用する手法の一例について説明してきた。実施例４では、さらに、本発明に係る情報収集システムを、『ゲストソフトウェアのシステムコールからの復帰時にも同様の検査を行うことで、マルウェアの実行を検知するマルウェア検知システム』として利用する手法の一例について、説明する。なお、実行制御部１６は、特許請求の範囲に記載の「システムコール情報取得手段」にも対応する。
【０１０９】
［実施例４に係る情報収集システムの処理の手順］
図１１を用いて、実施例４に係る情報収集システムの処理の手順を説明する。図１１は、実施例４に係る情報収集システムによる処理の手順を示すフローチャートである。
【０１１０】
まず、実施例３と同様、情報収集部１０のプログラム監視部１３は、システムコールの呼び出しを監視する（ステップＳ４０１）。そして、実施例３と同様、プログラム監視部１３は、特権命令が実行されたか否かを判定する（ステップＳ４０２）。特権命令が実行されていない場合には（ステップＳ４０２否定）、プログラム監視部１３は、システムコールの呼び出しを監視する処理に戻る。
【０１１１】
一方、特権命令が実行された場合には（ステップＳ４０２肯定）、実行制御部１６が、システムコールに係る情報を記憶部に記憶させる（ステップＳ４０３）。具体的には、実行制御部１６は、システムコールに係る情報として、例えば、システムコールを呼び出したプロセスやシステムコール番号、システムコールを呼び出した際の引数やメモリ状態などを記憶させる。
【０１１２】
続いて、情報収集部１０のプログラム監視部１３は、システムコールからの復帰を監視する（ステップＳ４０４）。そして、プログラム監視部１３は、システムコール終了のための特権命令が実行されたか否かを判定する（ステップＳ４０５）。特権命令が実行されていない場合には（ステップＳ４０５否定）、プログラム監視部１３は、システムコールからの復帰を監視する処理に戻る。なお、プログラム監視部１３は、システムコール終了のための特権命令が実行されたか否かを判定する手法ではなく、実行の権限が変更したか否かを監視して判定してもよい。
【０１１３】
一方、システムコール終了のための特権命令が実行された場合には（または、実行の権限が変化した際など、ゲストソフトウェアの権限の移行を捉えて）（ステップＳ４０５肯定）、実行制御部１６が、スナップショットを保存する（ステップＳ４０６）。なお、実行制御部１６は、スナップショットとして、レジストリデータ１５ａ、ディスクデータ１５ｂ、スタックデータ１５ｃ、ヒープ領域データ１５ｄなどの一部を取得しても、全部を取得してもよい。
【０１１４】
続いて、情報収集部１０のコード挿入部１４は、調査コードを挿入する（ステップＳ４０７）。具体的には、コード挿入部１４は、ゲストソフトウェアの情報を収集する調査コードを、仮想マシンのメモリ空間に挿入する。これによって、コード挿入部１４は、ゲストソフトウェアのメモリの状態等の情報を収集する。
【０１１５】
そして、情報収集部１０のコード挿入部１４は、パターンマッチを行い、ゲストソフトウェアの状態に異常があるか否かを判定する（ステップＳ４０８）。具体的には、コード挿入部１４は、ステップＳ４０３で記憶部に記憶させたシステムコールに係る情報や、ステップＳ４０７で収集したゲストソフトウェアの情報を付加的に利用するなどして、これらの情報とパターンＤＢ１１に記憶されているシグネチャとをマッチングすることによって、ゲストソフトウェアの状態に異常があるか否かを判定する。異常がないと判定された場合には（ステップＳ４０８否定）、実行制御部１６が、スナップショットデータ保存部１５に記憶させていたスナップショットを利用して、ゲストソフトウェアの実行状態を復元させ、ゲストソフトウェアを実行させ（ステップＳ４０９）、ステップＳ４０１へ戻る。
【０１１６】
一方、異常があると判定された場合には（ステップＳ４０８肯定）、その後、実施例３と同様、コード挿入部１４が、アラートを伝達したり（ステップＳ４１０）、運用方針によっては対策を行ったり（ステップＳ４１１）、実行制御部１６が、スナップショットデータ保存部１５に記憶されていたスナップショットを利用して、ゲストソフトウェアの実行状態を復元させ、ゲストソフトウェアを実行させ（ステップＳ４１２）、ステップＳ４０１へ戻る。
【０１１７】
このように、実施例４に係る情報収集システムは、ゲストソフトウェアが利用している「仮想マシン」のメモリやディスクについて、どこに必要としている情報が配置されているかを正確に把握することなく情報を収集できることから、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【０１１８】
なお、上記の実施例４においては、情報収集システムが、まず、プログラム監視部１３において、システムコールの呼び出しやシステムコールからの復帰を監視し、特権命令が実行されたと判定した場合に、コード挿入部１４においてコードを挿入する手法について説明したが、本発明はこれに限られるものではない。プログラム監視部１３による監視や判定のみを行い、コード挿入部１４におけるコードの挿入は行わない手法などにも、本発明を同様に適用することができる。
【０１１９】
また、上記の実施例４においては、情報収集システムが、プログラム監視部１３において、システムコールからの復帰を監視し、システムコール終了のための特権命令が実行されたと判定した後に、コード挿入部１４においてコードを挿入する手法について説明したが、本発明はこれに限られるものではない。実施例３に係る情報収集システムによる手法と組み合わせることも可能である。すなわち、プログラム監視部１３において、システムコールの呼び出しを監視し、システムコール呼び出しのための特権命令が実行されたと判定した後に、まず、コード挿入部１４においてコードを挿入し、その上で、システムコールからの復帰も監視し、システムコール終了のための特権命令が実行されたと判定した後にも、コード挿入部１４においてコードを挿入するなど、複数回にわたってコードを挿入するなどしてもよい。
【０１２０】
［実施例４の効果］
上記してきたように、実施例４によれば、実施例１〜３の効果の他に、監視されたシステムコールを発行した際の情報を取得し、取得した情報をさらに用いて情報を収集するので、ゲストソフトウェア内部での事象を把握した上で、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【実施例５】
【０１２１】
これまで、実施例３や４として、本発明に係る情報収集システムを、システムコールと関連づけてマルウェアの実行を検知するマルウェア検知システムとして利用する手法の一例について説明してきた。実施例５では、さらに、本発明に係る情報収集システムを、『ゲストソフトウェアの呼び出すシステムコール履歴を監視することで、マルウェアの実行を検知するマルウェア検知システム』として利用する手法の一例について、説明する。
【０１２２】
まず、図１２を用いて、実施例５に係る情報収集システムの構成を説明する。図１２は、実施例５における情報収集部（マルウェア検知システム）の構成を示すブロック図である。図１２に示すように、実施例５における情報収集部１０は、システムコール履歴ＤＢ１７が追加されている点で、実施例２〜４における情報収集部１０と異なる。
【０１２３】
実施例５におけるパターンＤＢ１１は、マルウェアか否かを判断するためのマルウェアの特徴的なシステムコールシーケンスを、シグネチャとして、一つまたは複数記憶している。具体的には、パターンＤＢ１１は、一つまたは複数のシグネチャを、情報収集システムの利用者によって予め登録されるなどすることで予め記憶し、記憶しているシグネチャは、コード挿入部１４による処理に利用されるなどする。
【０１２４】
例えば、パターンＤＢ１１は、図１３に示すようなシグネチャを予め記憶している。図１３に示すシグネチャの内、『シグネチャ３』が、システムコールシーケンスのシグネチャの例である。なお、パターンＤＢ１１が記憶するシステムコールシーケンスのシグネチャには、二通りの使い方を考えることができる。一つは、危険なシステムコールのシーケンスをシグネチャとして持たせ、それと一致した時に危険と判断する手法である。もう一つは、正常状態のシステムコールのシーケンスをシグネチャとして持たせ、そのシグネチャとは異なるコールシーケンスが発生した時に危険と判断する手法である。
【０１２５】
実施例５における実行制御部１６は、実施例２〜４と同様、スナップショットを取得したり、ゲストソフトウェアの実行状態を復元させるなどする他に、ゲストソフトウェアから呼び出されたシステムコールの情報をシステムコール履歴ＤＢ１７に記憶させる。
【０１２６】
［実施例５に係る情報収集システムの処理の手順］
次に、図１４を用いて、実施例５に係る情報収集システムの処理の手順を説明する。図１４は、実施例５に係る情報収集システムによる処理の手順を示すフローチャートである。
【０１２７】
まず、実施例３と同様、情報収集部１０のプログラム監視部１３は、システムコールの呼び出しを監視する（ステップＳ５０１）。そして、実施例３と同様、プログラム監視部１３は、特権命令が実行されたか否かを判定する（ステップＳ５０２）。特権命令が実行されていない場合には（ステップＳ５０２否定）、プログラム監視部１３は、システムコールの呼び出しを監視する処理に戻る。
【０１２８】
一方、特権命令が実行された場合には（ステップＳ５０２肯定）、実施例３と同様、実行制御部１６が、スナップショットを保存する（ステップＳ５０３）。なお、実行制御部１６は、スナップショットとして、レジストリデータ１５ａ、ディスクデータ１５ｂ、スタックデータ１５ｃ、ヒープ領域データ１５ｄなどの一部を取得しても、全部を取得してもよい。
【０１２９】
そして、情報収集部１０の実行制御部１６は、ステップＳ５０１において呼び出されたシステムコールの情報を、システムコール履歴ＤＢ１７に記憶させる（ステップＳ５０４）。
【０１３０】
続いて、情報収集部１０のコード挿入部１４は、調査コードを挿入する（ステップＳ５０５）。具体的には、コード挿入部１４は、ゲストソフトウェアの情報を収集する調査コードを、仮想マシンのメモリ空間に挿入する。これによって、コード挿入部１４は、システムコールの引数情報等の情報を収集する。
【０１３１】
そして、コード挿入部１４は、パターンマッチを行い、ゲストソフトウェアの状態に異常があるか否かを判定する（ステップＳ５０６）。具体的には、コード挿入部１４は、ステップＳ５０４で記憶部に記憶させたシステムコールの情報（システムコールシーケンスなど）や、ステップＳ５０５で収集したゲストソフトウェアの情報を付加的に利用するなどして、これらの情報とパターンＤＢ１１に記憶されているシグネチャとをマッチングすることによって、ゲストソフトウェアの状態に異常があるか否かを判定する。異常がないと判定された場合には（ステップＳ５０６否定）、実行制御部１６が、スナップショットデータ保存部１５に記憶させていたスナップショットを利用して、ゲストソフトウェアの実行状態を復元させ、ゲストソフトウェアを実行させ（ステップＳ５０７）、ステップＳ５０１へ戻る。
【０１３２】
一方、異常があると判定された場合には（ステップＳ５０６肯定）、その後、実施例３と同様、コード挿入部１４が、アラートを伝達したり（ステップＳ５０８）、運用方針によっては対策を行ったり（ステップＳ５０９）、実行制御部１６が、スナップショットデータ保存部１５に記憶されていたスナップショットを利用して、ゲストソフトウェアの実行状態を復元させ、ゲストソフトウェアを実行させ（ステップＳ５１０）、ステップＳ５０１へ戻る。
【０１３３】
このように、実施例５に係る情報収集システムは、ゲストソフトウェアが利用している「仮想マシン」のメモリやディスクについて、どこに必要としている情報が配置されているかを正確に把握することなく情報を収集できることから、ゲストソフトウェアに関する情報を簡易に収集することが可能になる。
【０１３４】
なお、上記の実施例５においては、情報収集システムが、まず、プログラム監視部１３において、システムコールの呼び出しを監視し、特権命令が実行されたと判定した場合に、コード挿入部１４においてコードを挿入する手法について説明したが、本発明はこれに限られるものではない。プログラム監視部１３による監視や判定のみを行い、コード挿入部１４におけるコードの挿入は行わない手法などにも、本発明を同様に適用することができる。
【実施例６】
【０１３５】
［他の実施例］
さて、これまで本発明の各種実施例について説明してきたが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【０１３６】
［システム構成等］
これまで、実施例１〜５として、本発明における情報収集部が、情報収集モジュール（ゲストソフトウェア監視モジュール）として仮想マシン（ＶＭＭ）内に実装される構成例について説明してきたが（図１を参照）、本発明はこのような構成に限られるものではない。例えば、図１５に示すように、仮想マシン上で複数のゲストＯＳが動作している状態で、本発明における情報収集部が、情報収集モジュールを含むアプリケーションとして、情報の収集対象となるゲストＯＳとは異なるＯＳ（図１５においては、他のゲストＯＳ）内に実装される構成例や、図１６に示すように、本発明における情報収集部が、情報収集モジュールを含むアプリケーションとしてホストＯＳ内に実装される構成例などにも、本発明を同様に適用することができる。
【０１３７】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１３８】
また、図示（例えば、図２など）した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１３９】
なお、本実施例で説明した情報収集方法は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【産業上の利用可能性】
【０１４０】
以上のように、本発明に係る情報収集システムおよび情報収集方法は、仮想マシンにゲストＯＳがインストールされている構成において、ゲストソフトウェア（ゲストＯＳ、当該ゲストＯＳにインストールされているアプリケーション）に関する情報を収集することに有用であり、特に、ゲストソフトウェアに関する情報を簡易に収集することに適する。
【図面の簡単な説明】
【０１４１】
【図１】実施例１に係る情報収集システムの概要および特徴を説明するための図である。
【図２】実施例１における情報収集部（攻撃検知システム）の構成を示すブロック図である。
【図３】パターンＤＢを説明するための図である。
【図４】情報収集モジュールライブラリを説明するための図である。
【図５】情報収集コードを説明するための図である。
【図６】実施例１に係る情報収集システムによる処理の手順を示すフローチャートである。
【図７】実施例２における情報収集部（マルウェア検知システム）の構成を示すブロック図である。
【図８】スナップショットデータ保存部を説明するための図である。
【図９】実施例２に係る情報収集システムによる処理の手順を示すフローチャートである。
【図１０】実施例３に係る情報収集システムによる処理の手順を示すフローチャートである。
【図１１】実施例４に係る情報収集システムによる処理の手順を示すフローチャートである。
【図１２】実施例５における情報収集部（マルウェア検知システム）の構成を示すブロック図である。
【図１３】実施例５におけるパターンＤＢを説明するための図である。
【図１４】実施例５に係る情報収集システムによる処理の手順を示すフローチャートである。
【図１５】実施例６に係る情報収集システムの構成を示すブロック図である。
【図１６】実施例６に係る情報収集システムの構成を示すブロック図である。
【符号の説明】
【０１４２】
１００  仮想マシン
１０  情報収集部
１１  パターンＤＢ
１２  情報収集モジュールライブラリ
１２ａ  情報収集モジュール
１２ｂ  ゲストソフトウェアライブラリ検索部
１２ｃ  ゲストソフトウェアライブラリ実行部
１３  プログラム監視部
１４  コード挿入部
１５  スナップショットデータ保存部
１５ａ  レジストリデータ
１５ｂ  ディスクデータ
１５ｃ  スタックデータ
１５ｄ  ヒープ領域データ
１６  実行制御部
１７  システムコール履歴ＤＢ
２０  仮想資源
３０  ゲストＯＳ
３１  アプリケーション
２００  ホストＯＳ
【図１】
0004938576.tif 000002
【図２】
0004938576.tif 000003
【図３】
0004938576.tif 000004
【図４】
0004938576.tif 000005
【図５】
0004938576.tif 000006
【図６】
0004938576.tif 000007
【図７】
0004938576.tif 000008
【図８】
0004938576.tif 000009
【図９】
0004938576.tif 000010
【図１０】
0004938576.tif 000011
【図１１】
0004938576.tif 000012
【図１２】
0004938576.tif 000013
【図１３】
0004938576.tif 000014
【図１４】
0004938576.tif 000015
【図１５】
0004938576.tif 000016
【図１６】
0004938576.tif 000017