(57)【特許請求の範囲】
【請求項１】
ハイパーバイザを備えるハイパーバイザ環境において、ゲスト・オペレーティング・システム（ＯＳ）のクリティカル・アドレス空間（ＣＡＳ）へのアクセスの試みを検出するステップであって、アドレス空間レイアウトのランダム化（ＡＳＬＲ）が前記ゲストＯＳによって実施される、ステップと、
前記アクセスを試みるプロセスを識別するステップと、
前記プロセスが前記ＣＡＳにアクセスすることを許可されていない場合、アクションを取るステップと
を含む、方法。
【請求項２】
前記アクセスを試みる前記プロセスを識別する前記のステップが、前記プロセスに対応するＣＲ３レジスタを読み取るステップを含む、請求項１に記載の方法。
【請求項３】
前記アクションは、
前記ハイパーバイザの管理コンソールに前記アクセスを報告することと、
前記ゲストＯＳに推奨を提供することと、
前記ゲストＯＳ内でアクションを自動的に取ることと
から選択される、請求項１又は２に記載の方法。
【請求項４】
前記ハイパーバイザの管理コンソールに前記アクセスを報告することは、前記ゲストＯＳのステータスに感染済みとフラグを立てることを含む、請求項３に記載の方法。
【請求項５】
前記ゲストＯＳに推奨を提供することは、
前記プロセスがセキュリティ・ツールによってスキャンされ、ホワイトリストに載せられるまで、前記プロセスをブラックリストに載せることを推奨することと、
前記プロセス上でウイルス対策を実行することと
のうちの少なくとも１つを含む、請求項３又は４に記載の方法。
【請求項６】
前記ゲストＯＳ内でアクションを取ることは、
前記ゲストＯＳ内でウイルス対策プログラムを実行することと、
オフライン・スキャンのために、前記ゲストＯＳをシャットダウンするか前記ゲストＯＳの状態を保存することと
のうちの少なくとも１つを含む、請求項３乃至５のいずれかに記載の方法。
【請求項７】
前記プロセスがメモリ要素の書き込み可能エリアから実行されている場合は前記アクセスを拒否することと、
前記プロセスが前記メモリ要素の読み取り専用エリアから実行されている場合は前記アクセスを許可することと
を含む、ポリシーを使用して前記アクセスの試みを検証するステップを更に含む、請求項１乃至６のいずれかに記載の方法。
【請求項８】
前記ＣＡＳに対応するマシン・アドレスを識別するステップを更に含み、該マシン・アドレスを識別するステップは、
前記ゲストＯＳ内でページ・フォルトを強制することと、
前記ＣＡＳに対応するゲスト仮想アドレスからゲスト物理アドレスを解くことと、
前記マシン・アドレスを前記ゲスト物理アドレスにマッピングすることと
を含む、請求項１乃至７のいずれかに記載の方法。
【請求項９】
前記アクセスの試みを検出する前記のステップが、
前記ハイパーバイザのシャドウ・ページ・テーブル内で前記ＣＡＳに対応するページについて、ページ・テーブル・エントリ（ＰＴＥ）を生成するステップと、
前記アクセスの試みの結果としてページ・フォルトが発生するように、前記ＰＴＥをマークするステップと
を含む、請求項１乃至７のいずれかに記載の方法。
【請求項１０】
装置であって、
データを記憶するように構成されたメモリ要素と、
前記データに関連する命令を実行するように動作可能なコンピューティング・プロセッサと、
ハイパーバイザと、
ゲストＯＳ内に存在するエージェントであって、
前記ハイパーバイザを備えるハイパーバイザ環境において前記ゲストＯＳのＣＡＳへのアクセスの試みを検出するステップであって、アドレス空間レイアウトのランダム化（ＡＳＬＲ）が前記ゲストＯＳによって実施される、ステップと、
前記アクセスを試みるプロセスを識別するステップと、
前記プロセスが前記ＣＡＳにアクセスすることを許可されていない場合、アクションを取るステップと
のために当該装置が構成されるように、ゲストＯＳに存在するエージェントと
を備える、装置。
【請求項１１】
前記アクセスを試みる前記プロセスを識別する前記のステップが、前記プロセスに対応するＣＲ３レジスタを読み取るステップを含む、請求項１０に記載の装置。
【請求項１２】
前記アクションは、
前記ハイパーバイザの管理コンソールに前記アクセスを報告することと、
前記ゲストＯＳに推奨を提供することと、
前記ゲストＯＳ内で自動的にアクションを取ることと
から選択される、請求項１０又は１１に記載の装置。
【請求項１３】
前記ハイパーバイザの管理コンソールに前記アクセスを報告することは、前記ゲストＯＳのステータスに感染済みとフラグを立てることを含む、請求項１２に記載の装置。
【請求項１４】
前記ゲストＯＳに推奨を提供することは、
前記プロセスがセキュリティ・ツールによってスキャンされ、ホワイトリストに載せられるまで、前記プロセスをブラックリストに載せることを推奨することと、
前記プロセス上でウイルス対策を実行することと
のうちの少なくとも１つを含む、請求項１２又は１３に記載の装置。
【請求項１５】
前記ゲストＯＳ内でアクションを取ることは、
前記ゲストＯＳ内でウイルス対策プログラムを実行することと、
オフライン・スキャンのために、前記ゲストＯＳをシャットダウンするか前記ゲストＯＳの状態を保存することと
のうちの少なくとも１つを含む、請求項１２乃至１４のいずれかに記載の装置。
【請求項１６】
当該装置が、
前記プロセスがメモリ要素の書き込み可能エリアから実行されている場合は前記アクセスを拒否することと、
前記プロセスが前記メモリ要素の読み取り専用エリアから実行されている場合は前記アクセスを許可することと
を含む、ポリシーを使用して前記アクセスの試みを検証するステップのために更に構成される、請求項１０乃至１５のいずれかに記載の装置。
【請求項１７】
当該装置が、
前記ＣＡＳに対応するマシン・アドレスを識別するステップのために更に構成され、該識別するステップは、
前記ゲストＯＳ内でページ・フォルトを強制することと、
前記ＣＡＳに対応するゲスト仮想アドレスからゲスト物理アドレスを解くことと、
前記マシン・アドレスを前記ゲスト物理アドレスにマッピングすることと
を含む、請求項１０乃至１６のいずれかに記載の装置。
【請求項１８】
前記アクセスの試みを検出する前記のステップが、
前記ハイパーバイザのシャドウ・ページ・テーブル内で前記ＣＡＳに対応するページについてＰＴＥを生成するステップと、
前記アクセスの試みの結果としてページ・フォルトが発生するように、前記ＰＴＥをマークするステップと
を含む、請求項１０乃至１６のいずれかに記載の装置。
【請求項１９】
コンピューティング・デバイスのプロセッサによって実行されるコンピュータ・プログラムであって、前記プロセッサによって実行されると、該プロセッサに、
ハイパーバイザを備えるハイパーバイザ環境においてゲストＯＳのＣＡＳへのアクセスの試みを検出するステップであって、ＡＳＬＲが前記ゲストＯＳによって実施される、ステップと、
前記アクセスを試みるプロセスを識別するステップと、
前記プロセスが前記ＣＡＳにアクセスすることを許可されていない場合、アクションを取るステップと
を含む動作を実行させる、コンピュータ・プログラム。
【請求項２０】
前記アクセスを試みる前記プロセスを識別する前記のステップが、前記プロセスに対応するＣＲ３レジスタを読み取るステップを含む、請求項１９に記載のコンピュータ・プログラム。
【請求項２１】
前記アクションは、
前記ハイパーバイザの管理コンソールに前記アクセスを報告することと、
前記ゲストＯＳに推奨を提供することと、
前記ゲストＯＳ内で自動的にアクションを取ることと
から選択される、請求項１９又は２０に記載のコンピュータ・プログラム。
【請求項２２】
前記ハイパーバイザの管理コンソールに前記アクセスを報告することは、前記ゲストＯＳのステータスに感染済みとフラグを立てることを含む、請求項２１に記載のコンピュータ・プログラム。
【請求項２３】
前記プロセッサによって実行されると、前記プロセッサに、
前記プロセスがメモリ要素の書き込み可能エリアから実行されている場合は前記アクセスを拒否することと、
前記プロセスが前記メモリ要素の読み取り専用エリアから実行されている場合は前記アクセスを許可することと
を含む動作を更に実行させる、請求項１９乃至２２のいずれかに記載のコンピュータ・プログラム。
【請求項２４】
前記プロセッサによって実行されると、前記プロセッサに、
前記ＣＡＳに対応するマシン・アドレスを識別するステップを更に実行させ、該識別するステップは、
前記ゲストＯＳ内でページ・フォルトを強制することと、
前記ＣＡＳに対応するゲスト仮想アドレスからゲスト物理アドレスを解くことと、
前記マシン・アドレスを前記ゲスト物理アドレスにマッピングすることと
を含む、請求項１９乃至２３に記載のコンピュータ・プログラム。
【請求項２５】
前記アクセスの試みを検出する前記のステップが、
前記ハイパーバイザのシャドウ・ページ・テーブル内で前記ＣＡＳに対応するページについてＰＴＥを生成するステップと、
前記アクセスの試みの結果として、ページ・フォルトが発生するように前記ＰＴＥをマークするステップと
を含む、請求項１９乃至２３に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、コンピュータ・ネットワークの分野に関し、より詳細には、ハイパーバイザ環境におけるクリティカル・アドレス空間保護のためのシステム及び方法に関する。
【背景技術】
【０００２】
コンピュータ・ネットワーク・セキュリティの分野は、今日の社会において、ますます重要かつ複雑になってきている。コンピュータ・ネットワーク環境は、ほぼ全ての企業又は組織では、典型的に複数の相互接続されたコンピュータ（例えばエンドユーザ・コンピュータ、ラップトップ、サーバ、印刷デバイス等）で構成される。さらに、クラウド・サービス・プロバイダ（並びに複数のアプリケーション及びオペレーティング・システムを実行する他の組織）は、ハイパーバイザ技術を使用して、様々な異なるゲスト・オペレーティング・システムをホスト・デバイス上で同時に実行することがある。ハイパーバイザとは、複数のオペレーティング・システムをホスト・コンピュータ上で同時に実行することができるコンピュータ・ソフトウェア／ハードウェア・プラットフォームの仮想化ソフトウェアである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ハイパーバイザ環境では、セキュリティ上の脅威が外部及び内部から生じる可能性がある。ハイパーバイザ環境におけるこれらの脅威は、ＩＴ管理者にとって更なる課題となりうる。
【課題を解決するための手段】
【０００４】
一実施形態におけるシステム及び方法は、ハイパーバイザ環境においてアドレス空間レイアウトのランダム化を実装するゲスト・オペレーティング・システム（ＯＳ）のクリティカル・アドレス空間（ＣＡＳ）へのアクセスの試みを検出し、アクセスを試みるプロセスを識別し、このプロセスがＣＡＳにアクセスすることが許可されていない場合にアクションを取るモジュールを含む。
【０００５】
本開示並びにその特徴及び利点のより完全な理解を提供するため、以下の説明を添付の図と併せて参照されたい。添付の図では、同じ参照番号は同じ部品を表す。
【図面の簡単な説明】
【０００６】
【図１】例示的な一実施形態によるハイパーバイザ環境におけるクリティカル・アドレス空間保護のためのシステムの構成要素を示す簡略化したブロック図である。
【図２】例示的な一実施形態によるシステムの更なる詳細を示す簡略化したブロック図である。
【図３】本開示の実施形態に関連し得る例示的な動作ステップを示す簡略化したフローチャートである。
【発明を実施するための形態】
【０００７】
＜概要＞
一実施形態におけるシステム及び方法は、ハイパーバイザ環境においてアドレス空間レイアウトのランダム化（ＡＳＬＲ：address  space  layout  randomization）を実装するゲスト・オペレーティング・システム（ＯＳ）のクリティカル・アドレス空間（ＣＡＳ：critical  address  space）へのアクセス試行を検出し、このアクセスを試みるプロセスを識別し、少なくとも１つのアクションが許可されていない場合に、この少なくとも１つのアクションを取るモジュールを含む。このアクションは、ハイパーバイザの管理コンソールにアクセスを報告することと、ゲストＯＳに推奨を提供することと、ゲストＯＳ内で自動的にアクションを取ることとのうちの１つ又は複数としてよい。ハイパーバイザの管理コンソールにアクセスを報告することは、ゲストＯＳのステータスに感染済み（infected）というフラグを立てることを含む。ゲストＯＳに推奨を提供することは、プロセスがセキュリティ・ツールによってスキャンされ、ホワイトリストに載せられるまで、プロセスをブラックリストに載せるようを推奨すること、及び／又はプロセス上でウイルス対策を実行することを含む。ゲストＯＳ内でアクションを取ることは、ゲストＯＳ内でウイルス対策プログラムを実行すること、及び／又はオフライン・スキャンのためにゲストＯＳをシャットダウンするか若しくはゲストＯＳの状態を保存することを含む。
【０００８】
より具体的な実施形態は、ハイパーバイザのシャドウ・ページ・テーブル内でＣＡＳに対応するページについて、ページ・テーブル・エントリ（ＰＴＥ）を生成し、アクセス試行の結果としてページ・フォルトが発生するようにＰＴＥをマークすることによって、アクセス試行を検出することを含む。アクセスを試みるプロセスは、該プロセスに対応するＣＲ３レジスタを読み取ることによって識別され得る。
【０００９】
他の実施形態は、ポリシーを使用してアクセス試行を検証するステップを含み、当該検出するステップは、プロセスがメモリ要素の書き込み可能エリアから実行されている場合はアクセスを拒否することと、プロセスがメモリ要素の読み取り専用エリアから実行されている場合はアクセスを許可することとを含む。他の例示的な実施形態は、ゲストＯＳ内でページ・フォルトを強制し、ＣＡＳに対応するゲスト仮想アドレスからゲスト物理アドレスを解き、マシン・アドレスをゲスト物理アドレスにマッピングすることによって、ＣＡＳに対応するマシン・アドレスを識別すること、並びに他の特徴を含む。
＜例示的な実施形態＞
図１は、ハイパーバイザ環境におけるクリティカル・アドレス空間保護のためのシステム１０の例示的な実装形態を示す簡略化したブロック図である。本明細書で使用されるとき、「ハイパーバイザ」は、「ゲストＯＳ」と呼ばれる１つ又は複数のオペレーティング・システム（ＯＳ）をホスト・デバイス（例えばコンピュータ）上で同時に実行することを可能にするハードウェア仮想化エンティティである。例示的な一実施形態において、ハイパーバイザは、ホスト・デバイスのハードウェア上で直接実行されて、ハードウェアを制御し、ゲストＯＳを管理することができる。代替的な実施形態では、ハイパーバイザは、（Ｌｉｎｕｘ（登録商標）  ＯＳのような）従来のＯＳ環境内において、高レベルで実行される１つ又は複数のゲストＯＳをサポートするソフトウェア・レイヤとして実行することができる。仮想化により、ゲストＯＳは、ホスト・デバイスの物理的特性及び挙動が複製される、分離した仮想環境（典型的に仮想マシン又はゲストと呼ばれる）上で変更されずに実行されることが可能になる。より具体的には、ゲストは、仮想ハードウェア（プロセッサ、メモリ、ディスク、ネットワーク・インタフェース等）が装備された、分離した仮想環境を表す可能性がある。図１に示される実施形態によれば、システム１０は、仮想化環境をゲスト１４に提供するハイパーバイザ１２を備える。本開示の広範な範囲内において、任意の数のゲストがハイパーバイザ１２上でホストされることがある。説明を簡単にするために、図１では、単一のゲストが代表として図示されている。
【００１０】
ハイパーバイザ１２は、ゲスト１４による使用のために割り当てられるホスト・デバイス（図示せず）のハードウェア１６を制御及び管理する。ゲスト１４は、ハイパーバイザ１２上でゲストＯＳ１８を実行することができる。ゲストＯＳ１８は、１つ又は複数のアプリケーション２０をサポートし得る。ハイパーバイザ１２は、プロセッサ２２及びマシン・メモリ２４のような、基礎となるハードウェア１６への１つ又は複数のアプリケーション２０（本明細書では、複数のアプリケーションのうちの１つを指すように、単数形でアプリケーション２０と呼ぶ）のアクセスを管理することができる。本明細書で使用されるとき、「マシン・メモリ」は、ホスト・デバイス上で利用可能なものとしてハイパーバイザ１２に対して可視のメモリ要素を指す。ゲストＯＳ１８は、アプリケーション２０に、ゲスト物理メモリ２８にアクセスするゲスト仮想メモリ２６を提示してもよい。本明細書で使用するとき、「ゲスト仮想メモリ」は、ゲスト１４内で実行されるアプリケーション２０に対して可視の実質的に連続する仮想アドレス空間を指す。アドレス空間とは個別のアドレスの範囲を指し、アドレスのそれぞれは、アプリケーション（例えばアプリケーション２０）がデータを記憶して後でデータを取り出すことが可能なメモリの場所（すなわちアドレス）に対応し得る。「ゲスト物理メモリ」は、ゲストＯＳ１８に対して可視の仮想メモリを指す。
【００１１】
ゲスト１４は、アプリケーション２０のプロセスのページ・テーブルの先頭へポイントする仮想制御レジスタ、すなわちＣＲ３レジスタ３０を含む。プロセスとは、命令が実行されているアプリケーション（又はその一部分）のインスタンスである。ゲストＯＳ１８内のアプリケーション２０は、いくつかのプロセスからなることがある。各プロセスは、そのプロセスの（一意の）プロセス・アドレス空間を有することができる。各プロセス・アドレス空間は、対応するページ・テーブルを有する。ページ・テーブルは、仮想アドレスと物理アドレスとの間のマッピングを記憶するのにゲストＯＳ１８によって使用されるデータ構造である。例えばＣＲ３レジスタ３０は、ゲストＯＳ１８内のメモリの保護されたエリアにアクセスしようとするプロセスを一意に識別することがある。このエリアはクリティカル・アドレス空間（ＣＡＳ）と呼ばれ、システム・ライブラリ（例えばｋｅｒｎｅｌ３２．ｄｌｌ）を含む。
【００１２】
ゲストＯＳ１８は、ハイパーバイザ１２内のｈｙｐｅｒＣＡＳＰモジュール３４と通信するエージェント３２を（ゲスト・イメージの一部として）含む。ｈｙｐｅｒＣＡＳＰモジュール３４は、ゲスト物理メモリ２８、ＣＲ３レジスタ３０及びマシン・メモリ２４と通信してもよい。ｈｙｐｅｒＣＡＳＰモジュール３４は、ＣＡＳへのアクセス試行を捕捉し、ハイパーバイザ環境内でアクセス試行が発生したコンテキストを調べることによって、ゲスト１４を潜在的なマルウェア攻撃から保護することがある。
【００１３】
ハイパーバイザ１２は、管理コンソール３６を使用して管理されることがある。管理コンソール３６は、ハイパーバイザ１２上のゲスト１４を管理する統一インタフェースを提供することができる。管理コンソール３６は、ストレージ、ゲストの挙動の態様の制御及び仮想ネットワークの設定を含め、管理者がハイパーバイザ１２を構成するための手段を提供することができる。例示的な一実施形態では、管理コンソール３６は、ゲスト１４がマルウェア及び／又は他の望ましくないアプリケーションに攻撃されているかどうかを含め、管理者がゲスト１４のステータスを見るためのインタフェースを提供することがある。
【００１４】
本開示の実施形態によれば、システム１０の構成要素は、ゲストＯＳ１８のＣＡＳへのアクセス試行を検出し、そのアクセス試行を行うプロセスを識別し、アクセスが許可されているかどうか判断し、アクセスが許可されていない場合は、アクセス試行を管理コンソール３６に報告すること、推奨をゲストＯＳ１８に提供すること、ゲストＯＳ１８内で自動的にアクションを取ることのような、１つ又は複数の保護アクションを取ることがある。
【００１５】
システム１０の技法を示すために、図１に示されるシステムのような所与のシステムに存在し得るアクティビティ及びセキュリティ上の懸念事項を理解することが重要である。以下の基本的な情報は、本開示を適切に説明することができる基礎とみなすことができる。このような情報は、単に説明のために提供されるに過ぎず、したがって、いかなる形であっても、本開示及びその潜在的な適用分野の広範な範囲を限定するように解釈されるべきではない。
【００１６】
物理メモリを管理する１つの方法では、メモリは、メモリ・アドレスの連続した範囲を包含するブロック又はページに分割されることがある。各ブロック又はページには、メモリが読み取り専用であるか、読み取り／書き込み用であるか又は書き込み専用であるかを含む、属性が付与される。アプリケーション又はライブラリ（ｋｅｒｎｅｌ３２．ｄｌｌのような動的にリンクされるライブラリを含む）がメモリにロードされると、対応するコード命令が読み取り専用メモリにロードされ、データが書き込み可能メモリにロードされる。したがって、コード命令を読み取り専用メモリから読み取って実行することができる。実行可能コード（例えば命令）を含むメモリなどの何らかのメモリは、典型的には読み取り専用メモリであり、オペレーティング・システムは、プロセスがその実行可能コードにデータを書き込むことを許可しないことがある。対照的に、データを含む（マルウェアでない）ページに書き込むことができるが、そのメモリを命令として実行しようとする試みは失敗することがある。
【００１７】
しかし、悪意のあるコードは、ロードされるか又はデータに挿入（ｉｎｊｅｃｔ）されるように構成されることがあり、予想されるような読み取り専用メモリではなく、書き込み可能メモリから実行するように構成されることがある。書き込み可能メモリ空間内で実行されるコードの検出は、そのコードに悪意があること表れである可能性がある。例えば悪意のあるコードを挿入するため、ネットワーキングで使用されるバッファがオーバーフローされる。信頼できないホストからのデータとともにサービス要求を受信するウェブ・サーバは、該ウェブ・サーバのバッファをオーバーフローさせることによって、要求内に埋め込まれ、ロードされる悪意のあるコードに感染することがある。バッファのオーバーフローによって（又は他の不適切な技法によって）ロードされる悪意のあるコードの主な特徴は、コードが書き込み可能なメモリにロードされる（及び書き込み可能なメモリから実行される）ことである。
【００１８】
コンピュータ・セキュリティでは、実行可能空間の保護を使用して、特定のメモリ領域（例えばスタック及びヒープ・メモリ）を、実行不可能としてマークすることができ、その結果、これらの領域内でマシン・コードを実行しようとする試みは、例外を生じるか、ページ・フォルトを生じる可能性がある。ページ・フォルトとは、プログラムが、仮想メモリ（例えばハイパーバイザ環境内のゲスト仮想メモリ）内でマッピングされているが物理メモリ（例えばハイパーバイザ環境内のマシン・メモリ）内にロードされていないページにアクセスするときのトラップである。このような手法は、特定のバッファ・オーバーフロー攻撃、特にコードを挿入して実行する攻撃が成功することを防止する助けとなる。これらの攻撃は、書き込み可能で実行可能なメモリの一部、通常はスタックに依存する。悪意のあるコードの実行を検出する１つの方法は、全てのプロセッサ命令が実行されるメモリの属性を確認することである。しかし、このような手法は、実行される全ての命令のメモリ属性を確認するのに大きな処理オーバーヘッドを要し、コンピュータのパフォーマンスを低下させることがある。
【００１９】
マルウェアの実行から保護するための別の技法は、ＣＡＳへのアクセスを制御することによる。ＣＡＳ保護（ＣＡＳＰ：ＣＡＳ  protection）は、ＣＡＳへのアクセス試行を捕捉し、アクセス試行が発生したコンテキストを調べることによって、バッファ・オーバーフロー攻撃及びスタック・オーバーフロー攻撃を防ぐ。例えば大部分のマルウェアは、関数（例えばエクスポート関数）を解くためにｋｅｒｎｅｌ３２．ｄｌｌのルックアップを行う。ｋｅｒｎｅｌ３２．ｄｌｌは、メモリ管理、入力／出力動作、割り込み等のオペレーティング・システムのコア・プロセスを含む中心的なモジュールである。したがって、ＣＡＳＰ技法は、ｋｅｒｎｅｌ３２．ｄｌｌへのアクセス試行を捕捉することによって、バッファ・オーバーフロー攻撃及びスタック・オーバーフロー攻撃のような攻撃を防ぐことができる。
【００２０】
アドレス空間レイアウトのランダム化（ＡＳＬＲ）は、攻撃者がターゲット・アドレスを予測することをより困難にすることによってセキュリティ攻撃を防止するのに使用され得る別の技法である。ＡＳＬＲは、オペレーティング・システムがブートすると、実行可能イメージ（すなわち、ＤＬＬ形式又はＥＸＥ形式のファイルのような、プロセッサによって実行可能な形式のプログラム・コードの単位）をランダムな場所に移動させ、エクスプロイト・コードが予想通りに動作することを困難にする。ＡＳＬＲの目的は、物理メモリをウイルス及び他のマルウェアから保護することである。ＡＳＬＲを用いて、ＯＳ（例えばハイパーバイザ環境内のゲストＯＳ１８）は、プロセスの仮想アドレス空間内のライブラリ、ヒープ及びスタックの位置を含め、キーとなるデータエリアの位置をランダムに配置する。ＡＳＬＲを使用しない場合、攻撃は、プロセスのアドレス空間内の既知の場所のハードコードされたアドレス（例えば特定のライブラリ関数）を使用して、その関数を実行する可能性がある。
【００２１】
一例では、アプリケーションがヒープを作成するとき、ＯＳのヒープ・マネージャは、そのヒープをプロセス・アドレス空間内のランダムな場所に作成し、ヒープベースのバッファ・オーバーランのエクスプロイトが成功する可能性を低下させるのを助ける。別の例では、スレッドがプロセス内で開始されると、ＯＳ（例えばゲストＯＳ１８）は、そのスレッドのスタックをプロセス・アドレス空間内のランダムな場所に移動させ、スタックベースのバッファ・オーバーランのエクスプロイトが成功する可能性を低下させるのを助ける。さらに別の例では、ＡＳＬＲは、プログラムの実行毎に異なるメモリ空間レイアウトとなるという結果を引き起こすことがあり、動的にロードされるライブラリ（ＤＬＬ）が毎回異なる場所にロードされることになる。多数のマルウェア攻撃は、特定のプロセス又はシステム関数がメモリ内のどこに常駐するかを正確に識別するプログラマの能力に依存する。ＡＳＬＲを使用すると、アドレス位置がランダム化され、マルウェア・コードが成功裏に実行されるのを困難にする。
【００２２】
例えばＷｉｎｄｏｗｓ（登録商標）  Ｖｉｓｔａ  ＯＳでは、ＡＳＬＲに加わるよう選択した実行可能イメージをロードすると、このＯＳは、２５６の値の範囲からリブートごとに１回選択されるランダム・グローバル・イメージ・オフセット使用する。ＥＸＥ及びＤＬＬを含め、プロセスに一緒にロードされる実行可能イメージは、このオフセットで次々にロードされる。ＡＳＬＲについて実行可能イメージがマークされているプログラムを実行すると、プロセスのメモリレイアウトは、スレッド・スタック及びプロセス・ヒープをランダムに配置することによって、更にランダム化される。スタック・アドレスが最初に３２の可能な場所の範囲から選択される。スタックが配置されると、初期スタック・ポインタは、（例えばＩＡ３２システム上で１６，３８４の可能な値のうちの１つから選定される）ランダムな量によって更にランダム化される。スタック・アドレスが選択されると、プロセス・ヒープが選択される。各ヒープは、３２の異なる場所の範囲から割り当てられる。第１のヒープの場所が、以前に配置されたスタックを回避するように選定され、以降のヒープはそれぞれ、それより前のヒープを回避するように割り当てられなければならない。Ｗｉｎｄｏｗｓ（登録商標）  Ｖｉｓｔａでは、プロセス環境ブロック、スタック及びヒープの場所のような一部のアドレス空間レイアウトパラメータが、プログラム実行のたびに１回選択される。プログラム・コード、データ・セグメント及びライブラリの場所のような他のパラメータは、リブート間でのみ変化する。
【００２３】
ハイパーバイザ環境では、攻撃の影響が非仮想化環境よりも大きく働くことがある。感染した１つのゲストが、ホスト・デバイス上の他の全てのゲストを感染させることがある。例えば攻撃者は、ゲストを感染させることによりハードウェア上での管理者特権を得ることができ、ハイパーバイザ環境で、あるゲストから別のゲストに移ることができる。ハイパーバイザが数千のゲストをホストする状況では、このようなゲストからゲストへの攻撃は壊滅的結果をもたらす可能性がある。
【００２４】
仮想メモリ・システムがハイパーバイザ内でどのように構成されるかに関連するいくつかの予備情報に目を向けると、ゲストを実行しているとき、ハイパーバイザは、ゲストのために、連続するアドレス指定可能なメモリ空間を作成する。このメモリ空間は、ゲスト仮想メモリと同じ性質を有する。これによって、ハイパーバイザは、各仮想マシンのメモリを他のものによるアクセスから保護しながら、複数の仮想マシンを同時に実行することが可能になる。したがって、ゲスト内で実行されるアプリケーションから見て、ハイパーバイザは、ゲスト物理アドレスをマシン・アドレスにマッピングするアドレス変換の更なるレベルを追加する。ゲストＯＳとハイパーバイザとの間の通信は、ゲスト物理アドレス内のパラメータを設定することができるハイパーコールを介して発生し、ハイパーバイザは、パラメータを復号し、ゲスト物理アドレスをマシン・アドレスにマッピングし、要求されたアクションを実行することができる。
【００２５】
ゲスト物理メモリ（例えばゲスト物理メモリ２８）は、ホスト物理アドレス（マシン・アドレスとも呼ばれる）への正しいマッピングを維持するためにハイパーバイザ（例えばハイパーバイザ１２）によって利用される抽象概念に過ぎない。シャドウ・ページ・テーブルは、ハイパーバイザ（例えばハイパーバイザ１２）によって、ゲスト物理メモリ（例えばゲスト物理メモリ２８）をマシン・メモリ（例えばマシン・メモリ２４）にマッピングするのに使用される。典型的には、ゲスト・ページ・テーブルがポイントする任意のページがマシン・メモリに存在するという保証はない。ハイパーバイザ（例えばハイパーバイザ１２）は、ゲストＯＳ（例えばゲストＯＳ１８）が存在しないページにアクセスしようと試みるたびにページ・フォルトをイネーブルにするように構成される。ページ・フォルトをトリガすると、ハイパーバイザ内のページ・フォルト・ハンドラが、適切なページを（例えばディスクから）マシン・メモリにロードすることを容易にし、変更を反映するようにハイパーバイザのシャドウ・ページ・テーブルを更新する。ページ・フォルトを発生させた命令の実行は、ページがマシン・メモリにロードされた後に再開され、ページング・テーブルは正しいページを適切にポイントする。ハイパーバイザのページング・テーブルは、どのページが実際に（すなわち物理的に）マシン・メモリにロードされるかを反映するが、ゲスト・ページング・テーブルは仮想に過ぎない。
【００２６】
プロセス・メモリ管理に目を向けると、多くのプロセッサ（必ずしもハイパーバイザを実行しているとは限らない）では、ＣＲ３レジスタと呼ばれる制御レジスタ（例えばＣＲ３レジスタ３０）が、（ページ・ディレクトリと呼ばれる）現在のページ・テーブルのルート（すなわち先頭）の物理アドレスを含む。ハイパーバイザ環境では、ゲスト内のＣＲ３レジスタが仮想化されて、現在のゲスト・ページ・テーブルのルートのゲスト物理アドレスをポイントすることがある。物理プロセッサ（例えばプロセッサ２２）は、ゲストのＣＲ３レジスタ（例えばＣＲ３レジスタ３０）ではなく別のＣＲ３レジスタ（図示せず）を使用して、マシン・メモリ２４をアドレス指定する。プロセッサのＣＲ３レジスタは、ハイパーバイザのページ・ディレクトリをポイントし、ゲスト・ページ・ディレクトリへはポイントしない。対照的に、ゲストＣＲ３レジスタ（例えばＣＲ３レジスタ３０）はゲスト・ページ・ディレクトリをポイントし、ゲスト・ページ・ディレクトリはゲスト・ページ・テーブルをポイントする。したがって、ゲストＣＲ３レジスタからゲスト・ページ・ディレクトリ、ゲスト・ページ・テーブル、シャドウ・ページ・テーブル、物理ページへのシーケンスを通じてマシン・アドレスに変換される仮想ゲスト・アドレスを用いて、現在の命令を実行することができる。
【００２７】
ゲストＣＲ３レジスタ３０の内容は、ゲストＯＳ（例えばゲストＯＳ１８）のカーネルによって、現在実行されているプロセスにより使用される適切なページ・テーブルをポイントするように更新される。したがって、ゲストＯＳ（例えばゲストＯＳ１８）は、ゲストＣＲ３レジスタ（例えばＣＲ３レジスタ３０）の値を変更することによってプロセスを切り換える。仮想マシン（例えばゲスト１４）では、ハイパーバイザ（例えばハイパーバイザ１２）は、ＣＲ３レジスタ（例えばＣＲ３レジスタ３０）へのアクセスをインターセプトし、それによって、現在実行しているプロセスのためにマシン・メモリ２４からフェッチされるべきページを決定する。
【００２８】
マルウェアからの保護技法に戻ると、ハイパーバイザの脆弱性によって、ＡＳＬＲの有効性が弱体化することがある。例えばハイパーバイザの既知の脆弱性によって、マシン・メモリのアクセス不可能な部分が、ゲストＯＳで実行されているアプリケーションに対して読み取り／書き込みアクセス可能になる。マルウェアは、この脆弱性を悪用して、ＡＳＬＲにかかわらずマシン・メモリの制御を取得する可能性がある。ＣＡＳＰを、ハイパーバイザ環境においてゲストＯＳ（例えばゲストＯＳ１８）内で実装することができるが、ゲストＯＳ内のＣＡＳＰは、ハイパーバイザの脆弱性を防ぐことはできない。さらに、ハイパーバイザベースの実装形態は、ＯＳに依存しない解決策を提供することができる。そのような解決策では、セキュリティ・ソフトウェアを各ゲストに個別にインストールする必要がないので、エンド・ユーザにとって価値がある。ゲストを攻撃するマルウェアは、ハイパーバイザ内で実行されるこのセキュリティ・レイヤに気が付かない。ゲストＯＳによってＡＳＬＲが実施されるハイパーバイザ内でＣＡＳＰを実施する際の課題の１つは、アプリケーションがロードされるたび又はゲスト・オペレーティング・システムのリブートがあるたびに、ＣＡＳがゲスト物理メモリ内でＡＳＬＲによりランダム化されるので、ハイパーバイザが、保護すべきクリティカル・アドレスを知らない可能性があることである。別の課題は、適切な保護アクションを取ることができるように、攻撃が発生するゲスト・プロセスのコンテキストを一意に識別することである。
【００２９】
図１によって概略が示されるハイパーバイザ環境におけるクリティカル・アドレス空間保護のためのシステムは、とりわけ、これらの問題を解決することができる。本開示の実施形態は、既存の技術の能力を大きく改善して、よりロバストな解決策を可能にしようとする。例示的な実施形態では、システム１０の構成要素は、ハイパーバイザ環境において、ＡＳＬＲを実装するゲストＯＳ１８のＣＡＳへのアクセスを検出し、このアクセスを要求するプロセスを識別し、アクセスが許可されているかどうか判断し、アクセスが許可されていない場合、１つ又は複数の保護アクションを取ることができる。
【００３０】
図１に示されるように、ｈｙｐｅｒＣＡＳＰモジュール３４は、エージェント３２と通信して、ＣＡＳのゲスト物理アドレスに対応するマシン・アドレスを識別することがある。エージェント３２は、ＣＡＳアドレスから故意に読み取ることによってゲストＯＳ１８内のページ・フォルトを実施し、ゲスト物理アドレスをゲスト仮想アドレスから解くことができる。例えばページ・フォルトは、ハイパーバイザ１２に、ページ・フォルト・イベントをインターセプトさせ、エージェント３２は、ゲスト・ページ・テーブルを確認して、対応するゲスト仮想アドレスのゲスト物理アドレスを決定することがある。別の例では、ハイパーバイザ１２内のページ・フォルト・ハンドラは、ゲスト物理ページのマッピングをモニタリングし、（例えばゲスト・ページ・テーブルへのアクセスを捕捉することによって）ページ・フォルトに応答してマシン・ページへの対応するマッピングを確立することがある。
【００３１】
エージェント３２は、ＣＡＳゲスト物理アドレスをｈｙｐｅｒＣＡＳＰモジュール３４に通信することができ、ｈｙｐｅｒＣＡＳＰモジュール３４は、マシン・アドレスを対応するゲスト物理アドレスにマッピングすることができる。したがって、ｈｙｐｅｒＣＡＳＰモジュール３４は、保護すべきマシン・アドレスを識別する。ハイパーバイザ１２内のページ・フォルト・ハンドラは、それらのページに対するエントリを、マシン・メモリ２４内の対応するページへポイントさせるようにすることができる。例示的な一実施形態では、エージェント３２は、双方向通信チャネルを使用してＣＡＳアドレスをｈｙｐｅｒＣＡＳＰモジュール３４に通信してよい。ゲスト仮想メモリ２８内のＣＡＳに対応するマシン・メモリ２４内のアドレス空間を保護することによって、ハイパーバイザ１２は、ゲストＯＳ１８内部からのマルウェア攻撃、例えばＣＡＳにアクセスしようするマルウェアを防ぐことができる。
【００３２】
本開示の実施形態によれば、ｈｙｐｅｒＣＡＳＰモジュール３４は、ハイパーバイザのシャドウ・ページ・テーブル内でＣＡＳに対応するページについて、ページ・テーブル・エントリ（ＰＴＥ：page  table  entry）を生成し、このページを、ＰＴＥ内でＮＯＴ＿ＰＲＥＳＥＮＴ（存在しない）とマークすることによって、ＣＡＳへのアクセス試行を検出する可能性があり、これにより実質的に全てのアクセス試行の結果としてページ・フォルトが発生する。ページ・フォルトによって、制御がハイパーバイザ１２に移り、したがって、ハイパーバイザ１２は、ＣＡＳにアクセスするプロセスを識別することができる。
【００３３】
例示的な一実施形態において、ｈｙｐｅｒＣＡＳＰモジュール３４は、ＣＲ３レジスタ３０を読み取って、ＣＡＳにアクセスしようとするプロセスを識別することがある。一般に、シャドウ・ページ・テーブル（例えば拡張ページ・テーブル／ネスト・ページ・テーブル（ＥＰＴ：Extended  Page  Table／ＮＰＴ：Nested  Page  Table）のようなハードウェア・サポートを使用して実装されて高速化されるシャドウ・ページ・テーブル）を使用する（ハイパーバイザ１２のような）ハイパーバイザは、ゲスト１４の適切な動作のためにＣＲ３レジスタへのアクセスを捕捉することがある。したがって、ＣＲ３レジスタ３０の変化は、ｈｙｐｅｒＣＡＳＰモジュール３４によって捕捉され、ＣＡＳにアクセスするゲスト１４で動作しているプロセスを一意に識別することができる。ＣＲ３レジスタ３０は、現在のタスクのゲスト・ページ・テーブルのルートを維持することによってプロセスを識別することができる。例えばマルウェア・プロセスがタスクを実行しようと試みることがある。このタスクは、タスクに固有のレジスタと値のセットであるコンテキストを有する。このようなレジスタの１つがＣＲ３レジスタ３０であり、ＣＲ３レジスタ３０はマルウェア・プロセスのページ・ディレクトリのアドレスを含む。ゲストＯＳ１８内でＣＡＳへのアクセスがあるたびに、ｈｙｐｅｒＣＡＳＰモジュール３４は、現在実行されている（プロセスの）適用可能な命令のページ保護ビットを調べることによって、そのアクセスが攻撃（例えばバッファ／スタックのオーバーフロー）であるかどうか確認することができる。
【００３４】
ｈｙｐｅｒＣＡＳＰモジュール３４は、アクセスがゲスト仮想メモリのようなメモリ要素の書き込み可能領域からのものである場合はアクセスを拒否するというポリシー、及びアクセスがメモリ要素の読み取り専用エリアからのものである場合はアクセスを許可するというポリシー等のポリシーを使用して、アクセスが許可されるかどうかを判断してもよい。例えばＰＴＥが、ゲストＯＳ１８内のＣＡＳへのアクセスが、書き込みビットが設定された、ゲスト１４内のＰＴＥから発生したことを示しており、ポリシーが、書き込みビットのこのようなステータスは許可されないことを示す場合、このアクセスは、プロセスのスタック又はヒープへのマルウェア攻撃の結果である可能性があるので、不正としてよい。例示的な一実施形態では、ｈｙｐｅｒＣＡＳＰモジュール３４は、同じビット（例えば書き込みビット）のステータス値を使用して、誤検出についての保護確認のバイパスを許可して、正当なアクセスを許可することができる。
【００３５】
ｈｙｐｅｒＣＡＳＰモジュール３４は、様々な保護アクションを取って、マルウェア・コードの実行を防止することがある。例示的な一実施形態では、ｈｙｐｅｒＣＡＳＰモジュール３４は、管理コンソール３６へのアクセス試行を報告することがある。管理者は、システム１０内で（又は環境に応じてシステムのセット内で）実行されている１つ又は複数のゲスト（例えばゲスト１４）を把握することができ、ｈｙｐｅｒＣＡＳＰモジュール３４により、全ての感染したゲストのステータスをマークするようにフラグを設定してもよい。別の例示的な一実施形態では、ｈｙｐｅｒＣＡＳＰモジュール３４は、ゲストＯＳ１８に、ウイルス対策又は別のセキュリティ・ツールによってプロセスをスキャンしてクリーンであるとマークされる（例えばホワイトリストに載せられる）まで、そのプロセスをブラックリストに載せるよう推奨を提供してもよい。更に別の例示的な一実施形態では、ｈｙｐｅｒＣＡＳＰモジュール３４は、エージェント３２に、ゲストＯＳ１８内でアクションを自動的に取らせることが可能であり、例えばゲストＯＳ１８内での攻撃の検出時に（自動的に開始される）ウイルス対策を実行すること、又はオフライン・スキャンのために影響を受けるゲストをシャットダウンさせる／そのゲストの状態を保存すること等をさせる可能性がある。
【００３６】
図２に移ると、図２は、例示的な一実施形態によるシステムの更なる詳細を示す簡略化されたブロック図である。ＣＡＳＰに対するハイパーバイザベースの解決策を実装する際の課題は、（ｋｅｒｎｅｌ３２．ｄｌｌのような）ＣＡＳに対応するマシン・アドレスを識別することである。ＣＡＳのアドレスは、２つのレベルのページング、すなわち、一方はゲスト１４内で、他方はハイパーバイザ１２内のページングを使用して解くことができる。
【００３７】
プロセッサ２２は、アプリケーション２０を実行するとき、メモリ・アドレスにアクセスして、命令をフェッチするか又はデータをフェッチして記憶する。ゲストＯＳ１８のような仮想メモリ・システムでは、アドレスは全てゲスト仮想アドレス（ＧＶＡ）であり、ゲスト物理アドレス（ＧＰＡ）ではない。仮想アドレスは、ゲストＯＳ１８によって、ゲスト・ページ・テーブルのセット内に保持される情報に基づいて、物理アドレスに変換される。ゲスト・ページ・テーブルは、プロセスのゲスト仮想ページをメモリ内のゲスト物理ページにマッピングする。ハイパーバイザ１２は、各ゲスト・ページ・テーブルに対応するシャドウ・ページ・テーブルを維持する。各ページ・テーブル（ゲスト・ページ・テーブルとシャドウ・ページ・テーブルとを含む）はＰＴＥのリストを含む。ゲストＯＳ１８がプロセスを起動するとき、ゲストＯＳ１８は、他のＰＴＥエントリとともにＣＡＳ用のＰＴＥを作成する。同様に、それに対応して、ハイパーバイザ１２はそのシャドウ・ページ・テーブルを更新する。
【００３８】
アドレス空間の例示的なセットが図２に示されている。（例えばアプリケーション２０内の）プロセスＸがゲストＯＳ１８内で実行され、ゲストＯＳ１８内の対応するゲスト物理アドレス空間４０にマッピングされるゲスト仮想アドレス空間３８を有すると仮定する。各アドレス空間を、ユーザ空間と、カーネル空間などのＣＡＳとに分割することができる。例示の目的及び説明を簡単にするため、ゲスト仮想アドレス空間３８内のＣＡＳをＣＡＳ６０と示す。ゲスト物理アドレス空間４０はマシン・アドレス空間４２にマッピングされる。例えばゲスト仮想アドレス空間３８内のＧＶＡ４４を、ゲスト物理アドレス空間４０内の対応するＧＰＡ４６にマッピングし、ＧＰＡ４６をマシン・アドレス空間４２内のマシン・アドレス（ＭＡ）４８にマッピングすることができる。これらのマッピングのそれぞれは、対応するページ・テーブル内の適切なＰＴＥによって保護される。例えばＧＶＡ４４を、ゲスト・ページ・テーブル５０内のＰＴＥによってＧＰＡ４６にマッピングすることができる。ハイパーバイザ１２は、ＧＰＡ４６をＭＡ４８にマッピングするようシャドウ・ページ・テーブル５１を作成する可能性がある。シャドウ・ページ・テーブル５１は、ゲスト・ページ・テーブル５０内のＰＴＥの形式と同様の形式のＰＴＥを含んでよい。
【００３９】
シャドウ・ページ・テーブル５１の例示的なＰＴＥ５１ａが、図２の分解図に示されている。ＰＴＥ５１ａは、ページの物理ページ・アドレス５２（例えばＭＡ４８）と、存在（present）ビット５４と、書き込みビット５６と、読み取りビット５８とを備える。ｈｙｐｅｒＣＡＳＰモジュール３４は、存在ビット５４、書き込みビット５６及び読み取りビット５８内の情報を使用して、ＣＡＳがマルウェアによってアクセスされているかどうか判断してよい。存在ビット５４のステータスから、ｈｙｐｅｒＣＡＳＰモジュール３４は、特定のアドレスに対応するページが存在するかどうか判断することができる。一例では、１００というＧＰＡ４６が５０００というＭＡ４８に変換されると仮定する。ｈｙｐｅｒＣＡＳＰモジュール３４は、５０００に対応するＰＴＥを調べて、存在ビット５４を読み取ることによって、プロセスがＭＡ４８へのアクセスを有するかどうか確かめる。プロセスがアクセスを有する場合、存在ビット５４は１に設定されている。存在ビット５４が、ページが存在しないことを示す０に設定されている（すなわち、ページがＮＯＴ＿ＰＲＥＳＥＮＴ（存在しない）とマークされている）場合、ページ・フォルトが起こり得る。制御はその後（プロセッサ２２によって）ハイパーバイザ１２に渡され、フォルトを修正する（ｆｉｘ）。別の例では、ＣＡＳにアクセスするコード命令は、読み取りビット５８を設定することができ、書き込みビット５６は設定されなくてもよく、これは、命令が読み取り専用である（及び書き込み可能でない）ことを示し、したがってアクセスが許可される。
【００４０】
アプリケーション２０がゲストＯＳ１８内で実行されるとき、ゲスト仮想メモリ２６内のＣＡＳ６０のアドレスは、必ずしもハイパーバイザ１２に知られていないことがある。これは、ＣＡＳ６０のアドレスが、セキュリティのためにゲストＯＳ１８によりＡＳＬＲを使用してランダム化されることがあるためである。ゲスト１４が起動すると、エージェント３２は、ゲストＯＳ１８内でフォルトを強制し、ＧＶＡ（例えばＧＶＡ４４）からＣＡＳ６０（例えばｋｅｒｎｅｌ３２．ｄｌｌ）に対応するＧＰＡ（例えばＧＰＡ４６）へのマッピングが確立されるようにフォルトを解決することができる。エージェント３２は、（例えばＰＴＥ内のＣＡＳ６０に対する存在ビットを０に設定すること（すなわちページをＮＯＴ＿ＰＲＥＳＥＮＴとマークすること）によって）ＣＡＳ６０への第１のアクセス試行を捕捉することが可能であり、したがって、以降の全てのアクセスを捕捉することが可能である。ＣＡＳ６０への第１のアクセス試行を捕捉することにより、確実にＣＡＳ６０への更なるアクセスの結果としてページ・フォルトを発生させることができる。というのは、対応するＧＶＡ（例えばＧＶＡ４４）に対する存在ビットが確立されている（すなわち１に設定されている）場合、プロセッサ２２は、ＧＶＡ（例えばＧＶＡ４４）への更なるアクセス試行に対してフォルトを作成しないからである。
【００４１】
エージェント３２は、双方向通信チャネルを使用して、ＣＡＳ６０のアドレスをｈｙｐｅｒＣＡＳＰモジュール３４に通信することがある。ＣＡＳ６０に対応するＧＶＡ（例えばＧＶＡ４４）は、ゲスト・ページ・テーブル５０を使用してＧＰＡ（例えばＧＰＡ４６）に、更にシャドウ・ページ・テーブル５１を使用してＭＡ（例えば、ＭＡ４８）に変換され得る。この時点で、ハイパーバイザ１２は、ＣＡＳＰ方法を使用して攻撃から保護されるためにＭＡ（例えばＭＡ４８）を識別済みである。ｈｙｐｅｒＣＡＳＰモジュール３４は、シャドウ・ページ・テーブル５１内でＣＡＳ６０に対応するページに対するＰＴＥ（例えばＰＴＥ５１ａ）を生成することがある。ｈｙｐｅｒＣＡＳＰモジュール３４は、（例えば存在ビット５４を０に設定することによって）ＰＴＥ内で、ページにＮＯＴ＿ＰＲＥＳＥＮＴとマークをして、ＣＡＳ６０へのアクセスの結果としてページ・フォルト６２が発生することを示してよい。ＣＡＳ６０へのアクセスがページ・フォルト６２によって検出されると、制御は（ｈｙｐｅｒＣＡＳＰモジュール３４を介して）ハイパーバイザ１２に渡り、ｈｙｐｅｒＣＡＳＰモジュール３４は、このアクセスが攻撃（バッファ／スタック・オーバーフロー）であるかどうか確認することができる。例示的な一実施形態では、ｈｙｐｅｒＣＡＳＰモジュール３４は、１つ又は複数の確認（例えば確認の所定のセット）を実行して、アクセスが、許可済みのプロセスから来ているものかどうか確かめることができる。ハイパーバイザ１２は、ゲストＯＳ１８の認識なしにゲストＯＳ１８内のアクティビティを透過的に検査することが可能である。
【００４２】
どのプロセスがＣＡＳ６０攻撃しているか判断するため、ｈｙｐｅｒＣＡＳＰモジュール３４はＣＲ３レジスタ３０を使用してよい。典型的に、ハイパーバイザ１２は、ゲストＯＳ１８内で実行されているタスクを知らない。例示的な一実施形態では、プロセスＸ内のマルウェア６４は、ゲスト仮想アドレス空間３８に存在することがあり、ＣＡＳ６０（例えばｋｅｒｎｅｌ３２．ｄｌｌ）にアクセスしようとすることがある。ＣＡＳ６０へのアクセスの結果、ページ・フォルト６２が発生することがある。ゲストＯＳ１８内でプロセス（例えばプロセスＸ）によって実行される各タスクは、対応するＣＲ３レジスタ３０と関連付けられ、ＣＲ３レジスタ３０は、そのタスクを実行しているプロセスに一意に対応するタスク・コンテキストを含む。ＣＲ３レジスタ３０は、ゲスト・ページ・テーブル５０の先頭をポイントすることがある。ｈｙｐｅｒＣＡＳＰモジュール３４は、ＣＲ３レジスタ３０を読み取り、プロセスＸがＣＡＳ６０にアクセスしていると判断することができる。
【００４３】
ｈｙｐｅｒＣＡＳＰモジュール３４は、アクセスがメモリ要素の書き込み可能エリア（例えばゲスト仮想アドレス空間３８）からの場合、そのアクセスを拒否すること、及びアクセスがメモリ要素の読み取り専用エリアからの場合、そのアクセスを許可することを含むポリシーを使用して、アクセス試行を検証することができる。例示的な一実施形態では、ｈｙｐｅｒＣＡＳＰモジュール３４は、現在実行されている命令に対応するシャドウ・ページ・テーブル５１内のＰＴＥ５１ａを読み取ることがある。マルウェアは典型的にユーザ空間内に存在する（及びカーネル空間には存在しない）ので、ＰＴＥ５１ａの書き込みビット５６を設定して、命令が読み取り専用ではなく、したがって、不正の可能性があること（例えばプロセスＸのスタック又はヒープへの攻撃を示す）を示すことができる。
【００４４】
ｈｙｐｅｒＣＡＳＰモジュール３４が攻撃を識別すると、ｈｙｐｅｒＣＡＳＰモジュール３４は、１つ又は複数の保護アクションを実行してもよい。例えばハイパーバイザ１２が複数のゲストを実行している場合、ｈｙｐｅｒＣＡＳＰモジュール３４は、管理コンソール３６に対して、ゲストのステータスに感染済みというフラグを立ててもよい。あるいはまた、ｈｙｐｅｒＣＡＳＰモジュール３４は、エージェント３２に、ゲスト１４をオフラインにする（例えばシャットダウンする）か、又は（感染を除去する（ｃｌｅａｎ）ために特定のプロセス及びフラグが立てられた１つ若しくは複数のホストを対象として）ウイルス対策を起動するよう１つ又は複数のメッセージを送信してもよく、ならびに／あるいは感染しているプロセスをゲストＯＳ１８に知らせてもよい。例示的な一実施形態では、推奨は、ウイルス対策又は別のセキュリティ・ツール（例えばコンピュータ・ソフトウェア及び／又はハードウェアの脆弱性を検査及び／又は修正するためのプログラム）によってプロセスをスキャンして感染していないとマークされる（すなわち、ホワイトリストに載せられる）まで、プロセスをブラックリストに載せることを含むことがある。
【００４５】
図３に移ると、図３は、本開示の実施形態に関連し得る例示的な動作ステップを示す簡略化されたフローチャートである。ｈｙｐｅｒＣＡＳＰモジュール３４及びエージェント３２がアクティブ化されると、動作１００が１０２において開始する。１０４において、エージェント３２が、ＣＡＳアドレスから故意に読み取ることによって、ゲストＯＳ１８内でページ・フォルト６２を強制する。１０６において、エージェント３２は、ＣＡＳ６０に対応するＧＰＡ（例えばＧＰＡ４６）を解く。１０８において、シャドウ・ページ・テーブル５１を使用して、ＧＰＡ（例えばＧＰＡ４６）が、対応するＭＡ（例えばＭＡ４８）にマッピングされる。１１０において、例えばシャドウ・ページ・テーブル５１のＰＴＥ（例えば、ＰＴＥ５１ａ）内でＣＡＳ６０に対応するページをＮＯＴ＿ＰＲＥＳＥＮＴ（存在しない）とマークすることによって、ＭＡ（例えばＭＡ４８）へのアクセス試行が、ｈｙｐｅｒＣＡＳＰモジュール３４によってモニタリングされる。
【００４６】
例えばＣＡＳ６０へのアクセス試行の結果、ページ・フォルト６２が発生するので、ＣＡＳ６０へのアクセス試行は１１２において検出され得る。アクセス試行が検出されない（例えばページ・フォルトが生成されない）場合、プロセスはループして、１１０におけるモニタリングに戻ってよい。しかし、アクセス試行が検出されると、制御がページ・フォルト６２の形でハイパーバイザ１２に渡る。１１４において、アクセスを試みるプロセスが、例えばＣＲ３レジスタ３０を使用して識別され得る。ｈｙｐｅｒＣＡＳＰモジュール３４は、ＣＲ３レジスタ３０を読み取って、アクセスを試みているプロセスに対応するゲスト・ページ・テーブル５０を識別することが可能である。１１６において、ポリシーを使用して、アクセス試行が検証され得る。例示的なポリシーは、書き込みビット５６がＣＡＳ６０への有効なアクセス用に設定されていないことを示すことがある。１１８において判断されるように、ポリシーがアクセスを許可しない場合、攻撃であると示され得る。
【００４７】
ｈｙｐｅｒＣＡＳＰモジュール３４は、それに応答して、１つ又は複数の保護アクションを取ることが可能である。例えば１２０において管理コンソール３６へのアクセスを報告すること、又は１２２においてゲストＯＳ１８内で自動的にアクションを取ること（例えばエージェント３２にゲストＯＳ１８内でウイルス対策を自動的に開始させること、ゲスト１４をオフラインにする／シャットダウンする、オフライン・スキャンに関するゲストＯＳ１８の状態を保存する等）、又は１２４においてゲストＯＳ１８に推奨（例えばプロセスをブラックリストに載せること、プロセス上でウイルス対策を実行すること等）を提供することができる。同様のアクションを、ネットワーク・ソケット／ファイル・ハンドル等のような感染したプロセスによって使用される他のリソースに対して取ってもよい。１１８において判断されるように、ポリシーがアクセスを許可する場合、１２６において動作を終了することができる。
【００４８】
アドレス空間を保護する（並びに危険なコードが実行されるのを妨げる）ためのソフトウェアを、様々な場所（例えばｈｙｐｅｒＣＡＳＰモジュール３４内）に提供することができる。例示的な一実装形態では、このソフトウェアは、セキュリティ攻撃から保護される（あるいは、書き込み可能メモリエリアの望ましくない操作又は許可されていない操作から保護される）ことが求められるコンピュータに存在する。より詳細な構成では、このソフトウェアは、特に、図１に示される構成要素を含む（あるいはそうでなくとも、これらとインタフェースする）ことがあるハイパーバイザのセキュリティ・レイヤに存在する。更に他の実施形態では、ソフトウェアを、（例えば別個のデバイス、別個の仮想マシン、ハイパーバイザ、サーバ等の個別のエンドユーザ・ライセンスを購入するという状況において）このアドレス空間保護を提供するためにウェブ・サーバから受信する又はダウンロードすることが可能である。
【００４９】
他の例では、クリティカル・アドレス空間保護機能は、（例えば、ウイルス対策解決策の一部として）専用の要素（proprietary  element）を必要とすることがあり、これらの要素は、これらの識別された要素の中に（又はそれに近接して）設けられてもよく、任意の他のデバイス、サーバ、ネットワーク・アプライアンス、コンソール、ファイアウォール、スイッチ、情報技術（ＩＴ）デバイス等の中に設けられてもよいし、補完的な解決策として（例えばファイアウォールと共に）設けられてもよいし、ネットワーク内のどこかに提供されてもよい。本明細書で使用されるとき「コンピュータ」という用語は、セキュリティ環境において電子情報に影響を及ぼすか又はこれらを処理するように動作可能なこれらの可能性のある要素（ＶＭＭ、ハイパーバイザ、Ｘｅｎデバイス、仮想デバイス、ネットワーク・アプライアンス、ルータ、スイッチ、ゲートウェイ、プロセッサ、サーバ、ロードバランサ、ファイアウォール又は他の任意の適切なデバイス、構成要素、要素若しくはオブジェクト）を包含するように意図される。さらに、このコンピュータは、その動作を容易にする任意の適切なハードウェア、ソフトウェア、コンポーネント、モジュール、インタフェース又はオブジェクトを含んでよい。これは、クリティカル・アドレス空間の有効な保護を可能にする適切なアルゴリズム及び通信プロトコルを含んでよい。さらに、クリティカル・アドレス空間保護の機能を任意の適切な様式で統合することができる。同様の設計的代替とともに、様々な図面の図示されたモジュール及び構成要素の任意のものを様々な潜在的構成で組み合わせてよい。これらの全てが本明細書の広範な範囲に含まれることは明らかである。
【００５０】
これらの要素（例えばコンピュータ、サーバ、ネットワーク・アプライアンス、ファイアウォール、ハイパーバイザ、任意の他の種類の仮想要素等）のいずれも、本明細書で説明するクリティカル・アドレス空間保護アクティビティを行うソフトウェア又はアルゴリズムを実行することができるプロセッサを含んでよい。さらに、これらの要素（例えばコンピュータ、サーバ、ネットワーク・アプライアンス、ファイアウォール、ハイパーバイザ、任意の他の種類の仮想要素等）のそれぞれは、適切な場合に特定の必要性に基づいて、メモリ要素（ランダム・アクセス・メモリ（ＲＡＭ）、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＡＳＩＣ等）、ソフトウェア、ハードウェア又は他の任意の適切な構成要素、デバイス、要素若しくはオブジェクトを含むことができる。追跡、送信、受信又はシステム１０に記憶される情報が、特定の必要性及び実装形態に基づいて任意のデータベース、レジスタ、テーブル、キャッシュ、待ち行列、制御リスト又は記憶構造に提供される可能性があり、それらの全てを任意の適切な時間枠で参照することができる。
【００５１】
これらの要素及び／又はモジュールは、本明細書において説明されるハイパーバイザ環境においてクリティカル・アドレス空間保護と関連するアクティビティを行うために、相互に協働することができる。他の実施形態では、これらの特徴は、これらの要素の外部に提供されてもよく、これらの意図した機能を達成するように他のデバイスに含まれてもよく、また任意の適切な様式で統合されてもよい。例えば様々な要素に関連付けられたプロセッサの一部を除去してもよく、あるいは単一のプロセッサ及び単一のメモリ場所が特定のアクティビティに関連するように他の方法で統合してもよい。一般的な意味において、図面に示された配置は、その表現においてより論理的であり得るが、物理的アーキテクチャはこれらの要素の様々な順列、組み合わせ及び／又は混成物を含んでもよい。
【００５２】
本明細書において説明するメモリアイテム（例えばゲスト・ページ・テーブル５０、シャドウ・ページ・テーブル５１、マシン・メモリ２４、ゲスト仮想メモリ２６、ゲスト物理メモリ２８、ゲスト仮想アドレス空間３８、ゲスト物理アドレス空間４０、マシン・アドレス空間４２等）のいずれも、広義の用語「メモリ要素」に包含されるように解釈されるべきである。同様に、本明細書で説明される潜在的な処理要素、モジュール及び機械のいずれも、広義の用語「プロセッサ」に包含されるように解釈されるべきである。また、コンピュータ、ネットワーク・アプライアンス、仮想要素等はそれぞれ、セキュアな環境でデータ若しくは情報を受信し、送信し、及び／又は他の方法で通信するための適切なインタフェースを含むこともできる。
【００５３】
プロセッサは、本明細書において詳述された動作を達成するためにデータに関連付けられた任意の種類の命令を実行することができる。一例では、（図面に示されるような）プロセッサは、要素又は項目（例えばデータ）をある状態又は物から別の状態又は物に変換することができる。別の例では、本明細書において概略が示されたアクティビティは、固定ロジック又はプログラマブル・ロジック（例えばプロセッサによって実行されるソフトウェア／コンピュータ命令）を用いて実施されてよく、本明細書において特定される要素は、デジタル・ロジック、ソフトウェア、コード、電子命令又はこれらの任意の適切な組み合わせを含む、何らかの種類のプログラマブル・プロセッサ、プログラマブル・デジタル・ロジック（例えばフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、消去可能なプログラマブル読み取り専用メモリ（ＥＰＲＯＭ）、電気的に消去可能なプログラマブルＲＯＭ（ＥＥＰＲＯＭ））又はＡＳＩＣとすることができる。
【００５４】
特定の例示的な実装形態では、本明細書において概略が示されたアドレス空間保護機能は、１つ又は複数の有形の非一時的媒体内で符号化されるロジック（例えば特定用途向け集積回路（ＡＳＩＣ）内に提供された埋め込みロジック、デジタル信号プロセッサ（ＤＳＰ）命令、プロセッサ若しくは他の類似の機械によって実行されるソフトウェア（潜在的にオブジェクト・コード及びソース・コードを含む）等）によって実施されてもよい。これらの例のうちの一部では、（図面に示される）メモリ要素は、本明細書において説明する動作に使用されるデータを記憶することができる。これは、本明細書で説明するアクティビティを行うために実行されるソフトウェア、ロジック、コード又はプロセッサ命令を記憶することが可能なメモリ要素を含む。
【００５５】
様々な実施形態では、これらの要素の一部又は全ては、本明細書において概略が示された動作を達成するために調整、管理又は別の方法で協働することができるソフトウェア（すなわち往復（reciprocating）ソフトウェア）を含む。これらの要素の１つ又は複数は、その動作を容易にする任意の適切なアルゴリズム、ハードウェア、ソフトウェア、コンポーネント、モジュール、インタフェース又はオブジェクトを含んでよい。本明細書において提供される多く例では、２つ、３つ、４つ又はそれ以上のネットワーク要素及びモジュールに関する対話を説明していることに留意されたい。しかし、これは、明瞭性及び例示の目的で説明されたものにすぎない。システムを任意の適切な様式で統合することができることを理解されたい。同様の設計的代替により、図１の図示されるモジュール、構成要素及び要素の任意のものを、様々な可能な構成で組み合わせてよく、これらの全てが本明細書の広範な範囲に含まれることは明らかである。特定の場合では、限られた数の要素又は構成要素のみを参照してフローの所与のセットの機能の１つ又は複数を説明する方が容易なことがある。図１のシステム（及びその教示）は容易に拡張可能であり、多数の構成要素、並びにより複雑な／高度な配置及び構成に対応することができることを理解されたい。したがって、提供された例は、範囲を制限すべきではなく、無数の他のアーキテクチャに潜在的に適用されるシステム１０の広範な教示を妨げるべきものでもない。
【００５６】
また、上述の図を参照しながら説明された動作は、システムによって又はシステムの内部で実行され得る可能なシナリオの一部のみを示していることに留意することが重要である。これらの動作の一部を、必要に応じて削除又は除去してもよく、あるいはこれらのステップを、説明した概念の範囲から逸脱することなく大幅に修正又は変更してもよい。さらに、これらの動作のタイミングは、本開示で教示された結果を達成するように大幅に変更されてもよい。上述の動作フローは、例示及び説明のために提供されたものである。説明した概念の教示から逸脱することなく、任意の適切な配置、時系列、構成及びタイミング機構が提供され得るという点において、かなりの柔軟性がシステムによってもたらされる。
【図１】
0005763278.tif 000002
【図２】
0005763278.tif 000003
【図３】
0005763278.tif 000004