(57)【要約】  説明されるシステムおよび方法は、比較的多数のクライアントシステム（例えば、企業ネットワーク、仮想デスクトップ・インフラストラクチャ・システムなど）に対して、ソフトウェア監査をリモートで、および自動的に実施することを可能にする。監査エンジンが被監査仮想マシンの外部で実行するハードウェア仮想化構成において、監査エンジンは各クライアントシステム上で実行する。監査サーバからの監査リクエストを受信すると、監査エンジンのいくつかの実施形態は、監査エージェントを、被監査仮想マシンにドロップし、監査の完了時に監査エージェントを削除する。
2019503539.tif 000002
【特許請求の範囲】
【請求項１】
ゲスト仮想マシン（ＶＭ）のセットを実行し、ＶＭ監査エンジンをさらに実行するように構成される、少なくとも１つのハードウェアプロセッサを含むコンピュータシステムであって、前記ＶＭ監査エンジンは、ゲストＶＭの前記セットの外部で実行され、リモート監査サーバから監査リクエストを受信したことに応答して、
前記ゲストＶＭの前記セットのターゲットＶＭ中に監査エージェントを挿入することであって、前記監査エージェントは、前記ターゲットＶＭの監査を実施するように構成され、前記監査は、前記ターゲットＶＭ上での実行のためにインストールされた合法コンピュータプログラムのリストを生成することと、ハードウェアリソースの量を判断することとを含むグループから選択された項目を含み、前記量は、前記ターゲットＶＭによって現在使用されている、挿入することと、
前記監査エージェントを挿入したことに応答して、前記ターゲットＶＭに前記監査エージェントを実行させることと、
前記ターゲットＶＭが前記監査エージェントを実行したことに応答して、前記ターゲットＶＭから前記監査エージェントを削除することと
を行うように構成される、コンピュータシステム。
【請求項２】
請求項１に記載のコンピュータシステムであって、前記監査エージェントを挿入することは、
前記コンピュータシステムのメモリにドライバローダを書き込むことであって、前記ドライバローダは、監査ドライバを前記ターゲットＶＭにロードするように構成され、前記監査ドライバは、前記監査を実施するように構成される、書き込むことと、
前記ターゲットＶＭ内で実行されるコンピュータプログラムがシステムコールを発行すると、前記コンピュータプログラムを実行することから前記ドライバローダを実行することに切り替わるように前記ターゲットＶＭを構成することと
を含む、コンピュータシステム。
【請求項３】
請求項２に記載のコンピュータシステムであって、前記監査エージェントを挿入することは、前記ターゲットＶＭのドライバのために割り当てられたメモリセクションに前記ドライバローダを書き込むことを含む、コンピュータシステム。
【請求項４】
請求項２に記載のコンピュータシステムであって、前記ドライバローダを書き込むことは、
メモリをソフトウェアオブジェクトに割り当てるために、前記ターゲットＶＭのオペレーティングシステムによる試みをインターセプトすることと、
前記試みをインターセプトしたことに応答して、割り当てられた前記メモリが前記ソフトウェアオブジェクトと前記ドライバローダの両方に適応するように、前記試みによって意図されたメモリ割当てを変更することと
を含む、コンピュータシステム。
【請求項５】
請求項１に記載のコンピュータシステムであって、前記監査は、合法コンピュータプログラムの前記リストの少なくとも１つのコンピュータプログラムがインストールされた時点を判断することをさらに含む、コンピュータシステム。
【請求項６】
請求項１に記載のコンピュータシステムであって、前記監査は、合法コンピュータプログラムの第２のリストを生成することであって、前記第２のリストのすべてのメンバーは、前記ターゲットＶＭの揮発性メモリに現在ロードされている、生成することをさらに含む、コンピュータシステム。
【請求項７】
請求項１に記載のコンピュータシステムであって、前記ハードウェアリソースは、前記少なくとも１つのハードウェアプロセッサの処理能力を含む、コンピュータシステム。
【請求項８】
請求項１に記載のコンピュータシステムであって、前記ハードウェアリソースは、前記コンピュータシステムの不揮発性記憶デバイスを含む、コンピュータシステム。
【請求項９】
請求項１に記載のコンピュータシステムであって、前記ＶＭ監査エンジンは、
前記ターゲットＶＭ上で現在実行されているオペレーティングシステムのタイプを検出することと、
応答して、前記オペレーティングシステムの前記タイプに従って前記監査エージェントを構成することと
を行うようにさらに構成される、コンピュータシステム。
【請求項１０】
請求項１に記載のコンピュータシステムであって、
前記監査リクエストは前記ターゲットＶＭのインジケータを含み、
前記ＶＭ監査エンジンは、前記監査リクエストに従ってゲストＶＭの前記セットから前記ターゲットＶＭを選択するように構成される、
コンピュータシステム。
【請求項１１】
請求項１に記載のコンピュータシステムであって、前記ＶＭ監査エンジンは、前記ターゲットＶＭとは別個の監査ＶＭ内で実行される、コンピュータシステム。
【請求項１２】
コンピュータシステムの少なくとも１つのハードウェアプロセッサを用いて、前記コンピュータシステム上で実行されるゲスト仮想マシン（ＶＭ）のセットの外部でＶＭ監査エンジンを実行するステップを含む方法であって、前記ＶＭ監査エンジンを実行するステップは、
リモートサーバから監査リクエストを受信したことに応答して、ゲストＶＭの前記セットのターゲットＶＭ中に監査エージェントを挿入するステップであって、前記監査エージェントは、前記ターゲットＶＭの監査を実施するように構成され、前記監査は、前記ターゲットＶＭ上での実行のためにインストールされた合法コンピュータプログラムのリストを生成することと、ハードウェアリソースの量を判断することとを含むグループから選択された項目を含み、前記量は、前記ターゲットＶＭによって現在使用されている、ステップと、
前記監査エージェントを挿入するステップに応答して、前記ターゲットＶＭに前記監査エージェントを実行させるステップと、
前記ターゲットＶＭが前記監査エージェントを実行するステップに応答して、前記ターゲットＶＭから前記監査エージェントを削除するステップと
を含む、方法。
【請求項１３】
請求項１２に記載の方法であって、前記監査エージェントを挿入するステップは、
前記コンピュータシステムのメモリにドライバローダを書き込むステップであって、前記ドライバローダは、監査ドライバを前記ターゲットＶＭにロードするように構成され、前記監査ドライバは、前記監査を実施するように構成される、ステップと、
前記ターゲットＶＭ内で実行されるコンピュータプログラムがシステムコールを発行すると、前記コンピュータプログラムを実行することから前記ドライバローダを実行することに切り替わるように前記ターゲットＶＭを構成するステップと
を含む、方法。
【請求項１４】
請求項１３に記載の方法であって、前記監査エージェントを挿入するステップは、前記ターゲットＶＭのドライバのために割り当てられたメモリセクションに前記ドライバローダを書き込むステップを含む、方法。
【請求項１５】
請求項１３に記載の方法であって、前記ドライバローダを書き込むステップは、
メモリをソフトウェアオブジェクトに割り当てるために、前記ターゲットＶＭのオペレーティングシステムによる試みをインターセプトするステップと、
前記試みをインターセプトするステップに応答して、割り当てられた前記メモリが前記ソフトウェアオブジェクトと前記ドライバローダの両方に適応するように、前記試みによって意図されたメモリ割当てを変更するステップと
を含む、方法。
【請求項１６】
請求項１２に記載の方法であって、前記監査は、合法コンピュータプログラムの第２のリストを生成するステップであって、前記第２のリストのすべてのメンバーは、前記ターゲットＶＭの揮発性メモリに現在ロードされている、ステップをさらに含む、方法。
【請求項１７】
請求項１２に記載の方法であって、前記ハードウェアリソースは、前記少なくとも１つのハードウェアプロセッサの処理能力を含む、方法。
【請求項１８】
請求項１２に記載の方法であって、前記ハードウェアリソースは、前記コンピュータシステムの不揮発性記憶デバイスを含む、方法。
【請求項１９】
請求項１２に記載の方法であって、前記ターゲットＶＭとは別個の監査ＶＭ内で前記ＶＭ監査エンジンを実行するステップを含む、方法。
【請求項２０】
複数のクライアントシステムとの監査トランザクションを実施するように構成される、少なくとも１つのハードウェアプロセッサを含むサーバコンピュータシステムであって、監査トランザクションは、
前記複数のクライアントシステムのうちのクライアントシステムに監査リクエストを送ることと、
応答して、前記クライアントシステムから監査報告を受信することであって、前記監査報告は、前記クライアントシステム上で実行されるゲスト仮想マシン（ＶＭ）のセットの外部の前記クライアントシステム上で実行されるＶＭ監査エンジンによって判断され、前記監査報告を判断することは、
前記サーバコンピュータシステムから監査リクエストを受信したことに応答して、ゲストＶＭの前記セットのターゲットＶＭ中に監査エージェントを挿入することであって、前記監査エージェントは、前記ターゲットＶＭの監査を実施するように構成され、前記監査は、前記ターゲットＶＭ上での実行のためにインストールされた合法コンピュータプログラムのリストを生成することと、ハードウェアリソースの量を判断することとを含むグループから選択された項目を含み、前記量は、前記ターゲットＶＭによって現在使用されている、挿入することと、
前記監査エージェントを挿入したことに応答して、前記ターゲットＶＭに前記監査エージェントを実行させることと、
前記ターゲットＶＭが前記監査エージェントを実行したことに応答して、前記ターゲットＶＭから前記監査エージェントを削除することと
を含む、受信することと
を含む、サーバコンピュータシステム。
【請求項２１】
コンピュータシステムの少なくとも１つのハードウェアプロセッサによって実行されると、前記コンピュータシステムに仮想マシン（ＶＭ）監査エンジンを形成させる命令を格納した非一時的コンピュータ可読媒体であって、前記ＶＭ監査エンジンは、前記コンピュータシステム上に公開されるゲストＶＭのセットの外部で実行され、前記ＶＭ監査エンジンは、リモート監査サーバから監査リクエストを受信したことに応答して、
ゲストＶＭの前記セットのターゲットＶＭ中に監査エージェントを挿入することであって、前記監査エージェントは、前記ターゲットＶＭの監査を実施するように構成され、前記監査は、前記ターゲットＶＭ上での実行のためにインストールされた合法コンピュータプログラムのリストを生成することと、ハードウェアリソースの量を判断することとを含むグループから選択された項目を含み、前記量は、前記ターゲットＶＭによって現在使用されている、挿入することと、
前記監査エージェントを挿入したことに応答して、前記ターゲットＶＭに前記監査エージェントを実行させることと、
前記ターゲットＶＭが前記監査エージェントを実行したことに応答して、前記ターゲットＶＭから前記監査エージェントを削除することと
を行うように構成される、非一時的コンピュータ可読媒体。
【請求項２２】
請求項２１に記載のコンピュータ可読媒体であって、前記命令は、さらに、前記コンピュータシステムの少なくとも１つのハードウェアプロセッサに、前記コンピュータシステム上に前記ターゲットＶＭを公開するように構成されたハイパーバイザを形成させる、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
[0001]本出願は、その内容全体が参照により本明細書に組み込まれる、２０１６年１月５日に出願された「Ｓｙｓｔｅｍｓ  ａｎｄ  Ｍｅｔｈｏｄｓ  ｆｏｒ  Ａｕｄｉｔｉｎｇ  ａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ（仮想マシンを監査するためのシステムおよび方法）」という名称の米国仮特許出願第６２／２７４，９０２号の出願日の利益を主張する。
【０００２】
[0002]本発明は、ソフトウェア監査を実施するためのシステムおよび方法に関し、特に、ハードウェア仮想化構成において実施されるソフトウェア監査に関する。
【背景技術】
【０００３】
[0003]今日のソフトウェア主導型経済では、会社が保持するハードウェアおよびソフトウェア・アセットの量および複雑さは絶え間なく増加する。従業員が、デスクトップコンピュータを使用することから、ラップトップ、タブレットコンピュータ、およびモバイルフォンなど、モバイルデバイスを使用することに移行するにつれて、ならびに職場が非局在化するにつれて、会社のハードウェアおよびソフトウェア・アセットを追跡することが深刻な問題になる。例えば、すべての会社コンピュータにわたってソフトウェアアプリケーションの単一のバージョンを使用する代わりに、会社は、現今では、一般に、従業員が現代のモバイルオフィスで使用する様々なハードウェアプラットフォームおよびオペレーティングシステムに対応するために、各アプリケーションの複数のバージョンを使用する。この状況は、ソフトウェアアップデートを適用するときに、そのようなアップデートがすべてのコンピュータおよびモバイルデバイスに一様に配信されないことがあると、さらに複雑になる。
【０００４】
[0004]そのような高まる異種性は、ソフトウェアライセンシングおよびサービスレベル契約を複雑にし得る。その上、モバイルデバイス上で使用されるアプリケーションソフトウェアの最近の急増は、コンピュータセキュリティリスクの増加を引き起こす。悪意のあるソフトウェアおよびスパイウェアが、あり余る程の合法アプリケーションおよびバージョンの中で容易に隠れることができ、これにより、従業員および会社を、プロプライエタリデータへの無許可のアクセスのリスクにさらし、特に、生産性の損失にさらす。
【０００５】
[0005]コンピューティングの典型的なモデルを変更するさらなる最近の発展は、ハードウェア仮想化である。ウェブサーバファームおよび仮想デスクトップインフラストラクチャ（ＶＤＩ）などの適用例では、何百台もの仮想マシンが、単一の物理的プラットフォーム上で同時に実行し得る。そのような仮想マシンは、動的にインスタンス化および／または削除され得、これは、それぞれの物理的プラットフォーム上で常時実行するソフトウェアの異種性をさらに増加させる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
[0006]監査ソフトウェアは、特に、ライセンシング、デジタル著作権管理、アプリケーション制御、およびコンピュータセキュリティなどの目的で、コンピュータシステム上でインストールされたおよび／または現在実行中のソフトウェアを追跡するために使用され得る。現代の仮想化された環境に特に適した、監査システムおよび方法を開発することに対する関心が高まっている。
【課題を解決するための手段】
【０００７】
[0007]一態様によれば、コンピュータシステムは、ゲスト仮想マシン（ＶＭ）のセットを実行し、ゲストＶＭのセットの外部でＶＭ監査エンジンをさらに実行するように構成される、少なくとも１つのハードウェアプロセッサを含む。ＶＭ監査エンジンは、リモート監査サーバから監査リクエストを受信したことに応答して、ゲストＶＭのセットのターゲットＶＭ中に監査エージェントを挿入するように構成され、監査エージェントは、ターゲットＶＭの監査を実施するように構成され、監査は、ターゲットＶＭ上での実行のためにインストールされた合法コンピュータプログラムのリストを生成することと、ハードウェアリソースの量を判断する（ｄｅｔｅｒｍｉｎｉｎｇ；判定する、求める、決定する）こととからなるグループから選択された項目を含み、量は、ターゲットＶＭによって現在使用される。ＶＭ監査エンジンは、監査エージェントを挿入したことに応答して、ターゲットＶＭに監査エージェントを実行させることと、ターゲットＶＭが監査エージェントを実行したことに応答して、ターゲットＶＭから監査エージェントを削除することとを行うようにさらに構成される。
【０００８】
[0008]別の態様によれば、方法は、コンピュータシステム上で実行するゲストＶＭのセットの外部で仮想マシン監査エンジンを実行するために、コンピュータシステムの少なくとも１つのハードウェアプロセッサを採用することを含む。ＶＭ監査エンジンを実行することは、リモートサーバから監査リクエストを受信したことに応答して、ゲストＶＭのセットのターゲットＶＭ中に監査エージェントを挿入することを含み、監査エージェントは、ターゲットＶＭの監査を実施するように構成され、監査は、ターゲットＶＭ上での実行のためにインストールされた合法コンピュータプログラムのリストを生成することと、ハードウェアリソースの量を判断することとからなるグループから選択された項目を含み、量は、ターゲットＶＭによって現在使用される。ＶＭ監査エンジンを実行することは、監査エージェントを挿入したことに応答して、ターゲットＶＭに監査エージェントを実行させることと、ターゲットＶＭが監査エージェントを実行したことに応答して、ターゲットＶＭから監査エージェントを削除することとをさらに含む。
【０００９】
[0009]別の態様によれば、サーバコンピュータシステムは、複数のクライアントシステムとの監査トランザクションを実施するように構成される、少なくとも１つのハードウェアプロセッサを含む。監査トランザクションは、複数のクライアントシステムのうちのクライアントシステムに監査リクエストを送ることと、応答して、クライアントシステムから監査報告を受信することとを含み、監査報告は、クライアントシステム上で実行するゲストＶＭのセットの外部のクライアントシステム上で実行する仮想マシン監査エンジンによって判断される（ｄｅｔｅｒｍｉｎｅｄ；判定される、求められる、決定される）。監査報告を判断することは、サーバコンピュータシステムから監査リクエストを受信したことに応答して、ゲストＶＭのセットのターゲットＶＭ中に監査エージェントを挿入することを含み、監査エージェントは、ターゲットＶＭの監査を実施するように構成され、監査は、ターゲットＶＭ上での実行のためにインストールされた合法コンピュータプログラムのリストを生成することと、ハードウェアリソースの量を判断することとからなるグループから選択された項目を含み、量は、ターゲットＶＭによって現在使用される。監査報告を判断することは、監査エージェントを挿入したことに応答して、ターゲットＶＭに監査エージェントを実行させることと、ターゲットＶＭが監査エージェントを実行したことに応答して、ターゲットＶＭから監査エージェントを削除することとをさらに含む。
【００１０】
[0010]別の態様によれば、非一時的コンピュータ可読媒体は、コンピュータシステムの少なくとも１つのハードウェアプロセッサによって実行されると、コンピュータシステムに仮想マシン監査エンジンを形成させる命令を格納し、ＶＭ監査エンジンは、コンピュータシステム上に公開されるゲストＶＭのセットの外部で実行し、ＶＭ監査エンジンは、リモート監査サーバから監査リクエストを受信したことに応答して、ゲストＶＭのセットのターゲットＶＭ中に監査エージェントを挿入するように構成され、監査エージェントは、ターゲットＶＭの監査を実施するように構成され、監査は、ターゲットＶＭ上での実行のためにインストールされた合法コンピュータプログラムのリストを生成することと、ハードウェアリソースの量を判断することとからなるグループから選択された項目を含み、量は、ターゲットＶＭによって現在使用される。ＶＭ監査エンジンは、監査エージェントを挿入したことに応答して、ターゲットＶＭに監査エージェントを実行させることと、ターゲットＶＭが監査エージェントを実行したことに応答して、ターゲットＶＭから監査エージェントを削除することとを行うようにさらに構成される。
【００１１】
[0011]本発明の前述の態様および利点は、以下の詳細な説明を読み、図面を参照するとよりよく理解されるようになるであろう。
【図面の簡単な説明】
【００１２】
【図１】[0012]本発明のいくつかの実施形態による、複数のクライアントシステムが監査サーバのリクエスト時に監査される例示的な構成を示す図である。
【図２−Ａ】[0013]本発明のいくつかの実施形態による、被監査クライアントシステムの例示的なハードウェア構成を示す図である。
【図２−Ｂ】[0014]は、本発明のいくつかの実施形態による、監査サーバの例示的なハードウェア構成を示す図である。
【図３−Ａ】[0015]本発明のいくつかの実施形態による、被監査クライアントシステム上で実行するハイパーバイザと、被監査ＶＭの外部で実行するＶＭ監査エンジンとによって公開される例示的な仮想マシンを示す図である。
【図３−Ｂ】[0016]本発明のいくつかの実施形態による、ゲスト仮想マシンがクライアントシステム上で実行する別個の監査ＶＭによって監査される代替構成を示す図である。
【図４】[0017]本発明のいくつかの実施形態による、クライアントシステムの監査を設定するために監査インストーラアプリケーションによって行われるステップの例示的なシーケンスを示す図である。
【図５】[0018]本発明のいくつかの実施形態による、被監査クライアントシステムと監査サーバとの間の例示的なデータ交換を示す図である。
【図６】[0019]本発明のいくつかの実施形態による、ＶＭ監査エンジンによって実施されるステップの例示的なシーケンスを示す図である。
【図７】[0020]本発明のいくつかの実施形態による、様々なプロセッサ特権レベルにおいて実行する監査エージェントの例示的な構成要素を示す図である。
【図８】[0021]本発明のいくつかの実施形態による、監査エージェントを、被監査ＶＭにドロップするためにＶＭ監査エンジンによって実施されるステップの例示的なシーケンスを示す図である。
【図９】[0022]本発明のいくつかの実施形態による、監査エージェントのドライバローダによって実施されるステップの例示的なシーケンスを示す図である。
【図１０】[0023]本発明のいくつかの実施形態による、監査ドライバによって実施されるステップの例示的なシーケンスを示す図である。
【発明を実施するための形態】
【００１３】
[0024]以下の説明において、構造間のすべての列挙された接続は、中間体構造を通じた直接の動作的な接続または間接の動作的な接続であってよいことが理解される。要素のセットは、１つまたは複数の要素を含む。要素の任意の列挙は、少なくとも１つの要素を指すと理解される。複数の要素は、少なくとも２つの要素を含む。別段の要求がない限り、任意の説明される方法ステップは、図示された特定の順序で必ずしも実施される必要はない。第２の要素から導出された第１の要素（例えばデータ）は、第２の要素に等しい第１の要素、ならびに第２の要素および随意に他のデータを処理することによって生成された第１の要素を包含する。パラメータに従って判断または判定することは、パラメータに従って、および随意に他のデータに従って判断または判定することを包含する。別段の定めがない限り、何らかの量／データのインジケータは、量／データ自体であるか、または量／データ自体とは異なるインジケータであってよい。コンピュータプログラムは、タスクを行うプロセッサ命令のシーケンスである。本発明のいくつかの実施形態で説明されるコンピュータプログラムは、他のコンピュータプログラムのスタンドアロン・ソフトウェア・エンティティまたはサブエンティティ（例えば、サブルーチン、ライブラリ）であってよい。別段の定めがない限り、合法コンピュータプログラムは、それぞれのコンピュータシステムの合法ユーザが実行するために、インストールされるかまたは場合によっては構成されるコンピュータプログラムである。対照的に、それぞれのコンピュータシステムに無認可の侵入者によってインストールされた不正の悪意のあるソフトウェア（マルウェア）およびコンピュータプログラムは、本明細書では違法コンピュータプログラムと見なされる。コンピュータプログラムは、それぞれのコンピュータプログラムがそれぞれの仮想マシンの少なくとも１つの仮想プロセッサ上で実行するとき、仮想マシン内で、または仮想マシンの内部で実行する（またはそれぞれの仮想マシンが、それぞれのコンピュータプログラムを実行する）と言われている。プロセスは、アプリケーションまたはオペレーティングシステムの一部など、コンピュータプログラムのインスタンスであり、少なくとも実行スレッド、および実行スレッドに割り当てられた仮想メモリスペースを有することによって特徴付けられ、それぞれの仮想メモリスペースのコンテンツは実行コードを含む。別段の定めがない限り、ページは、ホストシステムの物理メモリに個々にマッピングされ得る仮想メモリの最小単位を表す。別段の定めがない限り、レジスタは、プロセッサと一体化されるかまたはプロセッサの一部を形成し、ランダムアクセスメモリ（ＲＡＭ）とは別個の、ストレージ構成要素を表す。トンネルは、通信ネットワークに接続される２つのエンティティ間の仮想ポイントツーポイント接続である。コンピュータ可読媒体は、磁気、光、および半導体のストレージ媒体（例えばハードドライブ、光ディスク、フラッシュメモリ、ＤＲＡＭ）などの非一時的な媒体、ならびに導電性ケーブルリンクおよび光ファイバリンクなどの通信リンクを包含する。いくつかの実施形態によれば、本発明は、とりわけ、本明細書で説明される方法を実施するようにプログラムされたハードウェア（例えば１つまたは複数のマイクロプロセッサ）を含むコンピュータシステム、ならびに本明細書で説明された方法を実施するための命令をエンコードするコンピュータ可読媒体を提供する。
【００１４】
[0025]以下の説明は、本発明の実施形態を例として示すが、必ずしも限定として示すとは限らない。
[0026]図１は、本発明のいくつかの実施形態による例示的な構成を示し、複数のクライアントシステム１２ａ〜ｄは、監査サーバ１４のリクエスト時にリモートで監査される。例示的なクライアントシステム１２ａ〜ｄは、パーソナルコンピュータシステム、モバイルコンピューティングプラットフォーム（ラップトップコンピュータ、タブレット、携帯電話）、エンターテインメントデバイス（ＴＶ、ゲーム機）、ウェアラブルデバイス（スマートウォッチ、フィットネスバンド）、家庭用器具、およびプロセッサとメモリとを含み、ハードウェア仮想化プラットフォームを動作させることが可能な任意の他の電子デバイスを含む。クライアントシステム１２ａ〜ｄは、企業ネットワークまたはインターネットなど、通信ネットワーク１０を介して相互接続される。ネットワーク１０の一部は、ローカルエリアネットワーク（ＬＡＮ）を含んでよい。
【００１５】
[0027]監査サーバ１４は、クライアントシステム１２ａ〜ｄに通信可能に結合され、それぞれのクライアントシステムの監査を実施するために、各クライアントシステム１２ａ〜ｄと共同する。例示的な監査アクティビティは、特に、ソフトウェア・アセットの識別、ならびに認可、使用、および権利に関するそれぞれのソフトウェア・アセットの検証を含む。そのような監査のグラニュラリティは、比較的高いレベル（例えば、どんなアプリケーション／バージョンがクライアントシステム上にインストールされるかを判断すること）から、例えば、各構成要素がインストールまたはアクセスされたときに、クライアントシステム上で実行するソフトウェアが重要な構成要素（例えば、ドライバ、パッチ、アンチマルウェアモジュール）の特定のバージョンを使用するかどうか、単一のアプリケーションがどのくらいのハードウェアリソースを使用するかなどを含む、徹底的な監査まで変動してよい。他の例示的な監査アクティビティは、特に、どのソフトウェア構成要素（アプリケーション、プロセス、ドライバなど）が監査の瞬間においてクライアントシステム上で現在実行中であるかを判断すること、それぞれのクライアントシステムのプロセッサの現在状態を判断すること、リソース使用状況（例えば、ＣＰＵ、メモリ、ディスク、ネットワークなど）の現在レベルを判断すること、およびそれぞれのクライアントシステムの、ＯＳの構成パラメータ値／設定、様々なアプリケーションの構成パラメータ値／設定、ユーザ設定などのセットを判断することを含む。
【００１６】
[0028]サーバ１４は、互いに物理的に近接することもしないこともある、相互接続されたコンピューティングシステムのセットを総称的に表す。いくつかの実施形態では、監査サーバ１４は、クライアントデータベース１５にアクセスするように構成される。例示的なクライアントデータベース１５では、各エントリは、被監査クライアントシステム１２ａ〜ｄに関連し、それぞれのクライアントシステムから受信された監査報告のセット（下記参照）のコンテンツを含んでよい。各エントリは、さらに、それぞれのクライアントシステムから受信された各監査報告について、受信時間のインジケータをタイムスタンプ（ｔｉｍｅ−ｓｔａｍｐｅｄ）され得る。データベース１５の各エントリは、それぞれのクライアントシステムについて判断された監査データを含んでよく、監査データは、例えば、それぞれのクライアントシステムのハードウェア構成のインジケータ、オペレーティングシステム（ＯＳ）のタイプおよびバージョンのインジケータ、合法的にインストールされたアプリケーションまたは他のソフトウェア構成要素（例えば、ドライバ、パッチ）のセットのインジケータ、監査のときに現在ロードされ、および／または実行中のソフトウェア構成要素（アプリケーション、プロセス、ドライバなど）のセットのインジケータ、それぞれのクライアントシステムについての様々なＯＳ、アプリケーションおよび／またはユーザ設定を示すパラメータのセット、ならびに監査のときのリソース使用状況（例えばＣＰＵ、メモリ、ディスクなど）のインジケータのセットを含む。監査データは、さらに、各リストされたソフトウェア構成要素がインストールされたとき、および／または各リストされた構成要素がアクセスまたは変更された最近の瞬間を示す、時間インジケータを含んでよい。
【００１７】
[0029]図２−Ａは、図１中のシステム１２ａ〜ｄなど、クライアントシステム１２の例示的なハードウェア構成を示す。簡単のために、図示されたクライアントシステムは、コンピュータシステムであり、携帯電話、ウォッチなどの他のクライアントシステムのハードウェア構成は、図示された構成とはいくらか異なってよい。クライアントシステム１２は、ハードウェアプロセッサ１６とメモリユニット１８とを含む、物理デバイスのセットを含む。プロセッサ１６は、信号および／またはデータのセットを用いた計算および／または論理動作を実行するように構成された物理デバイス（例えばマイクロプロセッサ、半導体基板上に形成されたマルチコア集積回路など）を含む。いくつかの実施形態では、そのような動作は、プロセッサ命令のシーケンスの形態（例えば機械コードまたは他のタイプの符号化）でプロセッサ１６に配信される。メモリユニット１８は、プロセッサ１６によってアクセスまたは生成される命令および／またはデータを格納する揮発性コンピュータ可読媒体（例えばＤＲＡＭ、ＳＲＡＭ）を含んでよい。
【００１８】
[0030]入力デバイス２０は、ユーザがデータおよび／または命令をクライアントシステム１２に入れることを可能にするそれぞれのハードウェアインターフェースおよび／またはアダプタを含む、特に、コンピュータキーボード、マウス、およびマイクロフォンを含んでよい。出力デバイス２２は、特に、モニタおよびスピーカーなどのディスプレイデバイス、ならびにクライアントシステム１２がデータをユーザに通信することを可能にする、グラフィックカードなどのハードウェアインターフェース／アダプタを含んでよい。いくつかの実施形態では、入力デバイス２０と出力デバイス２２とは、タッチスクリーンデバイスの場合のように、共通のハードウェアを共有してよい。ストレージデバイス２４は、ソフトウェア命令および／またはデータの不揮発性の格納、読取り、および書込みを可能にするコンピュータ可読媒体を含む。例示的なストレージデバイス２４は、磁気ディスクおよび光ディスクおよびフラッシュメモリデバイス、ならびにＣＤおよび／またはＤＶＤのディスクおよびドライブなどのリムーバブル媒体を含む。ネットワークアダプタ２６のセットは、クライアントシステム１２がコンピュータネットワークおよび／または他のデバイス／コンピュータシステムに接続することを可能にする。コントローラハブ２８は、複数のシステム、周辺機器、および／またはチップセットバス、ならびに／あるいはプロセッサ１６とデバイス１８、２０、２２、２４および２６との間の通信を可能にするすべての他の回路を表す。例えば、コントローラハブ２８は、特に、メモリコントローラ、入出力（Ｉ／Ｏ）コントローラ、および割込みコントローラを含んでよい。別の例では、コントローラハブ２８は、プロセッサ１６をメモリ１８に接続するノースブリッジ、および／またはプロセッサ１６をデバイス２０、２２、２４、および２６に接続するサウスブリッジを含んでよい。
【００１９】
[0031]図２−Ｂは、本発明のいくつかの実施形態による、監査サーバ１４の例示的なハードウェア構成を示す。サーバ１４は、少なくとも１つのハードウェアプロセッサ１１６（例えば、マイクロプロセッサ、マルチコア集積回路）、物理メモリ１１８、およびサーバネットワークアダプタ１２６のセットを含む。アダプタ１２６は、監査サーバ１４が通信ネットワーク１０に接続することを可能にする、ネットワークカードおよび他の通信インターフェースを含んでよい。いくつかの実施形態では、サーバ１４は、機能の点で、それぞれ、入力デバイス２０、出力デバイス２２、およびストレージデバイス２４と同様であることがある、入力デバイス、出力デバイスおよびストレージデバイスをさらに含む。
【００２０】
[0032]いくつかの実施形態では、クライアントシステム１２は、例えば図３−Ａ〜図３−Ｂに示されているように、仮想マシンのセットを公開するように構成される。仮想マシン（ＶＭ）は、ハードウェア仮想化の当技術分野において知られている様々な技法のいずれかを使用して、実際の物理マシン／コンピュータシステムをエミュレートする。いくつかの実施形態では、仮想マシンモニタ（ＶＭＭ）としても当技術分野で知られているハイパーバイザ３０は、クライアントシステム１２上で実行し、クライアントシステム１２の実際の物理デバイスの代わりに、仮想プロセッサおよび仮想メモリ管理ユニットなど、複数の仮想化されたデバイスを作成するかまたは使用可能にし、そのような仮想化されたデバイスをソフトウェアに公開するように構成される。そのような動作は、一般に、仮想マシンを公開することとして当技術分野で知られている。ハイパーバイザ３０はさらに、各仮想マシンが独立して動作し、クライアントシステム１２上で同時に実行する他のＶＭに気づかれないように、複数のＶＭがホストシステム１２のハードウェアリソースを共有することを可能にし得る。普及しているハイパーバイザの例は、特に、ＶＭｗａｒｅ社からのＶＭｗａｒｅ  ｖＳｐｈｅｒｅ（商標）およびオープンソースＸｅｎハイパーバイザがある。
【００２１】
[0033]図３−Ａ〜図３−Ｂに示されている例示的な構成では、ゲストＶＭ３２は、ゲストオペレーティングシステム（ＯＳ）３４、およびアプリケーション３６ａ〜ｂのセットを実行する。ゲストＯＳ３４は、特に、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、ＭａｃＯＳ（登録商標）、Ｌｉｎｕｘ（登録商標）、ｉＯＳ（登録商標）、またはＡｎｄｒｏｉｄ（商標）などの任意の広く利用可能なオペレーティングシステムを含んでよく、ＶＭ３２内で実行するアプリケーションとＶＭ３２の仮想化されたハードウェアデバイス内で実行するアプリケーションとの間のインターフェースを提供する。アプリケーション３６ａ〜ｂは、特に、ワードプロセッサ、表計算アプリケーション、グラフィックスアプリケーション、ブラウザ、ソーシャルメディア、および電子通信アプリケーションなどの任意のユーザアプリケーションを総称的に表す。
【００２２】
[0034]図３−Ａに示されている実施形態では、ＶＭ監査エンジン４０ａは、ハイパーバイザ３０のプロセッサ特権レベル（例えば、ルートレベルまたはリング−１）において、ゲストＶＭ３２の外部で実行する。ＶＭ監査エンジン４０ａは、ゲストＶＭ３２の監査を実施するように構成される。いくつかの実施形態では、そのような監査は、以下で詳細に説明されるように、監査エージェント４２を、被監査ＶＭにドロップすることと、監査が完了すると、被監査ＶＭからエージェント４２を削除することとを含む。
【００２３】
[0035]図３−Ｂに示されている代替実施形態では、ハイパーバイザ３０は、すべての被監査ゲストＶＭとは別個の監査ＶＭ３３を公開するように構成され、監査ＶＭ３３は、（１つまたは複数の）ゲストＶＭ３２と同時に実行してよい。監査ＶＭ３３のいくつかの実施形態は、軽量、最小オペレーティングシステム（例えば、Ｌｉｎｕｘ（登録商標）ＯＳのカスタマイズされたバージョン）を含み、ゲストＶＭ３２の監査を実施するように構成されたＶＭ監査エンジン４０ｂを実行するように構成される。ゲストＶＭ３２の仮想環境と監査ＶＭ３３の仮想環境とは、ゲストＶＭ３２内で実行する悪意のあるソフトウェアが、監査ＶＭ３３内で実行するソフトウェアに感染できないことまたは場合によってはそれを妨害できないことを保証するために、仮想化の当技術分野で知られている任意の方法を使用して互いから分離され得る。図３−Ｂの実施形態では、内部監視エンジン４４は、ハイパーバイザ３０のプロセッサ特権レベルにおいて、ゲストＶＭ３２および監査ＶＭ３３の外部で実行する。図３−Ａの例示的な実施形態では、内部監視エンジン４４のアクティビティのいくつかは、ＶＭ監査エンジン４０ａによって少なくとも部分的に実施され得る。
【００２４】
[0036]図３−Ａ〜図３−Ｂは、１つのゲストＶＭ３２のみがクライアントシステム１２上で実行することを示すように作成されたが、いくつかの実施形態は、複数のＶＭを動かすクライアントシステムにおいて監査を実施するように構成され得る。そのような仮想化プラットフォームの一般的な適用例はサーバファームであり、単一のコンピュータシステムは、同時に動作する何百台もの別個のウェブサーバＶＭをホストしてよい。別の一般的な適用例は、仮想デスクトップインフラストラクチャ（ＶＤＩ）のカテゴリーに属し、ユーザのアプリケーションが第１のコンピュータシステム上で実行する間、そのユーザは、第２のコンピュータシステム（端末）を介してそれぞれのアプリケーションと対話する。一般的なＶＤＩ構成では、リクエストされたアプリケーションを動かす仮想マシンは、第１のコンピュータシステム上でオンデマンドでインスタンス化され、これは、最終的に複数のリモートユーザのために何百台ものそのようなＶＭを実行することになることがある。そのような実施形態では、単一のＶＭ監査エンジン４０ａ〜ｂは、それぞれのクライアントシステム上で実行する、複数のＶＭまたはすべてのＶＭの監査を実施してよい。例えば、監査エンジン４０ａ〜ｂは、それぞれのゲストＶＭの各々の内部に監査エージェントをドロップしてよい。１つのそのような例では、ＶＭ監査エンジン４０ａ〜ｂは、監査エージェントのタイプを選択し、各ＶＭのハードウェアおよび／またはソフトウェア仕様に従って、例えば、それぞれのＶＭ内で実行するＯＳのタイプに従って、エージェント・ドロッピング・プロシージャを調整してよい。いくつかの実施形態では、ＶＭ監査エンジン４０ａ〜ｂは、それぞれのクライアントシステム上で実行する、特定のターゲットＶＭまたはＶＭの選択されたサブセットの監査を選択的に実施するようにサーバ１４によって命令され得る。
【００２５】
[0037]いくつかの実施形態では、内部監視エンジン４４（図３−Ｂ）は、被監査ゲストＶＭ内のソフトウェアの実行中に発生する様々なイベントを検出し、そのような情報を他の監査ソフトウェア（例えば、エージェント４２および／またはエンジン４０ａ〜ｂ）と交換するように構成される。内部監視エンジン４４によって検出された例示的なイベントは、例えば、プロセッサ例外および／または割込み、ゲストＯＳ３４の特定の機能を実行するための試み、プロセッサ特権（例えば、システムコール）の変更、特定のメモリロケーションにアクセスする（特定のメモリロケーションから読み取り、特定のメモリロケーションに書き込み、および／または特定のメモリロケーションから実行する）ための試みなどを含む。内部監視エンジン４４は、以下でさらに説明されるように、ゲストＶＭ３２内で実行する様々なソフトウェア構成要素のメモリアドレスを判断するようにさらに構成され得る。
【００２６】
[0038]そのようなイベントを検出するためのいくつかの方法が、当技術分野で知られている。１つのそのような例では、内部監視エンジン４４は、第２レベルのアドレス変換機構（例えば拡張されたページテーブル−Ｉｎｔｅｌ（登録商標）プラットフォーム上のＥＰＴ、高速仮想化インデックス付け−ＡＭＤ（登録商標）プラットフォーム上のＲＶＩ）を使用して、メモリアクセス許可を設定するためにハイパーバイザ３０と共同し得る。特定のメモリページにアクセスするための試みが、それぞれのメモリページについて設定されたアクセス許可に違反するとき、それぞれの試みは、例外または仮想マシン終了イベント（Ｉｎｔｅｌ（登録商標）プラットフォーム上のＶＭＥｘｉｔ）などのプロセッサイベントをトリガしてよい。プロセッサイベントの結果として、プロセッサ１６は、内部監視エンジン４４内のイベント・ハンドラ・ルーチンを実行することに切り替えることができ、これは、エンジン４４がそれぞれのイベントの発生を検出することを可能にする。そのような機構は、それぞれの機能の一部を含んでいるメモリページを非実行可能とマークすることによって、例えば、特定の機能のコールを検出することができる。
【００２７】
[0039]簡単のために、および一般性の喪失なしに、以下の説明は、図３−Ａに示されているように構成された例示的な実施形態に焦点を当てる。説明されるシステムおよび方法が他の構成に、特に図３−Ｂの例示的な構成に適応され得ることを、当業者は理解されよう。以下の説明では、（１つまたは複数の）ＶＭ監査エンジンは、総称的に４０と標示され、これは、選定された構成に応じて、監査エンジン４０ａまたは監査エンジン４０ｂのいずれかを表し得る。
【００２８】
[0040]図４は、本発明のいくつかの実施形態による、クライアントシステムの監査を設定するために実施されるステップの例示的なシーケンスを示す。企業ネットワークを監査することの一般的なシナリオでは、ネットワーク管理者は、監査アプリケーションを各クライアントシステム１２ａ〜ｄ上にインストールしてよい。監査アプリケーションは、ＶＭ監査エンジン４０、内部監視エンジン４４など、様々な構成要素を含んでよい。図示されたステップのシーケンスは、例えば、それぞれの監査アプリケーションのインストーラユーティリティによって行われ得る。ハードウェア仮想化構成において現在動作していないクライアントシステム上にインストールされたとき、監査ソフトウェアは、最初に（例えば、仮想化をサポートするＩｎｔｅｌ（登録商標）プラットフォーム上のＶＭＸＲｏｏｔ、場合によっては一般的に知られているルートモードまたはリング−１）最も特権的なレベルにおいてプロセッサ１６を支配し、ハイパーバイザ３０をインストールしてよい。次いで、ハイパーバイザ３０は、ゲストＶＭ３２を公開し、ゲストＶＭ３２内で実行するために、それぞれのクライアントシステム上で前に実行していたすべてのソフトウェアを移動してよい。ハイパーバイザ３０は、さらに、ＶＭ監査エンジン４０および／または内部監視エンジン４４を設定してよい。複数の仮想マシンをすでに動かしているハードウェア仮想化プラットフォーム上にインストールされたとき、ステップ２００〜２０２は省略され得る。
【００２９】
[0041]いくつかの実施形態では、ステップ２０６は、監査サーバ１４からＶＭ監査エンジン４０へのリモートアクセスを設定してよい。そのようなアクセスは、監査サーバが、自動的に、または人間オペレータによって支援されて、被監査クライアントシステム１２に命令を直接送ることを可能にしてよい。そのような命令は、例えば、ＶＭ監査エンジン４０に、特定の種類の監査を実施すること、特定のソフトウェア構成要素の存在および／または特性についてゲストＶＭを検査すること、プロセッサ１６の現在状態（例えば、プロセッサレジスタのセットのコンテンツ）を判断すること、ゲストＯＳ３４または他のソフトウェアのためのパラメータ設定のセットを読み取ることなどを行うように命令してよい。例示的な一実施形態では、ステップ２０６は、サーバ１４とハイパーバイザ３０との間、および／またはサーバ１４と監査ＶＭ３３との間のトンネル（すなわち、ポイントツーポイント通信リンク）を構成してよい。例示的なトンネルは、仮想プライベートネットワーキング（ＶＰＮ）および／またはセキュアシェル（ＳＳＨ）プロトコルおよび方法に従って設定され得る。そのようなトンネルが設定されると、そのトンネルは、監査リクエストおよび／または他の命令をＶＭ監査エンジン４０に送るために、サーバ１４によって使用され得る。
【００３０】
[0042]さらなるステップ２０８において、監査インストーラは、ハイパーバイザ３０のレベルから内部監視および／またはイベント・インターセプションを構成してよい。ステップ２０８は、例えば、それぞれのページにアクセスするための試みが、プロセッサイベント（例えば、ＶＭ終了イベント）をトリガし、ＶＭ監査エンジン４０または内部監視エンジン４４が、被監査ゲストＶＭ３２内のイベント（例えば、システムコール）の発生を検出することを可能にするように、被監査ゲストＶＭによって使用されるいくつかのメモリページへのアクセス許可を設定することを含んでよい。いくつかの実施形態では、ステップ２０８は、さらに、被監査ＶＭ（例えば、監査エージェント４２）内で実行する構成要素とそれぞれのＶＭ（例えば、監査エンジン４０、内部監視エンジン４４）の外部で実行する構成要素との間のシグナリングおよび／または通信機構を設定してよい。そのような通信またはシグナリングは、ハードウェア仮想化の当技術分野において知られている任意の方法を使用してよい。一例では、２つのソフトウェア構成要素は、２つのソフトウェア構成要素によって共有される物理メモリのセクションを介して互いの間でデータを送信してよい。ＶＭの内部で実行する第１の構成要素から、それぞれのＶＭの外部で実行する第２の構成要素にデータを送るために、第１のソフトウェア構成要素は、共有されたメモリセクションにデータを書き込み、次いで、特権的プロセッサ命令（例えば、Ｉｎｔｅｌ（登録商標）プラットフォーム上のＶＭＣＡＬＬ）を発行し、これにより、ＶＭ終了イベントを引き起こし得る。Ｉｎｔｅｌ（登録商標）プラットフォーム上のＶＭＥｘｉｔなどのＶＭ終了イベントは、第１のソフトウェア構成要素を実行することから、第２のソフトウェア構成要素の一部であってよい、ハンドラ・ルーチンを実行することにプロセッサ１６を切り替える。したがって、それぞれのＶＭの外部で実行する第２の構成要素は、第１の構成要素がデータを送信することを試みていることを通知され得る。逆に、第２の構成要素から第１の構成要素にデータを送るために、第２の構成要素は、共有されたメモリセクションにデータを書き込み、次いで、それぞれのＶＭに割込みをインジェクトし得る。その割込みは、それぞれのＶＭ内で実行する割込みハンドラによって（例えば、第１のソフトウェア構成要素によって）処理されることになる。したがって、第１の構成要素は、第２の構成要素がデータを送信することを試みていることを検出し得る。いくつかの実施形態では、ステップ２０８は、上記で説明された通信機構を可能にするために、適切なソフトウェア構成要素を様々なプロセッサイベントのためのハンドラとして登録することを含む。
【００３１】
[0043]図５は、本発明のいくつかの実施形態による、監査サーバ１４と被監査クライアントシステムとの間の例示的なデータ交換を示す。サーバ１４は、監査リクエスト５０をクライアントシステム１２に送り、リクエスト５０は、ＶＭ監査エンジン４０にクライアントシステム１２の監査を実施するように命令し得る。いくつかの実施形態では、監査リクエスト５０は、監査のタイプのインジケータ、例えば、クライアントシステム１２上で実施されるべき監査動作のタイプ、すなわち、すべての合法アプリケーションをリストすること、現在のＯＳ設定を判断することなどのための監査動作のタイプのインジケータを含む。別の例示的な監査リクエスト５０は、クライアントシステム１２上で現在実行するターゲット仮想マシンのインジケータを含み、そのような監査リクエストは、監査エンジン４０にターゲットＶＭの監査を選択的に実施するように命令し得る。また別の例示的な監査リクエスト５０は、特定のソフトウェア構成要素（例えば、Ｍｉｃｒｏｓｏｆｔ  Ｗｏｒｄ（登録商標）、特定のドライバなど）のインジケータを含んでよい。そのようなリクエストは、特に、それぞれのソフトウェア構成要素がそれぞれのクライアントシステム上に合法的にインストールされたかどうか、それぞれのソフトウェア構成要素のどのバージョンがインストールされたか、それぞれのソフトウェア構成要素が現在、メモリにロードされた／実行中であるかどうか、それぞれのソフトウェア構成要素が直近でいつ使用されたかなどを判断するようにエンジン４０に命令してよい。別の例示的な監査リクエスト５０は、ターゲットＶＭによって、またはターゲットＶＭ内で実行する特定のソフトウェア構成要素によって使用されるハードウェアリソース（例えば、プロセッサ、ストレージ、メモリ）の現在のレベル／量／割合を判断するようにエンジン４０に命令してよい。
【００３２】
[0044]監査リクエスト５０は、被監査クライアントシステム上で実行するターゲットゲストＶＭの識別子を含んでよい。そのようなリクエストは、それぞれのゲストＶＭの選択的監査を実施するように監査エンジン４０に命令してよい。他のリクエスト５０は、被監査クライアントシステム上で現在実行するすべてのゲストＶＭの監査を実施するように監査エンジンに命令してよい。
【００３３】
[0045]監査リクエスト５０は、スケジュールに従って、またはネットワーク管理者のアクションに応答して送出され得る。監査リクエスト５０は、すべてのクライアントシステム１２ａ〜ｄに一様に送出され得るか、または各被監査クライアントシステムに特別に調整され得る。いくつかの実施形態では、監査リクエストは、それぞれのクライアントシステム上で発生するイベントによって、または通信ネットワーク１０上の他の場所で発生するイベントに応答して、トリガされ得る。リクエストされた監査を行ったことに応答して、（１つまたは複数の）ＶＭ監査エンジン４０ａ〜ｂは、監査報告５２をサーバ１４に送り得る。報告５２は、それぞれの監査アクティビティの結果、例えばインストールされたソフトウェア構成要素のリスト、それぞれのクライアントシステムの現在の構成設定のセットなどを含む。
【００３４】
[0046]図６は、本発明のいくつかの実施形態による、ＶＭ監査エンジン４０によって実施されるステップの例示的なシーケンスを示す。エンジン４０は、サーバ１４からの監査リクエスト５０をリッスンすることができる。リクエスト５０が受信されると、エンジン４０は、監査リクエスト５０に従って監査するためのターゲットＶＭを選択し、監査エージェントを、ターゲットゲストＶＭ（例えば、図３−Ａ〜図３−Ｂ中のゲストＶＭ３２）にドロップしてよい。
【００３５】
[0047]エージェントは、被監査ゲストＶＭのタイプに従って、例えば、被監査ＶＭ内で現在実行するゲストＯＳ３４のタイプに従って、クラフティングされ得る。ＯＳタイプは、Ｗｉｎｄｏｗｓ（登録商標）などの名前インジケータ、および、特に、７、Ｈｏｍｅ、またはＥｎｔｅｒｐｒｉｓｅなどのバージョンインジケータを含んでよい。いくつかの実施形態では、監査エンジン４０は、それぞれのゲストＶＭのモデル固有レジスタ（ＭＳＲ：ｍｏｄｅｌ−ｓｐｅｃｉｆｉｃ  ｒｅｇｉｓｔｅｒ）のコンテンツ、またはそれぞれのＭＳＲによって指されるメモリのセクションのコンテンツに従って、ＯＳのタイプを識別する。いくつかの実施形態では、エンジン４０は、被監査ＶＭ内で実行するソフトウェアによって、そのようなＭＳＲに書き込まれるデータに従ってＯＳの名前を判断することができる。例えば、エンジン４０は、ＳＹＳＥＮＴＥＲまたはＳＹＳＣＡＬＬ  ＭＳＲに書き込むようにとの命令をインターセプトし、そのような書込み命令のパラメータに従って、現在実行または現在初期設定するＯＳのタイプを判断することができる。特に、ＯＳの名前に関する情報を与え得る他の例示的なレジスタは、制御レジスタ、割込み記述子テーブル（ＩＤＴ：ｉｎｔｅｒｒｕｐｔ  ｄｅｓｃｒｉｐｔｏｒ  ｔａｂｌｅ）、およびグローバル記述子テーブル（ＧＤＴ：ｇｌｏｂａｌ  ｄｅｓｃｒｉｐｔｏｒ  ｔａｂｌｅ）を含む。ＭＳＲ書込みに従ってＯＳタイプを識別するために、内部監視エンジン４０は、さらに、各ＯＳに固有の高速システムコール・ハンドラの所定のライブラリ（例えば、ＳＹＳＣＡＬＬ  ＭＳＲまたはＳＹＳＥＮＴＥＲ  ＭＳＲのコンテンツに従って扱われるシステムコール）に対するパターンマッチングを使用してよい。そのような高速システムコール・ライブラリは、監査エンジン４０および／または内部監視エンジン４４を用いて与えられ得、周期的またはオンデマンド・ソフトウェア・アップデートを介して最新に保たれ得る。
【００３６】
[0048]いくつかの実施形態では、ＯＳのそれぞれのタイプに固有のいくつかのカーネルデータ構造をパースすることによって、（リリース名、ビルド番号などの）バージョンインジケータが取得され得る。ＯＳバージョンの識別を可能にする例示的なデータ構造は、Ｌｉｎｕｘ（登録商標）カーネルのいくつかのエクスポート・シンボル、または特にＮｔＢｕｉｌｄＮｕｍｂｅｒなど、Ｗｉｎｄｏｗｓ（登録商標）カーネルのいくつかのエクスポートされたシンボルである。
【００３７】
[0049]監査エージェント４２を、ターゲットゲストＶＭにドロップすると、ステップ２２８〜２３０〜２３２のシーケンスが、監査が完了するまでループで繰り返され得る。監査が進む間、ＶＭ監査エンジン４０は、データ（例えば、様々なソフトウェア構成要素のメモリアドレス、監査の様々な結果）を監査エージェント４２と交換してよい。仮想マシン内で実行する構成要素と仮想マシンの外部で実行する構成要素との間のそのようなメッセージングは、仮想化の当技術分野において知られている任意の方法を使用して（例えば、上記で説明されたように、監査エンジン４０と監査エージェント４２との間で共有されるメモリのセクションを介して）行われ得る。監査が完了すると、ステップ２３４が、例えばドライバローダを含んでいるメモリのセクションを消去することによって、監査エージェントを被監査ＶＭから消去する（以下にさらなる詳細）。さらなるステップ２３６において、監査エンジン４０は、監査報告５２を構築し、サーバ１４に送る。
【００３８】
[0050]図７は、プロセッサ特権レベル（例えば、特権リング）の観点から監査エージェント４２の例示的な構成要素を示す。いくつかの実施形態では、監査エージェント４２は、ドライバローダ４６と監査ドライバ４８とを含む。ドライバローダ４６は、ＶＭ監査エンジン４０によって、図３−Ａ〜図３−Ｂ中のアプリケーション３６ａ〜ｂなど、動いているアプリケーション３６にインジェクトされ得る。したがって、ドライバローダ４６は、アプリケーション３６の特権レベルにおいて、一般に、リング３（プロセッサ特権のユーザモードまたはユーザレベル）において実行し得る。いくつかの実施形態では、ドライバローダ４６は、ゲストＶＭ３２上に監査ドライバ４８をロードおよび起動し、ドライバ４８は、一般に、ゲストＯＳ３４のプロセッサ特権レベル（例えば、リング０、カーネルモード、またはカーネルレベル）において実行する。監査ドライバ４８は、次いで、ゲストＶＭ３２内で監査動作を行い得る。監査が完了すると、ローダ４６またはＶＭ監査エンジン４０は、例えばドライバ４８を含んでいるメモリセクションを消去することによって、ドライバ４８をゲストＶＭ３２から削除し得る。代替実施形態は、ドライバローダ４６を使用しないが、代わりに、ゲストＯＳ３４のカーネルにコード（例えば、監査エージェント４２）を直接インジェクトする。そのような実施形態では、エージェント４２は、完全にリング０（カーネルモード）において実行してよい。
【００３９】
[0051]ソフトウェア構成要素を仮想マシンにドロップすることは、当技術分野において知られている様々な方法を使用して達成され得る。図８は、本発明の好ましい実施形態による、ゲストＶＭ３２の内部にエージェント４２をドロップする（図６中のステップ２２６）ためにＶＭ監査エンジン４０によって実施されるステップの例示的なシーケンスを示す。ステップ２５０において、ＶＭ監査エンジン４０は、ドライバローダ４６をインジェクトするのに適したメモリのセクションを識別する。いくつかの実施形態では、ＯＳのメモリ割当て機能を使用する必要なしに（ＯＳのメモリ割当て機能を使用することは、ローダ４６および／またはドライバ４８を、ゲストＶＭ３２内で実行するマルウェアを含む他のソフトウェアによって発見可能にすることがある）、ドライバローダ４６は、存在するデータ構造の中で安全に隠れていることができるように、できるだけ小さく、例えば、メモリページよりもはるかに小さくクラフティングされる。
【００４０】
[0052]一例では、ＶＭ監査エンジン４０は、一般に、ドライバセクション間でゲストＯＳ３４によって確保されるパディングスペース内でドライバローダ４６を受信するのに適したメモリセクションを探索し得る。Ｗｉｎｄｏｗｓ（登録商標）などのいくつかのオペレーティングシステムは、オブジェクトの各別個のセクションがページ境界に整合されるようにメモリを割り当てるので、そのようなパディングスペースが存在する。セクションがメモリページ全体を占有しないとき、それぞれのページ内の残りのメモリスペースは、ダミーデータ（例えば、０）を用いてパディングされる。そのような実施形態では、ドライバローダ４６に適応するために好適なメモリスペースを探索することが、ゲストＯＳ３４のドライバに割り当てられたメモリページをそのようなダミーデータについて走査することを含んでよい。
【００４１】
[0053]別の例では、エンジン４０は、メモリを小さいオブジェクト（例えば、ドライバ）に割り当てるためのＯＳによる試みをインターセプトし得、それぞれのオブジェクトはメモリページよりも小さい。メモリの必要とされる量を割り当てる代わりに、エンジン４０は、ゲストＯＳ３４に、フルメモリページ（例えば、４ｋＢ）をそれぞれのオブジェクトに割り当てることと、ドライバローダ４６をホストするためにそれぞれのメモリページ内の残りのスペースを使用することとを行うように強制してよい。そのようなメモリ割当て試みをインターセプトするために、監査エンジン４０および／または内部監視エンジン４４のいくつかの実施形態は、Ｗｉｎｄｏｗｓ（登録商標）におけるＫｅＡｌｌｏｃａｔｅＰｏｏｌＷｉｔｈＴａｇなど、ネイティブＯＳメモリ管理関数を実行するための試みを検出してよい。そのような関数がそれぞれのゲスト仮想マシン３２のメモリ中にある、メモリアドレスを判断するために、監査エンジン４０は、カーネルバイナリイメージ（例えばＷｉｎｄｏｗｓ（登録商標）におけるＰｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ、Ｌｉｎｕｘ（登録商標）におけるＥｘｅｃｕｔａｂｌｅ  ａｎｄ  Ｌｉｎｋａｂｌｅ  Ｆｏｒｍａｔ）のエクスポートされる関数テーブルなど、いくつかのデータ構造にアクセスしてよい。現在ビアを割り当てられているオブジェクトのタイプは、インターセプトされるコールの割当てタグに従って判断され得る。例えば、Ｗｉｎｄｏｗｓ（登録商標）では、「Ｄｒｉｖ」タグがドライバオブジェクトを示す。
【００４２】
[0054]また別の例では、ステップ２５０は、未使用のメモリページを、図７中のアプリケーション３６など、実行プロセスのメモリスペースにマッピングすることを含む。ドライバローダ４６をホストするためにメモリの好適なセクションを識別すると、ステップ２５２において、ＶＭ監査エンジン４０は、メモリのそれぞれのセクションにローダ４６をインジェクトし得る。
【００４３】
[0055]次に、監査エンジン４０のいくつかの実施形態は、例えばＡＭＤ（登録商標）プラットフォーム上のＳＹＳＣＡＬＬ、またはＩｎｔｅｌ（登録商標）プラットフォーム上のＳＹＳＥＮＴＥＲなど、システムコールを発行することによって、プロセッサ特権の変更を試みるために、（アプリケーション３６などの）現在実行中のプロセスを待つことができる。それぞれのＶＭの外部からのシステムコールをインターセプトすることは、いくつかのやり方で達成され得る。一例では、エンジン４０は、システムコールを試みるスレッドを現在実行する、仮想プロセッサのプロセッサレジスタの値をリセットしてよい。そのようなプロセッサレジスタの例は、Ｉｎｔｅｌ（登録商標）プラットフォーム上のＩＡ３２＿ＬＳＴＡＲレジスタおよびＩＡ３２＿ＳＹＳＥＮＴＥＲ＿ＥＩＰレジスタがある。そのようなレジスタ操作は、その後、システムコールが試みられるときに障害を引き起こすことになり、それぞれの障害は、ＶＭ監査エンジン４０または内部監視エンジン４４によって検出され得る。別の例では、エンジン４０は、ゲストＯＳ３４のシステムコール・ハンドラを含んでいるコードページ上へのリダイレクションフックを配置してよい。
【００４４】
[0056]いくつかの実施形態では、システムコールがインターセプトされるとき、ステップ２５６が、それぞれのシステムコールのコンテキストがドライバローダ４６の安全なインジェクションを可能にするかどうかを判断するために、適格性検査のセットを行う。システムコールのインターセプションが、システムコール・ハンドラのフッキングを介して達成される一例では、適格性検査は、現在のスタックがユーザスタックであるか否かを判断することを含んでよい。スタックがユーザスタックであるときにコードをインジェクトするための試みは、ユーザモードにあるどんなものもカーネルについて信用できないので、システムを損ない得る。さらに、他のスレッドが、ユーザスタックからデータをスニッフィングし得、ドライバローダ４６を攻撃さえすることが可能でさえあり得る。いくつかの実施形態では、スタックがユーザスタックであるかどうかを判断することは、スタックセグメント記述子の特権レベルを判断することを含む。別の適格性検査は、割込みが現在可能にされるかどうかを判断し得る。ドライバローダ４６は、割込みが可能にされることを要求する、いくつかのプロセッサ命令を実行しなければならないことがある。また別の適格性検査は、現在の割込みリクエストレベル（ＩＲＱＬ：ｉｎｔｅｒｒｕｐｔ  ｒｅｑｕｅｓｔ  ｌｅｖｅｌ）を判断し得る。いくつかの実施形態は、例えば、現在のＩＲＱＬが、ドライバローダ４６の動作を行うことが可能であるように０に等しくなることを必要とし得る。
【００４５】
[0057]システムコールが適格性要件を満たすとき、ステップ２６０において、監査エンジン４０は、それぞれのシステムコールを発行したスレッドの実行を中断し、プロセッサ１６をドライバローダ４６を実行することに切り替え得る。ローダ４６が実行し終わったとき、監査エンジン４０は、プロセッサ１６を元のスレッド（例えば、アプリケーション３６）を実行することに切り替えて戻し得る。
【００４６】
[0058]図９は、本発明のいくつかの実施形態による、ドライバローダ４６によって実施されるステップの例示的なシーケンスを示す。メモリを監査ドライバ４８に割り当てるために、および／またはドライバ４８のためのスレッドを作成するために、いくつかの実施形態は、ゲストＯＳ３４の専用関数、例えばＷｉｎｄｏｗｓ（登録商標）におけるＥｘＡｌｌｏｃａｔｅＰｏｏｌＷｉｔｈＴａｇおよびＰｓＣｒｅａｔｅＳｙｓｔｅｍＴｈｒｅａｄ（同様の関数が他のＯＳ、例えばＬｉｎｕｘ（登録商標）中に存在する）を呼び得る。ドライバローダ４６が小さいメモリフットプリントを有することを必要とされる実施形態では、そのようなＯＳ関数のアドレスは、上記で説明されたように、例えば、メッセージング機構を介して、ＶＭ監査エンジン４０によってローダ４６に与えられ得る。そのような実施形態では、ドライバローダ４６は、ドライバ４８を割り当てられたメモリに実際に書き込まないことがある。代わりに、ローダ４６は、メモリの割り当てられたセクションのアドレスをＶＭ監査エンジン４０に通信し得、実際の書込みは、監査エンジン４０によって行われる。
【００４７】
[0059]監査ドライバ４８が起動される（ステップ２７４）と、ローダ４６は止まってよい。いくつかの実施形態では、監査ドライバ４８が実行を終了するとき、例えば、現在の監査動作が完了するとき、ドライバローダ４６は、ゲストＶＭ３２から監査ドライバ４８を削除してよい。代替実施形態では、ＶＭ監査エンジン４０が、クリーンアップを実施（例えば、メモリからドライバ４８を削除）してよい。
【００４８】
[0060]図１０は、本発明のいくつかの実施形態による、監査ドライバ４８によって実施される例示的なステップを示す。それ自体のメモリスペースと実行スレッドとを有するドライバ４８が、ゲストＶＭ３２内で実行するので、ドライバ４８は、ゲストＶＭ３２の監査を実施するために、例えば、インストールされたアプリケーションのリストを列挙すること、ＯＳの様々なパラメータ値を判断すること、様々なソフトウェア構成要素に関連するタイムスタンプを判断すること、リソース使用状況を判断することなどを行うために、ゲストＯＳ３４にとって利用可能なすべてのリソースを使用し得る。そのようなタスクは、当技術分野で知られている様々な方法を使用して行われ得る。例えば、監査ドライバ４８は、ゲストＯＳ３４のいくつかのレジストリ鍵を列挙することができ、それぞれの鍵は、インストールされたアプリケーション／ソフトウェアパッケージなどの識別情報をあらわにする。別の監査方法は、インストールされたプログラムに関する様々なデータを取得するために、ゲストＯＳ３４によって公開される（Ｗｉｎｄｏｗｓ（登録商標）におけるＷｉｎｄｏｗｓ  Ｍａｎａｇｅｍｅｎｔ  Ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ−ＷＭＩなどの）アプリケーション・プログラミング・インターフェース（ＡＰＩ）を呼び出す。また別の例では、ドライバ４８は、インストールされるプログラムおよびアップデートのリストを取得するために、特定のファイルおよびフォルダ（例えば、Ｗｉｎｄｏｗｓ（登録商標）におけるプログラムファイル）を探索し得る。そのような例示的な方法は、単独でまたは一緒に使用され得る。監査中に集められたデータは、例えばそのようなデータをドライバ４８とＶＭ監査エンジン４０との間で共有されるメモリの所定のセクションに書き込むことによって、ＶＭ監査エンジン４０に送信され得る。
【００４９】
[0061]いくつかの実施形態では、監査を実施したことに応答して、および止まる前に、監査ドライバ４８は、アンチマルウェアドライバなどのセキュリティモジュールをロードおよび／または起動してよい。セキュリティモジュールは、例えば、被監査ゲストＶＭがマルウェアを含むどうかを判断し得、および／あるいは存在するマルウェアを消すかまたは場合によっては無能力にし得る。そのようなセキュリティモジュールの内密および動的展開により、セキュリティモジュールの存在およびアクティビティは、それぞれのゲストＶＭ内で実行するマルウェアによって検出し、干渉することが比較的困難であり得る。
【００５０】
[0062]本明細書で説明される例示的なシステムおよび方法は、比較的多数のクライアントシステム（例えば、企業ネットワーク）上でソフトウェア監査をリモートで実施することを可能にする。ソフトウェア監査は、本明細書では、合法ソフトウェア、すなわち、それぞれのクライアントシステムの合法ユーザ（例えば、システム管理者）によってそれぞれのクライアントシステム上での実行のためにインストールおよび／または構成されるソフトウェアを評価することを指す。例示的な監査は、例えば、どのソフトウェアアプリケーションが会社のコンピュータ上に現在インストールされるかを判断し得る。そのような情報は、例えば、ソフトウェアライセンシングを容易にすること、アップグレードを展開すること、従業員が仕事場においてあるソフトウェア（例えば、メッセージングアプリ、ゲーム）をインストールまたは使用するのを防ぐこと、特定のブランドまたは種類のソフトウェア（例えば、Ｇｏｏｇｌｅ（登録商標）Ｃｈｒｏｍｅ（登録商標））を使用すべき従業員を判断することなどのために使用され得る。
【００５１】
[0063]監査結果は、被監査クライアントシステムに通信可能に結合されたサーバコンピュータに好都合に集中化され得る。監査は、スケジュールに従って自動的に、および／または人間管理者のリクエスト時に要求に応じて、行われ得る。本発明のいくつかの実施形態では、監査は、さらに、選択されたクライアントシステムのターゲットにされるマルウェア走査／駆除など、コンピュータ・セキュリティ・アクティビティに結合され得る。
【００５２】
[0064]いくつかの実施形態は、ソフトウェア監査の安全および信頼性を増加させるためにハードウェア仮想化技術を使用する。監査ソフトウェアを、悪意のある人間の介入に公開することおよび／または被監査クライアントを感染させるマルウェアに公開することを回避するために、いくつかの実施形態は、オペレーティングシステムを含むクライアントソフトウェアを仮想マシン（ＶＭ）に移動し、尊重される仮想マシンの外部から監査の一部を実施する。したがって、監査ソフトウェアの一部は、ハイパーバイザのレベルで、またはそれぞれのクライアント上で実行する別個の専用監査ＶＭ内で、実行し得る。
【００５３】
[0065]仮想化を十分に利用することによって、本発明のいくつかの実施形態は、サーバファームおよび仮想デスクトップインフラストラクチャ（ＶＤＩ）システムなど、並列に複数のＶＭを実行するクライアントシステムを監査することにも好適である。いくつかの実施形態に従って構成された単一の監査エンジンが、それぞれのクライアント上で実行する複数のＶＭ、またはすべてのＶＭを監査してよい。仮想化された環境において監査動作を行うように構成されたいくつかの従来のシステムは、被監査ＶＭのメモリスナップショットを分析することによって監査を実施する。そのような従来のシステムは、被監査ＶＭがそれぞれのメモリスナップショットをとるために停止されることを必要とし得る。対照的に、本発明のいくつかの実施形態は、監査エージェントが現在実行中のＶＭにドロップされ得るので、被監査ＶＭを停止することを必要としない。メモリスナップショットから抽出され得る情報に限定されないことによって、いくつかの実施形態は、実行中のＶＭの内部から実質的によりリッチな監査データへのアクセスを有し得る。
【００５４】
[0066]監査ソフトウェアを監査クライアント内に永続的にインストールしておくことは、そのようなソフトウェアをマルウェアに公開し得、これは、監査ソフトウェアを停止するかまたは場合によっては無能力にし得る。そのような従来のソリューションとは対照的に、本発明のいくつかの実施形態は、監査の持続時間の間、監査エージェントを被監査マシンに動的にドロップし、これにより、コンピュータセキュリティリスクを最小限に抑える。被監査ＶＭ内に永続的な監査エージェントを有しないことの別の利点は、そのような構成が仮想マシンと監査ソフトウェアの両方のアドミニストレーション、展開、およびアップグレードを著しく容易にし得ることである。監査ソリューションが、独立しており、被監査仮想マシンに永続的には関連付けられないとき、監査ソフトウェアは、ＶＭソフトウェアから独立して更新され得る。例えば、ＶＭ監査エンジン４０への更新は、それぞれのクライアント上で実行するゲストＶＭの動作に影響を及ぼすことなしに、インストールされ得る。ＶＤＩなど、ハードウェア仮想化の多くの現代の適用例では、仮想マシンは、一般に、クライアント上にローカルに記憶されるかまたはＶＤＩサーバコンピュータから受信されるＶＭイメージにしばしば基づいて、クライアントシステム上でインスタンス化され、動的に削除される。被監査ＶＭが永続的な監査エージェントを有しないとき、ＶＭイメージは、監査ソフトウェアに影響を及ぼすことなしに任意の時間に更新されるかまたは場合によっては変更され得る。
【００５５】
[0067]しかしながら、被監査ＶＭの外部から監査動作を実施することは、一般に「セマンティックギャップを埋めること」として当技術分野で知られている、困難な技術的問題を提示する。被監査ＶＭ内で実行するソフトウェアは、監査に関連する豊富な情報へのアクセスを有するが、それぞれのＶＭの外部で実行するソフトウェアは、一般に、物理メモリのコンテンツおよび被監査ＶＭの仮想プロセッサの現在状態へのアクセスのみを有する。したがって、ＶＭ内ソフトウェアのセマンティクスをそれぞれのＶＭの外部から解決することは、不可能であり得るか、またはせいぜい、かなりの量の計算を必要とし得る。したがって、セマンティックギャップを埋めるのを助けるために、いくつかの実施形態は、被監査ＶＭ内に監査エージェントをドロップする。監査エージェントは、被監査ＶＭ内から情報を集め、そのような情報を、被監査ＶＭの外部で実行する構成要素に通信してよい。
【００５６】
[0068]上記実施形態が本発明の範囲から逸脱することなく多くのやり方で変更され得ることは、当業者にとって明らかであろう。したがって、本発明の範囲は、以下の特許請求の範囲およびそれらの法的均等物によって判断されるべきである。
【図１】
2019503539.tif 000003
【図２−Ａ】
2019503539.tif 000004
【図２−Ｂ】
2019503539.tif 000005
【図３−Ａ】
2019503539.tif 000006
【図３−Ｂ】
2019503539.tif 000007
【図４】
2019503539.tif 000008
【図５】
2019503539.tif 000009
【図６】
2019503539.tif 000010
【図７】
2019503539.tif 000011
【図８】
2019503539.tif 000012
【図９】
2019503539.tif 000013
【図１０】
2019503539.tif 000014
【国際調査報告】
2019503539.tif 000015
2019503539.tif 000016
2019503539.tif 000017