(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-07
(45)【発行日】2022-03-15
(54)【発明の名称】仮想マシンセキュリティ適用例のためのイベントフィルタ処理
(51)【国際特許分類】
G06F 21/56 20130101AFI20220308BHJP
G06F 21/62 20130101ALI20220308BHJP
【FI】
G06F21/56 360
G06F21/62 318
(21)【出願番号】P 2019527801
(86)(22)【出願日】2017-12-19
(86)【国際出願番号】 EP2017083579
(87)【国際公開番号】W WO2018114970
(87)【国際公開日】2018-06-28
【審査請求日】2020-12-09
(32)【優先日】2016-12-19
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2017-12-18
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】312016539
【氏名又は名称】ビットディフェンダー アイピーアール マネジメント リミテッド
(74)【代理人】
【識別番号】100140109
【氏名又は名称】小野 新次郎
(74)【代理人】
【識別番号】100118902
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100106208
【氏名又は名称】宮前 徹
(74)【代理人】
【識別番号】100120112
【氏名又は名称】中西 基晴
(74)【代理人】
【識別番号】100196508
【氏名又は名称】松尾 淳一
(72)【発明者】
【氏名】ルツァス,アンドレイ-ヴラド
【審査官】青木 重徳
(56)【参考文献】
【文献】特表2016-536667(JP,A)
【文献】米国特許出願公開第2016/0048679(US,A1)
【文献】米国特許出願公開第2015/0199514(US,A1)
【文献】中国特許第102523215(CN,B)
【文献】佐藤 将也 ほか,プロセス情報不可視化のための仮想計算機モニタによるメモリアクセス制御機能の評価,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2016年07月07日,Vol.116 No.132,p.153-159
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/56
G06F 21/62
(57)【特許請求の範囲】
【請求項1】
ハードウェアプロセッサとメモリとを備えるホストシステムであって、前記ハードウェアプロセッサは、仮想マシン(VM)と、イベントフィルタと、イントロスペクションエンジンとを実行するように構成され、前記イベントフィルタは前記VM内で実行され、前記イントロスペクションエンジンは前記VMの外部で実行され、前記ハードウェアプロセッサは、
前記VM内で実行されるソフトウェアエンティティによる、メモリアクセス許可に違反する様式でのメモリロケーションにアクセスする試みを検出したことに応答して、第1の例外を生成することと、
前記第1の例外に応答して、前記ソフトウェアエンティティの実行から前記イベントフィルタの実行に切り替えることと、
第2の例外に応答して、前記イベントフィルタの実行から前記イントロスペクションエンジンの実行に切り替えることと
を行うようにさらに構成され、
前記イベントフィルタは、
前記第1の例外に応答して、イベント適格性基準に従って、前記試みが前記イントロスペクションエンジンへの通知に適格であるかどうかを判定することと、
前記試みが通知に適格であるかどうかを判定したことに応答して、前記試みが適格であるときに、前記プロセッサに、前記第2の例外を生成させることと、
前記試みが通知に適格であるかどうかを判定したことに応答して、前記試みが適格でないときに、前記プロセッサが前記第2の例外を生成することを防ぎ、代わりに、前記プロセッサに、前記ソフトウェアエンティティの実行を再開させることと
を行うように構成され、
前記イントロスペクションエンジンは、前記試みが悪意のあるものであるかどうかを判定するように構成された、
ホストシステム。
【請求項2】
請求項1に記載のホストシステムであって、前記試みが通知に適格であるかどうかを判定することは、
メモリページのセクションが、保護されたオブジェクトの一部を記憶するかどうかを判定することであって、前記セクションは前記メモリロケーションによって示される、判定することと、
前記セクションが、前記保護されたオブジェクトの前記一部を記憶するかどうかを判定したことに応答して、前記セクションが、前記保護されたオブジェクトの前記一部を記憶するときに、前記試みが適格であると判定することと、
前記セクションが、前記保護されたオブジェクトの前記一部を記憶するかどうかを判定したことに応答して、前記セクションが、前記保護されたオブジェクトの前記一部を記憶しないときに、前記試みが適格でないと判定することと
を含む、ホストシステム。
【請求項3】
請求項2に記載のホストシステムであって、前記メモリページは、さらに、保護されていないオブジェクトの一部を記憶する、ホストシステム。
【請求項4】
請求項2に記載のホストシステムであって、前記保護されたオブジェクトは、前記VMのためのメモリアドレス変換を実施するために前記ハードウェアプロセッサによって使用されるページテーブルを含む、ホストシステム。
【請求項5】
請求項
4に記載のホストシステムであって、前記試みが通知に適格であるかどうかを判定することは、前記試みが、前記ページテーブルのページテーブルエントリの制御ビットの値を上書きする試みを含むかどうかを判定することをさらに含む、ホストシステム。
【請求項6】
請求項
4に記載のホストシステムであって、前記試みが通知に適格であるかどうかを判定することは、前記試みが、前記ページテーブルのページテーブルエントリのアドレスフィールドのコンテンツを上書きする試みを含むかどうかを判定することをさらに含む、ホストシステム。
【請求項7】
請求項1に記載のホストシステムであって、前記試みが悪意のあるものであるかどうかを判定することは、
前記試みが、前記仮想マシン内で実行されるオペレーティングシステムの構成要素によって実施されたかどうかを判定するために前記イントロスペクションエンジンを利用することと、
それに応じて、前記試みが前記オペレーティングシステムの前記構成要素によって実施されたときに、前記試みが悪意のあるものでないと判定することと
を含む、ホストシステム。
【請求項8】
コンピュータセキュリティ脅威からホストシステムを保護する方法であって、前記ホストシステムは、ハードウェアプロセッサとメモリとを備え、前記ハードウェアプロセッサは、仮想マシン(VM)と、イベントフィルタと、イントロスペクションエンジンとを実行するように構成され、前記イベントフィルタは前記VM内で実行され、前記イントロスペクションエンジンは前記VMの外部で実行され、前記方法は、
前記VM内で実行されるソフトウェアエンティティによる、メモリアクセス許可に違反する様式でのメモリロケーションにアクセスする試みを検出したことに応答して、第1の例外を生成するように、前記ハードウェアプロセッサを構成するステップと、
前記第1の例外に応答して、前記ソフトウェアエンティティの実行から前記イベントフィルタの実行に切り替えるように、前記ハードウェアプロセッサを構成するステップと、
第2の例外に応答して、前記イベントフィルタの実行から前記イントロスペクションエンジンの実行に切り替えるように、前記ハードウェアプロセッサを構成するステップと、
前記第1の例外に応答して、イベント適格性基準に従って、前記試みが前記イントロスペクションエンジンへの通知に適格であるかどうかを判定するために、前記イベントフィルタを利用するステップと、
前記試みが通知に適格であるかどうかを判定したことに応答して、前記試みが適格であるときに、前記プロセッサに、前記第2の例外を生成させるステップと、
前記試みが通知に適格であるかどうかを判定したことに応答して、前記試みが適格でないときに、前記プロセッサが前記第2の例外を生成することを防ぎ、代わりに、前記プロセッサに、前記ソフトウェアエンティティの実行を再開させるステップと、
前記第2の例外に応答して、前記試みが悪意のあるものであるかどうかを判定するために前記イントロスペクションエンジンを利用するステップと
を含む、方法。
【請求項9】
請求項8に記載の方法であって、前記試みが通知に適格であるかどうかを判定するステップは、
メモリページのセクションが、保護されたオブジェクトの一部を記憶するかどうかを判定するステップであって、前記セクションは前記メモリロケーションによって示される、判定するステップと、
前記セクションが、前記保護されたオブジェクトの前記一部を記憶するかどうかを判定したことに応答して、前記セクションが、前記保護されたオブジェクトの前記一部を記憶するときに、前記試みが適格であると判定するステップと、
前記セクションが、前記保護されたオブジェクトの前記一部を記憶するかどうかを判定したことに応答して、前記セクションが、前記保護されたオブジェクトの前記一部を記憶しないときに、前記試みが適格でないと判定するステップと
を含む、方法。
【請求項10】
請求項9に記載の方法であって、前記メモリページは、さらに、保護されていないオブジェクトの一部を記憶する、方法。
【請求項11】
請求項9に記載の方法であって、前記保護されたオブジェクトは、前記VMのためのメモリアドレス変換を実施するために前記ハードウェアプロセッサによって使用されるページテーブルを含む、方法。
【請求項12】
請求項11に記載の方法であって、前記試みが通知に適格であるかどうかを判定するステップは、前記試みが、前記ページテーブルのページテーブルエントリの制御ビットの値を上書きする試みを含むかどうかを判定するステップをさらに含む、方法。
【請求項13】
請求項11に記載の方法であって、前記試みが通知に適格であるかどうかを判定するステップは、前記試みが、前記ページテーブルのページテーブルエントリのアドレスフィールドのコンテンツを上書きする試みを含むかどうかを判定するステップをさらに含む、方法。
【請求項14】
請求項8に記載の方法であって、前記試みが悪意のあるものであるかどうかを判定するステップは、
前記試みが、前記仮想マシン内で実行されるオペレーティングシステムの構成要素によって実施されたかどうかを判定するために前記イントロスペクションエンジンを利用するステップと、
それに応じて、前記試みが前記オペレーティングシステムの前記構成要素によって実施されたときに、前記試みが悪意のあるものでないと判定するステップと
を含む、方法。
【請求項15】
仮想マシン
(VM)を公開するホストシステムのハードウェアプロセッサによって実行されたときに、前記ホストシステムに、イベントフィルタおよびイントロスペクションエンジンを形成させる命令を記憶する非一時的コンピュータ可読媒体であって、前記イベントフィルタが前記VM内で実行され、前記イントロスペクションエンジンが前記VMの外部で実行され、
前記イントロスペクションエンジンは、
前記VM内で実行されるソフトウェアエンティティによる、メモリアクセス許可に違反する様式でのメモリロケーションにアクセスする試みを検出したことに応答して、第1の例外を生成するように、前記ハードウェアプロセッサを構成することと、
前記第1の例外に応答して、前記ソフトウェアエンティティの実行から前記イベントフィルタの実行に切り替えるように、前記ハードウェアプロセッサを構成することと、
第2の例外に応答して、前記イベントフィルタの実行から前記イントロスペクションエンジンの実行に切り替えるように、前記ハードウェアプロセッサを構成することと、
前記第2の例外に応答して、前記試みが悪意のあるものであるかどうかを判定することと
を行うように構成され、
前記イベントフィルタは、
前記第1の例外に応答して、イベント適格性基準に従って、前記試みが前記イントロスペクションエンジンへの通知に適格であるかどうかを判定することと、
前記試みが通知に適格であるかどうかを判定したことに応答して、前記試みが適格であるときに、前記プロセッサに、前記第2の例外を生成させることと、
前記試みが通知に適格であるかどうかを判定したことに応答して、前記試みが適格でないときに、前記プロセッサが前記第2の例外を生成することを防ぎ、代わりに、前記プロセッサに、前記ソフトウェアエンティティの実行を再開させることと
を行うように構成された、
非一時的コンピュータ可読媒体。
【請求項16】
請求項15に記載のコンピュータ可読媒体であって、前記試みが通知に適格であるかどうかを判定することは、
メモリページのセクションが、保護されたオブジェクトの一部を記憶するかどうかを判定することであって、前記セクションは前記メモリロケーションによって示される、判定することと、
前記セクションが、前記保護されたオブジェクトの前記一部を記憶するかどうかを判定したことに応答して、前記セクションが、前記保護されたオブジェクトの前記一部を記憶するときに、前記試みが適格であると判定することと、
前記セクションが、前記保護されたオブジェクトの前記一部を記憶するかどうかを判定したことに応答して、前記セクションが、前記保護されたオブジェクトの前記一部を記憶しないときに、前記試みが適格でないと判定することと
を含む、コンピュータ可読媒体。
【請求項17】
請求項16に記載のコンピュータ可読媒体であって、前記メモリページは、さらに、保護されていないオブジェクトの一部を記憶する、コンピュータ可読媒体。
【請求項18】
請求項16に記載のコンピュータ可読媒体であって、前記保護されたオブジェクトは、前記VMのためのメモリアドレス変換を実施するために前記ハードウェアプロセッサによって使用されるページテーブルを含む、コンピュータ可読媒体。
【請求項19】
請求項18に記載のコンピュータ可読媒体であって、前記試みが通知に適格であるかどうかを判定することは、前記試みが、前記ページテーブルのページテーブルエントリの制御ビットの値を上書きする試みを含むかどうかを判定することをさらに含む、コンピュータ可読媒体。
【請求項20】
請求項18に記載のコンピュータ可読媒体であって、前記試みが通知に適格であるかどうかを判定することは、前記試みが、前記ページテーブルのページテーブルエントリのアドレスフィールドのコンテンツを上書きする試みを含むかどうかを判定することをさらに含む、コンピュータ可読媒体。
【請求項21】
請求項15に記載のコンピュータ可読媒体であって、前記試みが悪意のあるものであるかどうかを判定することは、
前記試みが、前記仮想マシン内で実行されるオペレーティングシステムの構成要素によって実施されたかどうかを判定するために前記イントロスペクションエンジンを利用することと、
それに応じて、前記試みが前記オペレーティングシステムの前記構成要素によって実施されたときに、前記試みが悪意のあるものでないと判定することと
を含む、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願
[0001]本出願は、その内容全体が参照により本明細書に組み込まれる、2016年12月19日に出願された「Event Filter for Accelerating Computer Security Operations in Virtual Machines(仮想マシンにおけるコンピュータセキュリティ動作を加速するためのイベントフィルタ)」という名称の米国仮特許出願第62,436,027号の出願日の利益を主張する。
【0002】
[0002]本発明は、コンピュータセキュリティシステムおよび方法に関し、詳細には、悪意のあるソフトウェアから仮想マシンを保護するためのシステムおよび方法に関する。
【背景技術】
【0003】
[0003]マルウェアとしても知られる、悪意のあるソフトウェアは、世界中の多くのコンピュータシステムに影響を及ぼす。コンピュータウイルス、ルートキット、スパイウェア、およびランサムウェアなど、その多くの形態で、マルウェアは、何百万人ものコンピュータユーザに深刻なリスクをもたらし、特に、データおよび機密情報の損失、個人情報の盗難、生産性の損失の影響を受けやすくしている。マルウェアからコンピュータシステムを保護するためにコンピュータセキュリティソフトウェアが使用されることがある。
【0004】
[0004]ハードウェア仮想化技術は、物理コンピュータシステムとして様々に挙動する、一般に仮想マシン(VM)として知られるシミュレートされたコンピュータ環境の作成を可能にする。サーバコンソリデーション、および(「クラウドコンピューティング」という普及している名称でも知られる)サービスとしてのインフラストラクチャ(infrastructure-as-a-service)など、一般的な適用例では、いくつかの仮想マシンが、同じコンピュータシステム上で同時に動作し、それらの仮想マシンの間でハードウェアリソースを共有し、したがって、投資および事業コストを低減し得る。各仮想マシンは、他の仮想マシンとは別に、それ自体のオペレーティングシステムおよび/またはソフトウェアアプリケーションを実行し得る。各そのようなVMは、コンピュータセキュリティ脅威からの保護を潜在的に必要とする。
【0005】
[0005]保護された仮想マシンの外部にコンピュータセキュリティソフトウェアを配置することが、一般に、高度の保護を保証する。しかしながら、コンピュータセキュリティソフトウェアの動作は、そのような構成で行われるとき、仮想化されない環境と比較して、かなりより複雑であり、計算コストが高い。従来のハードウェア仮想化アンチマルウェアシステムでは、保護されたVM内で発生するセキュリティ関連イベントが、一般に、ハードウェアプロセッサに、それぞれのVMの実行を中断させ、保護されたVMの外部のセキュリティソフトウェアを実行することに切り替えさせる。次いで、プロセッサは、イベント分析に応答して、保護されたVMを実行することにまた切り替え得る。頻繁なVM中断/再開サイクルは、かなりの計算コストをもたらし、生産性およびユーザエクスペリエンスに影響し得る。
【発明の概要】
【発明が解決しようとする課題】
【0006】
[0006]ハードウェア仮想化プラットフォームにおけるコンピュータセキュリティ動作の効率を改善することへのかなりの関心がある。
【課題を解決するための手段】
【0007】
[0007]一態様によれば、ホストシステムが、ハードウェアプロセッサとメモリとを備える。ハードウェアプロセッサは、仮想マシン(VM)と、イベントフィルタと、イントロスペクションエンジンとを実行するように構成され、イベントフィルタはVM内で実行され、イントロスペクションエンジンはVMの外部で実行される。ハードウェアプロセッサは、VM内で実行されるソフトウェアエンティティによる、メモリアクセス許可に違反する様式でのメモリロケーションにアクセスする試みを検出したことに応答して、第1の例外を生成することと、第1の例外に応答して、ソフトウェアエンティティを実行することからイベントフィルタを実行することに切り替えることとを行うようにさらに構成される。ハードウェアプロセッサは、第2の例外に応答して、イベントフィルタを実行することからイントロスペクションエンジンを実行することに切り替えるようにさらに構成される。イベントフィルタは、第1の例外に応答して、イベント適格性基準に従って、試みがイントロスペクションエンジンへの通知に適格であるかどうかを判定するように構成される。イベントフィルタは、試みが通知に適格であるかどうかを判定したことに応答して、試みが適格であるとき、プロセッサに、第2の例外を生成させることと、試みが適格でないとき、プロセッサが第2の例外を生成することを防ぎ、代わりに、プロセッサに、ソフトウェアエンティティを実行することを再開させることとを行うようにさらに構成される。イントロスペクションエンジンは、試みが悪意のあるものであるかどうかを判定するように構成される。
【0008】
[0008]別の態様によれば、方法が、コンピュータセキュリティ脅威からホストシステムを保護する。ホストシステムは、ハードウェアプロセッサとメモリとを備え、ハードウェアプロセッサは、仮想マシン(VM)と、イベントフィルタと、イントロスペクションエンジンとを実行するように構成され、イベントフィルタはVM内で実行され、イントロスペクションエンジンはVMの外部で実行される。本方法は、VM内で実行されるソフトウェアエンティティによる、メモリアクセス許可に違反する様式でのメモリロケーションにアクセスする試みを検出したことに応答して、第1の例外を生成するように、ハードウェアプロセッサを構成するステップを含む。本方法は、第1の例外に応答して、ソフトウェアエンティティを実行することからイベントフィルタを実行することに切り替えることと、第2の例外に応答して、イベントフィルタを実行することからイントロスペクションエンジンを実行することに切り替えることとを行うように、ハードウェアプロセッサを構成するステップをさらに含む。本方法は、第1の例外に応答して、イベント適格性基準に従って、試みがイントロスペクションエンジンへの通知に適格であるかどうかを判定するために、イベントフィルタを利用するステップをさらに含む。本方法は、試みが通知に適格であるかどうかを判定したことに応答して、試みが適格であるとき、プロセッサに、第2の例外を生成させるステップと、試みが適格でないとき、プロセッサが第2の例外を生成することを防ぎ、代わりに、プロセッサに、ソフトウェアエンティティを実行することを再開させるステップとをさらに含む。本方法は、第2の例外に応答して、試みが悪意のあるものであるかどうかを判定するためにイントロスペクションエンジンを利用するステップをさらに含む。
【0009】
[0009]別の態様によれば、非一時的コンピュータ可読媒体が、仮想マシンを公開するホストシステムのハードウェアプロセッサによって実行されたとき、ホストシステムに、イベントフィルタおよびイントロスペクションエンジンを形成させる、命令を記憶し、イベントフィルタはVM内で実行され、イントロスペクションエンジンはVMの外部で実行される。イントロスペクションエンジンは、VM内で実行されるソフトウェアエンティティによる、メモリアクセス許可に違反する様式でのメモリロケーションにアクセスする試みを検出したことに応答して、第1の例外を生成するように、ハードウェアプロセッサを構成するように構成される。イントロスペクションエンジンは、第1の例外に応答して、ソフトウェアエンティティを実行することからイベントフィルタを実行することに切り替えることと、第2の例外に応答して、イベントフィルタを実行することからイントロスペクションエンジンを実行することに切り替えることとを行うように、ハードウェアプロセッサを構成するようにさらに構成される。イントロスペクションエンジンは、第2の例外に応答して、試みが悪意のあるものであるかどうかを判定するようにさらに構成される。イベントフィルタは、第1の例外に応答して、イベント適格性基準に従って、試みがイントロスペクションエンジンへの通知に適格であるかどうかを判定するように構成される。イベントフィルタは、試みが通知に適格であるかどうかを判定したことに応答して、試みが適格であるとき、プロセッサに、第2の例外を生成させることと、試みが適格でないとき、プロセッサが第2の例外を生成することを防ぎ、代わりに、プロセッサに、ソフトウェアエンティティを実行することを再開させることとを行うようにさらに構成される。
【0010】
[0010]本発明の前述の態様および利点は、以下の詳細な説明を読み、図面を参照すると、より良く理解されるようになるであろう。
【図面の簡単な説明】
【0011】
【
図1】[0011]本発明のいくつかの実施形態による、ホストシステムの例示的なハードウェア構成を示す図である。
【
図2】[0012]本発明のいくつかの実施形態による、ホストシステム上で実行されるハイパーバイザによって公開されるゲスト仮想マシン(VM)のセットと、それぞれのVMを保護するセキュリティ構成要素のセットとを示す図である。
【
図3】[0013]
図2に示されている仮想マシンの構成における例示的なメモリアドレス変換を示す図である。
【
図4】[0014]本発明のいくつかの実施形態による、例示的なページテーブルエントリを示す図である。
【
図5】[0015]本発明のいくつかの実施形態による、保護されたゲスト仮想マシン内で実行されるイベントフィルタの例示的な構成要素を示す図である。
【
図6】[0016]本発明のいくつかの実施形態による、ホストシステム上にセキュリティソフトウェアをインストールし、初期化するために実施されるステップの例示的なシーケンスを示す図である。
【
図7】[0017]本発明のいくつかの実施形態による、イベントフィルタによって行われるステップの例示的なシーケンスを示す図である。
【
図8】[0018]本発明のいくつかの実施形態による、インターセプトされたイベントがイントロスペクションエンジンへの通知に適格であるかどうかを判定するために、イベントフィルタの適格性チェッカー構成要素によって実施されるステップの例示的なシーケンスを示す図である。
【
図9】[0019]本発明のいくつかの実施形態による、インターセプトされたイベントが通知に適格であるかどうかを判定するために、適格性チェッカーによって実施されるステップの別の例示的なシーケンスを示す図である。
【
図10】[0020]本発明のいくつかの実施形態による、イントロスペクションエンジンによって実施されるステップの例示的なシーケンスを示す図である。
【発明を実施するための形態】
【0012】
[0021]以下の説明では、構造間のすべての列挙された接続が、直接の動作的な接続、または中間構造を通しての間接の動作的な接続であり得ることを理解されたい。要素のセットは、1つまたは複数の要素を含む。要素の任意の列挙は、少なくとも1つの要素を指すと理解される。複数の要素は、少なくとも2つの要素を含む。別段に必要とされない限り、説明される方法ステップは、必ずしも特定の示される順序で実施される必要があるとは限らない。第2の要素から導出された第1の要素(たとえばデータ)は、第2の要素に等しい第1の要素、ならびに第2の要素および随意に他のデータを処理することによって生成された第1の要素を包含する。パラメータに従って決定(判定)または判断を行うことは、パラメータに従っておよび随意に他のデータに従って決定(判定)または判断を行うことを包含する。別段に規定されていない限り、何らかの量/データのインジケータは、量/データ自体であるか、または量/データ自体とは異なるインジケータであり得る。コンピュータセキュリティは、データおよび/またはハードウェアへの意図しないまたは無認可のアクセスと、データおよび/またはハードウェアの意図しないまたは無認可の変更と、データおよび/またはハードウェアの破壊とからユーザおよび機器を保護することを包含する。コンピュータプログラムは、タスクを行うプロセッサ命令のシーケンスである。本発明のいくつかの実施形態で説明されるコンピュータプログラムは、他のコンピュータプログラムのスタンドアロンソフトウェアエンティティまたはサブエンティティ(たとえば、サブルーチン、ライブラリ)であり得る。別段に規定されていない限り、プロセスは、アプリケーションまたはオペレーティングシステムの一部など、コンピュータプログラムのインスタンスであり、少なくとも実行スレッド、および実行スレッドに割り当てられた仮想メモリ空間を有することによって特徴づけられ、それぞれの仮想メモリ空間のコンテンツは実行コードを含む。別段に規定されていない限り、ページは、ホストシステムの物理メモリに個々にマッピングされ得る仮想メモリの最小単位を表す。プログラムは、プログラムがそれぞれの仮想マシンの仮想プロセッサ上で実行されるとき、仮想マシン内でまたはそれの内部で実行されると言われる。コンピュータ可読媒体は、磁気、光、および半導体記憶媒体などの非一時的媒体(たとえばハードドライブ、光ディスク、フラッシュメモリ、DRAM)、ならびに導電性ケーブルおよび光ファイバーリンクなどの通信リンクを包含する。いくつかの実施形態によれば、本発明は、とりわけ、本明細書で説明される方法を実施するようにプログラムされたハードウェア(たとえば1つまたは複数のプロセッサ)を備えるコンピュータシステム、ならびに本明細書で説明される方法を実施するための命令を符号化するコンピュータ可読媒体を提供する。
【0013】
[0022]以下の説明は、本発明の実施形態を例として示し、必ずしも限定として示すとは限らない。
[0023]
図1は、本発明のいくつかの実施形態による、コンピュータセキュリティ脅威から保護されるホストシステム10の例示的なハードウェア構成を示す。ホストシステム10は、企業サーバなどの企業コンピューティングデバイス、あるいはパーソナルコンピュータ、タブレットコンピュータ、またはスマートフォンなどのエンドユーザデバイスを表し得る。他の例示的なホストシステムは、ゲーム機、スマートTVなどの家庭用器具、ウェアラブルコンピューティングデバイス、またはメモリとプロセッサとを有する任意の他のデバイスを含む。ホストシステム10は、特に、ブラウザ、ワードプロセシングアプリケーション、および電子通信(たとえば、電子メール、インスタントメッセージング)アプリケーションなど、ソフトウェアアプリケーションのセットを実行するために使用され得る。いくつかの実施形態では、ホストシステム10は、以下に示すように、ハードウェア仮想化をサポートすることと、仮想マシンのセットを公開することとを行うように構成される。
【0014】
[0024]簡単のために、
図1は、コンピュータシステムを示し、スマートフォンおよびタブレットコンピュータなど、他のホストシステムのハードウェア構成は異なり得る。システム10は、すべてコントローラハブ24によって相互接続された、プロセッサ12、メモリユニット18、入力デバイス14のセット、出力デバイス16のセット、ストレージデバイス20のセット、およびネットワークアダプタ22のセットを含む、物理デバイスのセットを備える。プロセッサ12は、信号および/またはデータのセットを用いた計算および/または論理演算を実行するように構成された物理デバイス(たとえば、マイクロプロセッサ、半導体基板上に形成されたマルチコア集積回路)を備える。いくつかの実施形態では、そのような論理演算は、プロセッサ命令のシーケンスの形態(たとえば機械コードまたは他のタイプのソフトウェア)でプロセッサ12に配信される。メモリユニット18は、命令を行う間にプロセッサ12によってアクセスまたは生成されるデータ/信号を記憶する揮発性コンピュータ可読媒体(たとえばRAM)を備え得る。
【0015】
[0025]入力デバイス14は、ユーザがデータおよび/または命令をホストシステム10に導入することを可能にするそれぞれのハードウェアインターフェースおよび/またはアダプタを含む、特に、コンピュータキーボード、マウス、およびマイクロフォンを含み得る。出力デバイス16は、特に、モニタなどのディスプレイデバイスおよびスピーカー、ならびにホストシステム10がデータをユーザに通信することを可能にする、グラフィックカードなどのハードウェアインターフェース/アダプタを含み得る。いくつかの実施形態では、入力デバイス14と出力デバイス16とは、タッチスクリーンデバイスの場合のように、共通のハードウェアを共有し得る。ストレージデバイス20は、プロセッサ命令および/またはデータの不揮発性記憶、読取り、および書込みを可能にするコンピュータ可読媒体を含む。例示的なストレージデバイス20は、磁気ディスクおよび光ディスクおよびフラッシュメモリデバイス、ならびにCDおよび/またはDVDのディスクおよびドライブなどのリムーバブル媒体を含む。ネットワークアダプタ22のセットは、ホストシステム10がコンピュータネットワークおよび/または他のデバイス/コンピュータシステムに接続することを可能にする。コントローラハブ24は、複数のシステム、周辺機器、および/またはチップセットバス、ならびに/あるいはプロセッサ12とデバイス14、16、18、20および22との間の通信を可能にするすべての他の回路を総称的に表す。たとえば、コントローラハブ24は、特に、メモリ管理ユニット(MMU)と、入出力(I/O)コントローラと、割込みコントローラとを含み得る。別の例では、コントローラハブ24は、プロセッサ12をメモリ18に接続するノースブリッジ、および/またはプロセッサ12をデバイス14、16、20、および22に接続するサウスブリッジを備え得る。いくつかのハードウェアプラットフォームでは、MMUは、部分的にまたは完全にプロセッサ12と統合され、すなわち、MMUは、共通半導体基板をプロセッサ12と共有する。
【0016】
[0026]
図2は、本発明のいくつかの実施形態による、セキュリティ構成要素のセットがコンピュータセキュリティ脅威から仮想マシンのセットを保護するように共同する、例示的な構成を示す。図示されたホストシステム10は、ハイパーバイザ30によって公開されるゲスト仮想マシン(VM)のセット32a~32bを動作させるために、ハードウェア仮想化技術を使用する。
図2は、わずか2つのゲストVMを示すように作成されたが、いくつかの実施形態は、コンカレントに動作するより多くのVM(たとえば、数百)をホストし得る。複数の仮想マシンを管理するためにハイパーバイザを使用することは、特に、クラウドコンピューティングおよびサーバコンソリデーションなどの適用例において一般的である。普及しているハイパーバイザの例としては、特に、VMware社からのVMware vSphere(登録商標)およびオープンソースXenハイパーバイザがある。
【0017】
[0027]仮想マシンは、オペレーティングシステムおよび他のアプリケーションを実行することが可能な、実際の物理マシン/コンピュータシステムのエミュレーションとして当技術分野で知られている。いくつかの実施形態では、ハイパーバイザ30は、仮想プロセッサおよび仮想コントローラなど、複数の仮想化されたデバイスを作成するかまたは可能にすることと、ホストシステム10の実際の物理デバイスの代わりにソフトウェアにそのような仮想化されたデバイスを提示することとを行うように構成されたソフトウェアを含む。ハイパーバイザ30のそのような動作は、一般に、仮想マシンを公開することとして当技術分野で知られている。ハイパーバイザ30は、一般に、複数の仮想マシンによってホストシステム10のハードウェアリソースの多重化(共有)を可能にする。ハイパーバイザ30は、さらに、各ゲストVM32a~32bが、独立して動作し、ホストシステム10上でコンカレントに実行される他のVMに気づかないように、ホストシステム10のハードウェアを管理し得る。
【0018】
[0028]各仮想化されたデバイス(たとえば、プロセッサ、入力、出力、ストレージなど)は、ホストシステム10のそれぞれの物理デバイスの機能のうちの少なくともいくつかをエミュレートする。たとえば、ゲストVMの仮想化されたプロセッサ上で実行されるソフトウェアは、仮想化されたネットワークアダプタを介してネットワークトラフィックを送信および/または受信し得る。いくつかの例では、ハイパーバイザ30は、各ゲストVMに仮想化されたデバイスのサブセットのみ(たとえば、仮想化されたプロセッサ、メモリ、およびコントローラハブの一部のみ)を公開し得る。ハイパーバイザ30はまた、選択されたVMにホストシステム10のいくつかのハードウェアデバイスの直接および排他的使用を与え得る。1つのそのような例では、ゲストVM32a(
図2)は、入力デバイス14および出力デバイス16の排他的使用を有するが、仮想化されたネットワークアダプタを欠き得る。一方、ゲストVM32bは、(1つまたは複数の)ネットワークアダプタ22の直接および排他的使用を有し得る。そのような構成は、たとえば、Intel(登録商標)からのVT-d(登録商標)技術を使用して実装され得る。
【0019】
[0029]いくつかの実施形態では、各ゲストVM32a~32bを公開することは、それぞれのゲストVMの動作を管理するためにハイパーバイザ30によって使用されるデータ構造を構成することを含む。そのような構造は、本明細書では仮想マシン状態オブジェクト(VMSO)と呼ばれる。例示的なVMSOは、Intel(登録商標)プラットフォーム上の仮想マシン制御構造(VMCS)と、AMD(登録商標)プラットフォーム上の仮想マシン制御ブロック(VMCB)とを含む。いくつかの実施形態では、プロセッサ16は、メモリ中の領域を各VMSOに関連付け、その結果、ソフトウェアが、メモリアドレスまたはポインタ(たとえば、Intel(登録商標)プラットフォーム上のVMCSポインタ)を使用して特定のVMSOを参照し得る。
【0020】
[0030]各VMSOは、ホストシステム10上に公開されるそれぞれの仮想化されたプロセッサの現在の状態を表すデータを含み得る。マルチスレッディング構成では、ハードウェアプロセッサ12は、複数のコアを動作させ得、各コアは、複数の論理プロセッサをさらに備え、各論理プロセッサは、他の論理プロセッサとは無関係に、およびそれらと同時に、実行スレッドを処理し得る。複数の論理プロセッサは、いくつかのハードウェアリソース、たとえば、共通MMUを共有し得る。マルチスレッド実施形態では、各別個の論理プロセッサについて、別個のVMSOがセットアップされ得る。それぞれのVMSOは、ゲスト状態エリアとホスト状態エリアとを含み得、ゲスト状態エリアは、それぞれのVMのCPU状態を保持し、ホスト状態エリアは、ハイパーバイザ30の現在の状態を記憶する。いくつかの実施形態では、VMSOのゲスト状態エリアは、特に、それぞれのVMの仮想プロセッサの制御レジスタ(たとえば、CR0、CR3など)、命令ポインタ(たとえば、RIP)、汎用レジスタ(たとえば、EAX、ECXなど)、および状態レジスタ(たとえば、EFLAGS)のコンテンツを含む。VMSOのホスト状態エリアは、それぞれのVMのためのアドレス変換のために構成されたページテーブルへのポインタ(たとえば、Intel(登録商標)プラットフォーム上のEPTポインタ)を含み得る。
【0021】
[0031]いくつかの実施形態では、プロセッサ12は、専用内部レジスタ/キャッシュ内にVMSOの一部を記憶し得、それぞれのVMSOの他の一部は、メモリ18中にあり得る。所与の時間において、(本明細書では、現在のVMSOと呼ばれる)多くとも1つのVMSOが、論理プロセッサ上にロードされ得、それぞれの論理プロセッサの制御を現在有する仮想マシンを識別する。プロセッサ12が、第1のVMを実行することから第2のVMまたはハイパーバイザ30を実行することに切り替えるとき、プロセッサ12は、現在のVMSOのゲスト状態エリアに第1のVMの現在の状態を保存し得る。
【0022】
[0032]図示されたゲストVM(
図2)の各々は、それぞれ、ゲストオペレーティングシステム(OS)34a~34bを実行し得る。オペレーティングシステム34a~34bは、特に、Microsoft Windows(登録商標)、MacOS(登録商標)、Linux(登録商標)、iOS(登録商標)、またはAndroid(登録商標)など、任意の広く利用可能なオペレーティングシステムを含み得る。各OS34a~34bは、それぞれのVM内で実行されるアプリケーションとそれぞれのVMの(仮想化された)ハードウェアデバイスと間のインターフェースを提供する。例示的なアプリケーションのセット36a~36bは、特に、ワードプロセシング、画像処理、メディアプレーヤ、データベース、カレンダー、個人連絡先管理、ブラウザ、ゲーミング、音声通信、データ通信、およびコンピュータセキュリティアプリケーションなど、任意のソフトウェアアプリケーションを総称的に表す。以下の説明では、仮想マシンの仮想プロセッサ上で実行されるソフトウェアは、それぞれの仮想マシン内で実行されると言われる。たとえば、
図2の例では、アプリケーション36aは、ゲストVM32a内で実行されると言われ、アプリケーション36bは、ゲストVM32b内で実行されると言われる。対照的に、ハイパーバイザ30は、ゲストVM32a~32bの外部、またはその下で実行されると言われる。
【0023】
[0033]いくつかの実施形態では、複数のセキュリティ構成要素は、悪意のあるソフトウェアなどのコンピュータセキュリティ脅威からゲストVM32a~32bを保護するように共同する。
図2は、それぞれ、ゲストVM32a~32b内で実行されるイベントフィルタのセット42a~42b、およびゲストVM32a~32bの外部で実行されるイントロスペクションエンジン40としての、そのようなセキュリティ構成要素を示す。イントロスペクションエンジン40は、通知ハンドラ44をさらに含み得る。いくつかの実施形態では、各イベントフィルタ42a~42bは、それぞれのゲストVM内でのソフトウェアの実行中に、いくつかのイベントの発生を検出する。フィルタ42a~42bによってインターセプトされる例示的なイベントは、特に、プロセッサ例外および/または割込み、OS34a~34bのいくつかの機能を呼び出すこと、OS34a~34bのレジストリにアクセスすること、遠隔ロケーションからファイルをダウンロードすること、ならびにファイルにデータを書き込むことを含む。いくつかの実施形態では、フィルタ42a~42bは、それぞれのオペレーティングシステムのプロセッサ特権レベル(たとえば、カーネルモード)において実行される。
【0024】
[0034]イベントフィルタ42a~42bは、特にコンピュータセキュリティに関連するイベントのサブセットを識別するために、およびイベントの選択されたサブセットの発生についてイントロスペクションエンジン40に通知するために、ルールのセットに従って、検出されたイベントをフィルタ処理し得る。いくつかの実施形態では、イントロスペクションエンジン40は、それぞれのイベントがマルウェア攻撃を示すかどうかを判定するために、受信された通知を分析する。エンジン40はまた、ゲストVM内で実行されるソフトウェアオブジェクトの一部を含んでいるメモリセクションのアドレスを決定すること、それぞれのメモリセクションにアクセスすること、およびそれぞれのメモリセクション内に記憶されたコンテンツを分析することなど、他のセキュリティ関係動作を行い得る。イントロスペクションエンジン40によって実施されるセキュリティ動作の他の例としては、いくつかのメモリセクションへのアクセスをインターセプトおよび/または制限すること、たとえば、保護されたプロセスに属するコードまたはデータの上書きを防ぐこと、およびいくつかのメモリページに記憶されたコードの実行を防ぐことがある。
【0025】
[0035]単一のイントロスペクションエンジン40が、ホストシステム10上で実行される複数のゲストVMを保護し得る。エンジン40は、(たとえばライブラリのセットとして)ハイパーバイザ30に組み込まれ得るか、または、ハイパーバイザ30とは別個および無関係のコンピュータプログラムとして配信され得るが、ハイパーバイザ30のプロセッサ特権レベルにおいて実行され得る。エンジン40は、(別個のスケジュールされた実行スレッドを有する)プロセスであることもないこともある。いくつかの実施形態では、エンジン40は、いくつかのプロセッサイベントによってトリガされたときに実行されるスケジュールされていないコードオブジェクトの集合を備える。イベントフィルタ42a~42bおよびイントロスペクションエンジン40の動作が、以下でさらに詳細に説明される。
【0026】
[0036]現代のプロセッサは、保護リングとしても当技術分野で知られている、プロセッサ特権レベルの階層を実装する。各そのようなリングまたはレベルは、それぞれのリング内で実行されるソフトウェアが行うことを可能にされるアクションおよび/またはプロセッサ命令のセットによって特徴づけられる。例示的な特権レベル/リングは、ユーザモード(リング3)と、カーネルモード(リング0)とを含む。ハードウェア仮想化をサポートするように構成されたいくつかのホストシステムは、最も高いプロセッサ特権(たとえば、リング-1、ルートモード、またはIntel(登録商標)プラットフォーム上のVMXroot)をもつ追加のリングを含み得る。いくつかの実施形態では、ハイパーバイザ30は、最も特権的なレベル(リング-1)においてプロセッサ12を制御し、したがって、ホストシステム10上で実行される他のソフトウェアに仮想マシンとして公開されるハードウェア仮想化プラットフォームを作成する。
図2中のゲストOS34aなど、オペレーティングシステムは、一般に、ハイパーバイザ30よりも低いプロセッサ特権をもつ(たとえば、リング0またはカーネルモードにおける)それぞれのVMの仮想環境内で実行される。アプリケーション36aなど、共通ユーザアプリケーションは、一般に、OS34aよりも低いプロセッサ特権において(たとえば、リング3またはユーザモードにおいて)実行される。ソフトウェアオブジェクトが、それの割り当てられた保護リングによって許容されるものよりも高いプロセッサ特権を必要とするアクションまたは命令を実行することを試みるとき、試みは、一般に、例外または障害など、プロセッサイベントを生成し、これは、それぞれのアクションを行うために、プロセッサ12の制御を、十分な特権をもつリングにおいて実行されるエンティティ(たとえば、オペレーティングシステムのイベントフィルタ)に転送する。
【0027】
[0037]特に、いくつかのプロセッサ命令の実行は、ハイパーバイザ30の特権レベル(たとえば、VMXroot)を必要とする。そのような命令の例としては、Intel(登録商標)プラットフォーム上のVMCALLがある。いくつかのハードウェアシステムでは、仮想マシン内からそのような命令を呼び出すことは、仮想マシン終了イベント(たとえば、Intel(登録商標)プラットフォーム上のVMExit)として知られる特定のタイプの障害を生成する。VM終了イベントは、それぞれの仮想マシンの実行を中断し、一般に、ハイパーバイザ30のプロセッサ特権レベルにおいて、プロセッサ12を、それぞれのVMの外部のハンドラルーチンを実行することに切り替える。
【0028】
[0038]いくつかのハードウェアプラットフォームでは、VM終了は、メモリアクセス許可の違反など、他のタイプのイベントによってトリガされ得る。1つのそのような例では、VM内で実行されるソフトウェアオブジェクトが、書込み不可能としてマークされたメモリページにデータを書き込むこと、または実行不可能としてマークされたメモリページからのコードを実行することを試みるとき、プロセッサ12は、ページ障害を生成し、それに応じて、それぞれのVMの実行を中断し、ハイパーバイザ30を実行することに切り替え得る。そのような終了機構は、たとえば、それぞれのVMの外部で実行されるコンピュータセキュリティプログラム(イントロスペクションエンジン40など)が、セキュリティ脅威から仮想マシンを保護することを可能にする。いくつかの実施形態では、イントロスペクションエンジン40は、VMの内部のソフトウェアの実行中に発生するVM終了イベントをインターセプトし、さらに、潜在的にVM内ソフトウェアの知識なしに、そのようなイベントを分析する。イベントが攻撃を示す場合、エンジン40は、それぞれのゲストVMの実行を中断すること、それぞれのゲストVMへのおよび/またはそれからの通信をカットオフすること、それぞれのゲストVMにクリーンアップエージェントを注入すること、ホストシステム10のユーザにアラートすることなど、いくつかの脅威緩和アクションをとり得る。
【0029】
[0039]ハードウェア仮想化のために最適化された現代のコンピューティングプラットフォームは、特権的命令および/またはメモリアクセス許可の違反によってトリガされた別の種類のプロセッサイベントを同じく生成するように構成される。そのようなプロセッサイベントは、一般に仮想化例外(たとえば、Intel(登録商標)プラットフォーム上の#VE)として知られ、プロセッサに、ゲストVM内のソフトウェアを実行することから同じくそれぞれのゲストVM内のハンドラルーチンを実行することに切り替えさせ、したがって、一般に、VM終了イベントに関連する計算コストを回避する。いくつかのプロセッサは、様々な状況に応答してVM終了イベントまたは仮想化例外のいずれかを選択的に生成するように構成可能である。
【0030】
[0040]仮想マシンは、一般に、ゲスト物理メモリとしても当技術分野で知られている、仮想化された物理メモリを用いて動作する。仮想化された物理メモリは、たとえば各VMに固有のアドレスの連続空間としての、実際の物理メモリ18の抽象的な表現を含み、前記空間の一部は、物理メモリ18および/または物理ストレージデバイス20内のアドレスにマッピングされる。現代のハードウェア仮想化プラットフォームでは、そのようなマッピングは、一般に、第2レベルアドレス変換(SLAT:second level address translation)として知られる、プロセッサ12によって制御される専用データ構造および機構によって達成される。普及しているSLAT実装形態は、Intel(登録商標)プラットフォーム上の拡張ページテーブル(EPT:extended page table)と、AMD(登録商標)プラットフォーム上の高速仮想化インデックス付け(RVI:rapid virtualization indexing)/ネスト化ページテーブル(NPT:nested page table)とを含む。そのようなシステムでは、仮想化された物理メモリは、ページとして当技術分野で知られているユニットごとに区分され、ページは、仮想化された物理メモリの最も小さいユニットを表し、SLATを介して個々に物理メモリにマッピングされ、すなわち、物理メモリと仮想化された物理メモリとの間のマッピングがページグラニュラリティを用いて実施される。すべてのページは、一般に、所定のサイズ、たとえば、4キロバイト、2メガバイトなどを有する。ページへの仮想化された物理メモリの区分は、通常、ハイパーバイザ30によって構成される。いくつかの実施形態では、ハイパーバイザ30はまた、SLAT構造、したがって、物理メモリと仮想化された物理メモリとの間のマッピングを構成する。いくつかの実施形態では、SLATデータ構造への(たとえば、ページテーブルへの)ポインタが、それぞれの仮想マシンのVMSO内に記憶される。物理メモリアドレスへの仮想化された物理メモリアドレスの実際のマッピング(変換)は、ホストシステム10のトランスレーションルックアサイドバッファ(TLB)中の物理メモリアドレスをルックアップすることを含む。TLBミスの場合、アドレス変換は、ページテーブルおよび/またはページディレクトリのセットにおける連続アドレスルックアップのセットを含む、ページウォークを実施することと、それぞれのページに対してアドレスにページのオフセットを加算することなど、計算を実施することとを含む。
【0031】
[0041]
図3は、
図2に示されている一実施形態におけるメモリアドレスのマッピングを示す。ゲストVM32は、ホストシステム10上で実行される任意のゲスト仮想マシン、たとえば
図2中のVM32a~32bを総称的に表す。ハイパーバイザ30による公開に続いて、ゲストVM32は、それ自体の物理メモリ空間として仮想化された物理メモリ空間118を参照する。ゲストVM32内で実行されるソフトウェアオブジェクト(たとえば、プロセス)は、それぞれのVMのゲストOS34によって仮想メモリ空間218を割り当てられる。ソフトウェアオブジェクトが、空間218aの例示的なメモリページ50aのコンテンツにアクセスすることを試みるとき、ゲストOS34によって構成および制御されるページテーブルに従って、ゲストVM32の仮想化されたプロセッサによって、ページ50aのアドレスが、仮想化された物理メモリ空間118のページ50bのアドレスに変換される。ページ50bのアドレスは、さらに、ハイパーバイザ30によって構成されたSLATを使用して、物理プロセッサ16によって、物理メモリ18内のページ50cのアドレスにマッピングされる。
【0032】
[0042]仮想アドレス空間118は、一般に、ゲスト物理メモリとして当技術分野で知られており、1つのそのようなメモリ空間内のアドレスは、ゲスト物理アドレス(GPA:guest physical address)と呼ばれる。アドレス空間218は、通常、ゲスト仮想メモリと呼ばれ、ゲスト仮想アドレス(GVA:guest-virtual address)によってインデックス付けされる。物理メモリ18内のアドレスは、通常、ホスト物理アドレス(HPA:host-physical address)と呼ばれる。したがって、
図3中のアドレス変換/マッピング52は、GVA-GPA変換と呼ばれる。対照的に、アドレス変換54は、一般に、GPA-HPA変換と呼ばれる。
【0033】
[0043]アドレス変換52および54は、メモリページング機構およびページテーブルの利用に依拠する。ページテーブルは、概して、ページテーブルエントリの集合の形態の、仮想メモリページと物理メモリページとの間のマッピングを記憶する、データ構造である。ページテーブルエントリのフォーマットは、ハードウェアプラットフォームごとに、および/またはOSのバージョンごとに変動し得る。例示的なページテーブルエントリ51が、
図4に示されている。各そのようなページテーブルエントリは、仮想メモリページ、たとえば
図3中のメモリ空間218内のページ50aに対応し得る。いくつかの実施形態では、ページテーブルエントリ51は、特に、アドレスAとフラグFのセットとを記憶する、フィールドのセットを含む。アドレスAは、一般に、物理アドレスであり、ハードウェア仮想化プラットフォームでは、それはGPAを表し得る。階層ページテーブルを実装するシステムでは、アドレスAは、別のページテーブルのアドレスを示し得る。フラグフィールドのコンテンツは、実装形態の間で変動する。いくつかの実施形態では、フラグは、たとえば、それぞれのページが(ディスクにスワップアウトされるのとは対照的に)メモリ中に存在するかどうか、それぞれのページのコンテンツが、それが最後にスワップインされてから変化したかどうか、それぞれのページ内のアドレスにアクセスする試みが(VMexitまたは仮想化例外などの)障害を生成するかどうか、それぞれのページが、ユーザモードで実行されるプロセスによってアクセスされ得るかどうかなどを示す、制御ビットである。他のフラグ/制御ビットは、メモリアクセス許可のセット(たとえば、読取り、書込み、実行)を示し得る。いくつかの実施形態では、ページテーブルエントリ51は、さらに、それぞれのメモリ空間の識別子(たとえば、プロセスID)、および/またはオペレーティングシステムのメモリ管理構成要素によって使用される様々な統計情報を記憶し得る。
【0034】
[0044]いくつかの実施形態では、ハイパーバイザ30は、物理メモリ18の表現を含むそれ自体の仮想メモリ空間318をセットアップし、空間318中のアドレスを物理メモリ18中のアドレスにマッピングするための変換機構(たとえば、ページテーブル)を利用する。
図3では、そのような例示的なマッピングは、仮想空間318内のページ50fのアドレスをページ50cの物理アドレスに変換し、ページ50dのアドレスをページ50eの物理アドレスに変換する。そのようなマッピングは、ハイパーバイザ30のプロセッサ特権レベルにおいて実行される潜在的に任意のソフトウェアオブジェクトが、ホストシステム10上で動作する様々なVM内で実行されるソフトウェアオブジェクトに属するメモリページを管理することを可能にする。特に、メモリイントロスペクションエンジン40は、ゲストVM32内で実行されるプロセスによって使用される物理メモリページへの/からのアクセスを列挙し、読み取り、書き込み、および制御し得る。
【0035】
[0045]
図5は、本発明のいくつかの実施形態による、イベントフィルタ42の例示的な構成要素を示す。フィルタ42は、
図2中のイベントフィルタ42a~42bのいずれかを総称的に表す。いくつかの実施形態では、イベントフィルタ42は、それぞれのゲストVMのための仮想化例外を扱うように構成されたソフトウェア構成要素としてプロセッサ12に登録される。この登録は、それぞれのゲストVM内のゲストプロセスの実行中に発生するイベントが仮想化例外をトリガするとき、プロセッサ12が、それぞれのゲストプロセスの実行を中断し、フィルタ42を実行することに切り替えることを意味する。フィルタ42は、適格性チェッカー46と、適格性チェッカー46に接続された通知生成器48とを含み得る。
【0036】
[0046]いくつかの実施形態では、適格性チェッカー46は、マルウェアを示すかまたは他のやり方でコンピュータセキュリティに関連すると見なされたイベントのサブセットを作り出すために、仮想化例外をトリガしたイベントをフィルタ処理するように構成される。例示的なセキュリティ関連イベントは、たとえば、ページテーブルエントリのフィールドを上書きする試み、メモリ割振り機能など、重要なOS構成要素を実行する試み、特定のメモリセクションに/からコードを読み取るか、書き込むか、または実行する試みなどを含み得る。通知生成器48は、イントロスペクションエンジン40に、適格性チェッカー46によって作り出されたイベントの選択されたサブセットの発生について通知するように構成され得る。通知機構は、VMCALLなどの特権的プロセッサ命令を介してVM終了イベントをトリガすることなど、ハードウェア仮想化の当技術分野で知られている任意の方法を利用し得る。通知生成器48は、たとえば、フィルタ42とエンジン40との間で共有されるメモリの所定のセクションにそれぞれのデータを書き込むことによって、通知されたイベントの詳細またはパラメータなど、データをイントロスペクションエンジン40に送信し得る。
【0037】
[0047]いくつかの実施形態では、イベントフィルタ42は、仮想化例外をトリガしたイベントの発生をエミュレートするように構成されたエミュレータ47をさらに備える。エミュレーションは、例外が一般に、それぞれのイベントがメモリへのおよび/またはプロセッサの状態への変更を引き起こす前にトリガされるので、必要とされ得る。仮想化例外がメモリアクセス許可の違反によってトリガされる一例では、データを、書込み不可能と見なされるロケーションに書き込まれるようにする、MOVなどのプロセッサ命令が、データがそれぞれのロケーションに書き込まれる前に仮想化例外を生成する。単にそれぞれのプロセス/アプリケーションを再起動することは、違反命令を再実行する試みを生じ、これは、新しい例外をトリガする。この無限サイクルから逃れるために、いくつかの実施形態は、最初に例外をトリガしたプロセス/アプリケーションを再起動する前にそれぞれのイベントの発生をエミュレートするためにエミュレータ47を使用する。上記の例では、エミュレータ47は、MOV命令の実際の実行から生じたであろう変更を実施し得、すなわち、エミュレータ47は、実際に、データをそれの意図されたメモリロケーションに書き込み得る。
【0038】
[0048]
図6は、本発明のいくつかの実施形態による、ホストシステム10上にコンピュータセキュリティをセットアップするために実施されるステップの例示的なシーケンスを示す。一般的なシナリオでは、システム管理者が、保護を必要とする各ホストにセキュリティアプリケーションをインストールし得る。セキュリティアプリケーションは、ハイパーバイザ30、イントロスペクションエンジン40、イベントフィルタ42など、様々な構成要素を含み得る。ステップの図示されたシーケンスは、たとえば、それぞれのセキュリティアプリケーションのインストーラユーティリティによって行われ得る。インストーラは、最初に、最も強いプロセッサ特権レベル(たとえば、ルートモード、リング-1)においてプロセッサ12を引き継ぎ、ハイパーバイザ30をインストールし得る。インストーラは、次いで、イントロスペクションエンジン40を起動し得る。
【0039】
[0049]いくつかの実施形態では、ハイパーバイザ30および/またはイントロスペクションエンジン40は、それぞれのソフトウェア構成要素の信用性を保証するために、セキュアブート機構または当技術分野で知られている別の形態の認証を使用して起動される。セキュアブーティングは、リモート認証サーバとの認証交換(たとえば、ハッシュ検証)を含み得る。例示的な一実施形態では、セキュアブートは、Intel(登録商標)プラットフォーム上のトラステッドプラットフォームモジュール(TPM)など、ホストシステム10のセキュアストレージハードウェア構成要素を利用し、インテル(登録商標)のトラステッドエグゼキューションテクノロジー(TXT)などの完全性証明(integrity attestation)機構をさらに利用し得る。
【0040】
[0050]各ゲストVMを起動したことに応答して、ステップ407は、それぞれのVM内で発生する仮想化例外を扱うように構成されたイベントフィルタ42をインストールする。いくつかの実施形態では、イベントフィルタ42は、潜在的に悪意のあるソフトウェアによるフィルタ42の検出を回避するために、それぞれのゲストVMに内密にドロップされ得る。そのような注入を達成するために、イントロスペクションエンジン40は、メモリの未使用セクション内に、またはドライバなどの別のソフトウェアオブジェクトによって現在使用されているメモリページ内にフィルタ42を隠し得る。
【0041】
[0051]いくつかの実施形態では、イントロスペクションエンジンは、それぞれのVM内で実行される他の構成要素からフィルタ42を隔離することによってイベントフィルタ42を保護する。一例では、エンジン40は、それぞれのゲストVMによって使用されるゲスト物理メモリ空間とは別個の(たとえば、
図3に示されている一実施形態における空間118とは別個の)シャドーメモリ空間をセットアップするためにSLAT手段を使用する。実際には、そのようなシャドーメモリ空間をセットアップすることは、エンジン40が、イベントフィルタ42に割り当てられた第2レベルのページテーブル(たとえば、Intel(登録商標)プラットフォーム上のEPT)を構成することを含み得る。別個のページテーブルを用いて動作することは、VM32内で実行される他のプロセスが、イベントフィルタ42に属するデータを変更することができないという意味で、そのようなプロセスからフィルタ42を隔離する。フィルタ42を隔離することは、フィルタ42を実行するとき、アドレス変換を行うために、VM32に関連するページテーブルを使用することからシャドーページテーブルを使用することに切り替えるようにプロセッサ12を構成することをさらに含み得る。ページテーブルを切り替えることは、ゲストVM32を終了することなしに発生し得、したがって、それは、VM終了イベントの計算コストをもたらさない。ページテーブル切替えを達成するための1つの例示的なやり方は、イベントフィルタ42が、ある特権的命令(たとえば、Intel(登録商標)プラットフォーム上のVMFUNC)を発行することを含み、これは、切替えのためのキューとしてプロセッサ12によって解釈され得る。
【0042】
[0052]ステップ408~410のシーケンスにおいて、イントロスペクションエンジン40は、それぞれのゲストVMのセキュリティにとって重要であるアセットを記憶するメモリページのセットを識別することに進み得る。そのようなアセットの例としては、メモリ割振り、メモリ許可管理、およびレジストリ編集など、動作を実施するOSの関数、たとえば、NTDLL.DLLおよびKERNEL32.DLLライブラリの選択された関数に属するコードがある。Linux(登録商標)OSでは、セキュリティ関連関数は、LIBC.SOの選択された関数を含み得る。セキュリティにとって重要と見なされる他のアセットは、ゲストVM内で実行されるプロセスに関連するページテーブルを含む。
【0043】
[0053]OSの特定の関数など、いくつかのアセットのメモリロケーションは、OS34のいくつかのデータ構造をパースすることによって取得され得る。イントロスペクションエンジン40は、さらに、それぞれのゲストVM内で現在ロードされているおよび/または実行されているプロセスのセットを追跡し得る。いくつかの実施形態は、当技術分野で知られている任意の方法を使用して、ゲストVM内の新しいプロセス/スレッドの起動を示すイベントをリッスンし得る。いくつかの例示的な実施形態は、アクティブプロセスのリストを管理するOSの機構をインターセプトする。たとえば、Windows(登録商標)では、プロセスが作成されるたびに、それぞれのプロセスのインジケータが、アクティブプロセスのリストに挿入され、インジケータは、それぞれのプロセスの終了時にリストから除去される。いくつかの実施形態では、プロセスを起動すると、OS34はまた、それぞれのプロセスに関連するリソースを管理するためにOS34によって使用されるデータを含むプロセス環境ブロック(PEB)として知られるプロセス固有データ構造をセットアップする。アクティブプロセスのリストにターゲットプロセスを挿入するようにとのOS命令をインターセプトすることによって、エンジン40は、それぞれのPEBのメモリアドレスなど、さらなる情報を取得し得る。Windows(登録商標)では、PEBの仮想アドレスは、エグゼクティブプロセスブロック(EPROCESS)として知られるデータ構造に記憶される。そのようなデータ構造をさらにパースすることによって、イントロスペクションエンジン40は、それぞれのプロセスによってロードされる主要な実行ファイルのおよび/またはライブラリのメモリロケーション、ならびにそれぞれのプロセスに関連するページテーブルのメモリロケーション(たとえばx86プラットフォームにおけるページディレクトリベースレジスタ-PDBR)などの情報を取得し得る。
【0044】
[0054]現在ロードされているおよび/または実行されている様々なプロセスに対応するページテーブルエントリのメモリロケーションは、たとえば、プロセッサ12の制御レジスタ(たとえば、x86プラットフォームにおけるCR3レジスタ)のコンテンツを読み取ることと、ページテーブルウォークを実施することとによって取得され得る。代替実施形態は、それぞれのEPROCESS構造の固有フィールドから各プロセスに関連するページテーブルのアドレスを読み取り得る。
【0045】
[0055]セキュリティクリティカルアセットのメモリロケーションの決定を容易にするために、イントロスペクションエンジン40は、フィルタ42と共同し得るか、またはそれぞれのゲストVMにヘルパーオブジェクトをドロップし得る。そのようなストラテジーは、セマンティックギャップを埋めるように設計される。それぞれのVMの外部の位置から仮想マシンの内部の働きに関する情報をあらわにすることは、一般に、それぞれのVM内からそれをあらわにすることよりもはるかに困難である。VM内で実行されるイベントフィルタ42などの構成要素は、様々なアセットのメモリアドレスなどの情報を取得するために、OSの設備を使用し、次いで、本明細書で説明される通知機構を使用してイントロスペクションエンジン40にそのような情報を通信し得る。
【0046】
[0056]いくつかの実施形態では、ステップ410(
図6)において、イントロスペクションエンジン40および/またはフィルタ42は、保護されたアセットの一部を含んでいるメモリセクションの列挙を含む保護されたメモリセクションの一覧表(roster)をアセンブルし得る。例示的な一覧表エントリは、セクションのメモリアドレス(またはメモリページの識別子およびページ境界に関するオフセット)と、それぞれのセクションのサイズのインジケータとを含み得る。メモリアドレスは、GPA、HPAなどを含み得る。保護されたセクションのサイズは、ページサイズよりも小さくなり得る。一覧表エントリは、それぞれのセクション内に記憶されたアセットタイプ(たとえば、ドライバ、ページテーブル、プライベートデータなど)のインジケータをさらに含み得る。一覧表エントリ中にアセットタイプインジケータを含めることは、たとえばユーザのプライベートファイルを保護することとは別個の様式でページテーブルを保護するために、保護されたアセットのタイプに従って、フィルタ42がイベント適格性基準を選択的に適用することを可能にすることによって、イベントフィルタ42の実行を容易にし得る。いくつかの実施形態では、一覧表は動的に更新され、(たとえば、新しいプロセス起動を介して)新しいアセットが出現したとき、保護されたアセットの一部を記憶するセクションが、識別され、一覧表に追加される。アセットが保護をもはや必要としないとき(たとえば、プロセスが終了されるとき)またはそれぞれのアセットが別のメモリロケーションに移動するとき、使われていないセクションに対応するエントリが一覧表から除去され得る。
【0047】
[0057]セキュリティクリティカルオブジェクトのメモリロケーションを決定したことに応答して、ステップ412は、保護されたメモリセクションへのアクセス許可を設定し得る。最新のコンピューティングシステムでは、許可は、ページグラニュラリティを用いて設定されるにすぎないことがあるので、ステップ412は、それぞれのメモリセクションをホストするメモリページへのアクセス許可を設定することを含み得る。これは、たとえばハイパーバイザ30によって構成されたSLAT機構を使用して行われ得る。許可は、イベントフィルタ42が、不適切であるまたはマルウェアを示すと見なされた様式での、保護されたメモリセクションにアクセスする試みを検出することを可能にするように設定され得る。保護されたセクションからのデータの無認可の読取りを防ぐために(たとえば、データ盗難またはランサムウェア攻撃を避けるために)、例示的な実施形態は、それぞれのデータをホストするメモリページを読取り不可能としてマークし得る。それぞれのページからデータを読み取る試みが、プロセッサ例外/障害をその後トリガし、これは、その試みのインジケータとして働き得る。ページテーブルエントリの試み変更を検出するために、それぞれのページテーブルエントリをホストするメモリページが、書込み不可能としてマークされ得る。したがって、それぞれのメモリページに書き込むいかなる試みも、その試みの検出を有効にする。同様に、あるOS関数を実行する試みを検出するために、いくつかの実施形態は、それぞれの関数のコードを含んでいるページを実行不可能としてマークする。
【0048】
[0058]いくつかの実施形態では、ステップ414(
図6)において、イントロスペクションエンジン40は、そのようなメモリアクセス許可の違反に応答して仮想化例外をトリガするようにプロセッサ12を構成し得る。さらなるステップ416は、イベントフィルタ42を仮想化例外のためのハンドラとして登録し、通知ハンドラ44をVM終了イベントのためのハンドラとして登録し得る。そのような登録に応答して、メモリアクセス許可の違反は、イントロスペクションエンジン40とは対照的にイベントフィルタ42によって扱われる。一方、VM終了イベントは、通知ハンドラ44を介してイントロスペクションエンジン40に通知される。
【0049】
[0059]
図7は、本発明のいくつかの実施形態による、イベントフィルタ42によって実施されるステップの例示的なシーケンスを示す。仮想化例外のためのハンドラとして登録されると、イベントフィルタ42は、ゲストソフトウェアの実行中に仮想化例外をトリガするイベントの発生を検出する。そのようなイベントは、本明細書ではトリガイベントと呼ばれる。トリガイベントを検出したことに応答して、ステップ436~438のシーケンスにおいて、フィルタ42は、それぞれのトリガイベントのイベントタイプ、ならびにイベントパラメータのセットを決定し得る。いくつかの実施形態では、現在の仮想化例外の原因のインジケータが、それぞれのゲストVMのVMSOの固有フィールドに記憶される。したがって、イベントの性質に関する手がかりが、それぞれのゲストVMのVMSOのいくつかのフィールドから抽出され得る。書込み不可能としてマークされたページに書き込む試みによって例外がトリガされた一例では、イベントパラメータは、書込み試みのメモリアドレスと、プロセッサがそれぞれのメモリロケーションに書き込むことを試みていた値とを含み得る。
【0050】
[0060]いくつかの実施形態では、イベントフィルタ42は、イントロスペクションエンジン40に、セキュリティについて関連すると見なされたトリガイベントのサブセットの発生について選択的に通知する。イベントは、適格性基準のセットに従って選択され得、適格と見なされたイベントのみが、イントロスペクションエンジン40に通信され得る。イントロスペクションエンジン40に通信するために適格と見なされないトリガイベントの発生を検出したことに応答して、いくつかの実施形態は、検出されたイベントをエミュレートするためにエミュレータ47を利用する(
図7中のステップ444)。その後、フィルタ42は、VM終了をトリガすることなしに、それぞれのVM内のゲストソフトウェアの実行を再開するように、プロセッサ12にシグナリングし得る。イベントが適格性基準を満たすとき、ステップ442において、いくつかの実施形態は、VM終了イベントを生成し、したがってイントロスペクションエンジン40にそれぞれのトリガイベントの発生を通知する。VM終了イベントを生成することは、たとえば、フィルタ42がIntel(登録商標)プラットフォーム上のVMCALLなどの特権的プロセッサ命令を発行することを含み得る。エンジン40にイベントパラメータを通信するために、イベントフィルタ42のいくつかの実施形態は、VM終了イベントを生成する前に、フィルタ42とイントロスペクションエンジン40との間で共有されるメモリのセクションにそれぞれのパラメータを書き込む。
【0051】
[0061]
図8~
図9は、本発明のいくつかの実施形態による、検出されたトリガイベントがイントロスペクションエンジン40への通知に適格であるかどうかを判定するために適格性チェッカー46(
図5)によって行われるステップの例示的なシーケンスを示す。そのようなシーケンスは、
図7中のステップ440の一部として実行され得る。
図8と
図9の両方は、インターセプトされたトリガイベントが、アクセス許可に違反する様式でメモリにアクセスする試み、たとえば書込み不可能としてマークされたページに書き込む試みを含むことを仮定する。
【0052】
[0062]ステップ452(
図8)において、チェッカー46は、例外を生成したメモリページ、すなわち、アクセス試みのターゲットにされたメモリページを識別し得る。応答して、チェッカー46は、ターゲットメモリページが、保護されたメモリセクション、すなわち、保護されたアセットの少なくとも一部を含んでいるかどうかを判定するために、現在保護されているメモリセクションの一覧表をルックアップし得る。ターゲットメモリページがいかなる保護されたアセットをも保持しないとき、ステップ460において、フィルタは、現在のトリガイベントがイントロスペクションエンジン40への通知を正当化しないと判定し得る。ターゲットメモリページが、保護されたアセットの一部を含んでいるとき、さらなるステップ456は、たとえばアクセス試みのアドレスに従って、トリガイベントが、保護されたメモリセクションに実際にアクセスする試みを含むかどうかを判定し得る。トリガイベントが、保護されたメモリセクションに実際にアクセスする試みを含まないとき、トリガイベントは不適格と見なされ得る。対照的に、トリガイベントが、保護されたメモリにアクセスする試みに等しいとき、チェッカー46は、現在のトリガイベントが通知に適格であると判定し得る。
【0053】
[0063]
図9は、本発明のいくつかの実施形態による、イベントが通知に適格であるかどうかを判定するために適格性チェッカー46によって行われるステップの別の例示的なシーケンスを示す。
図9の例は、悪意のある変更からページテーブルを保護するように適合されている。いくつかの実施形態では、例示的な適格トリガイベントは、ページテーブルエントリのフラグ/制御ビット(たとえば、存在する/スワップアウトされる、読取り/書込み、エグゼキュート-ディセーブル(execute-disable)、ユーザ/スーパーバイザーなど、プロパティを表すビット)の値を変更する試みを含む。他の例示的な適格トリガイベントは、それぞれのページテーブルエントリの物理アドレスフィールド(
図4中のAフィールド)を上書きする試みを含む。そのようなアクションは、しばしば、悪意のあるソフトウェアが、それぞれのプロセスのメモリ空間にコードを注入するために、それぞれのプロセスの実行をハイジャックすることを試みることなどを示す。
【0054】
[0064]
図10は、本発明のいくつかの実施形態による、イントロスペクションエンジン40によって実施されるステップの例示的なシーケンスを示す。エンジン40は、フィルタ42からの通知を待ち得、通知は、それぞれのゲストVM内の特定のタイプのトリガイベントの発生を示し、それぞれのトリガイベントは、イベントフィルタ42による通知に適格と見なされる。通知に応答して、ステップ486において、エンジン40は、それぞれのイベントがコンピュータセキュリティ脅威を示すかどうかを判定するために、それぞれのイベントを分析する。そのような分析は、当技術分野での任意の方法、たとえば様々なヒューリスティックおよび決定ツリー、イベント相関方法、機械学習アルゴリズムなどを利用し得る。ステップ486において、イントロスペクションエンジン40は、イベントフィルタ42によって通信されるイベントパラメータを使用し得、および/あるいは現在のトリガイベントに関する、または概してそれぞれのゲストVM内で現在実行されているソフトウェアに関する追加情報をあらわにするために、それ自体のフォレンジック(forensic)アクティビティをもつことがある。通知されたイベントがページテーブルエントリの制御ビットを上書きする試みを含む1つの例示的な分析では、ステップ486において、エンジン40は、それぞれの試みが正当なメモリ管理操作としてOSによって行われたのか、または代わりに別のソフトウェアエンティティによって行われたのかを判定し、別のソフトウェアエンティティによって行われた場合、試みは、マルウェアを示すと見なされ得る。
【0055】
[0065]それぞれのトリガイベントがセキュリティ脅威を示さないとステップ486の分析が決定したとき、いくつかの実施形態では、イントロスペクションエンジン40は、それぞれのトリガイベントをエミュレートし、それぞれのゲストVMの実行を再開するようにプロセッサ12に命令し得る。イベントが脅威を示すとき、エンジン40は、脅威を緩和するための保護アクションをとり得る(たとえば、それぞれのゲストVM内で実行されるマルウェアエージェントを除去するかまたは場合によっては無能力にするためにクリーンアップ動作を行う、ホストシステム10のユーザに通知するなど)。
【0056】
[0066]上記で説明された例示的なシステムおよび方法は、コンピュータまたはスマートフォンなど、ホストシステムが、ハードウェア仮想化構成において動作するとき、効率的にコンピュータセキュリティタスクを行うことを可能にする。ホストシステムは、ゲスト仮想マシン内で、オペレーティングシステムと、ソフトウェアアプリケーションのセットとを実行するように構成される。いくつかの実施形態では、セキュリティアプリケーションは、少なくとも2つの構成要素、すなわち、それぞれの仮想マシン内で実行されるイベントフィルタと、それぞれの仮想マシンの外部で、たとえばハイパーバイザのレベルでまたは別個の仮想マシン中で実行されるイントロスペクションエンジンとを含む。プロセッサは、アクセス許可に違反する様式でのメモリにアクセスする試みを検出したことに応答して、仮想化例外を生成するように構成され得る。いくつかの実施形態は、イベントフィルタ構成要素を仮想化例外のためのハンドラとして登録する。
【0057】
[0067]コンピュータセキュリティは、保護されたオブジェクトに属するデータを記憶するメモリのセクションへのアクセス許可を設定することによって強化される。それぞれのアクセス許可に違反する様式での保護されたメモリセクションのいずれかにアクセスする試みが、仮想化例外をトリガし、したがってイベントフィルタによって検出される。いくつかの実施形態では、イベントフィルタは、疑わしいまたはマルウェアを示すと見なされたアクセス試みのサブセットを選択するために、適格性基準のセットに従って、検出されたメモリアクセス試みをフィルタ処理する。例示的な適格イベントは、たとえば、仮想マシン内で実行されるプロセスのためのメモリアドレス変換を実施するために使用されるページテーブルエントリを上書きする試みを含み得る。適格と見なされたイベントは、たとえばハイパーコールを介して、保護された仮想マシンの外部で実行されるイントロスペクションエンジンに通知される。イントロスペクションエンジンは、通知されたイベントを、それらが悪意のある攻撃を示すかどうかを判定するために分析し得る。
【0058】
[0068]概して、仮想マシンの外部で実行されるソフトウェア構成要素は、それぞれのVM内で実行される構成要素よりも、VM内で実行される悪意のあるソフトウェアの影響を実質的に受けにくい。したがって、セキュリティ観点から、保護されたVMの外部に重要なセキュリティ構成要素を配置することが有利であり得る。しかしながら、それぞれのVMの外部で実行される構成要素に、データを通信することおよび/またはセキュリティ関連イベントの発生をシグナリングすることは、一般に、VM終了を必要とし、これは、計算リソースに関して比較的コストがかかる。
【0059】
[0069]従来のコンピュータセキュリティソフトウェアは、一般に、保護された仮想マシンの完全に内部または完全に外部のいずれかに配置される。そのようなシステムとは対照的に、本発明のいくつかの実施形態は、ハイブリッド構成を含み、ある構成要素(イベントフィルタ)は、保護されたVM内で実行され、別の構成要素(イントロスペクションエンジン)は、保護されたVMの外部で実行される。イベント検出は、内部構成要素によって実施され、インターセプトされたイベントの分析の大半は、外部構成要素によって実施される。そのような構成は、セキュリティと速度との間の平衡を達成し得、したがってセキュリティに関して妥協することなしにユーザエクスペリエンスを改善する。セキュリティをさらに高めるために、いくつかの実施形態は、内部構成要素のサイズおよび複雑さを最小限に抑える。好ましい実施形態では、イベントフィルタは、イントロスペクションエンジンへの通知のためにイベントのサブセットを選択するフィルタとして働くにすぎない。そのような軽量構成要素は、オペレーティングシステムまたはVM内で実行される悪意のあるソフトウェアの知識なしに、保護されたVMに比較的容易に注入され得る。次いで、より高性能のイベント分析が、外部構成要素、すなわち、イントロスペクションエンジンによって行われ得る。
【0060】
[0070]本発明のいくつかの実施形態は、ゲストソフトウェアの実行中に検出されたすべてのイベントが、VM終了の費用を正当化するとは限らないという観測に依拠する。たとえば、メモリアクセス許可は、ページグラニュラリティを用いて設定されるにすぎないことがあるので、メモリページの一部分のみを占有する項目を保護することは、同じメモリページ内にホストされた他の項目にアクセスする正当な試みによる膨大な数の許可違反を意図せずに引き起こし得る。別の例では、ページテーブルへのすべての変更が疑わしいとは限らず、オペレーティングシステムは、正当なメモリ管理アクティビティの一部として、制御ビットおよびアドレスの変更を頻繁に行う。正当なイベントをセキュリティソフトウェアに通知することは、計算リソースを不必要に消費する。
【0061】
[0071]したがって、いくつかの実施形態は、不要なVM終了を回避するためのフィルタとして仮想化例外の機構を利用する。フィルタは、イベントがVMの外部で通知されるべきであるか否かを判定するための特定の適格性基準を用いて動作する。たとえば、保護されたVM内で実行されるイベントフィルタは、各検出されたメモリアクセス違反を分析し、それが、同じページ内に記憶された他のデータにアクセスする試みとは対照的に、保護された項目にアクセスする試みによって実際に引き起こされたかどうかを判定し得る。ページテーブルを保護することを試みるとき、イベントフィルタは、試みられた変更が、特定の項目、たとえば、ある制御ビットをターゲットにするかどうかを検査し得る。フィルタは、次いで、メモリイントロスペクションエンジンに適格イベントのみを通信し得る。
【0062】
[0072]本発明のいくつかの実施形態の適用例は、コンピュータセキュリティの分野を越えて十分に拡張し得る。かなりの割合のVM終了イベントを回避することによって、イベントフィルタは、概して、ハードウェア仮想化プラットフォームの動作を加速し得る。どのVM内イベントが内部で処理される(または無視される)か、およびどのイベントが外部に通知されるかを選択するための基準は、所望の最適化を達成するために調整され得る。
【0063】
[0073]上記実施形態が本発明の範囲から逸脱することなく多くのやり方で変更され得ることは、当業者にとって明らかであろう。したがって、本発明の範囲は、以下の特許請求の範囲およびそれらの法的均等物によって決定されるべきである。