(57)【特許請求の範囲】
【請求項１】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する段階と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する段階と
を備え、
前記実行を拒否する段階は、
前記ゲストＯＳに無限にループさせる段階、
前記ゲストＯＳに例外を注入する段階、および、
前記ページフォールトを修正して、前記ハイパーバイザのシャドーページテーブル内の対応するページテーブルエントリ（ＰＴＥ）が、前記ゲストカーネルページの代わりにクラフトページを示すようにする段階
の１つを有し、
前記クラフトページは、前記ゲストＯＳをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令（ＮＯＰ命令）を実行させるコードを含む、方法。
【請求項２】
前記ページフォールトを生成する段階の前に、各ゲストカーネルページに対応する前記ＰＴＥを、前記ハイパーバイザの前記シャドーページテーブルにおいてＮＯＴ＿ＰＲＥＳＥＮＴと分類する段階をさらに備える請求項１に記載の方法。
【請求項３】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）がブート時に前記ゲストＯＳのカーネルコンポーネントを略全てロードした後に、前記ゲストＯＳにおける各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する段階と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する段階と
を備える方法。
【請求項４】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）が前記ゲストＯＳのカーネルコンポーネントを略全てロードする前に、前記ゲストＯＳにおける、ページ化プール範囲または非ページ化プール範囲から来るものである各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する段階と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する段階と
を備える方法。
【請求項５】
前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの１つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する段階をさらに備える請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正する段階と、
前記ゲストカーネルページを実行不可能と分類する段階と
をさらに備える請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記ソフトホワイトリストを作成する段階は、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号（ＭＦＮ）をハッシュに追加する段階を有する請求項１から６のいずれか一項に記載の方法。
【請求項８】
ルートキット保護をイネーブルするべくドメイン作成中に前記ハイパーバイザのロックダウン機能ビットを設定する段階をさらに備える請求項１から７のいずれか一項に記載の方法。
【請求項９】
メモリと、
プロセッサと、
ハイパーバイザと
を備え、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成し、
ゲストカーネルページへのアクセスが試みられるとページフォールトを生成し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否し、
前記実行を拒否することは、
前記ゲストＯＳに無限にループさせること、
前記ゲストＯＳに例外を注入すること、および、
前記ページフォールトを修正して、前記ハイパーバイザのシャドーページテーブル内の対応するページテーブルエントリ（ＰＴＥ）が、前記ゲストカーネルページの代わりにクラフトページを示すようにすること
の１つを含み、
前記クラフトページは、前記ゲストＯＳをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令（ＮＯＰ命令）を実行させるコードを含む、装置。
【請求項１０】
メモリと、
プロセッサと、
ハイパーバイザと
を備え、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）がブート時に前記ゲストＯＳのカーネルコンポーネントを略全てロードした後に、前記ゲストＯＳにおける各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成し、
ゲストカーネルページへのアクセスが試みられるとページフォールトを生成し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する、装置。
【請求項１１】
メモリと、
プロセッサと、
ハイパーバイザと
を備え、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）が前記ゲストＯＳのカーネルコンポーネントを略全てロードする前に、前記ゲストＯＳにおける、ページ化プール範囲または非ページ化プール範囲から来るものである各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成し、
ゲストカーネルページへのアクセスが試みられるとページフォールトを生成し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する、装置。
【請求項１２】
さらに、前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの１つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する請求項９から１１のいずれか一項に記載の装置。
【請求項１３】
さらに、前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正し、
前記ゲストカーネルページを実行不可能と分類する請求項９から１２のいずれか一項に記載の装置。
【請求項１４】
前記ソフトホワイトリストを作成することは、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号（ＭＦＮ）をハッシュに追加することを含む請求項９から１３のいずれか一項に記載の装置。
【請求項１５】
コンピュータに、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手順と、
ゲストカーネルページにアクセスが試みられるとページフォールトを生成する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手順と
を実行させ、
前記実行を拒否する手順は、
前記ゲストＯＳに無限にループさせる手順、
前記ゲストＯＳに例外を注入する手順、および、
前記ページフォールトを修正して、前記ハイパーバイザのシャドーページテーブル内の対応するページテーブルエントリ（ＰＴＥ）が、前記ゲストカーネルページの代わりにクラフトページを示すようにする手順
の１つを有し、
前記クラフトページは、前記ゲストＯＳをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令（ＮＯＰ命令）を実行させるコードを含む、プログラム。
【請求項１６】
前記コンピュータにさらに、
前記ページフォールトを生成する手順の前に、各ゲストカーネルページに対応する前記ＰＴＥを、前記ハイパーバイザの前記シャドーページテーブルにおいてＮＯＴ＿ＰＲＥＳＥＮＴと分類する手順
を実行させるための請求項１５に記載のプログラム。
【請求項１７】
コンピュータに、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）がブート時に前記ゲストＯＳのカーネルコンポーネントを略全てロードした後に、前記ゲストＯＳにおける各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手順と、
ゲストカーネルページにアクセスが試みられるとページフォールトを生成する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手順と
を実行させるためのプログラム。
【請求項１８】
コンピュータに、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）が前記ゲストＯＳのカーネルコンポーネントを略全てロードする前に、前記ゲストＯＳにおける、ページ化プール範囲または非ページ化プール範囲から来るものである各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手順と、
ゲストカーネルページにアクセスが試みられるとページフォールトを生成する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手順と
を実行させるためのプログラム。
【請求項１９】
前記コンピュータにさらに、
前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの１つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する手順
を実行させるための請求項１５から１８のいずれか一項に記載のプログラム。
【請求項２０】
前記コンピュータにさらに、
前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正する手順と、
前記ゲストカーネルページを実行不可能と分類する手順と
を実行させるための請求項１５から１９のいずれか一項に記載のプログラム。
【請求項２１】
前記ソフトホワイトリストを作成する手順は、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号（ＭＦＮ）をハッシュに追加する手順を有する請求項１５から２０のいずれか一項に記載のプログラム。
【請求項２２】
請求項１から８のいずれか一項に記載の方法を実行する装置。
【請求項２３】
コンピューティングシステムである、請求項２２に記載の装置。
【請求項２４】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手段と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手段と
を備え、
前記実行を拒否する手段は、
前記ゲストＯＳに無限にループさせる手段、
前記ゲストＯＳに例外を注入する手段、および、
前記ページフォールトを修正して、前記ハイパーバイザのシャドーページテーブル内の対応するページテーブルエントリ（ＰＴＥ）が、前記ゲストカーネルページの代わりにクラフトページを示すようにする手段
の１つを含み、
前記クラフトページは、前記ゲストＯＳをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令（ＮＯＰ命令）を実行させるコードを含む、システム。
【請求項２５】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）がブート時に前記ゲストＯＳのカーネルコンポーネントを略全てロードした後に、前記ゲストＯＳにおける各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手段と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手段と
を備えるシステム。
【請求項２６】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）が前記ゲストＯＳのカーネルコンポーネントを略全てロードする前に、前記ゲストＯＳにおける、ページ化プール範囲または非ページ化プール範囲から来るものである各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手段と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手段と
を備えるシステム。
【請求項２７】
コンピューティングシステムである、請求項２４から２６のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概してコンピュータネットワークの分野に関し、具体的にはハイパーバイザ環境においてカーネルルートキットに対する保護を実行するシステムおよび方法に関する。
【背景技術】
【０００２】
コンピュータネットワークセキュリティの分野は、今日の社会において重要性および複雑性が増す一方である。コンピュータネットワーク環境は、実質的に全ての企業または組織について構成されており、通常は複数のコンピュータ（例えば、エンドユーザコンピュータ、ラップトップ、サーバ、印刷デバイス等）が相互に接続されている。さらに、クラウドサービスプロバイダ（および複数のアプリケーションおよびオペレーティングシステムを実行する他の組織）は、さまざまな異なるゲストオペレーティングシステムを同時に一のホストデバイス上で実行させるべくハイパーバイザ技術を利用している場合がある。ハイパーバイザは、複数のオペレーティングシステムを一のホストコンピュータ上で同時に実行させるコンピュータソフトウェア／ハードウェアプラットフォーム仮想化ソフトウェアである。セキュリティ上の脅威は、ハイパーバイザ環境の外部および内部で発生する可能性がある。ハイパーバイザ環境内の脅威は、ＩＴ管理者にとってさらなる課題となり得る。
【図面の簡単な説明】
【０００３】
本開示および本開示の特徴および利点をより深く理解していただくべく、添付図面と共に以下の説明を参照していただきたい。添付図面では、同様の参照番号は同様の構成要素を表している。図面は以下の通りである。
【０００４】
【図１】実施形態例に係る、ハイパーバイザ環境におけるカーネルルートキットに対する保護を実行するためのシステムのコンポーネントを示す簡略化ブロック図である。
【０００５】
【図２】本開示の実施形態に対応付けられる動作の例を説明する簡略化フローチャートである。
【発明を実施するための形態】
【０００６】
＜概論＞
一実施形態に係るシステムおよび方法は、ハイパーバイザ環境においてゲストオペレーティングシステムにおける各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成するモジュールと、アクセス試行がゲストカーネルページに対して実行されるとページフォールトを生成するモジュールと、ゲストカーネルページがソフトホワイトリスト内のエントリの１つに対応する場合、アクセスおよび実行を許可するべくページフォールトを修正するモジュールと、ゲストカーネルページがソフトホワイトリスト内のエントリのいずれにも対応しない場合、実行を拒否するモジュールとを含む。実施形態例によると、ソフトホワイトリストは、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号のハッシュを含む。
【０００７】
他の実施形態例は、ページフォールトが命令ページフォールトで、ゲストカーネルページがソフトホワイトリスト内のエントリのうち１つに対応する場合、ゲストカーネルページをリードオンリーおよび実行可能と分類することを含む。ページフォールトがデータページフォールトで、ゲストカーネルページがソフトホワイトリスト内のエントリのどれにも対応しない場合、当該方法は、ページフォールトを修正すること、および、ゲストカーネルページを実行不可能と分類することを含む。
【０００８】
より具体的な実施形態は、ハイパーバイザのシャドーページテーブルにおいて、各ゲストカーネルページに対応するページテーブルエントリを、ＮＯＴ＿ＰＲＥＳＥＮＴと分類することを含む。さらに別の実施形態例では、当該方法は、ゲストＯＳに無限にループさせることで実行を拒否すること、ゲストＯＳに例外を注入すること、または、ページフォールトを修正してシャドーページテーブル内の対応するＰＴＥが、ゲストカーネルページの代わりにクラフトページを示すようにすることを含む。クラフトページは、ゲストＯＳにクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション（ＮＯＰ）命令を実行させるコードを含むとしてよい。
【０００９】
さらに別の実施形態例によると、ソフトホワイトリストを作成することは、ゲストＯＳがブート時にカーネルコンポーネントの略全てをロードした後に実行されるとしてよい。ゲストＯＳがカーネルコンポーネントの略全てをロードしていない場合、各ゲストカーネルページは、ページ化プール範囲または非ページ化プール範囲からであるとしてよい。さらに別の実施形態は、ルートキット保護および他の機能をイネーブルするべく、ドメイン作成中、ハイパーバイザにおいてロックダウン機能ビットを設定することを含む。
【００１０】
図１は、ハイパーバイザ環境においてカーネルルートキットに対する保護を実行するためのシステム１０の実施例を示す簡略ブロック図である。本明細書で用いる場合、「ハイパーバイザ」は、１以上のオペレーティングシステム（ＯＳ）（「ゲストＯＳ」と呼ぶ）を一のホストデバイス（例えば、コンピュータ）で同時に実行させるハードウェア仮想化エンティティである。仮想化によって、ゲストＯＳは、隔離された仮想環境（通常、仮想マシンまたはゲストと呼ばれる）において変更することなく実行することができるようになる。隔離された仮想環境では、ホストデバイスの物理特性および物理挙動が複製される。より具体的には、ゲストは、仮想ハードウェア（プロセッサ、メモリ、ディスク、ネットワークインターフェース等）を備える隔離された仮想環境を表すことができる。図１に図示した実施形態によると、システム１０は、ゲスト１４に仮想化環境を提供するハイパーバイザ１２を備える。本開示の広い範囲では、ハイパーバイザ１２で任意の数のゲストがホストされるとしてよい。説明の便宜上、一のゲストを代表として図１に図示している。
【００１１】
ハイパーバイザ１２は、ゲスト１４によって利用されるべく割り当てられるホストデバイス（不図示）のハードウェア１６を制御して管理する。ゲスト１４は、ハイパーバイザ１２上でゲストＯＳ１８を実行するとしてよい。ゲストＯＳ１８は、１以上のアプリケーション２０をサポートするとしてよい（本明細書では複数のアプリケーションのうち１つを意味する際にアプリケーション２０と呼ぶ）。本明細書で用いる場合、「アプリケーション」という用語は、任意のソフトウェアファイル、ライブラリモジュール、関数、サブルーチン、バイナリ、命令セット、コードブロック、または、支援（例えば、コンパイル、解釈等）有りまたは支援無しでコンピュータによって理解され処理され得る命令を含むその他の同様の動作ユニットを総称的に意味するべく広い意味で利用される。
【００１２】
ハイパーバイザ１２は、プロセッサ２２およびマシンメモリ２４等の基礎となるハードウェア１６へのアプリケーション２０のアクセスを管理するとしてよい。本明細書で用いられる場合、「マシンメモリ」は、ホストデバイスで利用可能なものとしてハイパーバイザ１２に可視であるメモリ要素を意味する。ゲストＯＳ１８は、ゲスト物理メモリ２８にアクセスするゲスト仮想メモリ２６をアプリケーション２０に対して提示するとしてよい。本明細書で用いる場合、「ゲスト仮想メモリ」という用語は、ゲスト１４内で実行するアプリケーション２０に可視である略一続きの仮想アドレス空間を意味する。アドレス空間は、所与の範囲の複数の個別のアドレスを意味する。各アドレスは、アプリケーション（例えば、アプリケーション２０）がデータを格納可能であって後にデータを取得可能であるメモリロケーション（つまり、アドレス）に対応するとしてよい。本明細書で用いる場合、「ゲスト物理メモリ」という用語は、ゲストＯＳ１８に可視である仮想メモリを意味する。
【００１３】
ゲスト物理メモリ２８は、動作中にカーネルページ３０を作成するとしてよい。ゲストＯＳがゲストカーネルをメモリにロードする場合、ゲストカーネルは複数のページ（例えば、ゲストカーネルページ３０）に分割され、一部のページはカーネル命令を含み、他のページはカーネルデータを含む。各ページは、ゲストカーネルページ３０のそれぞれを含み、通常は標準サイズ（例えば、４ｋＢ）であって、アドレス（例えば、ゲスト仮想アドレス）に対応付けられる。ゲストＯＳ１８は、各ページの仮想アドレスを、ページテーブルを用いて、対応する「物理」アドレスにマッピングする。ゲストメモリ（例えば、ゲスト仮想メモリ２６およびゲスト物理メモリ２８）は仮想メモリであるが、ゲストＯＳ１８は、ゲスト物理メモリ２８が実在するもの、または、「物理メモリ」であると仮定する。しかし、ゲスト物理メモリ（例えば、ゲスト物理メモリ２８）は単に、（実在の）ホスト物理アドレス（マシンアドレスとも呼ぶ）に対する正しいマッピングを維持するべく、ハイパーバイザ１２が利用する抽象化である。
【００１４】
ページテーブルは、仮想アドレスと「物理」アドレスとの間のマッピングを格納するべくゲストＯＳ１８が利用するデータ構造である。ページテーブルは、複数のページテーブルエントリ（ＰＴＥ）を含む。各ＰＴＥは、仮想アドレスを対応する「物理」アドレスにマッピングする（例えば、ゲスト仮想アドレスからゲスト物理アドレスへ、または、ゲスト物理アドレスからマシンアドレスへ）。ＰＴＥは、「物理」アドレス（例えば、ゲスト物理アドレスまたはマシンアドレス）、および、適切なメモリ要素（例えば、ゲスト物理メモリ２８またはマシンメモリ２４）内のページに関連する他の情報、例えば、当該ページが存在するか否か、当該ページがリードオンリーまたはリード／ライトであるか、等を含む。
【００１５】
シャドーページテーブル３２は、現在実行中のプロセスについて、ゲスト物理メモリ２８をマシンメモリ２４にマッピングするためにハイパーバイザ１２によって利用され得る。「プロセス」は、実行中の命令を持つアプリケーション（またはその一部）のインスタンスである。シャドーページテーブル３２は、ゲストカーネルページ３０に対応するページテーブルエントリ（ＰＴＥ）３４を含む。各ＰＴＥ３４は、マシンアドレスおよびマシンメモリ２４にロードされた各カーネルページに関連する他の情報を含む。実施形態例によると、ＰＴＥ３４は、シャドーページテーブル３２においてＮＯＴ＿ＰＲＥＳＥＮＴと分類されるとしてよい。実施形態例によると、ゲストＯＳ１８で新しいカーネルページが作成されると常に、シャドーページテーブル３２の対応するＰＴＥ３４は、デフォルトでＮＯＴ＿ＰＲＥＳＥＮＴと分類されるとしてよい。
【００１６】
ハイパーバイザ１２内のルートキット保護モジュール３６は、ゲストカーネルページ３０の仮想アドレスに対応するマシンフレーム番号（ＭＦＮ）をハッシュ３６に追加することができる。一実施例によると、ＭＦＮは、対応する仮想アドレスについてマシンメモリ２４において割り当てられているページ番号を意味する。ページフォールトハンドラ４０は、適切なゲストカーネルページ３０へのアクセスまたは実行を、条件に応じて許可または拒否するとしてよい。ハイパーバイザ１２で実行されているドメイン０（ＤＯＭ０）４２は、物理ハードウェア１６にアクセスする特別な権利を持つとしてよく、同様に、システム上で実行されている他のゲストとやり取りする特別な権利を持つとしてよい。ＤＯＭ０  ４２は、ハイパーバイザ１２内のルートキット保護モジュール３６の特定のロックダウン機能を制御するロックダウンモジュール４４を含むとしてよい。
【００１７】
システム１０の技術を説明する目的上、図１に図示するシステム等の所与のシステムにおける動作およびセキュリティ上の懸念を理解することが重要である。以下に記載する基礎的な情報は、本開示を適切に説明するための基礎と考えられるとしてよい。このような情報は、説明のみを目的として真剣に記載しているものであり、したがって、本開示およびその用途の可能性の広い範囲を限定するものと解釈されるべきではない。
【００１８】
通常のコンピューティングアーキテクチャは、意図することなく、または、悪意を持ってより低い特権のコードによって上書きされることが無いように、システムコードおよびデータを保護するべく、複数の特権レベルを持つ４つのリング（０から３と番号を振る）をサポートする。リング０は最高特権レベルであり、リング３は最低特権レベルである。ＯＳは、異なるプロセスについて、異なる特権レベルを利用するとしてよい。例えば、Ｗｉｎｄｏｗｓ（登録商標）ＯＳは、プロセスおよびデータセキュリティのために、２つの特権レベル（リング０およびリング３）を利用する。Ｉｎｔｅｒｎｅｔ  ＥｘｐｌｏｒｅｒおよびＭｉｃｒｏｓｏｆｔ  Ｗｏｒｄ等のアプリケーション用のコード、および、複数のＷｉｎｄｏｗｓ（登録商標）サービス（例えば、サービスコントロールマネージャ、ローカルシステムセキュリティオーソリティ、Ｗｉｎｌｏｇｏｎ、セッションマネージャ、および、ＲＰＣサーバ等）は、リング３で実行される。
【００１９】
カーネルレベルコードは、リング０で実行され、デバイスドライバおよびカーネルコンポーネント、例えば、仮想メモリのマネージャ、キャッシュ、入出力、オブジェクト、プラグアンドプレイ、ハードウェア抽象化層、グラフィクスサブシステム、ファイルシステム、および、ネットワークプロトコル実装で利用される。カーネルは、アプリケーションを、コンピューティングデバイスのハードウェアに接続する。一般的に、カーネルは、ＯＳによって異なり得る複数のコンポーネントを含む。例えば、Ｌｉｎｕｘ（登録商標）ＯＳは、低レベルドライバ（例えば、中央演算処理装置（ＣＰＵ）、メモリマネジメントユニット（ＭＭＵ）およびオンボードデバイスの初期化を行うアーキテクチャ固有のドライバ）、プロセススケジューラ（例えば、複数の異なるプロセスに対して公平にＣＰＵのタイムスライス割り当てを行うコンポーネント）、メモリマネージャ（例えば、複数の異なるプロセスにメモリを割り当てて共有するためのコンポーネント）、ファイルシステム（例えば、一の統合ファイルシステムインターフェースをユーザに提示するべく基礎となる複数のファイルシステムを抽象化するコンポーネント）、ネットワークインターフェース（例えば、複数の異なるネットワーキングデバイスに対してアクセスおよび制御を提供するコンポーネント）、デバイスドライバ（例えば、高レベルドライバ）等のコンポーネントを含むとしてよい。アプリケーションは一般的に、カーネルと通信するべくシステム関数コール（例えば、Ｗｉｎ３２  ＡＰＩコール）を利用する。
【００２０】
ルートキットは、当該ルートキットの内密の実装を成功させるべく、（例えば、アプリケーションのプロセスの）通常の実行パスの流れを変える。ルートキットは、標準的なＯＳ機能を妨害することによって当該ルートキットの存在を積極的に秘匿しつつ、デバイスへの特権アクセスを継続して可能とするソフトウェアである。ルートキットは通常、システム関数コールが戻したデータを変更して、自身のバイナリファイル、プロセスおよびレジストリエントリを秘匿する。ルートキットは、実行されている箇所およびシステムのうちどのエリアでフックしているかに応じて、概してユーザモードルートキットおよびカーネルルートキットという２種類のいずれかに分類することができる。ユーザモードルートキットは、ユーザモード特権で実行されているので、検出および修復が比較的容易である。一方、カーネルルートキットは、システム特権で実行されており、検出および修復がより難しくなっている。カーネルルートキットは、通常はカーネルモードデバイスドライバをインストールすることによって、自身のコードをカーネルアドレス空間にロード（つまり、注入）する。例えば、カーネルルートキットは、カーネルモジュールを用いて実行中のカーネルにカーネルコードを注入することによって、または、新しいコードを未使用のカーネルメモリに書き込むことによって、または、カーネルモジュールファイルを挿入すること等によって、インストールされるとしてよい。配信メカニズムが入ってしまうと、カーネルルートキットはプロセスの通常実行パスの流れを妨害することができる。
【００２１】
カーネルルートキットは、デスクトップのセキュリティにおいて大きな課題である。カーネルルートキットは、システムのバックドアの開設、プライバシー情報の盗難、セキュリティ対策の解除、および、他のマルウェアアプリケーションの実行等、さまざまな攻撃を仕掛けることができる。通常、攻撃者は、最初にルートレベルアクセスを取得した後で、既知の脆弱性を悪用することで、または、パスワードを取得することで（例えば、暗号を解読することで、ソーシャルエンジニアリングによって等）、カーネルルートキットをコンピュータにインストールする。カーネルルートキットがインストールされると、攻撃者は、通常の認証メカニズムおよび承認メカニズムを回避することで、進行中の侵入をマスクして、コンピュータに対する特権アクセスを維持することができる。カーネルルートキットは、カーネルルートキットを発見する目的のソフトウェアを妨害することが可能であるので、検出が困難である場合がある。検出方法には、別の信頼されたオペレーティングシステムを利用すること、挙動ベースの方法、署名スキャン、差分スキャン、および、メモリダンプ分析が含まれる。除去は、特にカーネルルートキットがカーネル内に存在する場合に、複雑であるか、または、実質的に不可能である可能性がある。
【００２２】
ハイパーバイザ環境において、攻撃の影響は深刻になる可能性がある。１つのゲストが感染すると、ホストデバイス上の全ての他のゲストが感染する可能性がある。例えば、攻撃者は、ゲストを感染させることによってハードウェア上の管理者特権を得ることができ、ハイパーバイザ環境でゲスト間を移動することができる。ハイパーバイザが数万ものゲストをホストしている場合には、このようなゲスト間攻撃は壊滅的な結果になり得る。
【００２３】
ハイパーバイザ環境では、ゲストに設ける保護ソフトウェアを必要とすることなく、カーネルルートキットに対する保護を実現する機会を与えられる。ゲストは、仮想化されたホストデバイスにおいてハイパーバイザの上で実行される。従来のカーネルルートキット保護メカニズムは、ハイパーバイザ上で実行されているゲストの各インスタンスにインストールし得るが、このような方法では、メモリ、ランタイム性能および管理に関してオーバーヘッドが膨大になる。カーネルルートキット保護メカニズムは、カーネル（当該保護メカニズムの保護対象）の外部に存在することが理想であるが、これは非仮想化環境では可能でない場合がある。さらに、クラウド（仮想化）環境においてゲストを実行している顧客は、クラウドサービスプロバイダがカーネルルートキット保護をトランスペアレントに提供することを希望する場合があるとしてよい。
【００２４】
一のカーネルルートキット保護方法によると、ハッシュ関数を用いてオンディスクコードライブラリのデジタル署名を算出することができる。ハッシュ関数は、メッセージダイジェストを作成する。メッセージダイジェストは、データの任意のブロックについて、当該データが変化するとハッシュ値が変化するように、算出され得る固定サイズのビットストリングである。定間隔でオンディスクコードライブラリのメッセージダイジェストを再算出して、信頼のおけるフィンガープリントリストと比較することによって、システム内の変更を検出および監視することができる。しかし、現在の方法は、コードの発行者が最後にリリースした時点以降でコードが修正されたか否かのみを確認する。また、カーネルルートキットは、ディスク上で修正を行うのではなくメモリからロードすることによって、このプロセスを妨害する場合がある。他のルートキット保護方法は、コモディティＯＳに基づいているとしてよい。仮想化環境についてエージェント無しで保護を実現するソフトウェアが必要である。
【００２５】
図１で概略を示す、ハイパーバイザ環境においてカーネルルートキットに対する保護を実現するシステムは、このような問題を、他の問題と共に解決することができる。本開示の実施形態は、よりロバスト性の高い方法を可能とするべく、既存の技術の性能を大きく改善しようとしている。実施形態例では、システム１０のコンポーネントは、ハイパーバイザ１２内のゲストカーネルページ３０のソフトホワイトリスト、例えば、ハッシュ３８を作成するとしてよい。ソフトホワイトリストは、ゲストＯＳ１８内の各ゲストカーネルページ３０に対応するエントリを含む。実施形態例によると、ソフトホワイトリストは、ページコンテンツ全体のチェックサムではなく、例えば、それぞれが対応するマシンページフレーム番号（ＭＦＮ）で表される承認されたゲストカーネルページのリストを含むことを目的とする。実施形態例によると、ソフトホワイトリスト（つまり、ハッシュ３８）は、ゲストカーネルページ３０に対応するＭＦＮのハッシュを含む。
【００２６】
実施形態例によると、ソフトホワイトリストは、ゲストＯＳ１８がブートを完了しカーネルコンポーネント（例えば、プロセススケジューラ、メモリマネージャ、ファイルシステム等）をロードした後に作成されるとしてよい。本明細書で用いられる場合、「ブート」という用語は、ブートシーケンスを意味する。ブートシーケンスは、電源が入るとコンピュータが実行する最初の一連の処理である。この後、システム１０は、ソフトホワイトリストに存在しない新しいカーネルページからコードが実行できないようにするとしてよい。別の実施形態例によると、ソフトホワイトリストは、ゲストＯＳ１８がブートを完了してカーネルコンポーネントをロードする前に作成されるとしてもよい。カーネルページ３０は、ページ化プールおよび非ページ化プールにあるとしてよい（全てのカーネルドライバがこれらのページにロードされているため）。ページ化プール範囲および非ページ化プール範囲のそれぞれの不良仮想アドレスのページスタートアドレスは、ハイパーバイザ１２内のハッシュテーブル（例えば、ハッシュ３８内）に格納されているとしてよい。
【００２７】
システム１０は、例えば、ホワイトリストに基づいているので、ゼロデイ脅威に対して保護され得る。実施形態例によると、システム１０は、パブリッククラウドインフラストラクチャプロバイダおよびプライベートクラウドを採用している企業によって実現され得る。システム１０は、トランスペアレントなセキュリティレイヤを提供するとしてよい。この解決方法は、ベースのＯＳ設定を頻繁に変更せず、逆にそれに格納されているデータを変更する顧客（例えば、ウェブホストサービスプロバイダ）にとって特に有用であるとしてよい。
【００２８】
ハイパーバイザ環境におけるメモリ管理について、ゲストＯＳ（例えば、ゲストＯＳ１８）は、ゲスト仮想メモリ（例えば、ゲスト仮想メモリ２６）内の仮想アドレス空間レイアウトをアプリケーション（例えば、アプリケーション２０）に提供する。ゲスト仮想メモリのアドレス空間は、アプリケーション（例えば、アプリケーション２０）がアクセス可能なユーザ空間、および、ブートドライバ、プロセスページテーブル、システムキャッシュ、ページ化プールおよび非ページ化プールを含むシステム空間等に分割されるとしてよい。通常、システムページのアドレスロケーションは、ハードコードされている（または、事前に知られている）。例えば、４ＧＢのゲスト仮想メモリは、アドレスの範囲が０ｘＢＦＦＦＦＦＦＦから０ｘ００００００００までの３ＧＢのユーザ空間と、アドレスの範囲が０ｘＦＦＦＦＦＦＦＦから０ｘＣ０００００００までのシステム空間に分割されるとしてよい。
【００２９】
ゲストＯＳは、ページテーブルを用いて仮想−物理アドレスマッピングを処理する。仮想アドレス空間（例えば、ゲスト仮想メモリ２６）は連続的であるのが一般的だが、アドレスは、物理アドレス空間（例えば、ゲスト物理メモリ２８）内の複数の非連続のブロックにマッピングされるとしてよい。仮想−物理マッピング情報は、ページテーブル内でページテーブルエントリ（ＰＴＥ）と呼ばれる構造に配置されている。ＰＴＥの形式は、ＯＳ毎に異なるとしてよく、例えば、Ｌｉｎｕｘ（登録商標）ＯＳはある形式を定めており、Ｗｉｎｄｏｗｓ（登録商標）ＸＰ  ＯＳは別の形式を定めているとしてよい。一般的に、ＰＴＥは通常、当該ＰＴＥが参照しているページが存在するか否か（または有効であるか否か）を示す１つのビットを含む。例えば、プロセスがマシンメモリ（例えば、マシンメモリ２４）へのロードを開始すると、ゲストＯＳは、ゲスト物理メモリ（例えば、ゲスト物理メモリ２８）にページがロードされていると仮定し、対応するページテーブルを生成する。マシンメモリにロードされているページについての存在ビットは、全てのページがメモリにロードされるまで、０に設定される（ＮＯＴ＿ＰＲＥＳＥＮＴ（存在しない）を意味する）。全てのページがロードされると、これらのページの存在ビットは、対応するＰＴＥにおいて１に設定されるとしてよい（ＰＲＥＳＥＮＴ（存在する）を意味する）。ロード中、ＮＯＴ＿ＰＲＥＳＥＮＴと分類されたページへのアクセスが試みられると、ページフォールトが生成されるとしてよい。
【００３０】
実施形態例によると、ゲスト１４で維持されているページテーブルは、対応するシャドーページテーブル（例えば、シャドーページテーブル３２）を持つとしてよい。シャドーページテーブルは、ハイパーバイザ１２によって生成および維持される。ゲストＯＳ１８は、シャドーページテーブル３２へのアクセスを持たない。ブート時、ゲストＯＳ１８は、カーネルをコンピュータのハードディスクからメモリ（例えば、ゲストカーネルページ３０として）にロードするとしてよい。ルートキット保護モジュール３６は、ゲストカーネルページ３０に対応するＰＴＥ３４を、シャドーページテーブル３２において、ＮＯＴ＿ＰＲＥＳＥＮＴと分類するとしてよい。一例を挙げると、ルートキット保護モジュール３６は、ページの仮想アドレスを読み出すことによって、当該ページがゲストカーネルページ３０のうち１つであると判断するとしてよい。仮想アドレスが特定の範囲（例えば、所定範囲）内にある場合、当該ページは、ゲストカーネルページ３０の１つであるとしてよく、対応するＰＴＥ３４はＮＯＴ＿ＰＲＥＳＥＮＴと分類されているとしてよい。
【００３１】
ページフォールトが発生すると、ページフォールトを発生させた命令を実行しているプロセッサ（例えば、プロセッサ２２）からハイパーバイザ（例えば、ハイパーバイザ１２）へと制御が移行する。ハイパーバイザのページフォールトハンドラ（例えば、ページフォールトハンドラ４０）は、例えば、ページフォールトが命令ページフォールトまたはデータページフォールトのいずれであるかを判断するべく、命令ポインタおよび不良アドレスを決定することができる。例えば、命令ポインタ（つまり、プロセッサが次に実行を試みる予定のメモリアドレスを示すポインタ）が不良アドレスを示している場合、ページフォールトは命令ページフォールトである。
【００３２】
図１のインフラストラクチャについて、ハイパーバイザ１２は複数のゲストＯＳの複数のインスタンスを実行することができる。ハイパーバイザ１２は、サーバ、ファイアウォール、ウイルス対策方法、または、より一般的にコンピュータの一部であるとしてよい。一実施例によると、ハイパーバイザ１２は、ベアハードウェアで実行されると共に同一ハードウェア上で同時に複数のＯＳの複数のインスタンスを実行可能とするＸｅｎ要素である。通常のＸｅｎ設定によると、複数のＯＳの下方でＸｅｎが実行されるとしてよく、アプリケーションはＯＳより上位であり、ＯＳは一群のゲスト（例えば、ゲスト１４）に対応付けられている。設定全体は、サーバ（または、何らかのその他のネットワークアプライアンス）で提供されるとしてよい。実施形態例によると、ゲスト１４は、ＤＯＭ０  ４２に対応付けられているＯＳを実行することができる。Ｘｅｎ実施例は本開示が適用可能な一の可能な例を表すのみことに留意されたい。任意の数のその他のハイパーバイザが同様に、本明細書に記載するさまざまな教示内容から恩恵を受け得る。
【００３３】
ハイパーバイザ１２を管理するための制御ツールは、ＤＯＭ０  ４２上で実行され得る。ＤＯＭ０  ４２は、ハイパーバイザ１２上のゲスト（例えば、ゲスト１４）を管理する統合インターフェースを提供するとしてよい。ＤＯＭ０  ４２は、管理者がハイパーバイザ１２を設定するための手段を提供するとしてよく、当該手段は、ストレージの管理、ゲスト挙動のさまざまな側面の制御、仮想ネットワークの設定、ハイパーバイザおよび１以上のゲストの設定、および、ゲストの作成、削除、シャットダウン、ブートアップ等の機能を実現する。例えば、この種の設定は、ゲストの複数のインスタンスをホストするＸｅｎをサーバが実行するデータセンターで良く採用され得る。ＤＯＭ０  ４２は、修正したＬｉｎｕｘ（登録商標）カーネルを含むとしてよく、物理Ｉ／Ｏリソースへアクセスする特別な権利を持つと共に、システムで実行されている他の仮想マシンとやり取りする特別な権利も持つとしてよい。通常、ＤＯＭ０  ４２は、システムがブートされると開始される最初のドメインであり、全てのその他の通常ゲスト（例えば、ゲスト１４）を作成および設定するために利用することができる。ハイパーバイザ環境では、他のゲストを開始させる前にＤＯＭ０  ４２を実行する必要がある。
【００３４】
図２を参照すると、図２は、本開示の実施形態に対応付けられる処理ステップの例を説明するための簡略化フローチャートである。処理１００は、ＤＯＭ０  ４２がアクティブ化される処理１０２で開始されるとしてよい。処理１０４において、ドメイン作成中にロックダウン機能はロックダウンモジュール４４によってイネーブルされるとしてよい（ゲストコンテキストからハイパーバイザコンテキストへのＶＭＥＸＩＴ移行に対応付けられる）。処理１０６において、ドメイン固有データ構造内のロックダウン機能ビットがハイパーバイザ１２において設定されるとしてよい。処理１０８において、ハイパーバイザ仮想マシン（ＨＶＭ）（つまり、ゲスト１４）を開始させるとしてよい。処理１１０において、ゲストＯＳ１８は、ハイパーバイザ１２へのＶＭＥＸＩＴと共に、ゲストカーネルページ３０についてページテーブルエントリ（ＰＴＥ）を作成するとしてよい。処理１１２において、ルートキット保護モジュール３６は、シャドーページテーブル３２においてゲストカーネルページ３０についてＰＴＥ３４を作成するとしてよい。処理１１４において、ルートキット保護モジュール３６は、ハイパーバイザ１２が維持しているシャドーページテーブル３２においてゲストカーネルページ３０をＮＯＴ＿ＰＲＥＳＥＮＴと分類するとしてよい。さらに、この処理は、処理１１６におけるプロセッサ２２に対応付けられる仮想マシン命令（ＶＭＲＵＮ）と共に実行されるとしてよい。
【００３５】
ルートキット保護がイネーブルされると（例えば、ゲストＯＳ１８がブートアップしてカーネルコンポーネントをロードすると）、ページフォールトハンドラ４０は、ハイパーバイザ１２内のシャドーページテーブル３２を辿ったり（ウォーキングしたり）、ハッシュ３８に仮想アドレス（例えば、まだアクセスされていないページに対応する仮想アドレス）を追加したり、等の動作を実行するとしてよい。実施形態例によると、これらの動作は、ゲストＯＳ１８がブートアップを完了した後に一度に実行され、その後、システム１０はロックされたと見なされるとしてよい。
【００３６】
処理１２０において、ゲストＯＳ１４内のアプリケーション２０は、ゲストカーネルページ３０へのアクセスを試みるとしてよい。ゲストカーネルページ３０へアクセスを試みると、処理１２２においてページフォールトが発生する可能性がある（ゲストカーネルページ３０はＮＯＴ＿ＰＲＥＳＥＮＴと分類されているため）。尚、ルートキット保護がイネーブルされていない場合（例えば、ゲストＯＳ１８がブートアップを完了しておらず、カーネルコンポーネントのロードを完了していない）、および、ページフォールトがページ化プール範囲および非ページ化プール範囲の外部である場合、ページフォールトハンドラ４０は、単純にページフォールトを修正して各不良仮想アドレス（例えば、ページ化プール範囲および非ページ化プール範囲に含まれる）のページスタートアドレスをハッシュ３８に格納することに留意されたい。ページ化プール範囲および非ページ化プール範囲の外部にあるこれらのアドレスに対するアクセスは許可されるとしてよい。これは、カーネルドライバが通常はページ化プール範囲および非ページ化プール範囲内にロードされているためである。
【００３７】
処理１２２においてページフォールトを発見すると、処理１２４においてページフォールトが命令ページフォールトまたはデータページフォールトのいずれであるかを判断する。ページフォールトがデータページフォールトである場合、ソフトホワイトリスト（つまり、ハッシュ３８）において不良仮想アドレスに対応するＭＦＮを検索する。不良仮想アドレスのＭＦＮがハッシュ３８内に存在する場合、ページフォールトに対応付けられているページは正当である。したがって、処理１２６において、ページフォールトハンドラ４０は、当該ページの今後のアクセス／実行を許可するべく、ページフォールトを永久的に修正するとしてよい。一方、不良仮想アドレスに対応するＭＦＮがハッシュ３８に存在しない場合、カーネルページは新しく、当該カーネルページへ書き込もうとする試みは、コードまたはデータを含むとしてよい。したがって、ページフォールトハンドラ４０は、処理１２６において、ページフォールトを永久的に修正して、ページをＮＸ（実行禁止）と分類するとしてよい。これによって、発生するページフォールトが最小限に抑えられることが保証され得る一方、新しいカーネルページへのアクセスまたは実行が防止される。他のページは、ページを実行しようという試みが発生するまでは、ページフォールトが発生することなく読み書き可能な状態を継続することができる。アプリケーション２０は、処理１２８においてシャドーページテーブル３２にアクセスすることが許可されるとしてよい。処理１３０で処理は終了する。
【００３８】
処理１２４における判断結果がページフォールトが命令フォールトであることを示す場合、ページフォールトハンドラ４０は、処理１３２において、不良仮想アドレスのＭＦＮがハッシュ３８に存在するか否かを確認するとしてよい。存在する場合、ページフォールトハンドラ４０は、処理１３４においてページフォールトを永久的に修正して（例えば、今後のアクセス／実行を許可）、ページをリードオンリーと分類して、ＮＸを削除し、アクセス／実行を許可するとしてよい。ページがハッシュ３８に存在しない場合、当該ページが新しいカーネルページであることを意味するとしてよく、ページフォールトハンドラ４０は、処理１３６において実行を拒否するとしてよい。実行の拒否は、幾つかの方法で実行することができる。
（ｉ）ページフォールトを修正せず、ゲスト１４において不良スレッドを無限にループさせる。
（ｉｉ）ページフォールトを修正せず、例外をゲスト１４に注入するとしてよい。例外は、不良プロセスによって捕捉されるとしてよい。プロセスがこの例外を処理しない場合、消滅させるとしてよい。
（ｉｉｉ）ページフォールトを修正するが、不良ページに対応付けられるシャドーＰＴＥ３４は所望のページではなくクラフトページを示すように操作するとしてよい。クラフトページは、ゲスト１４をクラッシュさせるコード、または、ノーオペレーション（ＮＯＰ）命令を問題を起こすことなく実行させるコードを含むように設定され得る。他の例は、例えば、ゲスト１４を「ブルースクリーン」状態にして（ｂｌｕｅ−ｓｃｒｅｅｎｉｎｇ）、潔く終了（ｅｘｉｔ）を発生させるダミーページを挿入する等の処理を行う。処理１３８においてプロセスを終了させるとしてよい。
【００３９】
カーネルルートキット保護のための（同様に危険性の高いコードが実行されないように禁止するための）ソフトウェアは、さまざまなロケーションに設けられ得る（例えば、ルートキット保護モジュール３６内）。一実施例によると、このソフトウェアは、セキュリティ攻撃からの保護を求めている（または、書き込み可能なメモリ領域に対する望ましくない操作または不正な操作から保護されている）コンピュータ内に存在する。より詳細な設定について説明すると、このソフトウェアは具体的に、図１に図示したコンポーネントを含む（または、これらのコンポーネントとやり取りする）ハイパーバイザのセキュリティレイヤに存在する。さらに別の実施形態によると、ソフトウェアは、このカーネルルートキット保護を実現するべく、ウェブサーバから受信またはダウンロードすることもできる（例えば、複数の別個のデバイス、複数の別個の仮想マシン、ゲスト、ハイパーバイザ、サーバ等について個別のエンドユーザライセンスを購入する場合）。
【００４０】
他の例を挙げると、カーネルルートキット保護機能は、これらの特定された要素内に（または、これらの特定の要素の近傍に）設けられ得るか、または、任意の他のデバイス、サーバ、ネットワークアプライアンス、コンソール、ファイアウォール、スイッチ、情報技術（ＩＴ）デバイス等に設けられるか、または、補完的な解決策として設けられるか（例えば、ファイアウォールと組み合わせて）、または、ネットワーク内のどこかにプロビジョニングされる、（例えば、ウイルス対策の一環として）専用の要素を含み得る。本明細書で用いられる場合、「コンピュータ」という用語は、セキュリティ環境において電子情報に対して影響を及ぼすか、または、当該電子情報を処理することが可能な要素（ＶＭＭ、ハイパーバイザ、Ｘｅｎデバイス、仮想デバイス、ネットワークアプライアンス、ルータ、スイッチ、ゲートウェイ、プロセッサ、サーバ、ロードバランサ、ファイアウォール、または、その他の任意の適切なデバイス、コンポーネント、要素またはオブジェクト）を網羅することを意味する。さらに、このコンピュータは、その動作を容易にする任意の適切なハードウェア、ソフトウェア、コンポーネント、モジュール、インターフェースまたはオブジェクトを含むとしてよい。これは、カーネルルートキットに対して有効な保護を実現する適切なアルゴリズムおよび通信プロトコルを含むとしてよい。また、複数のカーネルルートキット保護機能は、任意の適切な方法で統合することができる。同様の設計代替例が存在すると共に、さまざまな図面に図示したモジュールおよびコンポーネントのいずれを、さまざまな可能な構成で組み合わせるとしてよい。これらはすべて、本明細書の広い範囲に明らかに含まれる。
【００４１】
これらの要素（例えば、コンピュータ、サーバ、ネットワークアプライアンス、ファイアウォール、ハイパーバイザ、任意のその他の種類の仮想要素等）はいずれも、本明細書に説明したカーネルルートキット保護処理を実行するソフトウェアまたはアルゴリズムを実行可能なプロセッサを含むとしてよい。また、これらの要素（例えば、コンピュータ、サーバ、ネットワークアプライアンス、ファイアウォール、ハイパーバイザ、任意のその他の種類の仮想要素等）はそれぞれ、メモリ要素（ランダムアクセスメモリ（ＲＡＭ）、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＡＳＩＣ等）、ソフトウェア、ハードウェア、または、適切な限りにおいて、そして、特定の需要に応じて、任意のその他の適切なコンポーネント、デバイス、要素またはオブジェクトを含むとしてよい。システム１０において追跡、送信、受信または格納の対象となっている情報は、特定の需要および実装に応じて、任意のデータベース、レジスタ、テーブル、キャッシュ、待ち行列、制御リストまたはストレージ構造で提供され得る。これらはすべて、任意の適切な時間軸で説明され得る。
【００４２】
これらの要素および／またはモジュールは、本明細書で説明したように、ハイパーバイザ環境におけるカーネルルートキット保護に関連する処理を実行するべく、互いに協働するとしてよい。他の実施形態によると、これらの機能は、これらの要素の外部で提供されるとしてもよいし、これらの意図した機能を実現するべく他のデバイスに含まれるとしてもよいし、または、任意の適切な方法で統合するとしてもよい。例えば、さまざまな要素に対応付けられているプロセッサの一部を、一のプロセッサおよび一のメモリロケーションが特定の処理を担当するように、削除または統合するとしてもよい。一般的には、添付図面に図示された構成は、表現がどちらかというと論理的な表現である一方、物理アーキテクチャは、これらの要素をさまざまな方法で置換、組み合わせおよび／または混合したものを含むとしてよい。
【００４３】
本明細書で説明したメモリアイテム（例えば、ゲストカーネルページ３０、シャドーページテーブル３２、マシンメモリ２４、ゲスト仮想メモリ２６、ゲスト物理メモリ２８、ハッシュ３８等）はいずれも、「メモリ要素」という広義の用語に含まれると解釈されるべきである。同様に、本明細書で説明した可能な処理要素、モジュールおよびマシンはいずれも、「プロセッサ」という広義の用語に含まれると解釈されるべきである。コンピュータ、ネットワークアプライアンス、仮想要素等はそれぞれさらに、ハイパーバイザ環境においてデータまたは情報を受信、送信および／またはその他の方法で通信するための適切なインターフェースを含み得る。
【００４４】
プロセッサは、本明細書で詳細に説明した処理を実現するべく、データに対応付けられた任意の種類の命令を実行することができる。一例を挙げると、プロセッサ（添付図面に図示しているもの）は、要素または物品（例えば、データ）をある状態またはあるものから別の状態または別のものに変換し得る。別の例を挙げると、本明細書で概略を説明している処理は、固定のロジックまたはプログラミング可能なロジック（例えば、プロセッサで実行されるソフトウェア／コンピュータ命令）で実現されるとしてよく、本明細書で特定する要素は、何らかの種類のプログラミング可能なプロセッサ、プログラミング可能なデジタルロジック（例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、消去可能プログラム可能リードオンリーメモリ（ＥＰＲＯＭ）、電気的消去可能プログラミング可能ＲＯＭ（ＥＥＰＲＯＭ））、または、デジタルロジック、ソフトウェア、コード、電子命令または任意の適切なこれらの組み合わせを含むＡＳＩＣであってよい。
【００４５】
特定の実施例によると、本明細書で概略を説明しているカーネルルートキット保護機能は、１以上の有形の非一時的媒体（例えば、特定用途向け集積回路（ＡＳＩＣ）に提供されるエンベデッドロジック、デジタルシグナルプロセッサ（ＤＳＰ）命令、プロセッサまたは他の同様のマシンで実行するソフトウェア（オブジェクトコードおよびソースコードを含む可能性あり）等）にエンコードされているロジックで実現されるとしてよい。これらの例のうち幾つかでは、メモリ要素（添付図面に図示しているもの）は、本明細書で説明した処理に利用されるデータを格納することができる。これは、本明細書で説明する処理を実施するべく実行されるソフトウェア、ロジック、コードまたはプロセッサ命令を格納可能なメモリ要素を含む。さまざまな実施形態によると、これらの要素の一部または全ては、本明細書で概略を説明した処理を実現するべく協調、管理または協働し得るソフトウェア（または、往復ソフトウェア）を含む。これらの要素のうち１以上は、それらの動作を容易にする任意の適切なアルゴリズム、ハードウェア、ソフトウェア、コンポーネント、モジュール、インターフェースまたはオブジェクトを含むとしてよい。
【００４６】
尚、本明細書に記載した数多くの例によると、２つ、３つ、４つまたはそれ以上のネットワーク要素およびモジュールについてのやり取りを説明していることに留意されたい。しかし、これは分かり易さ、そして、例示のみを目的としたものに過ぎない。システムは任意の適切な方法で統合し得るものと理解されたい。同様の設計代替例が存在すると共に、図示したモジュール、コンポーネントおよび図１の要素はいずれも、さまざまな可能な構成で組み合わせることができるとしてよい。これらはすべて、本明細書の広義の範囲に明らかに含まれる。場合によっては、限られた数の要素またはコンポーネントについて言及するのみで所与の一連のフローの機能のうち１以上について説明する方が容易な場合がある。図１のシステム（およびその教示内容）は、容易に縮小拡張が可能であり、より複雑／高度な構造および構成を含み得ると同様に、多数のコンポーネントを含み得ると理解されたい。したがって、記載した例は、多数の他のアーキテクチャに適用可能であり、システム１０の幅広い教示内容の範囲を制限したり、または、阻害するべきではない。
【００４７】
また、添付図面を参照しつつ説明した処理は当該システムによって、または、当該システム内で実行可能なシナリオの一部を説明しているに過ぎないことに留意することも重要である。これらの処理の一部は適宜削除または省略するとしてよく、または、これらのステップは、説明した概念の範囲から逸脱することなく、大きく修正または変更し得るものである。また、これらの処理のタイミングは、大きく変更し得るものであり、それでも本開示で教示した結果を実現し得る。上述した処理フローは、例示および説明を目的としたものである。システムについては、説明した概念の教示内容から逸脱することなく任意の適切な配置、時間関係、構成およびタイミングメカニズムを実現し得るという点で、大きな柔軟性が認められる。
［項目１］
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する段階と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正してアクセスおよび実行を許可する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、実行を拒否する段階と
を備える方法。
［項目２］
前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの１つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する段階をさらに備える項目１に記載の方法。
［項目３］
前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正する段階と、
前記ゲストカーネルページを実行不可能と分類する段階と
をさらに備える項目１に記載の方法。
［項目４］
前記ソフトホワイトリストを作成する段階は、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号（ＭＦＮ）をハッシュに追加する段階を有する項目１に記載の方法。
［項目５］
各ゲストカーネルページに対応するページテーブルエントリ（ＰＴＥ）を、前記ハイパーバイザのシャドーページテーブルにおいてＮＯＴ＿ＰＲＥＳＥＮＴと分類する段階をさらに備える項目１に記載の方法。
［項目６］
前記実行を拒否する段階は、
前記ゲストＯＳに無限にループさせる段階、
前記ゲストＯＳに例外を注入する段階、または、
前記ページフォールトを修正して、前記シャドーページテーブル内の対応するＰＴＥが、前記ゲストカーネルページの代わりにクラフトページを示すようにする段階
の１つを有し、
前記クラフトページは、前記ゲストＯＳをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令（ＮＯＰ命令）を実行させるコードを含む項目５に記載の方法。
［項目７］
前記ソフトホワイトリストを作成する段階は、前記ゲストＯＳがブート時に略全てのカーネルコンポーネントをロードした後に実行される項目１に記載の方法。
［項目８］
前記ソフトホワイトリストを作成する段階は、前記ゲストＯＳが略全てのカーネルコンポーネントをロードする前に実行され、各ゲストカーネルページは、ページ化プール範囲または非ページ化プール範囲からである項目１に記載の方法。
［項目９］
ルートキット保護をイネーブルするべくドメイン作成中に前記ハイパーバイザのロックダウン機能ビットを設定する段階をさらに備える項目１に記載の方法。
［項目１０］
メモリと、
プロセッサと、
ハイパーバイザと
を備え、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成し、
ゲストカーネルページへのアクセスが試みられるとページフォールトを生成し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正してアクセスおよび実行を許可し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、実行を拒否する、装置。
［項目１１］
さらに、前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの１つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する項目１０に記載の装置。
［項目１２］
さらに、前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正し、
前記ゲストカーネルページを実行不可能と分類する項目１０に記載の装置。
［項目１３］
前記ソフトホワイトリストを作成することは、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号（ＭＦＮ）をハッシュに追加することを含む項目１０に記載の装置。
［項目１４］
前記実行を拒否することは、
前記ゲストＯＳに無限にループさせること、
前記ゲストＯＳに例外を注入すること、または、
前記ページフォールトを修正して、前記ハイパーバイザのシャドーページテーブル内の対応するＰＴＥが、前記ゲストカーネルページの代わりにクラフトページを示すようにすること
の１つを含み、
前記クラフトページは、前記ゲストＯＳをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令（ＮＯＰ命令）を実行させるコードを含む項目１０に記載の装置。
［項目１５］
実行されるべきコードを含む非一時的媒体にエンコードされているロジックであって、前記コードがプロセッサによって実行されると、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム（ゲストＯＳ）における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手順と、
ゲストカーネルページにアクセスが試みられるとページフォールトを生成する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち１つに対応する場合、前記ページフォールトを修正してアクセスおよび実行を許可する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、実行を拒否する手順と
を含む処理を実行する、ロジック。
［項目１６］
前記処理はさらに、前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの１つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する手順を含む項目１５に記載のロジック。
［項目１７］
前記処理はさらに、
前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正する手順と、
前記ゲストカーネルページを実行不可能と分類する手順と
を含む、項目１５に記載のロジック。
［項目１８］
前記ソフトホワイトリストを作成する手順は、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号（ＭＦＮ）をハッシュに追加する手順を有する項目１５に記載のロジック。
［項目１９］
前記処理はさらに、各ゲストカーネルページに対応するＰＴＥを、前記ハイパーバイザのシャドーページテーブルにおいてＮＯＴ＿ＰＲＥＳＥＮＴと分類する手順を含む項目１５に記載のロジック。
［項目２０］
前記実行を拒否する手順は、
前記ゲストＯＳに無限にループさせる手順、
前記ゲストＯＳに例外を注入する手順、または、
前記ページフォールトを修正して、前記シャドーページテーブル内の対応するＰＴＥが、前記ゲストカーネルページの代わりにクラフトページを示すようにする手順
の１つを有し、
前記クラフトページは、前記ゲストＯＳをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令（ＮＯＰ命令）を実行させるコードを含む項目１９に記載のロジック。
【図１】
0005909829.tif 000002
【図２】
0005909829.tif 000003