(57)【特許請求の範囲】
【請求項１】
仮想マシンを公開するように構成されたハイパーバイザと、
前記仮想マシン内で実行されるプロセス評価器と、
前記仮想マシンの外で実行されるメモリ内部監視エンジンと、
プロセススコアリングモジュールと
を実行するように構成された少なくとも１つのプロセッサを含むホストシステムであって、
前記プロセス評価器は、
前記仮想マシン内で実行される評価されるプロセスがアクションを行うかどうかを判断し、
前記評価されるプロセスが前記アクションを行うときに、前記評価されるプロセスに対して求められた第１のプロセス評価インジケータを前記プロセススコアリングモジュールに送る
ように構成され、
前記メモリ内部監視エンジンは、
オペレーティングシステム機能へのコールをインターセプトして、前記仮想マシン内で実行される保護されるプロセスの起動を検出し、前記オペレーティングシステム機能は、前記保護されるプロセスを前記仮想マシン内で実行されるプロセスのリストに追加するように構成され、
前記起動を検出することに応じて、
前記評価されるプロセスが前記保護されるプロセスのメモリページを変更しようと試みるかどうかを判断し、
前記評価されるプロセスが前記メモリページを変更しようと試みるときに、
前記評価されるプロセスに対して求められた第２のプロセス評価インジケータを前記プロセススコアリングモジュールに送る
ように構成され、
前記プロセススコアリングモジュールは、
前記ホストシステムを含む複数のコンピュータシステムとアンチマルウェアトランザクションを行うよう構成されたセキュリティサーバから、第１の重み及び第２の重みを受け取ることと、
前記第１および第２のプロセス評価インジケータを受け取ることと、
前記第１および第２のプロセス評価インジケータにより、前記評価されるプロセスが悪意のあるものであるかどうかを判断することであって、前記評価されるプロセスが悪意のあるものであるかどうかを判断することは、第１のスコアおよび第２のスコアの加重和を求めることを含み、前記第１の重みは前記加重和において前記第１のスコアに乗算され、前記第２の重みは前記加重和において前記第２のスコアに乗算され、前記第１および第２のスコアは、それぞれ前記第１および第２のプロセス評価インジケータにより求められる、判断することと、
前記加重和に基づき前記評価されるプロセスが悪意あるものであると判断された場合に、前記評価されるプロセスに対してアンチマルウェアアクションをとることと
を行うように構成された、ホストシステム。
【請求項２】
請求項１に記載のホストシステムであって、前記メモリ内部監視エンジンは、
前記保護されるプロセスの前記起動を検出することに応じて、前記保護されるプロセスのインジケータを前記仮想マシン内で実行されるセキュリティアプリケーションに送信し、
前記セキュリティアプリケーションから前記メモリページのインジケータを受け取る
ようにさらに構成された、ホストシステム。
【請求項３】
請求項１または２に記載のホストシステムであって、前記プロセス評価器は、ユーザレベルのプロセッサ特権で実行されるユーザレベルのプロセス評価器を含み、前記ユーザレベルのプロセス評価器は、前記評価されるプロセスが前記アクションを行うかどうかを判断するように構成された、ホストシステム。
【請求項４】
請求項１または２に記載のホストシステムであって、前記プロセス評価器は、カーネルレベルのプロセッサ特権で実行されるカーネルレベルのプロセス評価器を含み、前記カーネルレベルのプロセス評価器は、前記評価されるプロセスが前記アクションを行うかどうかを判断するように構成された、ホストシステム。
【請求項５】
請求項１から４のうちの何れか一項に記載のホストシステムであって、前記プロセス評価器は、前記評価されるプロセスによって行われるシステムコールをインターセプトするように構成されたシステムコール評価器を含む、ホストシステム。
【請求項６】
請求項１から５のうちの何れか一項に記載のホストシステムであって、前記プロセススコアリングモジュールは、前記仮想マシン内で実行される、ホストシステム。
【請求項７】
請求項１から５のうちの何れか一項に記載のホストシステムであって、前記プロセススコアリングモジュールは、前記仮想マシンの外で実行される、ホストシステム。
【請求項８】
請求項１から７のうちの何れか一項に記載のホストシステムであって、前記保護されるプロセスは、前記プロセススコアリングモジュールを含む、ホストシステム。
【請求項９】
請求項１から８のうちの何れか一項に記載のホストシステムであって、前記保護されるプロセスは、前記プロセス評価器を含んだセキュリティアプリケーションの一部を形成する、ホストシステム。
【請求項１０】
ホストシステムに、
仮想マシンを公開するように構成されたハイパーバイザと、
前記仮想マシン内で実行されるプロセス評価器と、
前記仮想マシンの外で実行されるメモリ内部監視エンジンと、
プロセススコアリングモジュールと
を形成させるプログラムであって、
前記プロセス評価器は、
前記仮想マシン内で実行される評価されるプロセスがアクションを行うかどうかを判断し、
前記評価されるプロセスが前記アクションを行うときに、前記評価されるプロセスに対して求められた第１のプロセス評価インジケータを前記プロセススコアリングモジュールに送る
ように構成され、
前記メモリ内部監視エンジンは、
オペレーティングシステム機能へのコールをインターセプトして、前記仮想マシン内で実行される保護されるプロセスの起動を検出し、前記オペレーティングシステム機能は、前記仮想マシン内で実行され、前記仮想マシン内で実行されるプロセスのリストに前記保護されるプロセスを追加するように構成され、
前記起動を検出することに応じて、
前記評価されるプロセスが前記保護されるプロセスのメモリページを変更しようと試みるかどうかを判断し、
前記評価されるプロセスが前記メモリページを変更しようと試みるときに、
前記評価されるプロセスに対して求められた第２のプロセス評価インジケータを前記プロセススコアリングモジュールに送る
ように構成され、
前記プロセススコアリングモジュールは、
前記ホストシステムを含む複数のコンピュータシステムとアンチマルウェアトランザクションを行うよう構成されたセキュリティサーバから、第１の重み及び第２の重みを受け取ることと、
前記第１および第２のプロセス評価インジケータを受け取ることと、
前記第１および第２のプロセス評価インジケータにより、前記評価されるプロセスが悪意のあるものであるかどうかを判断することであって、前記評価されるプロセスが悪意のあるものであるかどうかを判断することは、第１のスコアおよび第２のスコアの加重和を求めることを含み、前記第１の重みは前記加重和において前記第１のスコアに乗算され、前記第２の重みは前記加重和において前記第２のスコアに乗算され、前記第１および第２のスコアは、それぞれ前記第１および第２のプロセス評価インジケータにより求められる、判断することと、
前記加重和に基づき前記評価されるプロセスが悪意あるものであると判断された場合に、前記評価されるプロセスに対してアンチマルウェアアクションをとることと
を行うように構成された、プログラム。
【請求項１１】
請求項１０に記載のプログラムであって、前記メモリ内部監視エンジンは、
前記保護されるプロセスの前記起動を検出することに応じて、前記保護されるプロセスのインジケータを前記仮想マシン内で実行されるセキュリティアプリケーションに送信し、
前記セキュリティアプリケーションから前記メモリページのインジケータを受け取る
ようにさらに構成された、プログラム。
【請求項１２】
請求項１０または１１に記載のプログラムであって、前記プロセス評価器は、ユーザレベルのプロセッサ特権で実行されるユーザレベルのプロセス評価器を含み、前記ユーザレベルのプロセス評価器は、前記評価されるプロセスが前記アクションを行うかどうかを判断するように構成された、プログラム。
【請求項１３】
請求項１０または１１に記載のプログラムであって、前記プロセス評価器は、カーネルレベルのプロセッサ特権で実行されるカーネルレベルのプロセス評価器を含み、前記カーネルレベルのプロセス評価器は、前記評価されるプロセスが前記アクションを行うかどうかを判断するように構成された、プログラム。
【請求項１４】
請求項１０から１３のうちの何れか一項に記載のプログラムであって、前記プロセス評価器は、前記評価されるプロセスによって行われるシステムコールをインターセプトするように構成されたシステムコール評価器を含む、プログラム。
【請求項１５】
請求項１０から１４のうちの何れか一項に記載のプログラムであって、前記プロセススコアリングモジュールは、前記仮想マシン内で実行される、プログラム。
【請求項１６】
請求項１０から１４のうちの何れか一項に記載のプログラムであって、前記プロセススコアリングモジュールは、前記仮想マシンの外で実行される、プログラム。
【請求項１７】
請求項１０から１６のうちの何れか一項に記載のプログラムであって、前記保護されるプロセスは、前記プロセススコアリングモジュールを含む、プログラム。
【請求項１８】
請求項１０から１７のうちの何れか一項に記載のプログラムであって、前記保護されるプロセスは、前記プロセス評価器を実行するように構成されたセキュリティアプリケーションの一部を形成する、プログラム。
【請求項１９】
請求項１０から１８のうちの何れか一項に記載のプログラムを記憶したコンピュータ可読記憶媒体。
【請求項２０】
ホストシステムの少なくとも１つのハードウェアプロセッサが、前記ホストシステムを含む複数のコンピュータシステムとアンチマルウェアトランザクションを行うよう構成されたセキュリティサーバから、第１の重み及び第２の重みを受け取るステップと、
前記少なくとも１つのハードウェアプロセッサが、前記ホストシステムで実行されるハイパーバイザによって公開される仮想マシン内で実行される評価されるプロセスに対して求められた第１のプロセス評価インジケータを受け取るステップであって、前記第１のプロセス評価インジケータは、前記仮想マシン内で実行されるプロセス評価器が、前記評価されるプロセスが第１のアクションを実行するかどうかを判断することによって求められる、ステップと、
前記少なくとも１つのハードウェアプロセッサが、前記評価されるプロセスに対して求められた第２のプロセス評価インジケータを受け取るステップであって、前記第２のプロセス評価インジケータは、前記仮想マシンの外で実行されるメモリ内部監視エンジンが、前記評価されるプロセスが第２のアクションを実行するかどうかを判断することにより求められる、ステップと、
前記第１および第２のプロセス評価インジケータを受け取ることに応じて、前記少なくとも１つのハードウェアプロセッサが、前記第１および第２のプロセス評価インジケータにより、前記評価されるプロセスが悪意のあるものであるかどうかを判断するステップであって、前記評価されるプロセスが悪意のあるものであるかどうかを判断するステップは、第１のスコアおよび第２のスコアの加重和を求めるステップを含み、前記第１の重みは前記加重和において前記第１のスコアに乗算され、前記第２の重みは前記加重和において前記第２のスコアに乗算され、前記第１および第２のスコアは、それぞれ前記第１および第２のプロセス評価インジケータにより求められる、ステップと、
前記加重和に基づき前記評価されるプロセスが悪意あるものであると判断された場合に、前記少なくとも１つのハードウェアプロセッサが、前記評価されるプロセスに対してアンチマルウェアアクションをとるステップと
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本発明は、マルウェアからコンピュータシステムを保護するためのシステムおよび方法に関し、詳細には、ハードウェア仮想化技術を使用するアンチマルウェアシステムに関する。
【背景技術】
【０００２】
[0002]悪意のあるソフトウェアは、マルウェアとしても知られ、世界中の多数のコンピュータシステムに影響を与える。コンピュータウイルス、ワーム、およびルートキットなど、その多くの形式でマルウェアは、数百万人のコンピュータユーザに深刻なリスクを与え、特に、データおよび機密情報の損失、個人情報の盗難、ならびに生産性の損失を受けやすくしている。
【０００３】
[0003]ハードウェア仮想化技術により、多くの方法で物理コンピュータシステムとしてふるまう、一般に仮想マシンとして知られるシミュレートされたコンピュータ環境の創出が可能となる。サーバ統合およびサービスとしてのインフラストラクチャ（ＩＡＡＳ：infrastructure-as-a-service）などの代表的な応用では、いくつかの仮想マシンが、特にハードウェアリソースを共有して、したがって投資および運用コストを減らして、同じ物理マシン上で同時に動作することができる。各仮想マシンは、その独自のオペレーティングシステムおよび／またはソフトウェアアプリケーションを、他の仮想マシンから切り離して実行することができる。マルウェアが一定して増えているために、このような環境で動作している各仮想マシンは、潜在的にマルウェア防御を必要としている。
【０００４】
[0004]当技術分野で一般的に使用される仮想化ソリューションは、コンピューティングハードウェアと仮想マシンのオペレーティングシステム（ＯＳ）との間で動作しているソフトウェアの層から成り、それぞれのＯＳよりも大きいプロセッサ特権を有し、仮想マシンモニタとしても知られるハイパーバイザを含む。ルートキットなどのいくつかのマルウェアは、ＯＳ特権レベルで動作するので、ハイパーバイザの特権レベルで実行されるアンチマルウェアソリューションを開発することへの関心がある。
【発明の概要】
【０００５】
[0005]１つの態様によれば、ホストシステムが、仮想マシンを公開する（expose）ように構成されたハイパーバイザと、仮想マシン内で実行されるプロセス評価器と、仮想マシンの外で実行されるメモリ内部監視エンジン（memory introspection engine）と、プロセススコアリングモジュールとを実行するように構成された少なくとも１つのプロセッサを含む。プロセス評価器は、仮想マシン内で実行される評価されるプロセスがアクションを行うかどうかを判断し、それに応じて、評価されるプロセスがアクションを行うとき、評価されるプロセスに対して判断された第１のプロセス評価インジケータをプロセススコアリングモジュールに送るように構成される。メモリ内部監視エンジンは、オペレーティングシステム機能へのコールをインターセプトし、仮想マシン内で実行される保護されるプロセスの起動を検出し、オペレーティングシステム機能は、保護されるプロセスを仮想マシン内で実行されるプロセスのリストに追加するように構成され、起動を検出することに応じて、評価されるプロセスが保護されるプロセスのメモリページを変更しようと試みるかどうかを判断し、それに応じて、評価されるプロセスがメモリページを変更しようと試みるとき、評価されるプロセスに対して判断された第２のプロセス評価インジケータをプロセススコアリングモジュールに送るように構成される。プロセススコアリングモジュールは、第１および第２のプロセス評価インジケータを受け取り、それに応じて、第１および第２のプロセス評価インジケータにより、評価されるプロセスが悪意のあるものであるかどうかを判断するように構成される。
【０００６】
[0006]別の態様によれば、非一時的コンピュータ可読媒体が、命令をエンコードし、命令は、少なくとも１つのプロセッサを含んだホストシステムで実行されるとき、ホストシステムに、仮想マシンを公開するように構成されたハイパーバイザと、仮想マシン内で実行されるプロセス評価器と、仮想マシンの外で実行されるメモリ内部監視エンジンと、プロセススコアリングモジュールとを形成させる。プロセス評価器は、仮想マシン内で実行される評価されるプロセスがアクションを行うかどうかを判断し、それに応じて、評価されるプロセスがアクションを行うとき、評価されるプロセスに対して判断された第１のプロセス評価インジケータをプロセススコアリングモジュールに送るように構成される。メモリ内部監視エンジンは、オペレーティングシステム機能へのコールをインターセプトし、仮想マシン内で実行される保護されるプロセスの起動を検出し、オペレーティングシステム機能は、保護されるプロセスを仮想マシン内で実行されるプロセスのリストに追加するように構成され、起動を検出することに応じて、評価されるプロセスが保護されるプロセスのメモリページを変更しようと試みるかどうかを判断し、それに応じて、評価されるプロセスがメモリページを変更しようと試みるとき、評価されるプロセスに対して判断された第２のプロセス評価インジケータをプロセススコアリングモジュールに送るように構成される。プロセススコアリングモジュールは、第１および第２のプロセス評価インジケータを受け取り、それに応じて、第１および第２のプロセス評価インジケータにより、評価されるプロセスが悪意のあるものであるかどうかを判断するように構成される。
【０００７】
[0007]別の態様によれば、方法が、ホストシステムの少なくとも１つのプロセッサを使用して、ホストシステムで実行されるハイパーバイザによって公開された仮想マシン内で実行される評価されるプロセスに対して判断された第１のプロセス評価インジケータを受け取るステップを含む。この方法はさらに、少なくとも１つのプロセッサを使用して、評価されるプロセスに対して判断された第２のプロセス評価インジケータを受け取るステップと、第１および第２のプロセス評価インジケータを受け取ることに応じて、少なくとも１つのプロセッサを使用して、第１および第２のプロセス評価インジケータにより、評価されるプロセスが悪意のあるものであるかどうかを判断するステップとを含む。第１のプロセス評価インジケータを判断するステップが、仮想マシン内で実行されるプロセス評価器を使用して、評価されるプロセスが第１のアクションを行うかどうかを判断するステップを含む。第２のプロセス評価インジケータを判断するステップが、仮想マシンの外で実行するメモリ内部監視エンジンを使用して、評価されるプロセスが第２のアクションを行うかどうかを判断するステップを含む。
【０００８】
[0008]別の態様によれば、方法が、ホストシステムの少なくとも１つのプロセッサを使用して、メモリ内部監視エンジンを実行するステップを含み、メモリ内部監視エンジンは、ホストシステムで実行されるハイパーバイザによって公開される仮想マシンの外で実行され、メモリ内部監視エンジンを実行するステップは、仮想マシン内で実行されるプロセスの起動を検出するステップを含む。この方法はさらに、メモリ内部監視エンジンがプロセスの起動を検出することに応じて、少なくとも１つのプロセッサを使用して、プロセスの第１および第２のプロセス評価インジケータを判断するステップを含む。この方法はさらに、第１および第２の評価インジケータを判断することに応じて、少なくとも１つのプロセッサを使用して、第１および第２のプロセス評価インジケータにより、プロセスが悪意のあるものであるかどうかを判断するステップを含む。
【０００９】
[0009]本発明の前述の態様および利点は、次の詳細な説明を読むと、および図面を参照すると、よりよく理解されるようになるであろう。
【図面の簡単な説明】
【００１０】
【図１】[0010]本発明のいくつかの実施形態によりマルウェアから保護されるホストコンピュータシステムの例示的なハードウェア構成を示す図である。
【図２】[0011]図１のホストシステムで実行中のハイパーバイザによって公開される仮想マシンの例示的なセット、および本発明のいくつかの実施形態により仮想マシンを保護するためにメモリ内部監視エンジンとともに動作しているセキュリティアプリケーションを示す図である。
【図３】[0012]本発明のいくつかの実施形態によりアンチマルウェアオブジェクトのセットを含んだ、様々なプロセッサ特権レベルでホストシステムにおいて実行されるソフトウェアオブジェクトの例示的な階層を示す図である。
【図４】[0013]本発明のいくつかの実施形態により、複数のプロセス評価器によってプロセスに対して判断された複数のプロセス評価インジケータを受け取る例示的なプロセススコアリングモジュールを示す図である。
【図５】[0014]本発明のいくつかの実施形態により図４のプロセススコアリングモジュールによって行われる例示的な一連のステップを示す図である。
【図６】[0015]本発明のいくつかの実施形態により図２のシステム構成におけるメモリアドレスの例示的なマッピングを示す図である。
【図７】[0016]Ｗｉｎｄｏｗｓ（登録商標）環境におけるプロセスのセットの例示的な実行フローを示す図である。実線の矢印は、アンチマルウェアシステムがない場合の例示的な実行フローを示す。破線の矢印は、本発明のいくつかの実施形態により動作している複数のプロセス評価器によって導入される、実行フローの変更を示す。
【図８】[0017]本発明のいくつかの実施形態により図２〜図３のメモリ内部監視エンジンによって行われる例示的な一連のステップを示す図である。
【図９】[0018]本発明のいくつかの実施形態によりメモリページを保護するためにメモリ内部監視エンジンによって行われる例示的な一連のステップを示す図である。
【図１０】[0019]コンピュータネットワークを介してセキュリティサーバに接続された複数のホストシステムを含む例示的な構成を示す図である。
【図１１】[0020]本発明のいくつかの実施形態によりホストシステムとセキュリティサーバとの間の例示的なアンチマルウェアトランザクションを示す図である。
【発明を実施するための形態】
【００１１】
[0021]次の説明では、構造間の列挙するすべての接続は、直接的動作接続または中間構造を介した間接的動作接続であり得ることは理解されよう。要素のセットは、１つまたは複数の要素を含む。要素の任意の列挙は、少なくとも１つの要素を指すと理解される。複数の要素は、少なくとも２つの要素を含む。別段の要求がない限り、記載する方法のステップは、必ずしも例示する特定の順序で行われる必要はない。第２の要素から導き出される第１の要素（たとえば、データ）は、第２の要素に等しい第１の要素、ならびに第２の要素およびオプションでは他のデータを処理することによって生成される第１の要素を含む。パラメータにより判断および決定を行うことは、パラメータによりおよびオプションでは他のデータにより判断および決定を行うことを含む。別段の指定がない限り、ある量／データのインジケータは、その量／データ自体、またはその量／データ自体とは異なるインジケータであってもよい。別段の指定がない限り、プロセスは、コンピュータプログラムのインスタンスを表し、コンピュータプログラムは、コンピュータシステムに指定されたタスクを行うように判断させる一連の命令である。別段の指定がない限り、ページは、コンピュータシステムの物理メモリに個々にマップされる仮想化された物理メモリの最小単位を表す。コンピュータ可読媒体は、磁気、光、および半導体記憶媒体（たとえば、ハードドライブ、光ディスク、フラッシュメモリ、ＤＲＡＭ）などの非一時的媒体、ならびに導電性ケーブルおよび光ファイバリンクなどの通信リンクを含む。いくつかの実施形態によれば、本発明は、特に、本明細書に記載する方法を行うようにプログラムされたハードウェア（たとえば、１つまたは複数のプロセッサ）、ならびに本明細書に記載する方法を行うように命令をエンコードするコンピュータ可読媒体を含んだコンピュータシステムを提供する。
【００１２】
[0022]次の説明は、例として、必ずしも限定としてではなく、本発明の諸実施形態を示す。
[0023]図１は、本発明のいくつかの実施形態によりアンチマルウェア動作を行うホストシステム１０の例示的なハードウェア構成を示す。ホストシステム１０は、特に、エンタープライズサーバなどの企業のコンピューティングデバイス、またはパーソナルコンピュータもしくはスマートフォンなどのエンドユーザデバイスを表すことができる。他のホストシステムには、ＴＶおよびゲーム機などのエンターテイメントデバイス、または仮想化を支援し、マルウェア防御を必要とする、メモリおよびプロセッサを有する他のいかなるデバイスも含まれる。図１は、説明のためにコンピュータシステムを示すが、携帯電話もしくはタブレットなどの他のクライアントデバイスは、異なる構成を有することがある。いくつかの実施形態では、システム１０は、プロセッサ１２、メモリユニット１４、入力デバイス１６のセット、出力デバイス１８のセット、ストレージデバイス２０のセット、およびネットワークアダプタ２２のセットなど、物理デバイスのセットを含み、すべてがバス２４のセットによって接続されている。
【００１３】
[0024]いくつかの実施形態では、プロセッサ１２は、信号および／またはデータのセットを用いて計算および／または論理演算を実行するように構成された物理デバイス（たとえば、マルチコアの集積回路）を含む。いくつかの実施形態では、このような論理演算は、一連のプロセッサ命令（たとえば、マシンコードまたは他のタイプのソフトウェア）の形でプロセッサ１２に引き渡される。メモリユニット１４は、命令を実行する過程でプロセッサ１２によってアクセスされるまたは生成されるデータ／信号を記憶する揮発性コンピュータ可読媒体（たとえば、ＲＡＭ）を含むことができる。入力デバイス１６は、ユーザがデータおよび／または命令をシステム１０に導入できるようにするそれぞれのハードウェアインターフェースおよび／またはアダプタなど、特に、コンピュータキーボード、マウス、およびマイクを含むことができる。出力デバイス１８は、特にモニタおよびスピーカなどのディスプレイデバイス、ならびにシステム１０がデータをユーザに伝えられるようにする、グラフィックカードなどのハードウェアインターフェース／アダプタを含むことができる。いくつかの実施形態では、入力デバイス１６および出力デバイス１８は、タッチスクリーンデバイスの場合のように、共通のハードウェアを共有することができる。ストレージデバイス２０は、ソフトウェア命令および／またはデータの不揮発性の記憶、読み取り、および書き込みを可能にするコンピュータ可読媒体を含む。例示的なストレージデバイス２０は、磁気および光ディスク、ならびにフラッシュメモリデバイス、ならびにＣＤおよび／またはＤＶＤディスクおよびドライブなどのリムーバブルメディアを含む。ネットワークアダプタ２２のセットは、システム１０がコンピュータネットワークに、および／または他のデバイス／コンピュータシステムに接続できるようにする。バス２４は、複数のシステム、周辺機器、およびチップセットバス、ならびに／またはホストシステム１０のデバイス１２〜２２の相互通信を可能にする他のすべての回路を集合的に表す。たとえば、バス２４は、特に、プロセッサ１２をメモリ１４に接続するノースブリッジ、および／またはプロセッサ１２をデバイス１６〜２２に接続するサウスブリッジを含むことができる。
【００１４】
[0025]図２は、本発明のいくつかの実施形態により、ホストシステム１０上で実行され、ハイパーバイザ３０によって公開されるゲスト仮想マシン３２ａ〜ｂの例示的なセットを示す。仮想マシン（ＶＭ）は一般的に、当技術分野では、それぞれが他のＶＭとは独立してその独自のオペレーティングシステムおよびソフトウェアを実行することができる、実際の物理マシン／コンピュータシステムのソフトウェアエミュレーションとして知られている。ハイパーバイザ３０は、プロセッサ動作、メモリ、ストレージ、入力／出力、およびネットワーキングデバイスなど、ホストシステム１０のハードウェアリソースの複数の仮想マシンによる多重化（共有）を可能にするソフトウェアを含む。いくつかの実施形態では、ハイパーバイザ３０は、複数の仮想マシンおよび／またはオペレーティングシステム（ＯＳ）が様々な分離の度合で、ホストシステム１０で同時に動作できるようにする。このような構成を可能にするために、ハイパーバイザ３０の一部を形成するソフトウェアは、複数の仮想化された、すなわちソフトウェアエミュレートされたデバイスを作成することができ、仮想化されたデバイスがそれぞれ、特に、プロセッサ１２およびメモリ１４などのシステム１０の物理ハードウェアデバイスをエミュレートする。ハイパーバイザ３０はさらに、ホストシステム１０で動作する各ＶＭに仮想デバイスのセットを割り当てることができる。したがって、各ＶＭ３２ａ〜ｂは、あたかもその独自の物理デバイスのセットを所有するかのように、すなわち、ほぼ完全なコンピュータシステムとして動作する。よく知られているハイパーバイザの例には、特に、ＶＭｗａｒｅ社が提供するＶＭｗａｒｅ  ｖＳｐｈｅｒｅ（商標）、およびオープンソースのＸｅｎハイパーバイザが含まれる。
【００１５】
[0026]いくつかの実施形態では、ハイパーバイザ３０は、以下にさらに詳細に記載するように、アンチマルウェア動作を行うように構成されたメモリ内部監視エンジン４０を含む。エンジン４０は、ハイパーバイザ３０に組み込まれても良い、またはハイパーバイザ３０とは異なり独立しているが、ハイパーバイザ３０と実質的に同様のプロセッサ特権レベルで実行されるソフトウェアコンポーネントとして提供されてもよい。単一のエンジン４０が、ホストシステム１０で実行される複数のＶＭをマルウェア防御する（malware-protect）ように構成されてもよい。
【００１６】
[0027]図２は、簡単にするためにわずか２つのＶＭ３２ａ〜ｂを示しているが、ホストシステム１０は、多数の、たとえば数百のＶＭを同時に動作させることがあり、このようなＶＭの数は、ホストシステム１０の動作中に変わることがある。いくつかの実施形態では、各ＶＭ３２ａ〜ｂが、それぞれゲストオペレーティングシステム３４ａ〜ｂならびに／またはソフトウェアアプリケーション４２ａ〜ｂ、４２ｃ、および４４のセットを、同時におよびホストシステム１０で動作している他のＶＭとは独立して実行する。各ＯＳ３４ａ〜ｂは、それぞれのＶＭ３２ａ〜ｂの（仮想化された）ハードウェアへのインターフェースを提供するソフトウェアを含み、それぞれのＯＳで実行されるソフトウェアアプリケーションのホストとして機能する。オペレーティングシステム３４ａ〜ｂは、特に、Ｗｉｎｄｏｗｓ（登録商標）、ＭａｃＯＳ（登録商標）、Ｌｉｎｕｘ（登録商標）、ｉＯＳ（登録商標）、Ａｎｄｒｏｉｄ（商標）など、広く入手することができる任意のオペレーティングシステムを含むことができる。アプリケーション４２ａ〜ｃは、特に、文書処理、画像処理、データベース、ブラウザ、および電子通信アプリケーションを含むことができる。次の説明では、仮想マシンの仮想プロセッサで実行されるソフトウェアは、それぞれの仮想マシン内で実行されると言われる。たとえば、図２では、アプリケーション４２ｂは、ＶＭ３２ａ内で実行されると言われ、アプリケーション４２ｃは、ＶＭ３２ｂ内で実行されると言われる。対照的に、メモリ内部監視エンジン４０は、ＶＭ３２ａ〜ｂの外で実行されると言われる。
【００１７】
[0028]図２の例では、セキュリティアプリケーション４４が、ゲストＯＳ３４ｂ上で実行され、アプリケーション４４は、以下に詳述するように、メモリ内部監視エンジン４０とともにアンチマルウェア（ＡＭ）動作を行って、マルウェアから仮想マシン３２ｂを保護するように構成されている。いくつかの実施形態では、アプリケーション４４のインスタンスが、ホストシステム１０で動作している複数のＶＭのそれぞれで実行されてもよく、このような各インスタンスが、内部監視エンジン４０とインターフェースをとって、それぞれの仮想マシンを保護するように構成される。セキュリティアプリケーション４４は、スタンドアロンプログラムであってもよい、または特に、アンチマルウェア、アンチスパム、およびアンチスパイウェアコンポーネントを含むソフトウェアスイートの一部を形成してもよい。
【００１８】
[0029]図３は、本発明のいくつかの実施形態によりホストシステム１０で実行されるソフトウェアオブジェクトの階層を示す。図３は、当技術分野ではレイヤまたはプロテクションリングとしても知られる、プロセッサ特権レベルの視点から表されている。いくつかの実施形態では、このような各レイヤまたはプロテクションリングは、それぞれのプロセッサ特権レベルで実行されるソフトウェアオブジェクトが実行することを許可される命令のセットを特徴とする。ソフトウェアオブジェクトが、それぞれの特権レベル内で許可されていない命令を実行しようと試みるとき、この試みは、例外、フォルト、または仮想マシン終了（exit）イベントなどのプロセッサイベントをトリガすることができる。いくつかの実施形態では、特権レベル間の切替えは、専用の命令のセットにより行われてもよい。このような例示的な命令には、ユーザレベルからカーネルレベルへ切り替えるＳＹＳＣＡＬＬ／ＳＹＳＥＮＴＥＲ、カーネルレベルからユーザレベルへ切り替えるＳＹＳＲＥＴ／ＳＹＳＥＸＩＴ、ユーザまたはカーネルレベルのいずれかからルートレベルへ切り替えるＶＭＣＡＬＬ、ならびにルートレベルからカーネルレベルまたはユーザレベルのいずれかへ切り替えるＶＭＲＥＳＵＭＥが含まれる。
【００１９】
[0030]いくつかの実施形態では、ハイパーバイザ３０は、最大特権レベル（たとえば、仮想化を支援し、リング１またはルートモードとしても知られているＩｎｔｅｌ（登録商標）プラットフォームのＶＭＸｒｏｏｔ）でプロセッサ１２の制御を行い、したがってホストシステム１０で実行される他のソフトウェアに仮想マシン３２として提示されるハードウェア仮想化プラットフォームを作成する。図２のＯＳ３４ａ〜ｂなどのオペレーティングシステム３４が、ＶＭ３２の仮想環境内で実行され、ＯＳ３４は、ハイパーバイザ３０よりも小さいプロセッサ特権（たとえば、Ｉｎｔｅｌプラットフォームのリング０、またはカーネルモード）を有する。アプリケーション４２ｄ〜ｅのセットが、ＯＳ３４よりも小さいプロセッサ特権（たとえば、リング３、またはユーザモード）で実行される。
【００２０】
[0031]いくつかの実施形態では、セキュリティアプリケーション４４の一部が、ユーザレベルのプロセッサ特権、すなわちアプリケーション４２ｄ〜ｅと同じレベルで実行されることがある。たとえば、このような一部は、それぞれのＶＭ上で検出されたいかなるマルウェアまたはセキュリティ脅威もユーザに知らせ、たとえばアプリケーション４４のための望ましい設定オプションを示すユーザからの入力を受け取る、グラフィカルユーザインターフェースを含むことがある。ユーザレベルで実行される構成要素の別の例は、以下に詳述する、ユーザレベルのプロセス評価器である。アプリケーション４４の他の部分は、カーネル特権レベルで実行されることがある。たとえば、アプリケーション４４は、アンチマルウェアドライバ３６およびプロセススコアリングモジュール３８をインストールし、両方がカーネルモードで動作することがある。例示的なＡＭドライバ３６が、たとえば、マルウェア署名用のメモリをスキャンするための、ならびに／またはＯＳ３４で実行されるプロセスおよび／もしくは他のソフトウェアオブジェクトのマルウェアを示唆する挙動を検出するための機能を、アンチマルウェアアプリケーション４４に提供する。
【００２１】
[0032]いくつかの実施形態では、プロセススコアリングモジュール３８は、複数のソフトウェアコンポーネントから、評価されるプロセスに対して判断されたプロセス評価データを受け取り、それぞれのデータにより評価されるプロセスが悪意のあるものであるかどうかを判断するように構成される。プロセスは、アプリケーションまたはオペレーティングシステムの一部などのコンピュータプログラムのインスタンスであり、少なくとも実行スレッドおよびオペレーティングシステムによって実行スレッドに割り当てられた仮想メモリのセクションを有し、それぞれのセクションが実行可能コードを含むことを特徴とする。いくつかの実施形態では、オペレーティングシステムは、ホストシステム１０上で（または、仮想化の場合は仮想マシン３２内で）現在実行中のプロセスを管理し、このような管理は、特に、各プロセスに仮想メモリを割り当てること、および各プロセスまたはそのスレッドを実行のためにスケジュールすることを含む。
【００２２】
[0033]図４は、複数のプロセス評価インジケータ５２ａ〜ｄを受け取り、各インジケータ５２ａ〜ｄがプロセス評価コンポーネントによって判断される、例示的なプロセススコアリングモジュール３８を示す。図４では、このような評価コンポーネントが、特に、ユーザレベルのプロセス評価器５０ａ、カーネルレベルのプロセス評価器５０ｂ、およびシステムコール評価器５０ｃを含む。評価器５０ａ〜ｃは、アンチマルウェアドライバ３６によってセットアップされる、またはアンチマルウェアドライバ３６の一部を形成することがある。このような各評価器は、他の評価器とは独立して実行されることがあり、それぞれが、評価されるプロセスの複数の異なるプロセス評価インジケータを判断することができる。評価器５０ａ〜ｃの動作について、以下にさらに詳述する。いくつかの実施形態では、図４中のインジケータ５２ａ〜ｃなどのいくつかのプロセス評価インジケータが、ＶＭ３２内で実行されるコンポーネントによって判断され、５２ｄなどの他のプロセス評価インジケータが、ＶＭ３２の外で実行されるコンポーネントによって（たとえば、メモリ内部監視エンジン４０によって）判断される。
【００２３】
[0034]いくつかの評価インジケータは、マルウェアを示唆するものであってもよい、すなわち、評価されるプロセスが悪意のあるものであることを示してもよい。いくつかの評価インジケータは、それ自体はマルウェアを示唆するものではないことがあるが、他の評価インジケータと組み合わされるとき、悪意のあるものであることを示すことがある。各評価インジケータ５２ａ〜ｄは、異なる方法または基準により判断されてもよい。評価されるプロセスに対して判断された例示的なプロセス評価インジケータが、たとえば、評価されるプロセスが、ＶＭ３２のシステムレジスタキーを編集すること、または保護されるソフトウェアオブジェクトに属するメモリページへ書き込むことなど、あるアクションを行ったかまたは行おうと試みたかを示す、挙動インジケータを含むことがある。別の例示的なプロセス評価インジケータは、評価されるプロセスに属するメモリのセクションが、マルウェアを示唆する署名を含んでいるかどうかを示すことがある。いくつかの実施形態では、各プロセス評価インジケータ５２ａ〜ｄが、プロセスＩＤ、ラベル、またはハッシュインデックスなどのプロセス識別インジケータを含み、モジュール３８がそのそれぞれのインジケータが判断されたプロセスを識別できるようにする。
【００２４】
[0035]いくつかの実施形態では、プロセス評価インジケータが、それぞれのプロセス評価器によって判断された数値スコアを含むことがあり、スコアは、それぞれのプロセスの悪意の程度を示している。あるいは、このようなスコアは、プロセス評価インジケータ５２ａ〜ｄにより、モジュール３８によって判断されてもよい。悪意スコアは、２値（１／０、はい／いいえ）であってもよい、または値の連続した範囲にわたって変化してもよい。値の範囲内で変化することがある例示的な悪意スコアは、評価されたプロセスが悪意のある可能性（たとえば、確率）を示す数字を含み、たとえばそのようなスコアは、０と１の間で、または０％と１００％の間で変化することがある。スコア値は、挙動固有であってもよい。たとえば、評価されるプロセスは、ディスクファイルを作成するとき、０．２という悪意スコア、およびＷｉｎｄｏｗｓレジストリ値を変更するとき、０．７という悪意スコアを受け取ることがある。
【００２５】
[0036]図５は、本発明のいくつかの実施形態によりプロセススコアリングモジュール３８によって実行される例示的な一連のステップを示す。ステップ３０２において、モジュール３８が、ＶＭ３２内（たとえば、図４の評価器５０ａ〜ｃ参照）、またはＶＭ３２の外（たとえば、メモリ内部監視エンジン４０）のいずれかで動作することができるプロセス評価器から、図４のインジケータ５２ａ〜ｄなどのプロセス評価インジケータを受け取る。ステップ３０４において、モジュール３８は、それぞれのプロセス評価インジケータが判断されたプロセスを識別することができる。いくつかの実施形態では、プロセススコアリングモジュール３８は、様々なプロセス評価器から受け取られるすべてのプロセス評価インジケータのプロセスごとの記録をつけることができ、ステップ３０４は、ステップ３０２で受け取られたインジケータをそれぞれのプロセスの記録に追加することをさらに含むことができる。
【００２６】
[0037]評価されるプロセスが悪意のあるものであるかどうかを判断するために、ステップ３０６において、プロセススコアリングモジュール３８が、それぞれのプロセスに対して判断された、および様々なプロセス評価器から受け取られた個々のスコアを結合することによって、総スコアを判断することができる。例示的な総スコアは、個々のスコアの加重和および加重平均を含む。いくつかの実施形態では、総スコアは、評価されるプロセスに対して判断されたプロセス評価インジケータ／スコアを、他のプロセスまたはソフトウェアオブジェクトに対して判断されたプロセス評価インジケータ／スコアと結合することができる。たとえば、評価されるプロセスに対して判断されたスコアは、評価されるプロセスの子プロセスに対して判断されたスコアと、および／または評価されるプロセスの親プロセスに対して判断されたスコアと、結合され得る。
【００２７】
[0038]ステップ３０８において、モジュール３８は、総スコアを所定の閾値と比較することができる。総スコアが閾値を超えないとき、モジュール３８は上述のステップ３０２に戻ることができる。いくつかの実施形態では、閾値は、（たとえば、セキュリティアプリケーション４４によって公開されるユーザインタフェースにより）それぞれのＶＭのユーザから受け取られる入力により決定される値に設定され得る。閾値は、それぞれのユーザのセキュリティの基本設定（security preference）を反映することができる。たとえば、ユーザが厳重なセキュリティを選ぶとき、閾値は比較的低い値に設定されてもよく、ユーザがより寛容なセキュリティ設定を好むとき、閾値は比較的高い値に設定されてもよい。いくつかの実施形態では、閾値は、図１０〜図１１に関して以下に記載するように、リモートセキュリティサーバから受け取られることがある。
【００２８】
[0039]いくつかの実施形態では、ステップ３０６〜３０８において、プロセススコアリングモジュール３８は、複数の総スコアを判断し、各総スコアを（場合により異なる）閾値と比較することができる。このような各総スコアは、プロセス評価インジケータの異なるサブセットにより判断され得る。例示的な実施形態では、プロセス評価インジケータのこのような各セットが、マルウェアの特定のクラスまたはタイプ（たとえば、Ｔｒｏｊａｎ、ルートキットなど）を表し、モジュール３８が検出されたマルウェアの分類を行うことができるようにする。
【００２９】
[0040]ステップ３１０において、総スコアが閾値を超えるとき、モジュール３８は、評価されるプロセスが悪意のあるものであると判定し、アンチマルウェアアクションをとることがある。いくつかの実施形態では、このようなアンチマルウェアアクションは、特に、評価されたプロセスを終了すること、評価されたプロセスを隔離すること、および評価されたプロセスのリソース（ファイルもしくはメモリのセクションなど）を除去することもしくは無効にすることを含むことができる。いくつかの実施形態では、アンチマルウェアアクションは、ホストシステム１０のユーザに警告すること、および／または、たとえば（１つもしくは複数の）ネットワークアダプタ２２を介してホストシステム１０に接続されたコンピュータネットワークを通じてシステム管理者にメッセージを送信することによって、システム管理者に警告することをさらに含むことができる。いくつかの実施形態では、アンチマルウェアアクションは、図１０〜図１１に関して以下に記載するように、リモートセキュリティサーバにセキュリティレポートを送信することも含むことがある。
【００３０】
[0041]図３〜図４に示す例示的なプロセススコアリングモジュール３８は、ＯＳプロセッサ特権レベル（たとえば、カーネルモード）においてＶＭ３２内で動作する。代替的実施形態では、プロセススコアリングモジュール３８は、ユーザモードにおいてＶＭ３２内で、またはハイパーバイザ３０のプロセッサ特権レベルでＶＭ３２の外でも、実行されることがある。
【００３１】
[0042]いくつかの実施形態では、内部監視エンジン４０が、実質的にハイパーバイザ３０と同じ特権レベルにおいて実行され、ＶＭ３２などの仮想マシンの内部監視を行うように構成される。ＶＭの、またはそれぞれのＶＭで実行されるソフトウェアオブジェクトの内部監視は、特に、ソフトウェアオブジェクトの挙動を分析すること、このようなソフトウェアオブジェクトのメモリアドレスを判断するおよび／またはこれにアクセスすること、このようなアドレスに位置しているメモリの内容へのあるプロセスのアクセスを制限すること、このような内容を分析すること、ならびにそれぞれのソフトウェアオブジェクトのプロセス評価インジケータ（たとえば、図４のインジケータ５２ｄ）を判断することを含むことができる。いくつかの実施形態では、内部監視エンジン４０によって標的とされるソフトウェアオブジェクトは、特に、プロセス、命令ストリーム、レジスタ、ならびにそれぞれのＶＭのページテーブルおよびドライバオブジェクトなどのデータ構造を含む。
【００３２】
[0043]それぞれのＶＭの外からＶＭ３２の内部監視を行うために、エンジン４０のいくつかの実施形態は、プロセッサ１２のメモリマッピング構造および機構を使用する。仮想マシンは、一般的に、仮想化された物理メモリ、すなわちホストシステム１０の実際の物理メモリ１４の仮想表現で動作する。仮想化された物理メモリは、物理メモリ１４および／または物理記憶装置２０内のアドレスにマップされたそれぞれの空間の部分とともに、ホストシステム１０で実行される各ゲストＶＭに固有の、仮想化されたアドレスの連続した空間を含む。仮想化を支援するように構成されたシステムでは、このようなマッピングは、一般的に、拡張ページテーブル（ＥＰＴ：extended page table）または入れ子ページテーブル（ＮＰＴ：nested page table）などの、プロセッサ１２によって制御される専用データ構造によって実現される。このようなシステムでは、仮想化された物理メモリが、ページとして当業者に知られる単位で分割され得る。ページが、ＥＰＴおよび／またはＮＰＴなどの機構により物理メモリに個々にマップされた仮想化された物理メモリの最小単位を表し、すなわち、物理メモリと仮想化された物理メモリの間のマッピングは、ページ粒度で行われる。すべてのページは、一般的に、所定のサイズ、たとえば４キロバイト、２メガバイトなどを有する。仮想化された物理メモリをページに分割することは、通常、ハイパーバイザ３０によって設定される（configured）。いくつかの実施形態では、ハイパーバイザ３０は、ＥＰＴ／ＮＰＴ、したがって物理メモリと仮想化された物理メモリとの間のマッピングもまた設定する。仮想化された物理メモリの物理メモリアドレスへの実際の変換は、ホストシステム１０のトランスレーションルックアサイドバッファ（ＴＬＢ：translation lookaside buffer）で物理メモリアドレスを調べることを含むことができる。いくつかの実施形態では、アドレス変換は、ページウォークを行うことを含み、ページウォークは、ページテーブルのセットにおける連続したアドレスルックアップのセットを含み、それぞれのページに関連したアドレスにページのオフセットを加算するなどの計算を行う。
【００３３】
[0044]いくつかのハードウェア構成により、ハイパーバイザ３０が、各ページ内に格納されたデータへのアクセスを、たとえばそれぞれのページへの読み出しおよび書き込みアクセス権を設定することによって、選択的に制御することができる。このような権利は、たとえば、ＥＰＴまたはＮＰＴ内のそれぞれのページのエントリを変更することによって設定されてもよい。ハイパーバイザ３０はしたがって、どのソフトウェアオブジェクトが各ページ内のアドレスに格納されたデータにアクセスすることができるかを選択することができ、たとえば読み出し、書き込みなど、それぞれのデータでどの動作が許可されるかを示すことができる。ＶＭ内で実行されるソフトウェアオブジェクトによる、たとえばオブジェクトが読み出しの権利を有していないページからデータを読み出す、または書き込みの権利を有していないページにデータを書き込むなどの動作を行おうとする試みが、仮想マシン終了イベント（たとえば、ＩｎｔｅｌプラットフォームのＶＭＥｘｉｔイベント）をトリガすることができる。いくつかの実施形態では、仮想マシン終了イベントが、プロセッサの制御を、それぞれのソフトウェアオブジェクトを実行しているＶＭからハイパーバイザ３０へまたはメモリ内部監視エンジン４０へ移し、したがってハイパーバイザ３０および／またはエンジン４０が許可されていない読み出し／書き込みの試みをインターセプトし、分析することを可能にする。
【００３４】
[0045]いくつかの実施形態では、ＯＳ３４が、仮想メモリ空間（論理アドレス空間とも呼ばれる）を構成し、図３のアプリケーション４２ｄ〜ｅおよび４４などのアプリケーションに仮想メモリ空間を公開する。このようなシステムでは、ＯＳ３４が、たとえばページテーブル機構を使用して、仮想メモリ空間とＶＭ３２の仮想化された物理メモリとの間のマッピングを構成し、維持する。いくつかの実施形態では、仮想メモリ空間はまた、ページに分割され、このようなページは、ＯＳ３４によって仮想化された物理メモリに個々にマップされた仮想メモリの最小単位を表す（仮想から仮想化された物理メモリへのマッピングは、ページ粒度で行われる）。
【００３５】
[0046]図６は、図２に示す実施形態におけるメモリアドレスの例示的なマッピング（変換）を示す。ＶＭ３２ａ内で実行されるアプリケーションまたはプロセスなどのソフトウェアオブジェクトが、ゲストＯＳ３４ａによって仮想アドレス空間２１４ａを割り当てられる。それぞれのソフトウェアオブジェクトが、空間２１４ａの例示的なメモリアドレス６０ａにアクセスしようと試みるとき、アドレス６０ａは、ゲストＯＳ３４ａによって構成および制御されるページテーブルにより、ゲストＶＭ３２ａの仮想化されたプロセッサによって、仮想マシン３２ａの仮想化された物理メモリ空間１１４ａ内のアドレス６０ｂに変換される。アドレス６０ｂは、当技術分野でゲスト物理アドレスとして知られている。ハイパーバイザ３０は、仮想化された物理メモリ１１４ａを構成および制御し、たとえば上述のようにＥＰＴまたはＮＰＴ手段を使用して、アドレス６０ｂをホストシステム１０の物理メモリ１４内のアドレス６０ｃにマップする。
【００３６】
[0047]同様に、仮想メモリ空間２１４ｂが、ゲストＶＭ３２ｂで実行されるアプリケーション（たとえば、４２ｃ）または他のソフトウェアオブジェクトに対してゲストＯＳ３４ｂによってセットアップされる。空間２１４ｂ内の例示的な仮想アドレス６０ｄは、ゲストＯＳ３４ｂによって構成され、制御されるページテーブルにより、ゲストＶＭ３２ｂの仮想化されたプロセッサによって、ゲストＶＭ３２ｂの仮想化された物理メモリ空間１１４ｂ内のアドレス６０ｅに変換される。アドレス６０ｅは、ハイパーバイザ３０によって物理メモリ１４内のアドレス６０ｆにさらにマップされる。
【００３７】
[0048]いくつかの実施形態では、ハイパーバイザ３０は、物理メモリ１４の表現を含んだその独自の仮想メモリ空間２１４ｃをセットアップし、変換機構（たとえば、ページテーブル）を使用して、空間２１４ｃ内のアドレスを物理メモリ１４内のアドレスにマップする。図６では、このような例示的なマッピングが、アドレス６０ｇをアドレス６０ｈに変換する。同様に、物理メモリ１４内の６０ｃおよび６０ｆなどのアドレスが、ハイパーバイザ３０の仮想メモリ空間２１４ｃ内のアドレス６０ｋおよび６０ｍにそれぞれ対応する。このような変換により、ハイパーバイザ３０は、ホストシステム１０で動作している様々なＶＭ内で実行されるソフトウェアオブジェクトに属するメモリページを管理する（たとえば、読み出す、書き込む、およびアクセスを制御する）ことができる。
【００３８】
[0049]図７は、本発明のいくつかの実施形態によりＶＭ３２で実行されるプロセス７０ａ〜ｂのセットの例示的な実行フローを示す。図７の例は、Ｗｉｎｄｏｗｓ（登録商標）ＯＳのバージョンを実行しているシステムにおける実行フローを示し、たとえばＬｉｎｕｘなどの他のオペレーティングシステムに対して、同様の図が描かれ得る。実線の矢印は、セキュリティアプリケーション４４などのアンチマルウェアシステムがない場合の実行フローを表す。破線矢印は、本発明のいくつかの実施形態により実行されるプロセス評価器があることによるフローへの変更を表す。
【００３９】
[0050]プロセス７０ａは、複数のダイナミックリンクライブラリ（ＤＬＬ：dynamic-linked library）７２ａ〜ｃを含み、図７の例では、ＤＬＬ７２ｃが、（悪意のある可能性のある）プロセス７０ｂによってプロセス７０ａに注入される。コードインジェクション（code injection）は、ＤＬＬなどの一連のコードを、既存のプロセスのメモリ空間に導入して、それぞれのプロセスの元の機能を変える一群の方法を示すために当技術分野で使用される一般的な用語である。プロセス７０ａが、たとえばディスクファイルに何かを書き込むために、またはレジストリキーを編集するために、あるシステム機能を呼び出す命令を実行するとき、それぞれの命令は、ＫＥＲＮＥＬ３２．ＤＬＬまたはＮＴＤＬＬ．ＤＬＬなどのユーザモードのＡＰＩを呼び出す。図７の例では、それぞれのユーザモードのＡＰＩコールは、ユーザレベルの挙動フィルタ５０ａによってインターセプトされ、分析される。このようなインターセプションは、特に、ＤＬＬインジェクションまたはフッキングなどの方法によって実現され得る。フッキングは、ソフトウェアコンポーネント間で渡される関数コール、またはメッセージ、またはイベントをインターセプトする方法に対して当技術分野で使用される一般的な用語である。１つの例示的なフッキング方法は、実行を第２の関数へリダイレクトする命令を挿入することによって、ターゲット関数のエントリポイントを変えることを含む。このようなフッキングに続いて、第２の関数は、ターゲット関数の代わりに、またはその前に実行され得る。図７の例では、アンチマルウェアドライバ３６が、ＫＥＲＮＥＬ３２．ＤＬＬまたはＮＴＤＬＬ．ＤＬＬのある関数にフックして、実行をフィルタ５０ａにリダイレクトするようにそれぞれの関数に命令する。したがって、フィルタ５０ａは、プロセス７０ａが、リダイレクションを行う関数により識別される、ある挙動を行おうとしていることを検出することができる。フィルタ５０ａがこのような挙動を検出するとき、フィルタ５０は、プロセス評価インジケータ５２ａ（図４）を構築し（formulate）、インジケータ５２ａをプロセススコアリングモジュール３８に送ることができる。
【００４０】
[0051]実行の一般的なフローでは、ユーザモードのＡＰＩ関数は、オペレーティングシステムのカーネルからサービスを要求することができる。いくつかの実施形態では、このような動作は、ｘ８６プラットフォームのＳＹＳＣＡＬＬおよびＳＹＳＥＮＴＥＲなどのシステムコールを発行することによって行われる。図７の例では、このようなシステムコールは、システムコール評価器５０ｃによってインターセプトされる。いくつかの実施形態では、このようなインターセプションは、たとえば、プロセッサ１２のモデル固有レジスタ（ＭＳＲ）に格納されている値を変えることによってシステムコールハンドラルーチンを変更することを含み、これは実行をフィルタ５０ｃに効率的にリダイレクトする。このような技法は、当技術分野ではＭＳＲフッキングとして知られており、評価されるプロセスがあるシステムコールを行おうと試みていることをシステムコール評価器５０ｃが検出できるようにすることができる。このようなシステムコールがインターセプトされるとき、システムコールフィルタ５０ｃが、プロセス評価インジケータ５２ｃを構築し、インジケータ５２ｃをプロセススコアリングモジュール３８に送ることができる。
【００４１】
[0052]システムコールに続いて、プロセッサの制御は、一般的にＯＳ３４のカーネルに引き継がれる。いくつかの実施形態では、カーネルレベルのプロセス評価器５０ｂが、ＯＳカーネルのある動作をインターセプトし、したがって、評価されるプロセスが悪意のある可能性のあるある動作を行おうと試みていると判断するように構成される。このような動作をインターセプトするために、いくつかの実施形態は、ＯＳ３４に組み込まれ、ＯＳ３４によって公開されるフィルタリング機構のセットを使用することができる。たとえば、Ｗｉｎｄｏｗｓ  ＯＳでは、ファイルを作成する、ファイルを開く、ファイルに書き込む、およびファイルを削除するなどの動作をインターセプトするために、ＦｌｔＲｅｇｉｓｔｅｒＦｉｌｔｅｒが使用され得る。別の例では、評価器５０ｂが、作成または複写オブジェクトハンドル（object-handle）動作をインターセプトするためにＯｂＲｅｇｉｓｔｅｒＣａｌｌｂａｃｋを、または新しいプロセスの作成をインターセプトするためにＰｓＳｅｔＣｒｅａｔｅＰｒｏｃｅｓｓＮｏｔｉｆｙＲｏｕｔｉｎｅを使用することがある。さらに別の例では、レジストリキー／値を作成し、設定することなどのＷｉｎｄｏｗｓレジストリ動作は、ＣｍＲｅｇｉｓｔｅｒＣａｌｌｂａｃｋＥｘを使用してインターセプトされ得る。Ｌｉｎｕｘ（登録商標）などの他のオペレーティングシステムに対して、同様のフィルタリング機構が、当技術分野で知られている。カーネルモードのプロセス評価器５０ｂがこのような動作をインターセプトするとき、評価器５０ｂは、プロセス評価インジケータ５２ｂを構築し、インジケータ５２ｂをプロセススコアリングモジュール３８に送ることができる。
【００４２】
[0053]プロセス評価インジケータ５２ａ〜ｃなどのデータを評価器５０ａ〜ｃからスコアリングモジュール３８に送るために、当業者は任意のプロセス間通信方法を使用することができる。たとえば、ユーザモードおよびカーネルモードのコンポーネント間で通信するために、評価器５０ａ〜ｃおよびモジュール３８は、メモリの共有セクションを使用するように構成され得る。
【００４３】
[0054]図８は、本発明のいくつかの実施形態によりメモリ内部監視エンジン４０によって行われる例示的な一連のステップを示す。ステップ３１２において、エンジン４０は、マルウェアからの保護を要求するプロセス（以下保護されるプロセスと呼ぶ）がＶＭ３２内で起動していることを検出することができる。いくつかの実施形態では、このような保護されるプロセスは、特に、セキュリティアプリケーション４４に属するプロセスを含む。
【００４４】
[0055]保護されるプロセスの起動を検出するために、エンジン４０は、ＯＳ３４にネイティブのデータ構造および／または機構を使用することができる。たとえば、Ｗｉｎｄｏｗｓ（登録商標）ＯＳのいくつかのバージョンは、カーネルによって保持される、アクティブプロセスのリストを使用してプロセスを管理する。プロセスが作成されるたびに、それぞれのプロセスのインジケータが、アクティブプロセスのリストに挿入され、それぞれのプロセスが終了すると、インジケータはリストから削除される。いくつかの実施形態では、ＯＳ３４のカーネルは、各プロセスをデータ構造として、たとえば、Ｗｉｎｄｏｗｓではエグゼクティブプロセスブロック（ＥＰＲＯＣＥＳＳ）として表し、これは特に、それぞれのプロセスのスレッドのそれぞれへのハンドル、およびＯＳ３４が複数の実行中のプロセスからそれぞれのプロセスを識別できるようにする一意のプロセスＩＤを含む。
【００４５】
[0056]保護されるプロセスの作成を検出する（図８のステップ３１２）ために、いくつかの実施形態は、当技術分野で知られている任意のフッキング方法を使用して、アクティブプロセスのリストを操作するカーネル関数にフックする。Ｗｉｎｄｏｗｓ  ＯＳのこのような関数の例は、ＰｓｐＩｎｓｅｒｔＰｒｏｃｅｓｓであり、これは、それぞれのプロセスが起動されて実行されるとき、アクティブプロセスのリストにプロセスを追加する。ＡＭドライバ３６のいくつかの実施形態は、ＶＭＣＡＬＬ命令またはＪＭＰ命令など、それぞれのカーネル関数にリダイレクションパッチを適用することができる。他の実施形態は、新しいアドレスをポイントするように、それぞれのカーネル関数のＥＰＴエントリを変更することができる。このようなパッチおよび／またはＥＰＴフックの結果、ネイティブのＯＳ関数の実行を、メモリ内部監視エンジン４０によって提供されるコードの断片にリダイレクトすることになる。フッキングに続いて、ＯＳ３４がプロセスを起動して実行しようとするとき、コードの断片は、それぞれのカーネル関数のコードの前に、またはその代わりに実行されることになり、したがってそれぞれのプロセスが実行されていることをメモリ内部監視エンジン４０に知らせる。いくつかの実施形態では、エンジン４０は、それぞれのプロセスが起動されるとき、カーネル関数に渡されるパラメータ（たとえば、一意のプロセスＩＤを含んだＥＰＲＯＣＥＳＳ構造）により、それぞれのプロセスを識別することができる。代替的実施形態は、メモリフック（ＥＰＴフックなど）を使用して、アクティブプロセスのリストを格納しているメモリのセクションのアドレスにアクセスし、それぞれのメモリセクションの内容により、現在実行中の各プロセスを記述しているＥＰＲＯＣＥＳＳ構造のアドレスをさらに判断することができる。
【００４６】
[0057]ステップ３１４において、メモリ内部監視エンジン４０は、保護されるプロセスが実行されていることをＡＭドライバ３６に知らせることができる。たとえば、エンジン４０は、保護されるプロセスのプロセスＩＤなどのインジケータをＡＭドライバ３６に送信することができる。次に、ステップ３１６においてエンジン４０は、ドライバ３６から、保護されるプロセスのコードおよび／またはデータを格納しているメモリページのインジケータ（たとえば、仮想メモリ内のページのアドレス）を受け取ることができる。いくつかの実施形態では、エンジン４０は、セマンティックギャップを埋めるために、ステップ３１４〜３１６を使用する。セマンティックギャップは、エンジン４０がＶＭ３２の外で実行され、保護されるプロセスがＶＭ３２内で実行されるために発生する。ＡＭドライバ３６はＶＭ３２内で、カーネルモードで実行することによって、保護されるプロセスによって使用されるメモリアドレス、たとえば、保護されるプロセスのコードおよび／またはデータを格納しているそれぞれのＶＭの仮想化された物理メモリ内のページのアドレス（図６の空間１１４ａ〜ｂ参照）などの情報に直接アクセスすることができる。ハイパーバイザ３０は、それぞれのＶＭ内で実行されるアクティブプロセスのリストにアクセスすることはないが、それぞれのプロセスによってロードされるすべてのモジュール（ＤＬＬなど）を判断するためにリストをパースし、さらにハイパーバイザ３０のレベルからこのようなデータ／コードを格納しているメモリページのすべてのアドレスを判断すると、かなりの計算を要する可能性がある。いくつかの実施形態では、一連のステップ３１４〜３１６の別の理由は、ユーザモードのプロセスに属するデータが、物理メモリ１４と他のコンピュータ可読媒体、たとえばストレージデバイス２０との間でＯＳ３４によってスワップされ得ることである。それぞれのＶＭの外で実行されるので、メモリ内部監視エンジン４０は、データが物理メモリにスワップインおよび物理メモリからスワップアウトされるときそれを検出することができるが、データが物理メモリにない間は、そのようなデータにアクセスするおよび／またはそのようなデータを保護することはできない可能性がある。対照的に、ＶＭ３２内で実行されるＡＭドライバ３６は、ＯＳ３４にそれぞれのページをロードさせることによって、物理メモリからスワップアウトされるページに容易にアクセスすることができる。ＡＭドライバ３６は、したがって保護されるプロセスによって使用される／ロードされるすべてのモジュールを効率的にリスト表示し、ＶＭ３２の仮想化された物理メモリ内のそのようなモジュールのサイズおよび場所を判断することができる。
【００４７】
[0058]代替的実施形態では、保護されるプロセスの起動をアクティブに検出する（上記ステップ３１２）代わりに、メモリ内部監視エンジン４０が、ＡＭドライバ３６から保護されるプロセスのインジケータを受け取ることができる。ＡＭドライバ３６は、ＶＭ３２内から保護されるプロセスの起動を実際に検出することができる。このような実施形態では、上述のステップ３１４は、もはや必要ではない。さらに別の実施形態では、ステップ３１６において、エンジン４０が、上述のようにＡＭドライバ３６に依存する代わりに、保護されるプロセスのメモリページのアドレスを判断するために、必要な計算を実際に行うことができる。
【００４８】
[0059]ステップ３１８において、メモリ内部監視エンジンが、たとえば悪意のあるソフトウェアがＶＭ３２を危険にさらそうとすることによる望ましくない変更からターゲットページを保護する。いくつかのこのようなメモリ保護機構が、当技術分野で知られている。保護は、ＥＰＴまたはＮＰＴなどのデータ構造を使用して、メモリ内部監視エンジン４０上でリクエストによりハイパーバイザ３０によって実施され得る。たとえば、ハイパーバイザ３０は、それぞれのページのＥＰＴ／ＮＰＴアクセス権ビット（access right bit）を変更することによって、ターゲットメモリページを読み出し専用として設定することができる。いくつかの実施形態では、ハイパーバイザ３０は、ターゲットオブジェクトに割り当てられたメモリページに書き込もうとするいかなる試みもインターセプトし、分析のためにそれぞれの試みをメモリ内部監視エンジン４０にリダイレクトすることができる。ステップ３１８におけるエンジン４０の動作については、図９に関して以下にさらに詳述する。
【００４９】
[0060]ターゲットページに書き込み保護を適用するために、ステップ３１８は、保護されるプロセスのためにＯＳ３４によってセットアップされた仮想メモリ空間からホストシステム１０の物理メモリ１４へ、またはそれぞれのＶＭの仮想化された物理メモリ空間から物理メモリ１４へ、図６に示されるようなメモリアドレスの変換を行うことを含むことができる。それぞれの変換によりメモリ内部監視エンジン４０は、ＡＭドライバ３６からステップ３１６において受け取られたインジケータにより、実際の物理メモリ１４内のターゲットページのアドレスを判断できるようになる。このような変換は、図６に関して述べたように、ＥＰＴ／ＮＰＴ機構を使用することができる。
【００５０】
[0061]ステップ３２０において、エンジン４０が、保護されたプロセスの終了を検出することができる。いくつかの実施形態では、ステップ３２０は、上述のステップ３１２と同様の方法で進行することができる。たとえば、ステップ３２０は、ＶＭ３２のアクティブプロセスのリストからプロセスを削除するように構成されたカーネル関数から信号を受け取ることを含むことができ、それぞれの関数は、フッキング（たとえば、ＶＭＣＡＬＬ命令などのパッチをそれぞれの関数に適用し、パッチが実行をエンジン４０にリダイレクトすること）によってＡＭドライバ３６によって変更される。このように変更され得る例示的なＷｉｎｄｏｗｓ関数は、ＰｓｐＤｅｌｅｔｅＰｒｏｃｅｓｓである。エンジン４０が保護されるプロセスの終了を検出するとき、ステップ３２２が、たとえばターゲットページの書き込み許可を変えるようハイパーバイザ３０に命令することによって、それぞれのターゲットページから保護を解除する。
【００５１】
[0062]図９は、ターゲットページを保護するためにメモリ内部監視エンジン４０によって行われる一連のステップを示す（図８のステップ３１８）。ステップ３３２において、エンジン４０が、ターゲットページに書き込もうとする試みをインターセプトすることができ、このような試みは、悪意のある意図を示している可能性があり、上述のように、ハイパーバイザ３０によってインターセプトされ得る。ステップ３３４において、エンジン４０は、試みを実行しているプロセスを識別することができ、それぞれのプロセスは、問題のあるプロセス（offending process）と呼ばれることになる。いくつかの実施形態では、ステップ３３４を実行するために、エンジン４０は、ｘ８６システムでＥＩＰおよび／またはＲＩＰレジスタなどの命令ポインタレジスタの内容を使用して、試みを行っているプロセッサ命令（またはそのアドレス）を識別し、ＣＲ３レジスタの内容を使用して、それぞれの命令が属するプロセスを識別することができる。あるいは、エンジン４０は、ｘ８６プロセッサでＦＳおよびＧＳレジスタなどのセグメントレジスタの内容を使用して、あるカーネルデータ構造により問題のあるプロセスを識別することができる。カーネルデータ構造は、ＯＳ３４がプロセス間で実行を切り替えるたびに変更される。
【００５２】
[0063]ステップ３３６において、エンジン４０は、問題のあるプロセスのプロセス評価インジケータ５２ｄ（たとえば図４参照）を構築し、インジケータ５２ｄをプロセススコアリングモジュール３８に送ることができる。例示的なインジケータ５２ｄは、ステップ３３４で識別される問題のあるプロセスのインジケータ（たとえば、プロセスＩＤ）、および問題のあるプロセスによって試みられ、ステップ３３２でインターセプトされるアクションのタイプ（たとえば、保護されるメモリページへ書き込もうとする試み）のインジケータを含むことができる。
【００５３】
[0064]上述の方法およびシステムのいくつかは、ＶＭ３２内で実行されるコンポーネントとそれぞれのＶＭの外で実行されるコンポーネントとの間で、データ交換および／またはメッセージングなどの通信を必要とする。このような通信は、仮想化の技術分野で知られている任意の方法を使用して実行され得る。たとえば、ＡＭドライバ３６などのカーネルモードで実行されているコンポーネントから、メモリ内部監視エンジン４０へデータを送るには（たとえば、図８のステップ３１６参照）、いくつかの実施形態は、特権命令を使用して、プロセッサ１２の制御をＶＭ３２からハイパーバイザ３０に移す。このような特権命令の例が、ＩｎｔｅｌプラットフォームでのＶＭＣＡＬＬであり、これは、データがＶＭ３２内から送られていることをエンジン４０に信号で伝えるために使用され得る。送られている実際のデータは、ドライバ３６とエンジン４０との間で共有されているメモリの所定のセクションに置かれ得る。メモリ内部監視エンジン４０からＡＭドライバ３６にデータを送るために（たとえば、図８のステップ３１４、および図９のステップ３３６参照）、いくつかの実施形態は、割り込みインジェクション機構（interrupt injection mechanism）を使用して、データがそれぞれのＶＭの外から送られていることをドライバ３６に信号で伝える。実際のデータは、たとえば上述の共有メモリセクションを介して伝えられ得る。
【００５４】
[0065]いくつかの実施形態では、ホストシステム１０は、マルウェア検出イベントについての詳細などのセキュリティ情報を、リモートセキュリティサーバと交換するように構成され得る。図１０は、このような例示的な構成を示し、複数のホストシステム１０ａ〜ｃが、コンピュータネットワーク２６を介してセキュリティサーバ１１０に接続されている。例示的な実施形態では、ホストシステム１０ａ〜ｃは、会社の従業員によって使用される個々のコンピュータであり、セキュリティサーバ１１０は、システム１０ａ〜ｃで発生するマルウェア脅威またはセキュリティイベントを監視するためにそれぞれの会社のネットワーク管理者によって構成されたコンピュータシステムを含むことができる。別の実施形態では、たとえば各ホストシステム１０ａ〜ｃが数十または数百の仮想マシンをホストするサーバである、サービスとしてのインフラストラクチャ（ＩＡＡＳ）システムでは、セキュリティサーバ１１０は、中心の位置からこのようなすべてのＶＭのためにアンチマルウェア動作を管理するように構成されたコンピュータシステムを含むことができる。さらに別の実施形態では、セキュリティサーバ１１０は、アンチマルウェアソフトウェアのプロバイダ（たとえば、特にセキュリティアプリケーション４４のプロバイダ）によって、ネットワーク２６中の様々なシステムで検出されたマルウェアについての統計および／または挙動データを受け取るように構成されたコンピュータシステムを含むことができる。ネットワーク２６は、インターネットなどのワイドエリアネットワークを含めることができ、ネットワーク２６の一部は、ローカルエリアネットワーク（ＬＡＮ）を含めることができる。
【００５５】
[0066]図１１は、図１０に示す実施形態におけるホストシステム１０とセキュリティサーバ１１０との間の例示的なデータ交換を示す。ホストシステム１０は、セキュリティレポート８０をサーバ１１０に送信し、サーバ１１０からセキュリティ設定８２のセットを受け取るように構成され得る。いくつかの実施形態では、セキュリティレポート８０は、特に、ホストシステム１０で実行されているプロセス評価器によって判断されたプロセス評価インジケータおよび／もしくはスコア、ならびに／またはプロセススコアリングモジュール３８によって判断された総スコアを含む。セキュリティレポート８０はまた、それぞれの仮想マシンおよび評価されるプロセスを識別するデータ（たとえば、プロセスＩＤ、名前、パス、ハッシュ、バージョン情報、またはアプリケーションおよび／もしくはプロセスの他の種類の識別子）、ならびにプロセス評価インジケータ／スコアを、それが判断されたＶＭおよびプロセスに関連付けるインジケータを含むことができる。いくつかの実施形態では、レポート８０は、ホストシステム１０で実行されるプロセスおよび／またはアプリケーションに関する統計および／または挙動データをさらに含むことができる。システム１０は、マルウェアを検出すると、および／またはスケジュールにより（たとえば、２、３分ごとに、毎時になど）、レポート８０を送信するように構成され得る。
【００５６】
[0067]いくつかの実施形態では、セキュリティ設定８２は、プロセス評価器の動作パラメータ（たとえば、図４のフィルタ５０ａ〜ｃのパラメータ）および／またはプロセススコアリングモジュール３８のパラメータを含むことができる。モジュール３８の動作パラメータの例は、評価されるプロセスが悪意のあるものであるかどうかを判定するための閾値である（図５のステップ３０８および関連する説明参照）。プロセス評価器の例示的な動作パラメータは、評価されるプロセスがあるアクションを行うとき、評価されるプロセスに割り当てられる悪意スコア（maliciousness score）の値である。たとえば、評価されるプロセスは、それぞれのプロセスがディスクファイルに書き込むとき、０．１の悪意スコアを、それぞれのプロセスがＷｉｎｄｏｗｓレジストリ値を変更するとき、０．７の悪意スコアを受け取ることができる。
【００５７】
[0068]いくつかの実施形態では、サーバ１１０は、マルウェア検出性能を最大にするために、たとえば誤検出を最小にしながら検出率を増大させるために、このようなパラメータを動的に調整する最適化アルゴリズムを実行する。最適化アルゴリズムは、様々なプロセス評価器によってプロセススコアリングモジュール３８に報告されたプロセス評価インジケータ／スコアなど、複数のホストシステム１０ａ〜ｃで実行される様々なプロセスについての統計および／または挙動データを受け取り、パラメータの最適値を判断することができる。値は、次いでネットワーク２６を介してそれぞれのホストシステムに送られる。いくつかの実施形態では、最適なパラメータ値を判断するために、サーバ１１０は、クリーンである（マルウェアに感染していない）ことがわかっているプロセスのセットを使用してプロセススコアリングモジュール３８および／またはプロセス評価器５０ａ〜ｃの動作を校正する（calibrate）ことができる。例示的な校正シナリオでは、セキュリティサーバ１１０は、ホストシステム１０に、クリーンであることがわかっている校正プロセスのセットを実行し、校正プロセスに対して判断されたプロセス評価インジケータ／スコアのセットをサーバ１１０に返送するよう命令することができる。サーバ１１０は、次いでそれぞれの仮想マシンおよび／またはホストシステムに合わせられたパラメータ値を判断することができる。
【００５８】
[0069]別の例では、セキュリティ設定８２は、様々なプロセス評価器から受け取られる個々のプロセス評価インジケータにより、評価されるプロセスの総悪意スコアを判断するためにプロセススコアリングモジュール３８によって使用される重み値のセットを含む。総スコアが個々のスコアの加重和または加重平均であり、（たとえば、各スコアが評価されるプロセスがあるマルウェアを示唆する挙動を行うかどうかを示すとき）各スコアが異なるマルウェア検出基準または方法により計算される実施形態では、個々のスコアの重みを変えると、他の基準／方法に比べて、それぞれの基準または方法の関連性を効果的に変えることができる。マルウェア脅威は、一般的に波のように発生し、世界中の多数のコンピュータシステムが、短い時間間隔で同じマルウェアエージェントに感染する。複数のホストシステムからリアルタイムにセキュリティレポート８０を受け取ることによって、セキュリティサーバ１１０は、現在のマルウェア脅威の最新情報に通じていることが可能であり、それぞれのホストシステムに最適なセキュリティ設定８２を直ちに伝えることができ、設定８２は、たとえば、現在のマルウェア脅威を検出するために最適化されたスコア重みのセットを含む。
【００５９】
[0070]上述の例示的なシステムおよび方法により、コンピュータシステムなどのホストシステムを、ウイルスおよびルートキットなどのマルウェアから保護することができる。従来のアンチマルウェアシステムは、一般的に、オペレーティングシステムのプロセッサ特権レベル（たとえば、カーネルモード）で実行される。ルートキットなどのいくつかのマルウェアもまた、ＯＳのレベルで動作することができ、したがって従来のアンチマルウェアシステムを無能にし、コンピュータシステムのセキュリティを危うくする可能性がある。対照的に、本発明のいくつかの実施形態では、ハイパーバイザがコンピュータシステムで最高のプロセッサ特権レベルで実行され、仮想マシンに対するオペレーティングシステムに取って代わる。本発明のいくつかの実施形態により動作するアンチマルウェアシステムは、ハイパーバイザレベルで、ＶＭ内で実行されるコンポーネントと、ＶＭの外で実行されるコンポーネントとを含む。いくつかのアンチマルウェア動作は、したがって、オペレーティングシステムのプロセッサ特権レベルよりも上位のプロセッサ特権レベルから行われることが可能であり、ＶＭ内で実行されるマルウェアによって破壊される可能性はない。いくつかの実施形態では、単一のメモリ内部監視エンジンが、ハイパーバイザのレベルで実行されて、それぞれのコンピュータシステムで同時に実行される複数の仮想マシンを保護することができる。
【００６０】
[0071]いくつかの実施形態では、メモリ内部監視エンジンの動作は、特にいくつかのドライバ、ライブラリ、レジスタ、およびページテーブルなどの重要なソフトウェアオブジェクトのセットを選択することと、このようなオブジェクトへの悪意のある変更を防ぐこととを含む。詳細には、いくつかの実施形態は、したがって、ＶＭ内で実行されるアンチマルウェアコンポーネントを悪意のある攻撃から保護することができる。
【００６１】
[0072]このようなオブジェクトを保護するために、いくつかの実施形態は、それぞれのオブジェクトに割り当てられたメモリ空間へ書き込もうとする試みをインターセプトし、試みをブロックするまたはリダイレクトすることによって、悪意のある変更を防ぐことができる。他の実施形態は、それぞれのオブジェクトに割り当てられたメモリ空間をリードオンリとしてマーク付けすることによって、ターゲットオブジェクトを保護することができる。一般的なハードウェアおよびソフトウェア構成では、メモリは、ページとして知られている、連続したアドレスの個々のブロックに分割される。仮想化を支援するシステムでは、ページアクセス許可は、たとえばＩｎｔｅｌプラットフォームの拡張ページテーブル（ＥＰＴ）などの専用データ構造を使用して、ハイパーバイザによって制御される。したがって、ターゲットオブジェクトのメモリ空間を保護することは、たとえばメモリ内部監視エンジンがハイパーバイザに、それぞれのオブジェクトに属するデータを含んでいるページのセットをリードオンリとしてマーク付けするよう命令することによって達成され得る。
【００６２】
[0073]いくつかの実施形態では、いくつかのアンチマルウェアコンポーネントが、マルウェアを検出するためにメモリ内部監視エンジンと連携して、保護される仮想マシン内で実行される。このような構成は、仮想化により発生するセマンティックギャップを穴埋めすることによって、実質的にマルウェア検出を簡略化することができる。一般的なソフトウェア構成では、ユーザモードで実行されるマルウェア検出コンポーネントは、評価されるプロセスの挙動についての豊富な情報にアクセスすることができるが、この情報の大部分は、カーネルレベルでまたはそれぞれのＶＭの外で実行されるコンポーネントが容易に利用できるものではない。たとえば、評価されるプロセスがインターネットからファイルをダウンロードしようと試みるとき、ユーザモードのプロセス評価器は、たとえばＤＬＬインジェクションなどの当技術分野で知られている方法を使用して、どのプロセスがアクションを行っているかを識別することができ、評価されるプロセスがファイルをダウンロードしようと試みていることを検出することができ、特に、ファイルがダウンロードされるＩＰアドレス、およびダウンロードされたファイルのディスク場所を判断することができる。一方、ハイパーバイザのレベルで実行されるプロセス評価器は、ネットワークパケットのセットがホストシステムのネットワークアダプタを通じて流れていることを検出するにすぎない可能性がある。ハイパーバイザのレベルから評価されるプロセスの挙動についての情報を回復することは、原則として可能であり得るが、このようなタスクはかなりの計算コストを伴う可能性があるので、マルウェア検出には実用的ではない可能性がある。それぞれのＶＭ内で実行されるアンチマルウェアコンポーネントを、ＶＭの外で実行されるメモリ内部監視エンジンと結合することによって、本発明のいくつかの実施形態は、ＶＭ内部のコンポーネントがアクセスできる豊富な挙動データを使用するとともに、それぞれのＶＭの外からこのようなコンポーネントの整合性を保護することができる。
【００６３】
[0074]従来のアンチマルウェアシステムでは、オペレーティングシステムのプロセッサ特権レベルと同様のプロセッサ特権レベルで実行されるソフトウェアコンポーネントが、プロセスがいつ起動されるかを検出し、他のアンチマルウェアコンポーネントにそれぞれのプロセスの挙動を監視するよう命令する。いくつかのマルウェアエージェントは、プロセス起動を検出するソフトウェアコンポーネントを無効にし、したがってアンチマルウェアシステムに現在実行中のプロセスのサブセットのみを監視させることによって、このようなアンチマルウェアシステムを巧みに危うくする。対照的に、本発明のいくつかの実施形態では、プロセス起動を検出するコンポーネントは、オペレーティングシステムよりも上位のプロセッサ特権レベルで、それぞれの仮想マシンの外に移動される。このような構成は、マルウェアがアンチマルウェアコンポーネントから隠れることのないようにすることができる。
【００６４】
[0075]いくつかの実施形態では、プロセススコアリングモジュールが、それぞれのＶＭ内または外で実行される複数のプロセス評価器からプロセスごとの評価インジケータを受け取る。保護されるＶＭ内で実行されるコンポーネントから受け取られるプロセス評価インジケータは、たとえば、評価されるプロセスがＯＳのレジストリ値を変更しようとする試み、またはファイルを削除しようとする試みなど、マルウェアを示唆する挙動を行ったことを示すことができる。それぞれのＶＭの外で判断されるプロセス評価インジケータは、たとえば、評価されるプロセスが、保護されるメモリセクションに書き込もうと試みていることを示すことができる。プロセス評価インジケータは、それぞれのプロセスの悪意の程度を示す数値スコアを含むことができる。いくつかの実施形態では、プロセススコアリングモジュールは、様々なプロセス評価器から受け取られる複数のプロセス評価インジケータ／スコアにより総スコアを判断し、総スコアにより、評価されるプロセスが悪意のあるものであるかどうかを判断する。
【００６５】
[0076]上記の実施形態は、本発明の範囲を逸脱することなく多くの方法で変更され得ることは、当業者には明らかであろう。したがって、本発明の範囲は、添付の特許請求の範囲およびそれらの法的同等物によって決定されるべきである。
【図１】
0006378758.tif 000002
【図２】
0006378758.tif 000003
【図３】
0006378758.tif 000004
【図４】
0006378758.tif 000005
【図５】
0006378758.tif 000006
【図６】
0006378758.tif 000007
【図７】
0006378758.tif 000008
【図８】
0006378758.tif 000009
【図９】
0006378758.tif 000010
【図１０】
0006378758.tif 000011
【図１１】
0006378758.tif 000012