(57)【要約】【課題】  「ルートキット」のような自分自身を隠す機能を備えたコンピュータウィルスを確実に検出することができるコンピュータウィルス検出システムを提供すること。【解決手段】  コンピュータウィルス検出対象のコンピュータ内に、アプリケーションの実行環境を提供する第１のゲストＯＳと、ウィルス検出手段の実行環境を提供する第２のゲストＯＳを互いに隔離して稼働させる仮想化手段を備えると共に、前記ウィルス検出手段が、前記アプリケーション及び第１のゲストＯＳが使用する仮想記憶手段を直接アクセスし、当該仮想化記憶手段内にコンピュータウィルスが存在するかを検出する第１の手段を備えることを特徴とする。【選択図】      図１
2010049627.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータウィルス検出対象のコンピュータ内に、アプリケーションの実行環境を提供する第１のゲストＯＳと、ウィルス検出手段の実行環境を提供する第２のゲストＯＳを互いに隔離して稼働させる仮想化手段を備えると共に、
前記ウィルス検出手段が、
前記アプリケーション及び第１のゲストＯＳが使用する仮想記憶手段を直接アクセスし、当該仮想化記憶手段内にコンピュータウィルスが存在するかを検出する第１の手段を備えることを特徴とするコンピュータウィルス検出システム。
【請求項２】
前記第１の手段が、前記仮想記憶手段内のプロセス管理ブロックポインタから辿れるプロセス一覧と前記第１のゲストＯＳが提供するインタフェースから得られたプロセス一覧とを比較することによりコンピュータウィルスを検出する手段を備えることを特徴とする請求項１に記載のコンピュータウィルス検出システム。
【請求項３】
前記第１の手段が、前記仮想記憶手段の状態と優先度別スレッド管理ブロックポインタから辿れるスレッド一覧と前記第１のゲストＯＳが提供するインタフェースから得られたスレッド一覧とを比較することによりコンピュータウィルスを検出する手段を備えることを特徴とする請求項１に記載のコンピュータウィルス検出システム。
【請求項４】
前記第１の手段が、前記仮想記憶手段の状態と優先度別スレッド管理ブロックポインタから辿れるスレッドの対応するプロセスが、前記仮想記憶手段のプロセス管理ブロックポインタから辿れるプロセスにあるか否かを判定することによりコンピュータウィルスを検出する手段を備えることを特徴とする請求項１に記載のコンピュータウィルス検出システム。
【請求項５】
前記第１の手段が、前記第１のゲストＯＳのプロセス管理ブロックから辿れる仮想アドレスと物理アドレス変換テーブルを利用して物理メモリアドレスを特定し、物理メモリ中のコンピュータウィルスを検出する手段を備えることを特徴とする請求項１に記載のコンピュータウィルス検出システム。
【請求項６】
前記第１の手段が、前記第１のゲストＯＳからアクセス可能なファイルの一覧と前記第１のゲストＯＳが利用している仮想記憶手段から得られるファイル一覧を比較することによりコンピュータウィルスを検出する手段を備えることを特徴とする請求項１に記載のコンピュータウィルス検出システム。
【請求項７】
前記ウィルス検出手段に代えて、前記仮想化手段により構築された仮想マシンがコンピュータウィルスを検出することを特徴とする請求項１〜６のいずれか一項に記載のコンピュータウィルス検出システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータウィルス（あるいはマルウェア）の検出システムに係り、特に「ルートキット」と呼ばれるコンピュータウィルスの検出システムに関するものである。
【背景技術】
【０００２】
従来から、コンピュータウィルスの検出技術としては、監視対象のファイルの内容とウィルスパターン（シグネチャ）とを照合する方法が典型であった。
また、下記の特許文献１に開示されているように、ＯＳ（オペレーティングシステム）にあたるカーネル空間にイベント監視部を設け、ウィルス侵入の兆候を監視するものが知られている。
【０００３】
【特許文献１】特開２００６−６５８３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、上記の従来の技術にあっては、カーネル空間とはいえＯＳが提供するインタフェースを通してウィルス侵入を監視しているため、自分自身を隠す機能を備えた「ルートキット」と呼ばれるコンピュータウィルスを検知することはできないという問題がある。
「ルートキット」はアプリケーションやシステムライブラリから汎用的に利用されるプログラムインタフェースをフックして、自身を隠して、検知を逃れる。例えば、稼動中プロセス一覧を取得するプログラミングインターフェースをフックし、自身のプロセス情報を除いて、呼び出し側にプロセス一覧を返すルートキットが存在する。また、別のルートキットでは、仮想メモリの一部モジュールを改変し、メモリからウィルスを検出できないように、自身のデータを隠すものがある。
【０００５】
本発明は、このような問題を解決するためのものであり、その目的は「ルートキット」のような自分自身を隠す機能を備えたコンピュータウィルスを確実に検出することができるコンピュータウィルス検出システムを提供することである。
【課題を解決するための手段】
【０００６】
上記目的を達成するために本発明に係るコンピュータウィルス検出システムは、コンピュータウィルス検出対象のコンピュータ内に、アプリケーションの実行環境を提供する第１のゲストＯＳと、ウィルス検出手段の実行環境を提供する第２のゲストＯＳを互いに隔離して稼働させる仮想化手段を備えると共に、
前記ウィルス検出手段が、
前記アプリケーション及び第１のゲストＯＳが使用する仮想記憶手段を直接アクセスし、当該仮想化記憶手段内にコンピュータウィルスが存在するかを検出する第１の手段を備えることを特徴とする。
また、前記第１の手段が、前記仮想記憶手段内のプロセス管理ブロックポインタから辿れるプロセス一覧と前記第１のゲストＯＳが提供するインタフェースから得られたプロセス一覧とを比較することによりコンピュータウィルスを検出する手段を備えることを特徴とする。
また、前記第１の手段が、前記仮想記憶手段の状態と優先度別スレッド管理ブロックポインタから辿れるスレッド一覧と前記第１のゲストＯＳが提供するインタフェースから得られたスレッド一覧とを比較することによりコンピュータウィルスを検出する手段を備えることを特徴とする。
また、前記第１の手段が、前記仮想記憶手段の状態と優先度別スレッド管理ブロックポインタから辿れるスレッドの対応するプロセスが、前記仮想記憶手段のプロセス管理ブロックポインタから辿れるプロセスにあるか否かを判定することによりコンピュータウィルスを検出する手段を備えることを特徴とする。
また、前記第１の手段が、前記第１のゲストＯＳのプロセス管理ブロックから辿れる仮想アドレスと物理アドレス変換テーブルを利用して物理メモリアドレスを特定し、物理メモリ中のコンピュータウィルスを検出する手段を備えることを特徴とする。
また、前記第１の手段が、前記第１のゲストＯＳからアクセス可能なファイルの一覧と前記第１のゲストＯＳが利用している仮想記憶手段から得られるファイル一覧を比較することによりコンピュータウィルスを検出する手段を備えることを特徴とする。
また、前記ウィルス検出手段に代えて、前記仮想化手段により構築された仮想マシンがコンピュータウィルスを検出することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、アプリケーションの実行環境を提供する第１のゲストＯＳから隔離されて稼働する第２のゲストＯＳの稼働環境で実行されるウィルス検出手段が、仮想記憶手段（仮想メモリ、仮想ディスク）に直接アクセスしてウィルスを検索することにより、通常のウィルス検出技術では検出できないルートキット型のウィルスも検出できる。特に仮想記憶手段のテキスト領域を直接検索することで、仮想記憶手段内に実行コードで記録されたウィルスも検出できるようになる。ディスク、プロセスについても同様である。
【発明を実施するための最良の形態】
【０００８】
以下、本発明を図面に示す実施の形態を参照して詳細に説明する。
図１は、本発明の第１の実施形態を示すシステム構成図である。
図１において、１０１はウィルス検索対象のコンピュータ上で稼動する一般のアプリケーションである。１０２はウィルス検索対象のコンピュータ上で稼動する監視エージェントであり、通常のＯＳ（後述の第１のゲストＯＳ）が提供するインタフェースを通じてアクセス可能なファイルやプロセスの情報をウィルス検出手段１０３に通知する。ここで通知する情報はルートキットにより改竄された情報であるかもしれない。
１０３は、本発明におけるウィルス検索の主要構成要素であるウィルス検出手段であり、検索対象コンピュータのメモリやディスクを直接検索する。
１０４は、ウィルス検索対象コンピュータにおいてアプリケーション１０１の実行環境を提供する第１のゲストＯＳである。
１０５は、ウィルス検出手段１０３の実行環境を提供する第２のゲストＯＳである。
１０６は、第１、第２のゲストＯＳを互いに隔離して稼働させるVirtual Machine Monitor（ＶＭＭ）であり、１つのＰＣハードウェア上に複数のＯＳが稼動する際に必要なソフトウェアである。このＶＭＭ１０６は、各ゲストＯＳ１０４，１０５のメモリやディスクへのアクセスを制御し、競合が起きないようにする仮想化手段を構成している。
１０７は、ウィルス検索対象のコンピュータのハードウェアである。このハードウェア１０７上にＶＭＭ１０６とゲストＯＳ１０４とゲストＯＳ１０５が稼動する。
１０８は、ウィルス検出手段１０３が利用するウィルスのパターンが含まれるシグネチャのデータベースである。実体は、ハードウェア１０７に付属のハードディスクの一部である。
１０９は、ウィルス検出手段１０３がアクセスする検索対象プロセス管理ブロックであり、図４に示すように構成されている。
【０００９】
１１０は、第１のゲストＯＳ１０４が使用する物理メモリに対応する仮想メモリである。実体はハードウェア１０７の物理メモリの一部である。第１のゲストＯＳ１０４が意識する物理メモリのアドレスはＶＭＭ１０６によりハードウェア１０７の物理メモリのアドレスに変換される。ウィルス検出手段１０３は仮想メモリ中を直接検索する。この検索する際のアドレスは、第１のゲストＯＳ１０４から見える物理アドレスであり、ＶＭＭ１０６によりハードウェア１０７の物理メモリのアドレスに変換される。
１１１は、第１のゲストＯＳ１０４が使用するハードディスクに対応する仮想ディスクである。実体はハードウェア１０７のハードディスク上のファイルである。第１のゲストＯＳ１０４が意識するディスクのセクタはＶＭＭ１０６によりファイルのセクタないしはブロックに変換される。ウィルス検出手段１０３はこの仮想ディスク中を直接検索する。
１１３は、ウィルス検出手段１０３が利用するウィルスのパターンを更新したり、ウィルスの検出結果の報告を受ける管理サーバである。
【００１０】
図２は、第１のゲストＯＳ１０４が管理するプロセス管理ブロックの構成例を示す図である。
図２において、２０１は、物理メモリ上の固定アドレスにある管理ブロックへのポイントを格納するグローバル変数を示す。このポインタから辿ることにより、第１のゲストＯＳ１０４上で稼動しているプロセスの情報を得ることができる。
２１１〜２１６が１つのプロセス管理ブロックである。実際のプロセス管理ブロックは、さらに多くの情報を含んでいるが、これ以上は本発明にかかわらないので省略する。
２１１はプロセス管理ブロックの一部であるプロセスＩＤである。
２１２はプロセス管理ブロックの一部である親プロセスＩＤであり、このプロセスを生成したプロセスのＩＤを示す。
２１３は次のプロセス管理ブロックへのポインタであり、このポインタを次々と辿ることにより、全てのプロセス管理ブロックにアクセスすることができる。
２１４は、本プロセスが利用する仮想メモリに関する情報を含む。実際には、Page Directory（ＰＤ）３０２へのポインタやメモリのサイズなどの情報を含む。
２１５は、本プロセスがリソースへアクセスする際の権限を示すアクセストークンであり、本プロセスがファイル等のリソースにアクセスする際に、第１のゲストＯＳ１０４は本アクセストークンを参照して、該リソースにアクセスを許可するか禁止するか判断する。
２１６は、本プロセスが保持しているハンドルのテーブルである。ハンドルとは、プロセスがアクセスしているファイルや通信路を識別するための識別子である。
【００１１】
図３は、１つのプロセスに対する仮想メモリを図示したものである。
図３において、３０１は、図２に示したプロセス管理ブロックのメモリ管理２１４を示したものであり、ＰＤ３０２の物理アドレスを含んでいる。仮想メモリはプロセスごとに存在するものであるので、仮想メモリの基点となる情報はメモリ管理２１４に含まれている。
３０２は、ＰＤ（Page Directory）であり、Page Table（ＰＴ）３０４へのポインタを含んだ配列である。本配列のインデックスは仮想アドレスの一部であるPage Directory Index（ＰＤＩ）３１１にある。
３０３は、ＰＤ３０２の一要素であり、ＰＴ３０４の物理アドレスを含んでいる。
３０４は、ＰＴ（Page Table）であり、物理メモリ上のページへのポインタである物理アドレスを含んだ配列である。本配列のインデックスは仮想アドレスの一部であるPage Table Index（ＰＴＩ）３１２にある。
３０５は、ＰＴ３０４の一要素であり、物理メモリ上のページのアドレスを含んでいる。
３０６は、物理メモリ上のページである。本ページ中のインデックスは仮想アドレスの一部であるByte Index（ＢＩ）３１３にある。
【００１２】
ここで、ＰＤＩ３１１とＰＴＩ３１２とＢＩ３１３の組み合わせである仮想メモリのアドレスから物理メモリのアドレスへの変換は以下のように行われる。
まず、メモリ管理２１４からＰＤの物理アドレスを特定し、ＰＤＩ３１１からＰＴ３０４の物理アドレスを特定する。
次に、ＰＴＩ３１２から物理メモリ上のページ３０６を特定し、ＢＩ３１１から物理アドレスを得る。第１のゲストＯＳ１０４でなくても、メモリ管理２１４と仮想アドレスがわかれば、第２のゲストＯＳ１０５からＶＭＭ１０６を通じて第１のゲストＯＳ１０４上の物理アドレスが特定でき、物理メモリにアクセスできる。なお、通常のＶＭＭでは、ゲストＯＳごとに仮想メモリや仮想ディスクが管理されており、他のゲストＯＳの仮想メモリはアクセスできないようになっている。
【００１３】
以上の説明では、ＰＴ３０４に示される物理メモリのページ３０６は、物理メモリ上にあると仮定していたが、仮想メモリが物理メモリに格納しきれない場合には、ページフォルトの処理が必要となる。すなわち、ページアウトした物理メモリ上のページを仮想ディスク１１１から探して対応する仮想ディスク上のページにアクセスする。通常のページフォルトの処理では、物理メモリ上にディスク上のページデータをコピーするが、本来ゲストＯＳ１０４の物理メモリに別のゲストＯＳ１０５がアクセスしているので、コピーは行わない。
【００１４】
図４は、ウィルス検出手段１０３が利用する検索対象プロセス管理ブロック１０９の構成例を示す図である。
図４において、４０１は検索しているプロセスのプロセスＩＤを示し、プロセス管理ブロック１０９のプロセスＩＤ２１１に相当する。
４０２は、検索しているプロセス管理ブロックの物理アドレスを示す。
４０３は、仮想メモリを検索する際の開始する仮想アドレスを示す。
４０４は、該プロセスの検索が終了したことを示すフラグである。
以下、フローチャートを参照し、仮想メモリ１１０、仮想ディスク１１１に含まれるウィルスの検知方法、ファイルに含まれるウィルスの検知方法、プロセスを隠すウィルスの検知方法について説明する。これらは単独でもルートキットを検出することもできるが、これら３つを組み合わせることも可能である。
【００１５】
図５は、ウィルス検出手段１０３によるゲストＯＳ１０４での仮想メモリ中のウィルスの検出手順を示すフローチャートである。
仮想メモリはプロセスごとに存在しており、プロセスが終了すれば対応する仮想メモリもなくなる。第１のゲストＯＳ１０４でのプロセスの終了は、ウィルス検出手段１０３が稼動する第２のゲストＯＳ１０５では検出できないので、ウィルス検出手段側で独自にプロセスの終了を判断し、終了したプロセスのウィルスを検索する必要がある。このために、図４に示した検索対象プロセス管理ブロック１０９を利用する。
まず、ステップ５１０において、検索対象プロセス管理ブロック１０９中の終了フラグ４０４が終了を示していれば、第１のゲストＯＳ１０４が管理する図２に示したプロセス管理テーブルを辿り、次のプロセスをセットする。終了を示していなければ、そのままステップ５２０に進む。
辿り方の方法であるが、仮想メモリ１１０中のプロセス管理ブロックアドレス４０２にあるプロセス管理ブロックにアクセスし、該ブロックのプロセスＩＤ２１１が検索対象プロセス管理ブロックのプロセスＩＤ４０１に一致していることを確認、プロセスリンク２１３が示す次のプロセス管理ブロックにアクセスし、該ブロックのプロセスＩＤ２１１を検索対象プロセス管理ブロックのプロセスＩＤ４０１にコピー、プロセスリンク２１３にあったアドレスをプロセス管理ブロックアドレス４０２にセットし、次スキャンアドレス４０３をテキスト領域の先頭アドレスに、終了フラグ４０４をＮＯにセットする。テキスト領域とは、データではなく、いわゆる実行コードが置かれる領域である。
【００１６】
次に、ステップ５２０において、次スキャンアドレス４０３にある仮想アドレスからウィルスコードが含まれていないか、シグネチャ１０８と照合する。仮想アドレスから物理メモリへアクセスする方法は、図３にて説明した。
次に、ステップ５３０において、シグネチャ１０８に一致するコードのパターンがあった場合には、管理サーバ１１３に通知する。
次に、ステップ５４０において、一定サイズのテキスト領域をスキャンしたら、次にスキャンする仮想メモリのアドレスを次スキャンアドレス４０３に格納する。最後までスキャンしたら終了フラグにＹＥＳをセットする。
次にステップ５１０に戻り、図５の処理を継続する。
【００１７】
図６は、ウィルス検出手段１０３による第１のゲストＯＳ１０４での仮想ディスク中の隠れファイルの検出手順を示すフローチャートである。
まず、ステップ６１０において、ウィルス検出手段１０３が第１のゲストＯＳ１０４上の監視エージェント１０２にアプリケーションからアクセス可能なファイル一覧を問い合わせる。通常ＶＭＭ１０６ではゲストＯＳ間のＴＣＰ／ＩＰ通信が可能であるので、これを利用する。
次に、ステップ６２０において、監視エージェント１０２がファイル一覧をウィルス検出手段１０３に送り返す。一覧の作成方法は特に重要ではない。通常利用できるＯＳのインタフェースを利用して作成する。
【００１８】
次に、ステップ６３０において、ウィルス検出手段１０３が先の返答を受信する。さらに、仮想ディスク１１１を検索して当該仮想ディスク１１１上のファイル一覧を生成する。仮想ディスク１１１の実体はファイルであるが、ファイルシステムとしてみれば、ディスクとファイルの差はないので、通常のディスクのセクタをファイルのセクタ（ブロック）と看做すことでファイル一覧が作成できる。
次にステップ６４０において、２つのファイル一覧を比較し、監視エージェント１０２から見えないファイルがあれば、ルートキット型ウィルスにより隠蔽されたファイルが存在するものと看做し、管理サーバ１１３に通知する。
なお、ここでは、ファイル一覧を一挙に比較しているが、フォルダ単位とかファイル一覧作成時のファイル数の上限を定めて、分割しながら比較してもよい。
【００１９】
図７は、ウィルス検出手段１０３による第１のゲストＯＳ１０４での隠れプロセスの検出手順を示すフローチャートである。
まず、ステップ７１０において、ウィルス検出手段１０３が第１のゲストＯＳ１０４上の監視エージェント１０２にアプリケーションから見えるプロセス一覧を問い合わせる。
ステップ７２０において、監視エージェント１０３がプロセス一覧をウィルス検出手段１０３に送り返す。一覧の作成方法は特に重要ではない。通常利用できるＯＳのインタフェースを利用して作成する。
ステップ７３０において、ウィルス検出手段１０３が先の返答を受信する。さらに、図２に示した第１のゲストＯＳ１０４のプロセス管理ブロック１０９を辿ることで、プロセス一覧を作成する。
【００２０】
続くステップ７４０において、２つのプロセス一覧を比較し、監視エージェントから見えないプロセスがあれば、ルートキット型ウィルスにより隠蔽されたプロセスが存在するものと看做し、管理サーバ１１３に通知する。
【００２１】
（第２の実施形態）
前述の実施形態においては、隠れプロセスの検出方法を説明したが、同様の方法で隠れスレッドを検出することも可能である。プロセスはプロセスブロックポインタから辿ることができるが、スレッドは、状態や優先度に応じて図２と同様にリンクの形で管理されている。状態としては、レディ、待機などの状態があり、優先度には例えば３２のレベルがある。状態と優先度を組み合わせてスレッド管理ブロックを辿ることで、全てのスレッドを得ることができ、プロセスと同様に隠れたスレッドを探すことができる。
スレッド管理ブロックには、対応するプロセスＩＤが含まれているので、図７で得たプロセス一覧と比較することで、仮に先の形態で検出漏れが生じたプロセスがあったとしても、スレッドから発見することもできる。
【００２２】
（第３の実施形態）
前述の実施形態においては、第１のゲストＯＳ１０４とは別の第２のゲストＯＳ１０５上のウィルス検出手段１０３が検出の主体であったが、第１のＯＳ１０４とは別に仮想メモリ１１０と仮想ディスク１１１にアクセスできる主体であれば良く、ＶＭＭ１０６をウィルス検索の主体とする構成であってもよい。
【図面の簡単な説明】
【００２３】
【図１】本発明の実施の形態を示すシステム構成図である。
【図２】図１におけるプロセス管理ブロックの構成例を示す図である。
【図３】図１における仮想メモリの構成例を示す図である。
【図４】プロセス管理ブロック構成例を示す図である。
【図５】仮想メモリ上のウィルス検索手順を示すフローチャートである。
【図６】ウィルスによって隠蔽されたディスク上の隠れファイルの検索手順を示すフローチャートである。
【図７】ウィルスによって隠蔽されたディスク上の隠れプロセスの検索手順を示すフローチャートである。
【符号の説明】
【００２４】
１０１：  一般アプリケーション
１０２：  監視エージェント
１０３：  ウィルス検出手段
１０４：  第１のゲストＯＳ
１０５：  第２のゲストＯＳ
１０６：  第１、第２のゲストＯＳが稼動するＶＭＭ（仮想化手段）
１０７：  第１、第２のゲストＯＳ、ＶＭＭが稼動するハードウェア
１０８：  ウィルスのシグネチャのデータベース
１０９：  検索対象プロセス管理ブロック
１１０：  仮想メモリ
１１１：  仮想ディスク
１１２：  ネットワーク
１１３：  管理サーバ
２０１：  プロセスブロックポインタ
２１１：  プロセスＩＤ
２１２：  親プロセスＩＤ
２１３：  次のプロセス管理ブロックをポイントするプロセスリンク
２１４：  仮想メモリの情報を含むメモリ管理
２１５：  アクセストークン
２１６：  ハンドルテーブル
３１１：  仮想メモリアドレス中のPage Directory Index
３１２：  仮想メモリアドレス中のPage Table Index
３１３：  仮想メモリアドレス中のByte Index
４０１：  プロセスＩＤ
４０２：  プロセス管理ブロックアドレス
４０３：  次スキャンアドレス
４０４：  終了フラグ
【図１】
2010049627.tif 000003
【図２】
2010049627.tif 000004
【図３】
2010049627.tif 000005
【図４】
2010049627.tif 000006
【図５】
2010049627.tif 000007
【図６】
2010049627.tif 000008
【図７】
2010049627.tif 000009