(57)【特許請求の範囲】
【請求項１】
ハードウェアプロセッサを含むホストシステムであって、前記ハードウェアプロセッサは、
仮想化されたプロセッサおよび仮想化されたメモリを含み、前記仮想化されたプロセッサを使用してターゲットプロセスを実行するように構成された仮想マシンを公開するように構成されたハイパーバイザと、
前記仮想マシンの外で実行されるメモリ内部監視エンジンであって、
前記仮想マシンのページテーブルにより、前記ターゲットプロセスの仮想メモリ空間のターゲットページが前記仮想化されたメモリからスワップアウトされているかどうかを判定し、
前記ターゲットページが前記仮想化されたメモリからスワップアウトされているときに、前記仮想マシンにページフォールトを直接インジェクトし、前記ページフォールトは前記仮想マシンのオペレーティングシステムに前記ターゲットページを前記仮想化されたメモリのページにマップさせる
ように構成されたメモリ内部監視エンジンと
を動作させるように構成され、前記ページフォールトを直接インジェクトすることは、前記メモリ内部監視エンジンが、前記ページフォールトが発生する前に、前記ターゲットページの仮想アドレスを前記仮想化されたプロセッサのレジスタに書き込むことを含み、前記レジスタは、前記仮想化されたプロセッサによるある仮想アドレスへのアクセスがページフォールトを発生させたときに、当該ある仮想アドレスが格納されるレジスタである、ホストシステム。
【請求項２】
ハードウェアプロセッサを含むホストシステムであって、前記ハードウェアプロセッサは、
仮想化されたプロセッサおよび仮想化されたメモリを含み、前記仮想化されたプロセッサを使用してターゲットプロセスを実行するように構成された仮想マシンを公開するように構成されたハイパーバイザと、
前記仮想マシンの外で実行されるメモリ内部監視エンジンであって、
前記仮想マシンのページテーブルにより、前記ターゲットプロセスの仮想メモリ空間のターゲットページが前記仮想化されたメモリからスワップアウトされているかどうかを判定し、
前記ターゲットページが前記仮想化されたメモリからスワップアウトされているときに、前記仮想マシンにページフォールトを直接インジェクトし、前記ページフォールトは前記仮想マシンのオペレーティングシステムに前記ターゲットページを前記仮想化されたメモリのページにマップさせる
ように構成されたメモリ内部監視エンジンと
を動作させるように構成され、前記ページフォールトを直接インジェクトすることは、前記メモリ内部監視エンジンが、前記ページフォールトが発生する前に、前記ターゲットページの仮想アドレスを前記仮想化されたプロセッサのＣＲ２レジスタに書き込むことを含む、ホストシステム。
【請求項３】
請求項１または２に記載のホストシステムであって、
前記仮想マシンを公開することは、前記仮想化されたプロセッサの現在状態を記憶するデータ構造を構成することを含み、前記データ構造は、所定の値に設定されると、前記仮想化されたプロセッサにページフォールトを発生させるイベントインジェクションフィールドを含み、
前記ページフォールトを直接インジェクトすることは、前記メモリ内部監視エンジンが前記所定の値を前記イベントインジェクションフィールドに書き込むことをさらに含む、
ホストシステム。
【請求項４】
請求項１から３のうちの何れか一項に記載のホストシステムであって、前記メモリ内部監視エンジンは、
前記ページフォールトを直接インジェクトするのに備えて、前記仮想化されたプロセッサの現在の状態により、インジェクション条件が満たされるかどうかを判定し、
前記インジェクション条件が満たされるときに、前記ページフォールトを直接インジェクトする
ようにさらに構成された、ホストシステム。
【請求項５】
請求項４に記載のホストシステムであって、前記インジェクション条件が満たされるかどうかを判定することは、前記仮想化されたプロセッサの現在の割り込み要求レベル（ＩＲＱＬ）を決定することを含む、ホストシステム。
【請求項６】
請求項４または５に記載のホストシステムであって、前記インジェクション条件が満たされるかどうかを判定することは、前記仮想化されたプロセッサが現在実行されている特権レベルを決定することを含む、ホストシステム。
【請求項７】
請求項４から６のうちの何れか一項に記載のホストシステムであって、前記インジェクション条件が満たされるかどうかを判定することは、前記仮想化されたプロセッサの現在の実行コンテキストを決定することを含む、ホストシステム。
【請求項８】
請求項４から７のうちの何れか一項に記載のホストシステムであって、前記メモリ内部監視エンジンは、前記インジェクション条件が満たされるかどうかの判定に応答して、前記インジェクション条件が満たされないときに、前記インジェクション条件が満たされるまで前記ページフォールトのインジェクトを遅らせるようにさらに構成された、ホストシステム。
【請求項９】
請求項１から８のうちの何れか一項に記載のホストシステムであって、前記メモリ内部監視エンジンは、前記ページフォールトを直接インジェクトすることに応じて、
前記ターゲットページのページテーブルエントリの変更を検出し、
前記ターゲットページが前記変更により前記仮想化されたメモリの前記ページにマップされたかどうかを判定する
ようにさらに構成された、ホストシステム。
【請求項１０】
請求項１から９のうちの何れか一項に記載のホストシステムであって、前記メモリ内部監視エンジンは、前記ターゲットページの内容により前記ターゲットプロセスが悪意のあるものであるかどうかを判定するようにさらに構成された、ホストシステム。
【請求項１１】
請求項１から１０のうちの何れか一項に記載のホストシステムであって、前記メモリ内部監視エンジンは、前記ターゲットページの内容を変更しようとする試みをインターセプトするようにさらに構成された、ホストシステム。
【請求項１２】
請求項１から１１のうちの何れか一項に記載のホストシステムであって、前記メモリ内部監視エンジンは、前記ターゲットページが前記仮想化されたメモリからスワップアウトされているかどうかを判定するのに備えて、
前記仮想マシン内の前記ターゲットプロセスの起動を示す、前記仮想化されたプロセッサのイベントを検出し、
前記イベントにより前記ターゲットページの仮想アドレスを決定する
ようにさらに構成された、ホストシステム。
【請求項１３】
ホストシステムの少なくとも１つのハードウェアプロセッサが、ハイパーバイザを実行するステップであって、前記ハイパーバイザは、仮想化されたプロセッサおよび仮想化されたメモリを含む仮想マシンを公開するように構成され、前記仮想マシンは前記仮想化されたプロセッサを使用してターゲットプロセスを実行するように構成された、ステップと、
前記少なくとも１つのハードウェアプロセッサが、前記ターゲットプロセスの仮想メモリ空間のターゲットページが前記仮想化されたメモリからスワップアウトされているかどうかを判定するステップと、
前記ターゲットページが前記仮想化されたメモリからスワップアウトされているときに、前記少なくとも１つのハードウェアプロセッサが、前記仮想マシンにページフォールトを直接インジェクトするステップであって、前記ページフォールトは前記仮想マシンのオペレーティングシステムに前記ターゲットページを前記仮想化されたメモリのページにマップさせる、ステップと
を含み、前記ページフォールトを直接インジェクトするステップは、前記ページフォールトが発生する前に、前記ターゲットページの仮想アドレスを前記仮想化されたプロセッサのレジスタに書き込むステップを含み、前記レジスタは、前記仮想化されたプロセッサによるある仮想アドレスへのアクセスがページフォールトを発生させたときに、当該ある仮想アドレスが格納されるレジスタである、方法。
【請求項１４】
ホストシステムの少なくとも１つのハードウェアプロセッサが、ハイパーバイザを実行するステップであって、前記ハイパーバイザは、仮想化されたプロセッサおよび仮想化されたメモリを含む仮想マシンを公開するように構成され、前記仮想マシンは前記仮想化されたプロセッサを使用してターゲットプロセスを実行するようにさらに構成された、ステップと、
前記少なくとも１つのハードウェアプロセッサが、前記ターゲットプロセスの仮想メモリ空間のターゲットページが前記仮想化されたメモリからスワップアウトされているかどうかを判定するステップと、
前記ターゲットページが前記仮想化されたメモリからスワップアウトされているときに、前記少なくとも１つのハードウェアプロセッサが、前記仮想マシンにページフォールトを直接インジェクトするステップであって、前記ページフォールトは前記仮想マシンのオペレーティングシステムに前記ターゲットページを前記仮想化されたメモリのページにマップさせる、ステップと
を含み、前記ページフォールトを直接インジェクトするステップは、前記ページフォールトが発生する前に、前記ターゲットページの仮想アドレスを前記仮想化されたプロセッサのＣＲ２レジスタに書き込むステップを含む、方法。
【請求項１５】
請求項１３または１４に記載の方法であって、
前記仮想マシンを公開することは、前記仮想化されたプロセッサの現在状態を記憶するデータ構造を構成することを含み、前記データ構造は、所定の値に設定されると、前記仮想化されたプロセッサにページフォールトを発生させるイベントインジェクションフィールドを含み、
前記ページフォールトを直接インジェクトするステップは、前記所定の値を前記イベントインジェクションフィールドに書き込むステップをさらに含む、
方法。
【請求項１６】
請求項１３から１５のうちの何れか一項に記載の方法であって、前記ページフォールトを直接インジェクトするのに備えて、
前記少なくとも１つのハードウェアプロセッサが、前記仮想化されたプロセッサの現在の状態により、インジェクション条件が満たされるかどうかを判定するステップと、
前記インジェクション条件が満たされるときに、前記少なくとも１つのハードウェアプロセッサが、前記ページフォールトを直接インジェクトするステップと
をさらに含む方法。
【請求項１７】
請求項１６に記載の方法であって、前記インジェクション条件が満たされるかどうかを判定するステップは、前記仮想化されたプロセッサの現在の割り込み要求レベル（ＩＲＱＬ）を決定するステップを含む、方法。
【請求項１８】
請求項１６または１７に記載の方法であって、前記インジェクション条件が満たされるかどうかを判定するステップは、前記仮想化されたプロセッサが現在実行されている特権レベルを決定するステップを含む、方法。
【請求項１９】
請求項１６から１８のうちの何れか一項に記載の方法であって、前記インジェクション条件が満たされるかどうかを判定するステップは、前記仮想化されたプロセッサの現在の実行コンテキストを決定するステップを含む、方法。
【請求項２０】
請求項１６から１９のうちの何れか一項に記載の方法であって、前記インジェクション条件が満たされるかどうかの判定に応答して、前記インジェクション条件が満たされないときに、前記インジェクション条件が満たされるまで前記ページフォールトのインジェクトを遅らせるステップをさらに含む方法。
【請求項２１】
請求項１３から２０のうちの何れか一項に記載の方法であって、前記ページフォールトを直接インジェクトするのに応じて、
前記少なくとも１つのハードウェアプロセッサが、前記ターゲットページのページテーブルエントリの変更を検出するステップと、
前記少なくとも１つのハードウェアプロセッサが、前記ターゲットページが前記変更により前記仮想化されたメモリの前記ページにマップされたかどうかを判定するステップと
をさらに含む方法。
【請求項２２】
請求項１３から２１のうちの何れか一項に記載の方法であって、前記少なくとも１つのハードウェアプロセッサが、前記ターゲットページの内容により前記ターゲットプロセスが悪意のあるものであるかどうかを判定するステップをさらに含む方法。
【請求項２３】
請求項１３から２２のうちの何れか一項に記載の方法であって、前記少なくとも１つのハードウェアプロセッサが、前記ターゲットページの内容を変更しようとする試みをインターセプトするステップをさらに含む方法。
【請求項２４】
請求項１３から２３のうちの何れか一項に記載の方法であって、前記ターゲットページが前記仮想化されたメモリからスワップアウトされているかどうかを判定するのに備えて、
前記少なくとも１つのハードウェアプロセッサが、前記仮想マシン内の前記ターゲットプロセスの起動を示す、前記仮想化されたプロセッサのイベントを検出するステップと、
前記少なくとも１つのハードウェアプロセッサが、前記イベントにより前記ターゲットページの仮想アドレスを決定するステップと
をさらに含む方法。
【請求項２５】
ホストシステムにメモリ内部監視エンジンを形成させるプログラムであって、前記ホストシステムは、仮想化されたプロセッサおよび仮想化されたメモリを含む仮想マシンを公開するハイパーバイザを実行し、前記仮想マシンは、前記仮想化されたプロセッサを使用してターゲットプロセスを実行するように構成され、前記メモリ内部監視エンジンは、前記仮想マシンの外で実行され、前記メモリ内部監視エンジンは、
前記仮想マシンのページテーブルにより、前記ターゲットプロセスの仮想メモリ空間のターゲットページが前記仮想化されたメモリからスワップアウトされているかどうかを判定し、
前記ターゲットページが前記仮想化されたメモリからスワップアウトされているとき、前記仮想マシンにページフォールトを直接インジェクトし、前記ページフォールトは前記仮想マシンのオペレーティングシステムに前記ターゲットページを前記仮想化されたメモリのページにマップさせる
ように構成され、前記ページフォールトを直接インジェクトすることは、前記メモリ内部監視エンジンが、前記ページフォールトが発生する前に、前記ターゲットページの仮想アドレスを前記仮想化されたプロセッサのレジスタに書き込むことを含み、前記レジスタは、前記仮想化されたプロセッサによるある仮想アドレスへのアクセスがページフォールトを発生させたときに、当該ある仮想アドレスが格納されるレジスタである、プログラム。
【請求項２６】
ホストシステムにメモリ内部監視エンジンを形成させるプログラムであって、前記ホストシステムは、仮想化されたプロセッサおよび仮想化されたメモリを含む仮想マシンを公開するハイパーバイザを実行し、前記仮想マシンは、前記仮想化されたプロセッサを使用してターゲットプロセスを実行するように構成され、前記メモリ内部監視エンジンは、前記仮想マシンの外で実行され、前記メモリ内部監視エンジンは、
前記仮想マシンのページテーブルにより、前記ターゲットプロセスの仮想メモリ空間のターゲットページが前記仮想化されたメモリからスワップアウトされているかどうかを判定し、
前記ターゲットページが前記仮想化されたメモリからスワップアウトされているとき、前記仮想マシンにページフォールトを直接インジェクトし、前記ページフォールトは前記仮想マシンのオペレーティングシステムに前記ターゲットページを前記仮想化されたメモリのページにマップさせる
ように構成され、前記ページフォールトを直接インジェクトすることは、前記メモリ内部監視エンジンが、前記ページフォールトが発生する前に、前記ターゲットページの仮想アドレスを前記仮想化されたプロセッサのＣＲ２レジスタに書き込むことを含む、プログラム。
【請求項２７】
請求項２５または２６に記載のプログラムであって、
前記仮想マシンを公開することは、前記仮想化されたプロセッサの現在状態を記憶するデータ構造を構成することを含み、前記データ構造は、所定の値に設定されると、前記仮想化されたプロセッサにページフォールトを発生させるイベントインジェクションフィールドを含み、
前記ページフォールトを直接インジェクトすることは、前記メモリ内部監視エンジンが前記所定の値を前記イベントインジェクションフィールドに書き込むことをさらに含む、
プログラム。
【請求項２８】
請求項２５から２７のうちの何れか一項に記載のプログラムを記憶したコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
[0001]本出願は、２０１３年７月１７日に出願された「Ｐａｇｅ  Ｆａｕｌｔ  Ｉｎｊｅｃｔｉｏｎ  Ｉｎ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅｓ（仮想マシンにおけるページフォールトインジェクション）」という名称の米国仮特許出願第６１／８４７，５３８号の出願日に基づく優先権を主張し、その内容全体は、引用により本明細書に組み込まれる。
【０００２】
[0002]本発明は、マルウェアからコンピュータシステムを保護するためのシステムおよび方法に関する。
【背景技術】
【０００３】
[0003]悪意のあるソフトウェアは、マルウェアとしても知られ、世界中の多数のコンピュータシステムに影響を与える。コンピュータウイルス、ワーム、ルートキット、およびスパイウェアなど、その多くの形式でマルウェアは、数百万人のコンピュータユーザに深刻なリスクを与え、特に、データおよび機密情報の損失、個人情報の盗難、ならびに生産性の損失を受けやすくしている。
【０００４】
[0004]ハードウェア仮想化技術により、多くの方法で物理コンピュータシステムとしてふるまう、一般に仮想マシンとして知られるシミュレートされたコンピュータ環境の創出が可能となる。サーバ統合およびサービスとしてのインフラストラクチャ（ＩＡＡＳ：infrastructure-as-a-service）などの代表的な応用では、いくつかの仮想マシンが、特にハードウェアリソースを共有して、したがって投資および運用コストを減らして、同じ物理マシン上で同時に動作することができる。各仮想マシンは、その独自のオペレーティングシステムおよび／またはソフトウェアアプリケーションを、他の仮想マシンから切り離して実行することができる。マルウェアが一定して増えているために、このような環境で動作している各仮想マシンは、潜在的にマルウェア防御を必要としている。
【０００５】
[0005]当技術分野で一般的に使用される仮想化ソリューションは、コンピューティングハードウェアと仮想マシンのオペレーティングシステム（ＯＳ）との間で動作しているソフトウェアの層から成り、それぞれのＯＳよりも多くのプロセッサ特権を有し、仮想マシンモニタとしても知られるハイパーバイザを含む。アンチマルウェア動作は、ハイパーバイザの特権レベルで行われ得る。このような構成はセキュリティを高めることができるが、余分な複雑さを取り込み、かなりの計算コストを伴う可能性がある。
【０００６】
[0006]ハードウェア仮想化プラットフォームのための、効率的、堅牢、および拡張可能なアンチマルウェアソリューションを開発することにかなりの関心がある。
【発明の概要】
【０００７】
[0007]１つの態様によれば、ホストシステムが、ハイパーバイザおよびメモリ内部監視エンジンを動作させるように構成されたハードウェアプロセッサを含む。ハイパーバイザは、仮想化されたプロセッサと、仮想化されたメモリとを含んだ仮想マシンを公開する（expose）ように構成され、仮想マシンは、仮想化されたプロセッサを使用してターゲットプロセスを実行するように構成される。メモリ内部監視エンジンは、仮想マシンの外で実行され、仮想マシンのページテーブルにより、ターゲットプロセスの仮想メモリ空間のターゲットページが、仮想化されたメモリからスワップアウトされているかどうかを判定し（ｄｅｔｅｒｍｉｎｅ）、それに応じて、ターゲットページが仮想化されたメモリからスワップアウトされているとき、仮想マシンにページフォールトを直接インジェクトするように構成され、ページフォールトが仮想マシンのオペレーティングシステムにターゲットページを仮想化されたメモリのページにマップさせる。
【０００８】
[0008]別の態様によれば、方法が、ホストシステムの少なくとも１つのハードウェアプロセッサを使用して、ハイパーバイザを実行するステップを含み、ハイパーバイザは、仮想化されたプロセッサと、仮想化されたメモリとを含んだ仮想マシンを公開するように構成され、仮想マシンは、仮想化されたプロセッサを使用して、ターゲットプロセスを実行するようにさらに構成される。方法は、少なくとも１つのハードウェアプロセッサを使用して、ターゲットプロセスの仮想メモリ空間のターゲットページが、仮想化されたメモリからスワップアウトされているかどうかを判定するステップと、それに応じて、ページが仮想化されたメモリからスワップアウトされているとき、その少なくとも１つのハードウェアプロセッサを使用して仮想マシンにページフォールトを直接インジェクトするステップとをさらに含み、ページフォールトが仮想マシンのオペレーティングシステムにターゲットページを仮想化されたメモリのページにマップさせる。
【０００９】
[0009]別の態様によれば、非一時的コンピュータ可読媒体が、ホストシステムの少なくとも１つのハードウェアプロセッサによって実行されるとき、ホストシステムにメモリ内部監視エンジンを形成させる命令を記憶し、ホストシステムは、仮想化されたプロセッサと仮想化されたメモリとを含んだ仮想マシンを公開するハイパーバイザを実行するようにさらに構成され、仮想マシンは、仮想化されたプロセッサを使用してターゲットプロセスを実行するように構成される。メモリ内部監視エンジンは、仮想マシンの外で実行され、仮想マシンのページテーブルにより、ターゲットプロセスの仮想メモリ空間のターゲットページが、仮想化されたメモリからスワップアウトされているかどうかを判定し、それに応じて、ターゲットページが仮想化されたメモリからスワップアウトされているとき、仮想マシンにページフォールトを直接インジェクトするように構成され、ページフォールトが仮想マシンのオペレーティングシステムにターゲットページを仮想化されたメモリのページにマップさせる。
【００１０】
[0010]本発明の前述の態様および利点は、次の詳細な説明を読むと、および図面を参照すると、よりよく理解されるようになるであろう。
【図面の簡単な説明】
【００１１】
【図１】[0011]ホストシステムで実行されるハイパーバイザによって公開される仮想マシンの例示的なセット、および本発明のいくつかの実施形態によりマルウェアから仮想マシンのセットを保護するメモリ内部監視エンジンを示す図である。
【図２】[0012]本発明のいくつかの実施形態によりホストシステムの例示的なハードウェア構成を示す図である。
【図３】[0013]本発明のいくつかの実施形態によりゲスト仮想マシンに公開される仮想化されたハードウェアの例示的な構成を示す図である。
【図４】[0014]本発明のいくつかの実施形態により様々なプロセッサ特権レベルにおいてホストシステムで実行されるソフトウェアオブジェクトの例示的な階層を示す図である。
【図５】[0015]本発明のいくつかの実施形態により、メモリアドレスの例示的なマッピング、ならびに仮想化されたメモリへのメモリページの例示的なスワップインおよび仮想化されたメモリからのメモリページの例示的なスワップアウトを示す図である。
【図６】[0016]本発明のいくつかの実施形態によりマルウェアから仮想マシンを保護するためにメモリ内部監視エンジンによって実行される例示的な一連のステップを示す図である。
【図７】[0017]本発明のいくつかの実施形態により直接的なページフォールトインジェクションを行うためにメモリ内部監視によって行われる例示的な一連のステップを示す図である。
【図８】[0018]本発明のいくつかの実施形態により図６〜図７の方法の応用を示す例示的な一連のステップを示す図である。
【図９】[0019]本発明のいくつかの実施形態により図６〜図７の方法の別の応用を示す例示的な一連のステップを示す図である。
【図１０】[0020]本発明のいくつかの実施形態により、ターゲットプロセスのデータを含んでいるメモリページの仮想アドレスのセットの例示的な決定（ｄｅｔｅｍｉｎａｔｉｏｎ）を示す図である。
【発明を実施するための形態】
【００１２】
[0021]次の説明では、構造間の列挙するすべての接続は、直接的な動作接続または中間構造を介した間接的な動作接続であり得ることは理解されよう。要素のセットは、１つまたは複数の要素を含む。要素の任意の列挙は、少なくとも１つの要素を指すと理解される。複数の要素は、少なくとも２つの要素を含む。別段の要求がない限り、記載する方法のステップは、必ずしも例示する特定の順序で行われる必要はない。第２の要素から導き出される第１の要素（たとえば、データ）は、第２の要素に等しい第１の要素、ならびに第２の要素およびオプションでは他のデータを処理することによって生成される第１の要素を含む。パラメータにより判定および決定（ｄｅｔｅｒｍｉｎａｔｉｏｎ  ａｎｄ  ｄｅｃｉｓｉｏｎ）を行うことは、パラメータによりおよびオプションでは他のデータにより判定および決定（ｄｅｔｅｒｍｉｎａｔｉｏｎ  ａｎｄ  ｄｅｃｉｓｉｏｎ）を行うことを含む。別段の指定がない限り、ある量／データのインジケータは、その量／データ自体、またはその量／データ自体とは異なるインジケータであってもよい。別段の指定がない限り、プロセスは、アプリケーションまたはオペレーティングシステムの一部などのコンピュータプログラムのインスタンスであり、少なくとも実行スレッドおよびオペレーティングシステムによって実行スレッドに割り当てられた仮想メモリのセクションを有し、それぞれのセクションが実行可能コードを含むことを特徴とする。別段の指定がない限り、ページは、ホストシステムの物理メモリに個々にマップされる仮想メモリの最小単位を表す。別段の指示がない限り、仮想マシンにページフォールトを直接インジェクトすることは、それぞれの仮想マシン内で実行されるオペレーティングシステムまたは他のソフトウェアからの援助なしで、それぞれの仮想マシンの仮想化されたプロセッサ内にページフォールトイベントを誘導することを含む。このような直接的なインジェクションは、オペレーティングシステムまたは他のソフトウェアがインジェクトされたページフォールトに応じて、たとえばページフォールトを処理するためにアクションを起こすことを除外しない。コンピュータ可読媒体は、磁気、光、および半導体記憶媒体（たとえば、ハードドライブ、光ディスク、フラッシュメモリ、ＤＲＡＭ）などの非一時的媒体、ならびに導電性ケーブルおよび光ファイバリンクなどの通信リンクを含む。いくつかの実施形態によれば、本発明は、特に、本明細書に記載する方法を行うようにプログラムされたハードウェア（たとえば、１つまたは複数のプロセッサ）、ならびに本明細書に記載する方法を行うように命令をエンコードするコンピュータ可読媒体を含んだコンピュータシステムを提供する。
【００１３】
[0022]次の説明は、例として、必ずしも限定としてではなく、本発明の諸実施形態を示す。
[0023]図１は、本発明のいくつかの実施形態によりマルウェア防御のためのハードウェア仮想化を使用するホストシステム１０の例示的な構成を示す。ホストシステム１０は、エンタープライズサーバなどの企業のコンピューティングデバイス、またはパーソナルコンピュータもしくはスマートフォンなどのエンドユーザデバイスを表すことができる。他の例示的なホストシステムには、ＴＶおよびゲーム機などのエンターテイメントデバイス、またはメモリおよびプロセッサを有し、マルウェア防御を必要とする他のいかなるデバイスも含まれる。図１の例では、ホストシステム１０は、ハイパーバイザ３０によって公開されるゲスト仮想マシン３２ａ〜ｂのセットを実行する。仮想マシン（ＶＭ）は、実際の物理マシン／コンピュータシステムの抽象化（abstraction）、たとえばソフトウェアエミュレーションを含み、ＶＭは、オペレーティングシステムおよび他のアプリケーションを実行することができる。ハイパーバイザ３０は、仮想プロセッサおよび仮想メモリコントローラなどの複数の仮想化されたデバイスを作成し、そのような仮想化されたデバイスを、ホストシステム１０の実在の物理デバイスの代わりにソフトウェアに提示するように構成されたソフトウェアを含む。いくつかの実施形態では、ハイパーバイザ３０は、ホストシステム１０のハードウェアリソースの複数の仮想マシンによって多重化（共有）を可能にする。ハイパーバイザ３０はさらに、各ＶＭが独立して動作し、ホストシステム１０で同時に実行される他のＶＭを認識しないように、そのような多重化を管理することができる。よく知られているハイパーバイザの例には、特に、ＶＭｗａｒｅ社が提供するＶＭｗａｒｅ  ｖＳｐｈｅｒｅ（商標）、およびオープンソースのＸｅｎハイパーバイザが含まれる。
【００１４】
[0024]各ＶＭ３２ａ〜ｂは、それぞれゲストオペレーティングシステム（ＯＳ）３４ａ〜ｂを実行することができる。例示的なアプリケーション４２ａ〜ｄのセットは、一般的にいかなるソフトウェアアプリケーションも表し、特に、文書処理、画像処理、メディアプレーヤー、データベース、カレンダー、個人連絡先管理、ブラウザ、ゲーム、音声通信、データ通信、およびアンチマルウェアアプリケーションなどを表す。オペレーティングシステム３４ａ〜ｂは、特に、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、ＭａｃＯＳ（登録商標）、Ｌｉｎｕｘ（登録商標）、ｉＯＳ（登録商標）、Ａｎｄｒｏｉｄ（商標）など、広く入手することができる任意のオペレーティングシステムを含むことができる。各ＯＳは、仮想マシン内で実行されるアプリケーションと、それぞれのＶＭの仮想化されたハードウェアデバイスとの間のインターフェースを提供する。次の説明では、仮想マシンの仮想プロセッサで実行されるソフトウェアは、それぞれの仮想マシン内で実行されると言われる。たとえば、図１の例では、アプリケーション４２ａ〜ｂは、ゲストＶＭ３２ａ内で実行されると言われ、アプリケーション４２ｃ〜ｄは、ゲストＶＭ３２ｂ内で実行されると言われる。対照的に、ハイパーバイザ３０は、ゲストＶＭ３２ａ〜ｂの外でまたは下で実行されると言われる。
【００１５】
[0025]いくつかの実施形態では、ハイパーバイザ３０は、以下にさらに詳細に記載するように、アンチマルウェア動作を行うように構成されたメモリ内部監視エンジン４０を含む。エンジン４０は、ハイパーバイザ３０に組み込まれてもよい、またはハイパーバイザ３０とは異なり独立しているが、ハイパーバイザ３０と実質的に同様のプロセッサ特権レベルで実行されるソフトウェアコンポーネントとして提供されてもよい。単一のエンジン４０が、ホストシステム１０で実行される複数のＶＭをマルウェア防御する（malware-protect）ように構成されてもよい。
【００１６】
[0026]図２は、ホストシステム１０の例示的なハードウェア構成を示す。システム１０は、プロセッサ１２、メモリユニット１４、入力デバイス１６のセット、出力デバイス１８のセット、ストレージデバイス２０のセット、およびネットワークアダプタ２２のセットなど、物理デバイスのセットを含み、すべてがコントローラハブ２４によって接続されている。いくつかの実施形態では、プロセッサ１２は、信号および／またはデータのセットを用いて計算および／または論理演算を実行するように構成された物理デバイス（たとえば、半導体基板上に形成されたマルチコアの集積回路）を含む。いくつかの実施形態では、このような論理演算は、一連のプロセッサ命令（たとえば、マシンコードまたは他のタイプのソフトウェア）の形でプロセッサ１２に引き渡される。メモリユニット１４は、命令を実行する過程でプロセッサ１２によってアクセスされるまたは生成されるデータ／信号を記憶する揮発性コンピュータ可読媒体（たとえば、ＲＡＭ）を含むことができる。
【００１７】
[0027]入力デバイス１６は、ユーザがデータおよび／または命令をホストシステム１０に導入できるようにするそれぞれのハードウェアインターフェースおよび／またはアダプタなど、特に、コンピュータキーボード、マウス、およびマイクを含むことができる。出力デバイス１８は、特にモニタおよびスピーカなどのディスプレイデバイス、ならびにホストシステム１０がデータをユーザに伝えられるようにする、グラフィックカードなどのハードウェアインターフェース／アダプタを含むことができる。いくつかの実施形態では、入力デバイス１６および出力デバイス１８は、タッチスクリーンデバイスの場合のように、共通のハードウェアを共有することができる。ストレージデバイス２０は、ソフトウェア命令および／またはデータの不揮発性の記憶、読み出し、および書き込みを可能にするコンピュータ可読媒体を含む。例示的なストレージデバイス２０は、磁気および光ディスク、ならびにフラッシュメモリデバイス、ならびにＣＤおよび／またはＤＶＤディスクおよびドライブなどのリムーバブルメディアを含む。ネットワークアダプタ２２のセットは、ホストシステム１０がコンピュータネットワークに、および／または他のデバイス／コンピュータシステムに接続できるようにする。コントローラハブ２４は、複数のシステムバス、周辺機器バス、および／もしくはチップセットバス、ならびに／またはプロセッサ１２とデバイス１４、１６、１８、１０、および２２との間の通信を可能にする他のすべての回路を表す。たとえば、コントローラハブ２４は、特に、メモリコントローラ、入力／出力（Ｉ／Ｏ）コントローラ、および割り込みコントローラを含むことができる。別の例では、コントローラハブ２４は、プロセッサ１２をメモリ１４に接続するノースブリッジ、ならびに／またはプロセッサ１２をデバイス１６、１８、２０、および２２に接続するサウスブリッジを含むことができる。
【００１８】
[0028]図１に示す構成を可能にするために、ハイパーバイザ３０は、それぞれがシステム１０の物理ハードウェアデバイスをエミュレートする複数の仮想化されたデバイスを作成することができる。ハイパーバイザ３０は、さらに仮想化されたデバイスのセットを各ＶＭ３２ａ〜ｂに割り当て、ＶＭ３２ａ〜ｂがプロセッサ１２および他のハードウェアデバイスを同時に使用することができるように、スケジューリング、シグナリング、および通信を制御することができる。このような動作を行うことはまた、当技術分野ではＶＭ３２ａ〜ｂを公開することとして知られている。
【００１９】
[0029]図３は、ハイパーバイザ３０によって公開される仮想マシン３２の例示的な構成を示す。ＶＭ３２は、たとえば図１のＶＭ３２ａ〜ｂのいずれかを表すことができる。ＶＭ３２は、仮想化されたプロセッサ１１２と、仮想化されたメモリユニット１１４と、仮想化された入力デバイス１１６と、仮想化された出力デバイス１１８と、仮想化されたストレージ１２０と、仮想化されたネットワークアダプタ１２２と、仮想化されたコントローラハブ１２４とを含む。仮想化されたプロセッサ１１２は、プロセッサ１２の機能の少なくともいくつかのエミュレーションを含み、オペレーティングシステムおよび他のアプリケーションなどのソフトウェアの一部を形成するプロセッサ命令を受け取って実行するように構成される。プロセッサ１１２を使用して実行するソフトウェアは、仮想マシン３２内で実行されるとみなされる。いくつかの実施形態では、仮想化されたメモリユニット１１４は、仮想化されたプロセッサ１１２によって使用されるデータを記憶し、検索するためのアドレス可能空間を含む。他の仮想化されたデバイス（たとえば、仮想化された入力、出力、ストレージなど）は、ホストシステム１０のそれぞれの物理デバイスの機能の少なくともいくつかをエミュレートする。仮想化されたプロセッサ１１２は、対応する物理デバイスと対話するように、そのようなデバイスと対話するように構成される。たとえば、ＶＭ３２内で実行されるソフトウェアは、（１つまたは複数の）仮想化されたネットワークアダプタ１２２を介してネットワークトラフィックを送るおよび／または受け取ることができる。いくつかの実施形態では、ハイパーバイザ３０は、仮想化されたデバイスのサブセットのみをＶＭ３２に公開することができる（たとえば、仮想化されたプロセッサ１１２、仮想化されたメモリ１１４、ハブ１２４の一部のみ）。ハイパーバイザ３０は、選択されたＶＭに、ホストシステム１０のいくつかのハードウェアデバイスを排他的に使用させることもある。このような１つの例では、ＶＭ３２ａ（図１）は、入力デバイス１６および出力デバイス１８を排他的に使用するが、仮想化されたネットワークアダプタがないことがある。一方、ＶＭ３２ｂは、（１つまたは複数の）ネットワークアダプタ２２を排他的に使用することがある。
【００２０】
[0030]図４は、本発明のいくつかの実施形態によりホストシステム１０で実行されるソフトウェアオブジェクトの階層を示す。図４は、当技術分野ではレイヤまたはプロテクションリングとしても知られる、プロセッサ特権レベルの視点から表されている。いくつかの実施形態では、ハイパーバイザ３０は、最大特権レベル（たとえば、仮想化を支援し、リング−１またはルートモードとしても知られている、Ｉｎｔｅｌ（登録商標）プラットフォームのＶＭＸｒｏｏｔ）でプロセッサ１２の制御を行い、したがってホストシステム１０で実行される他のソフトウェアに仮想マシン３２として公開されるハードウェア仮想化プラットフォームを作成する。図２のＯＳ３４ａ〜ｂなどのオペレーティングシステム３４が、ＶＭ３２の仮想環境内で実行され、ＯＳ３４は、ハイパーバイザ３０よりも劣るプロセッサ特権（たとえば、Ｉｎｔｅｌプラットフォームのリング０、またはカーネルモード）を有する。アプリケーション４２ｅ〜ｆのセットが、ＯＳ３４よりも劣るプロセッサ特権（たとえば、リング３、またはユーザモード）で実行される。アプリケーション４２ｅ〜ｆの部分が、カーネル特権レベルで実行されてもよい（たとえば、ドライバ３６がアプリケーション４２ｆによってインストールされる、例示的なドライバ３６が、ソフトウェアオブジェクトのマルウェアを示す挙動を検出する、および／またはソフトウェアオブジェクト内のマルウェアを示す署名を検出するなど、アンチマルウェア動作を行う）。同様に、ＯＳ３４の部分が、ユーザモード（リング３）で実行されてもよい。
【００２１】
[0031]いくつかの実施形態では、内部監視エンジン４０が、実質的にハイパーバイザ３０と同じプロセッサ特権レベルで実行され、ＶＭ３２など、ホストシステム１０で実行される仮想マシンの内部監視を行うように構成される。ＶＭまたはそれぞれのＶＭ内で実行されるソフトウェアオブジェクトの内部監視は、それぞれのソフトウェアオブジェクトの挙動を分析すること、たとえば、オブジェクトによって行われる動作のセット（たとえば、システムコールを発行すること、ＯＳのレジストリにアクセスすること、リモート位置からファイルをダウンロードすること、ファイルにデータを書き込むことなど）を識別することを含むことができる。内部監視は、ソフトウェアオブジェクトの部分を含んでいるメモリセクションのアドレスを決定すること（ｄｅｔｅｒｍｉｎｉｎｇ）、それぞれのメモリセクションにアクセスすること、およびそれぞれのメモリセクション内に記憶されている内容を分析することをさらに含むことができる。内部監視の他の例は、そのようなメモリセクションのいくつかのプロセスのアクセスをインターセプトすることおよび／または制限すること、たとえば、プロセスが別のプロセスによって使用されるコードまたはデータを上書きしないようにすることを含む。いくつかの実施形態では、エンジン４０によって内部監視に選択されるオブジェクトは、特に、プロセス、命令ストリーム、レジスタ、ならびにそれぞれのＶＭのページテーブルおよびドライバオブジェクトなどのデータ構造を含む。
【００２２】
[0032]ＶＭ３２の内部監視を図１に示す構成で（すなわち、それぞれのＶＭの外から）行うために、エンジン４０のいくつかの実施形態は、プロセッサ１２のメモリマッピング構造および機構を使用する。仮想マシンは、一般的に、当技術分野ではゲスト物理メモリとしても知られる仮想化された物理メモリ、たとえば図３のメモリ１１４を用いて動作する。仮想化された物理メモリは、実際の物理メモリ１４の抽象的表現を、たとえば、各ゲストＶＭに固有の仮想化されたアドレスの連続した空間として、上記空間の部分を物理メモリ１４および／または物理ストレージデバイス２０内のアドレスにマップして、含む。仮想化を支援するように構成されたシステムでは、このようなマッピングは、一般的に、プロセッサ１２によって制御される専用データ構造によって実現され、第２レベルアドレス変換（ＳＬＡＴ：second level address translation）として知られる。よく知られているＳＬＡＴ実装は、拡張ページテーブル（Ｉｎｔｅｌ（登録商標）プラットフォームのＥＰＴ）、および入れ子ページテーブル（ＡＭＤ（登録商標）プラットフォームのＮＰＴ）を含む。このようなシステムでは、仮想化された物理メモリが、当技術分野でページとして知られている単位に分割されることが可能であり、ページは、ＥＰＴおよび／またはＮＰＴなどの機構により物理メモリに個々にマップされた仮想化された物理メモリの最小単位を表し、すなわち、物理メモリと仮想化された物理メモリとの間のマッピングは、ページ粒度で行われる。すべてのページは、一般的に、所定のサイズ、たとえば４キロバイト、２メガバイトなどを有する。仮想化された物理メモリをページに分割することは、通常、ハイパーバイザ３０によって設定される（configured）。いくつかの実施形態では、ハイパーバイザ３０は、ＥＰＴ／ＮＰＴ、したがって物理メモリと仮想化された物理メモリとの間のマッピングもまた設定する。仮想化された物理メモリの物理メモリアドレスへの実際のマッピング（変換）は、ホストシステム１０のトランスレーションルックアサイドバッファ（ＴＬＢ：translation lookaside buffer）で物理メモリアドレスを調べることを含むことができる。いくつかの実施形態では、アドレス変換は、ページウォークを行うことを含み、ページウォークは、ページテーブルおよび／またはページディレクトリのセットにおける連続したアドレスルックアップのセットを含み、それぞれのページに関連したアドレスにページのオフセットを加えるなどの計算を行う。
【００２３】
[0033]いくつかのハードウェア構成により、ハイパーバイザ３０が、物理メモリ１４の各ページ内に記憶されたデータへのアクセスを、たとえばそれぞれのページへの読み出し、書き込み、および／または実行アクセス権を設定することによって、選択的に制御することができる。このような権利は、たとえば、ＥＰＴまたはＮＰＴ内のそれぞれのページのエントリを変更することによって設定されてもよい。ハイパーバイザ３０は、どのソフトウェアオブジェクトが各ページ内のアドレスに記憶されたデータにアクセスすることができるかをこのように選択することができ、たとえば読み出し、書き込み、実行など、それぞれのデータでどの動作が許可されるかを示すことができる。ＶＭ内で実行されるソフトウェアオブジェクトによる、たとえばオブジェクトがそれぞれの権利を有していないページにデータを書き込むこと、または実行できないとマーク付けされたページからコードを実行することなどの動作を行おうとする試みが、仮想マシン終了イベント（たとえば、ＩｎｔｅｌプラットフォームのＶＭＥｘｉｔイベント）をトリガすることができる。いくつかの実施形態では、仮想マシン終了イベントは、プロセッサの制御を、それぞれのソフトウェアオブジェクトを実行しているＶＭからハイパーバイザ３０に移す。このような移動により、ハイパーバイザ３０のプロセッサ特権レベルで実行されるソフトウェアが、許可されていない書き込みまたは実行の試みをインターセプトすることができる。いくつかの実施形態では、内部監視エンジン４０が、アンチマルウェア動作の一部としてこのようなインターセプションを行う。
【００２４】
[0034]いくつかの実施形態では、ＯＳ３４が、たとえば、ページテーブル機構を使用して、それぞれの仮想メモリ空間と、ＶＭ３２の仮想化された物理メモリとの間のマッピング（アドレス変換）を維持することによって、図４のアプリケーション４２ｅ〜ｆなどのプロセスのために仮想メモリ空間を構成する。いくつかの実施形態では、プロセス仮想メモリ空間はまた、ページに分割され、このようなページは、ＯＳ３４によって仮想化された物理メモリに個々にマップされた仮想メモリの最小単位を表し、すなわち、仮想メモリから仮想化された物理メモリへのマッピングは、ページ粒度で行われる。
【００２５】
[0035]図５は、図４に示す実施形態におけるメモリアドレスの例示的なマッピングを示す。ゲストＶＭ３２ａ内で実行されるアプリケーション、プロセス、またはオペレーティングシステムの一部などのソフトウェアオブジェクトが、ゲストＯＳ３４によって仮想メモリ空間２１４ａを割り当てられる。ソフトウェアオブジェクトが、空間２１４ａの例示的なメモリページ６０ａの内容にアクセスしようと試みるとき、ページ６０ａのアドレスが、ゲストＶＭ３２の仮想化されたプロセッサによって、ゲストＯＳ３４により構成され、制御されるページテーブルに従い、ＶＭ３２の仮想化された物理メモリ空間１１４のページ６０ｂのアドレスに変換される。ハイパーバイザ３０は、仮想化された物理メモリ１１４を構成および制御し、次いで、たとえば上述のようにＳＬＡＴ手段を使用して、ページ６０ｂのアドレスを、ホストシステム１０の物理メモリ１４内のページ６０ｃのアドレスにマップする。
【００２６】
[0036]いくつかの実施形態では、ハイパーバイザ３０は、物理メモリ１４の表現を含んだその独自の仮想メモリ空間２１４ｂをセットアップし、変換機構（たとえば、ページテーブル）を使用して、空間２１４ｂ内のアドレスを物理メモリ１４内のアドレスにマップする。図５では、このような例示的なマッピングが、ページ６０ｃのアドレスを、ページ６０ｈのアドレスに変換する。このようなマッピングにより、ハイパーバイザ３０は、ホストシステム１０で動作している様々なＶＭ内で実行されるソフトウェアオブジェクトに属するメモリページを管理する（たとえば、読み出す、書き込む、およびアクセスを制御する）ことができる。
【００２７】
[0037]図５はさらに、ゲストＯＳ３４によって行われるページスワッピング動作を示す。ページスワッピングは、現代のオペレーティングシステムの共通機能であり、利用可能なメモリ資源を効率的に管理するために使用される。いくつかの実施形態では、メモリからページをスワップアウトすることは、ＯＳがそれぞれのページの内容をメモリからストレージデバイス（たとえば、ディスク）に移動させ、それぞれのページが他のデータを記憶するために使用され得るようにすることを含む。その後、ＯＳは、それぞれの内容をストレージからメモリに、おそらくその内容を記憶していた元のページのアドレスとは異なるアドレスに戻すことによって、そのページのスワップインを行うことができる。スワップインを完了するために、ＯＳは、アドレスの変化を反映するように、それぞれのページのページテーブルエントリを変更することができる。図５に示す例では、ページ６０ｃが、ストレージデバイスのページ６０ｄにスワップアウトされる。ＯＳ３４は、仮想マシン内で実行されるので、ＯＳ３４は、仮想化された物理メモリ１１４をその物理メモリとみなし、仮想化されたストレージデバイス１２０をその物理ストレージとみなす。したがって、メモリからページ６０ｃをスワップアウトすることは、事実上、ページ６０ｃの内容を仮想化されたストレージデバイス１２０に移動させることを含む。デバイス１２０は、物理ストレージデバイス２０のハイパーバイザ３０によって作成された抽象化を含むことができ、したがってページ６０ｄの内容は、実際はデバイス２０上のページ６０ｋにリダイレクトされ得る。いくつかの実施形態では、ハイパーバイザ３０は、たとえば、Ｉｎｔｅｌ（登録商標）から提供されるＶＴ−ｄ技術を使用して、ゲストＶＭ３２がストレージデバイス２０に直接アクセスできるようにすることができる。このような構成では、仮想化されたストレージデバイス１２０は、ホストシステム１０の実際の物理ストレージデバイスと一致することができる。スワップインを行うために、ＯＳ３４は、ページ６０ｄの内容を、仮想化された物理メモリ１１４のページ６０ｅに移動させることができる。ゲストＯＳ３４は、ページ６０ａからページ６０ｅへのアドレス変換（図５の破線矢印）を示すように、ページ６０ａに対応するページテーブルエントリをさらに変更することができる。ページ６０ｅは、物理メモリ１４内のページ６０ｍにマップされ得る。
【００２８】
[0038]図６は、本発明のいくつかの実施形態によりマルウェアから仮想マシンを保護するためにメモリ内部監視エンジン４０によって行われる例示的な一連のステップを示す。このようなアンチマルウェア防御は、たとえば、それぞれのＶＭ内で実行される選択されたプロセス（以降ターゲットプロセスとみなされる）のメモリ空間のページ（以降ターゲットページとみなされる）を識別すること、およびたとえば悪意のあるソフトウェアエンティティによる許可されていない変更からそれぞれのページの内容を保護することを含む。別の例では、内部監視エンジン４０は、ターゲットページが悪意のあるコードを含んでいるかどうかを判定することができる。ターゲットプロセスは、たとえば、図４ではアプリケーション４２ｅ〜ｆなどのアプリケーションに、またはゲストＯＳ３４に属することがある。ターゲットプロセスがユーザレベルのプロセッサ特権（たとえば、Ｗｉｎｄｏｗｓ（登録商標）におけるユーザモード）で実行されるとき、ターゲットページの内容は、常にメモリにあるわけではないが、代わりにときどきＯＳによってメモリにスワップインおよびメモリからスワップアウトされることがある。ＶＭ３２の外で実行されることによって、メモリ内部監視エンジン４０は、そのようなスワップアウトされたメモリページの内容に直接アクセスできない可能性がある。
【００２９】
[0039]一連のステップ３０２〜３０４において、エンジン４０は、現在の実行コンテキストがターゲットプロセスの実行コンテキストになるまで、すなわち、現在実行中の命令がターゲットプロセスに属するまで待つ。現在の実行コンテキストを決定することは、たとえば、それぞれのＶＭの仮想プロセッサのＣＲ３レジスタの内容を読み取ることを含むことができる（ｘ８６プラットフォームのＣＲ３レジスタは、実行中の各プロセスを一意に識別する、ページング構造のアドレスを記憶する）。実行コンテキストが、ターゲットプロセスの実行コンテキストであるとき、一連のステップ３０６〜３０８においてエンジン４０は、ターゲットページの内容が現在メモリからスワップアウトされているかどうかを判定することができる。ターゲットページの内容がメモリにあるとき、ステップ３１６においてエンジン４０は、たとえば、ターゲットページの内容を分析するおよび／または保護するために、ターゲットページを内部監視することに進むことができる。ターゲットページの内容が現在スワップアウトされているとき、ステップ３１０においてエンジン４０は、以下にさらに詳細に説明するように、ターゲットページのスワップインを強制するために、それぞれのＶＭにページフォールトを直接インジェクトする。次に、一連のステップ３１２〜３１４において、エンジン４０は、ターゲットページがスワップインされるまで、すなわち、それぞれのページの内容がそれぞれのＶＭの仮想化された物理メモリにマップされるまで待って、内部監視を行う。
【００３０】
[0040]ターゲットページがメモリにあるかどうかを判定する（ステップ３０６〜３０８）ために、ならびにターゲットページがスワップインされたかどうかを判定する（ステップ３１２〜３１４）ために、メモリ内部監視エンジン４０は、ＯＳ３４によってセットアップされたページテーブルの内容にアクセスすることができる。いくつかの実施形態では、ターゲットページのページテーブルエントリのフィールド（たとえば、専用ビット）が、それぞれのページが現在メモリに存在しているかどうかを示す。
【００３１】
[0041]図７は、ページフォールトを直接インジェクトし、したがってターゲットページのスワップインを強制する（図６のステップ３１０）ためにエンジン４０によって行われる例示的な一連のステップを示す。ステップシーケンス３２２〜３２４において、エンジン４０は、現在の状態または仮想プロセッサ１１２を評価して、ページフォールト例外がＶＭ３２に安全にインジェクトされ得るかどうかを判定する。ステップ３２２は、現在処理中の割り込み要求の優先度を評価することを含むことができる。Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）システムでは、このような評価は、たとえば、ＶＭ３２のセグメントレジスタの内容を調べることによって、現在の割り込み要求レベル（ＩＲＱＬ：interrupt request level）を決定することを含むことができる。このような例示的なレジスタは、ＩＲＱＬを含むデータ構造へのポインタを記憶する、ｘ８６プロセッサアーキテクチャのＦＳレジスタおよび／またはＧＳレジスタを含む。例示的な実施形態では、ＩＲＱＬ＜２のとき、ページフォールトをインジェクトすることは安全であると考えられる。待機中のより高い優先度の割り込み（たとえば、ＩＲＱＬ≧２）があるとき、ステップ３２２〜３２４は、高優先度の要求が満たされるのを待つ。
【００３２】
[0042]いくつかの実施形態では、ステップ３２２は、仮想プロセッサ１１２が現在実行されている特権レベル（リング）を決定することを含むことができる。Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）を実行中のホストシステムでは、プロセッサがユーザモード（リング３）で実行されている間、ＩＲＱＬはゼロであり、したがってユーザモードのページに対応するページフォールトのインジェクションは、安全であるとみなされ得る。プロセッサ１１２がカーネルモード（リング０）で実行されるとき、フォールトインジェクションが安全であるかどうかを推論するにはさらなる判定（ｆｕｒｔｈｅｒ  ｄｅｔｅｒｍｉｎａｔｉｏｎｓ）が必要とされることがある。
【００３３】
[0043]一連のステップ３２６〜３２８は、ターゲットページのスワップインをトリガするように構成されたページフォールト例外をＶＭ３２にインジェクトする。例示的な実施形態では、ステップ３２６において、エンジン４０は、それぞれのＶＭの仮想プロセッサのＣＲ２レジスタにターゲットページの仮想アドレスを書き込み、どの仮想ページをメモリにスワップするかをＯＳ３４に示す。次に、ステップ３２８において、エンジン４０は、たとえばＶＭ３２の仮想マシン制御構造（ＶＭＣＳ）の制御ビットのセットに書き込むことによって仮想化されたプロセッサ１１２内で例外をトリガする。それぞれの制御ビットは、それぞれのＶＭ内でページフォールトをトリガするように構成可能である。仮想化を支援するように構成されたＩｎｔｅｌ（登録商標）プロセッサでは、このような制御ビットは、ＶＭＣＳのＶＭエントリイベントインジェクションフィールドの部分である。
【００３４】
[0044]ＶＭ制御構造は、ホストシステム１０で実行されるゲストＶＭを記述するためにハイパーバイザ３０によって維持される特別な種類のデータ構造である。ＶＭＣＳのフォーマットは、実装固有および／またはプラットフォーム固有であってもよい。複数の仮想化されたプロセッサ１１２を含んだＶＭについては、ハイパーバイザ３０は、各仮想プロセッサに別個のＶＭＣＳを維持することができる。いくつかの実施形態では、各ＶＭＣＳは、ゲスト状態エリアと、ホスト状態エリアとを含むことができ、ゲスト状態エリアは、ＣＰＵ状態および／またはそれぞれの仮想プロセッサの制御レジスタの内容などのデータを記憶し、ホスト状態エリアは、ハイパーバイザ３０に対する同様のデータを記憶する。いくつかの実施形態では、プロセッサ１２は、メモリ内の領域を各ＶＭＣＳと関連付け、ＶＭＣＳ領域と名付けられる。ソフトウェアは、領域のアドレス（たとえば、ＶＭＣＳポインタ）を使用して特定のＶＭＣＳを参照することができる。いかなるときでも、最大１つのＶＭＣＳがプロセッサ１２にロードされ、ＶＭが現在プロセッサの制御を行っていることを表すことができる。
【００３５】
[0045]図８〜図９は、Ｗｉｎｄｏｗｓ（登録商標）環境における本発明のいくつかの実施形態の例示的な応用を示す。図８は、ターゲットプロセスを実行可能なメインの仮想メモリアドレスを決定する（ｄｅｔｅｒｍｉｎｅ）ために、エンジン４０によって行われる一連のステップを示す。ステップ３３２において、エンジン４０が、ターゲットプロセスの起動を検出することができる。ステップ３２２は、アクティブプロセスのリストを管理するＯＳの機構をインターセプトすることなど、当技術分野で知られている任意の方法を使用することができる。たとえば、Ｗｉｎｄｏｗｓ（登録商標）では、プロセスが作成されるたびに、それぞれのプロセスのインジケータが、アクティブプロセスのリストに挿入され、それぞれのプロセスが終了すると、インジケータはリストから削除される。いくつかの実施形態では、プロセスを起動すると、ＯＳ３４はまた、ＯＳ３４によって使用されるデータを含んだプロセス環境ブロック（ＰＥＢ）として知られているプロセス固有のデータ構造をセットアップして、それぞれのプロセスに関連したリソースを管理する。アクティブプロセスのリストにターゲットプロセスを挿入するためにＯＳ命令をインターセプトすること（たとえば、フックを設置すること）によって、エンジン４０は、それぞれのＰＥＢのメモリアドレスなどの情報を取得することができ、エンジン４０はこれをステップ３３４において引き出すことができる。Ｗｉｎｄｏｗｓでは、ＰＥＢの仮想アドレスは、エグゼクティブプロセスブロック（ＥＰＲＯＣＥＳＳ）として知られているＯＳのデータ構造で記憶される。図１０は、このようなプロセス固有のデータ構造の説明図を示す。
【００３６】
[0046]ユーザレベルのデータ構造であるので、ＰＥＢデータを含んでいる仮想メモリページは、現在メモリにある、またはないことがある。ステップ３３６においてエンジン４０は、それぞれの仮想メモリページがスワップアウトされているかどうかを判定し、スワップアウトされていない場合、ステップ３４０においてエンジン４０は、たとえば、ＰＥＢデータをパースすることによって、ターゲットプロセスを実行可能なメインの仮想アドレスを決定することに進む。ＰＥＢデータが現在メモリからスワップアウトされているとき、ステップ３３８が、たとえば図７に関して上述した機構を使用して、ＰＥＢデータを含んでいるそれぞれのページのスワップインを強制する。
【００３７】
[0047]図９は、ターゲットプロセスによってロードされる実行可能モジュール（ライブラリなど）のメモリ内部監視を行うためにエンジン４０によって行われる例示的な一連のステップを示す。マルウェアは多くの場合、悪意のあるコードを運ぶためのベクトルとしてＤＬＬを使用し、したがって、そのようなライブラリの内容を分析することが、アンチマルウェア動作には重要である可能性がある。ステップ３４２においてＰＥＢデータを含んだ仮想ページにアクセスした後（たとえば上記ステップ３３６〜３３８参照）、一連のステップ３４４〜３４６〜３４８において、エンジン４０は、ターゲットプロセスによって使用される、たとえばダイナミックリンクライブラリ（ＤＬＬ）などのターゲットモジュールを識別し、それぞれのモジュールがロードされたかどうかを判定する。ターゲットモジュールがロードされたとき、エンジン４０は、たとえばＰＥＢの特定のデータフィールドにより、ステップ３５０においてそれぞれのモジュールの仮想アドレスを決定することができる（たとえば図１０参照）。ステップ３５２においてエンジン４０は、モジュールデータを含み、ステップ３５０で決定されたアドレスにある仮想ページが、現在メモリからスワップアウトされているかどうかを判定し、スワップアウトされていないとき、ステップ３５６において、それぞれのモジュールのメモリ内部監視を行うことに進む。それぞれのモジュールの仮想ページが現在スワップアウトされているとき、ステップ３５４においてエンジン４０は、たとえば、図７に関して上述した機構を使用して、それぞれの仮想ページのスワップインを強制する。
【００３８】
[0048]図１０は、Ｗｉｎｄｏｗｓ（登録商標）環境における仮想アドレスの例示的な決定を示す。いくつかの実施形態では、ＯＳ３４は、カーネル仮想メモリ空間２１４ｄを維持し、仮想アドレス６０ｐに位置しているページが、ターゲットプロセスの実行を管理するためにＯＳ３４によって使用されるＥＰＲＯＣＥＳＳ構造の部分を含んでいる。アドレス６０ｐは、たとえば、ターゲットプロセスの起動をインターセプトすることによって決定され得る（たとえば図８のステップ３３２参照）。ＥＰＲＯＣＥＳＳデータ構造のフィールドは、ターゲットプロセスのプロセス環境ブロック（ＰＥＢ）のインジケータ（たとえばポインタ）を収容する。ポインタは、ＯＳ３４によってターゲットプロセスに割り当てられたプロセス仮想メモリ２１４ｅ内の仮想アドレス６０ｑを示す。ＰＥＢ構造は、ターゲットプロセスによってロードされた実行可能モジュール（たとえばライブラリ）についての情報を含んだ構造（ＬＤＲデータ）へのポインタをさらに含む。ＬＤＲデータは、空間２１４ｅ内のアドレス６０ｒに位置している。ＯＳ３４によってセットアップされたプロセス管理データ構造の階層を歩くことによって、内部監視エンジン４０は、内部監視のターゲットとされるオブジェクトの複数の仮想アドレスをこのように決定することができる。このようなアドレスに位置しているメモリページの内容がＲＡＭからスワップアウトされるとき、エンジン４０は、本明細書に記載する方法を使用してＯＳ３４にそれぞれのページをスワップインするよう強制することができる。
【００３９】
[0049]上述の例示的なシステムおよび方法により、仮想化技術を使用してマルウェアからホストシステムを保護することができる。いくつかの実施形態では、メモリ内部監視エンジンは、ホストシステムで実行される仮想マシンの下で動作する。メモリ内部監視エンジンは、それぞれの仮想マシン内で実行されるプロセスによって使用されるメモリページの内容を分析することによって仮想マシンを保護することができる。内部監視エンジンは、それぞれのＶＭの外から、それぞれのプロセスのコードがマルウェアを含んでいるかどうかをこのように判定することができる。
【００４０】
[0050]いくつかの実施形態では、内部監視エンジンは、特に、いくつかのドライバおよびページテーブルなど、いくつかの重要なオブジェクトの（たとえばマルウェアによる）許可されていない変更を防ぐこともできる。そのようなオブジェクトを保護するために、いくつかの実施形態は、それぞれのオブジェクトに割り当てられたメモリページへ書き込もうとする試みをインターセプトすることによって変化を防ぐことができる。このようなインターセプションは、ハイパーバイザのレベルから行われ得る。
【００４１】
[0051]従来のアンチマルウェアシステムでは、セキュリティアプリケーションが、オペレーティングシステムのまたは一般的なアプリケーションのプロセッサ特権レベルと同様のプロセッサ特権レベルで実行される。このようなシステムは、やはりオペレーティングシステムの特権レベルで動作する高度なマルウェアには脆弱である可能性がある。対照的に、本発明のいくつかの実施形態では、ハイパーバイザが最高の特権レベル（たとえば、ルートモードまたはリング１）で実行され、仮想マシンに対するオペレーティングシステムに取って代わる。メモリ内部監視エンジンは、ハイパーバイザと同じプロセッサ特権レベルで実行され得る。アンチマルウェア動作は、したがってオペレーティングシステムのプロセッサ特権レベルよりも高いプロセッサ特権レベルから行われ得る。いくつかの実施形態では、単一のメモリ内部監視エンジンが、それぞれのコンピュータシステムで同時に実行される複数の仮想マシンを保護することができる。
【００４２】
[0052]メモリ内部監視エンジンは、保護のターゲットとなる仮想マシンの外で実行されるが、エンジンは、保護されるＶＭ内で実行されるソフトウェアオブジェクトによって使用される仮想アドレスを決定することができる。しかしながら、そのような仮想アドレスが、オペレーティングシステムによってメモリから現在スワップアウトされているページの内容を指し示すとき、メモリ内部監視エンジンは、それぞれの内容にアクセスすることができない。本発明のいくつかの実施形態では、ページが現在スワップアウトされているとき、メモリ内部監視エンジンは、ＯＳにそれぞれのページをスワップインするよう強制し、それぞれのページの内容を分析および／または保護のために利用可能にすることができる。スワップインを強制するために、メモリ内部監視エンジンは、それぞれの仮想マシンの仮想化されたプロセッサ内で、ページフォールト例外などのプロセッサイベントをトリガすることができ、プロセッサイベントはオペレーティングシステムに、スワップアウトされたページをメモリに戻させるよう構成される。プロセッサイベントをトリガすることは、たとえば、それぞれの仮想マシンによって使用される仮想マシン制御構造の制御ビットのセットを書き込むことを含むことができる。メモリ内部監視エンジンは、したがってそれぞれの仮想マシン内で実行されるＯＳからのまたは他のソフトウェアからの援助なしに、それぞれのＶＭにページフォールトをインジェクトすることができる。
【００４３】
[0053]上記の実施形態は、本発明の範囲を逸脱することなく多くの方法で変更され得ることは、当業者には明らかであろう。したがって、本発明の範囲は、添付の特許請求の範囲およびそれらの法的同等物によって決定されるべきである。
【図１】
0006411494.tif 000002
【図２】
0006411494.tif 000003
【図３】
0006411494.tif 000004
【図４】
0006411494.tif 000005
【図５】
0006411494.tif 000006
【図６】
0006411494.tif 000007
【図７】
0006411494.tif 000008
【図８】
0006411494.tif 000009
【図９】
0006411494.tif 000010
【図１０】
0006411494.tif 000011