(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5909829
(24)【登録日】2016年4月8日
(45)【発行日】2016年4月27日
(54)【発明の名称】ハイパーバイザ環境においてカーネルルートキットに対する保護を実行するシステムおよび方法
(51)【国際特許分類】
G06F 21/57 20130101AFI20160414BHJP
【FI】
G06F21/57
【請求項の数】27
【全頁数】22
(21)【出願番号】特願2014-535727(P2014-535727)
(86)(22)【出願日】2012年9月14日
(65)【公表番号】特表2014-528621(P2014-528621A)
(43)【公表日】2014年10月27日
(86)【国際出願番号】US2012055660
(87)【国際公開番号】WO2013055498
(87)【国際公開日】20130418
【審査請求日】2014年5月27日
(31)【優先権主張番号】13/272,830
(32)【優先日】2011年10月13日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】505418238
【氏名又は名称】マカフィー, インコーポレイテッド
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ダン、アミット
(72)【発明者】
【氏名】モヒンダー、プリート
(72)【発明者】
【氏名】スリヴァスタヴァ、ヴィヴェク
【審査官】
打出 義尚
(56)【参考文献】
【文献】
米国特許出願公開第2011/0145598(US,A1)
【文献】
米国特許出願公開第2011/0029772(US,A1)
【文献】
米国特許出願公開第2010/0031271(US,A1)
【文献】
米国特許出願公開第2006/0150256(US,A1)
【文献】
米国特許出願公開第2006/0004944(US,A1)
【文献】
米国特許第08015388(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/57
(57)【特許請求の範囲】
【請求項1】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する段階と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する段階と
を備え、
前記実行を拒否する段階は、
前記ゲストOSに無限にループさせる段階、
前記ゲストOSに例外を注入する段階、および、
前記ページフォールトを修正して、前記ハイパーバイザのシャドーページテーブル内の対応するページテーブルエントリ(PTE)が、前記ゲストカーネルページの代わりにクラフトページを示すようにする段階
の1つを有し、
前記クラフトページは、前記ゲストOSをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令(NOP命令)を実行させるコードを含む、方法。
【請求項2】
前記ページフォールトを生成する段階の前に、各ゲストカーネルページに対応する前記PTEを、前記ハイパーバイザの前記シャドーページテーブルにおいてNOT_PRESENTと分類する段階をさらに備える請求項1に記載の方法。
【請求項3】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)がブート時に前記ゲストOSのカーネルコンポーネントを略全てロードした後に、前記ゲストOSにおける各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する段階と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する段階と
を備える方法。
【請求項4】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)が前記ゲストOSのカーネルコンポーネントを略全てロードする前に、前記ゲストOSにおける、ページ化プール範囲または非ページ化プール範囲から来るものである各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する段階と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する段階と
を備える方法。
【請求項5】
前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの1つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する段階をさらに備える請求項1から4のいずれか一項に記載の方法。
【請求項6】
前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正する段階と、
前記ゲストカーネルページを実行不可能と分類する段階と
をさらに備える請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記ソフトホワイトリストを作成する段階は、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号(MFN)をハッシュに追加する段階を有する請求項1から6のいずれか一項に記載の方法。
【請求項8】
ルートキット保護をイネーブルするべくドメイン作成中に前記ハイパーバイザのロックダウン機能ビットを設定する段階をさらに備える請求項1から7のいずれか一項に記載の方法。
【請求項9】
メモリと、
プロセッサと、
ハイパーバイザと
を備え、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成し、
ゲストカーネルページへのアクセスが試みられるとページフォールトを生成し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否し、
前記実行を拒否することは、
前記ゲストOSに無限にループさせること、
前記ゲストOSに例外を注入すること、および、
前記ページフォールトを修正して、前記ハイパーバイザのシャドーページテーブル内の対応するページテーブルエントリ(PTE)が、前記ゲストカーネルページの代わりにクラフトページを示すようにすること
の1つを含み、
前記クラフトページは、前記ゲストOSをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令(NOP命令)を実行させるコードを含む、装置。
【請求項10】
メモリと、
プロセッサと、
ハイパーバイザと
を備え、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)がブート時に前記ゲストOSのカーネルコンポーネントを略全てロードした後に、前記ゲストOSにおける各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成し、
ゲストカーネルページへのアクセスが試みられるとページフォールトを生成し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する、装置。
【請求項11】
メモリと、
プロセッサと、
ハイパーバイザと
を備え、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)が前記ゲストOSのカーネルコンポーネントを略全てロードする前に、前記ゲストOSにおける、ページ化プール範囲または非ページ化プール範囲から来るものである各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成し、
ゲストカーネルページへのアクセスが試みられるとページフォールトを生成し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する、装置。
【請求項12】
さらに、前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの1つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する請求項9から11のいずれか一項に記載の装置。
【請求項13】
さらに、前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正し、
前記ゲストカーネルページを実行不可能と分類する請求項9から12のいずれか一項に記載の装置。
【請求項14】
前記ソフトホワイトリストを作成することは、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号(MFN)をハッシュに追加することを含む請求項9から13のいずれか一項に記載の装置。
【請求項15】
コンピュータに、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手順と、
ゲストカーネルページにアクセスが試みられるとページフォールトを生成する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手順と
を実行させ、
前記実行を拒否する手順は、
前記ゲストOSに無限にループさせる手順、
前記ゲストOSに例外を注入する手順、および、
前記ページフォールトを修正して、前記ハイパーバイザのシャドーページテーブル内の対応するページテーブルエントリ(PTE)が、前記ゲストカーネルページの代わりにクラフトページを示すようにする手順
の1つを有し、
前記クラフトページは、前記ゲストOSをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令(NOP命令)を実行させるコードを含む、プログラム。
【請求項16】
前記コンピュータにさらに、
前記ページフォールトを生成する手順の前に、各ゲストカーネルページに対応する前記PTEを、前記ハイパーバイザの前記シャドーページテーブルにおいてNOT_PRESENTと分類する手順
を実行させるための請求項15に記載のプログラム。
【請求項17】
コンピュータに、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)がブート時に前記ゲストOSのカーネルコンポーネントを略全てロードした後に、前記ゲストOSにおける各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手順と、
ゲストカーネルページにアクセスが試みられるとページフォールトを生成する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手順と
を実行させるためのプログラム。
【請求項18】
コンピュータに、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)が前記ゲストOSのカーネルコンポーネントを略全てロードする前に、前記ゲストOSにおける、ページ化プール範囲または非ページ化プール範囲から来るものである各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手順と、
ゲストカーネルページにアクセスが試みられるとページフォールトを生成する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手順と
を実行させるためのプログラム。
【請求項19】
前記コンピュータにさらに、
前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの1つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する手順
を実行させるための請求項15から18のいずれか一項に記載のプログラム。
【請求項20】
前記コンピュータにさらに、
前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正する手順と、
前記ゲストカーネルページを実行不可能と分類する手順と
を実行させるための請求項15から19のいずれか一項に記載のプログラム。
【請求項21】
前記ソフトホワイトリストを作成する手順は、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号(MFN)をハッシュに追加する手順を有する請求項15から20のいずれか一項に記載のプログラム。
【請求項22】
請求項1から8のいずれか一項に記載の方法を実行する装置。
【請求項23】
コンピューティングシステムである、請求項22に記載の装置。
【請求項24】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手段と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手段と
を備え、
前記実行を拒否する手段は、
前記ゲストOSに無限にループさせる手段、
前記ゲストOSに例外を注入する手段、および、
前記ページフォールトを修正して、前記ハイパーバイザのシャドーページテーブル内の対応するページテーブルエントリ(PTE)が、前記ゲストカーネルページの代わりにクラフトページを示すようにする手段
の1つを含み、
前記クラフトページは、前記ゲストOSをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令(NOP命令)を実行させるコードを含む、システム。
【請求項25】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)がブート時に前記ゲストOSのカーネルコンポーネントを略全てロードした後に、前記ゲストOSにおける各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手段と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手段と
を備えるシステム。
【請求項26】
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)が前記ゲストOSのカーネルコンポーネントを略全てロードする前に、前記ゲストOSにおける、ページ化プール範囲または非ページ化プール範囲から来るものである各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手段と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正して前記ゲストカーネルページへのアクセスおよび前記ゲストカーネルページの実行を許可する手段と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、前記ゲストカーネルページの実行を拒否する手段と
を備えるシステム。
【請求項27】
コンピューティングシステムである、請求項24から26のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概してコンピュータネットワークの分野に関し、具体的にはハイパーバイザ環境においてカーネルルートキットに対する保護を実行するシステムおよび方法に関する。
【背景技術】
【0002】
コンピュータネットワークセキュリティの分野は、今日の社会において重要性および複雑性が増す一方である。コンピュータネットワーク環境は、実質的に全ての企業または組織について構成されており、通常は複数のコンピュータ(例えば、エンドユーザコンピュータ、ラップトップ、サーバ、印刷デバイス等)が相互に接続されている。さらに、クラウドサービスプロバイダ(および複数のアプリケーションおよびオペレーティングシステムを実行する他の組織)は、さまざまな異なるゲストオペレーティングシステムを同時に一のホストデバイス上で実行させるべくハイパーバイザ技術を利用している場合がある。ハイパーバイザは、複数のオペレーティングシステムを一のホストコンピュータ上で同時に実行させるコンピュータソフトウェア/ハードウェアプラットフォーム仮想化ソフトウェアである。セキュリティ上の脅威は、ハイパーバイザ環境の外部および内部で発生する可能性がある。ハイパーバイザ環境内の脅威は、IT管理者にとってさらなる課題となり得る。
【図面の簡単な説明】
【0003】
本開示および本開示の特徴および利点をより深く理解していただくべく、添付図面と共に以下の説明を参照していただきたい。添付図面では、同様の参照番号は同様の構成要素を表している。図面は以下の通りである。
【0004】
【
図1】実施形態例に係る、ハイパーバイザ環境におけるカーネルルートキットに対する保護を実行するためのシステムのコンポーネントを示す簡略化ブロック図である。
【0005】
【
図2】本開示の実施形態に対応付けられる動作の例を説明する簡略化フローチャートである。
【発明を実施するための形態】
【0006】
<概論>
一実施形態に係るシステムおよび方法は、ハイパーバイザ環境においてゲストオペレーティングシステムにおける各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成するモジュールと、アクセス試行がゲストカーネルページに対して実行されるとページフォールトを生成するモジュールと、ゲストカーネルページがソフトホワイトリスト内のエントリの1つに対応する場合、アクセスおよび実行を許可するべくページフォールトを修正するモジュールと、ゲストカーネルページがソフトホワイトリスト内のエントリのいずれにも対応しない場合、実行を拒否するモジュールとを含む。実施形態例によると、ソフトホワイトリストは、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号のハッシュを含む。
【0007】
他の実施形態例は、ページフォールトが命令ページフォールトで、ゲストカーネルページがソフトホワイトリスト内のエントリのうち1つに対応する場合、ゲストカーネルページをリードオンリーおよび実行可能と分類することを含む。ページフォールトがデータページフォールトで、ゲストカーネルページがソフトホワイトリスト内のエントリのどれにも対応しない場合、当該方法は、ページフォールトを修正すること、および、ゲストカーネルページを実行不可能と分類することを含む。
【0008】
より具体的な実施形態は、ハイパーバイザのシャドーページテーブルにおいて、各ゲストカーネルページに対応するページテーブルエントリを、NOT_PRESENTと分類することを含む。さらに別の実施形態例では、当該方法は、ゲストOSに無限にループさせることで実行を拒否すること、ゲストOSに例外を注入すること、または、ページフォールトを修正してシャドーページテーブル内の対応するPTEが、ゲストカーネルページの代わりにクラフトページを示すようにすることを含む。クラフトページは、ゲストOSにクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション(NOP)命令を実行させるコードを含むとしてよい。
【0009】
さらに別の実施形態例によると、ソフトホワイトリストを作成することは、ゲストOSがブート時にカーネルコンポーネントの略全てをロードした後に実行されるとしてよい。ゲストOSがカーネルコンポーネントの略全てをロードしていない場合、各ゲストカーネルページは、ページ化プール範囲または非ページ化プール範囲からであるとしてよい。さらに別の実施形態は、ルートキット保護および他の機能をイネーブルするべく、ドメイン作成中、ハイパーバイザにおいてロックダウン機能ビットを設定することを含む。
【0010】
図1は、ハイパーバイザ環境においてカーネルルートキットに対する保護を実行するためのシステム10の実施例を示す簡略ブロック図である。本明細書で用いる場合、「ハイパーバイザ」は、1以上のオペレーティングシステム(OS)(「ゲストOS」と呼ぶ)を一のホストデバイス(例えば、コンピュータ)で同時に実行させるハードウェア仮想化エンティティである。仮想化によって、ゲストOSは、隔離された仮想環境(通常、仮想マシンまたはゲストと呼ばれる)において変更することなく実行することができるようになる。隔離された仮想環境では、ホストデバイスの物理特性および物理挙動が複製される。より具体的には、ゲストは、仮想ハードウェア(プロセッサ、メモリ、ディスク、ネットワークインターフェース等)を備える隔離された仮想環境を表すことができる。
図1に図示した実施形態によると、システム10は、ゲスト14に仮想化環境を提供するハイパーバイザ12を備える。本開示の広い範囲では、ハイパーバイザ12で任意の数のゲストがホストされるとしてよい。説明の便宜上、一のゲストを代表として
図1に図示している。
【0011】
ハイパーバイザ12は、ゲスト14によって利用されるべく割り当てられるホストデバイス(不図示)のハードウェア16を制御して管理する。ゲスト14は、ハイパーバイザ12上でゲストOS18を実行するとしてよい。ゲストOS18は、1以上のアプリケーション20をサポートするとしてよい(本明細書では複数のアプリケーションのうち1つを意味する際にアプリケーション20と呼ぶ)。本明細書で用いる場合、「アプリケーション」という用語は、任意のソフトウェアファイル、ライブラリモジュール、関数、サブルーチン、バイナリ、命令セット、コードブロック、または、支援(例えば、コンパイル、解釈等)有りまたは支援無しでコンピュータによって理解され処理され得る命令を含むその他の同様の動作ユニットを総称的に意味するべく広い意味で利用される。
【0012】
ハイパーバイザ12は、プロセッサ22およびマシンメモリ24等の基礎となるハードウェア16へのアプリケーション20のアクセスを管理するとしてよい。本明細書で用いられる場合、「マシンメモリ」は、ホストデバイスで利用可能なものとしてハイパーバイザ12に可視であるメモリ要素を意味する。ゲストOS18は、ゲスト物理メモリ28にアクセスするゲスト仮想メモリ26をアプリケーション20に対して提示するとしてよい。本明細書で用いる場合、「ゲスト仮想メモリ」という用語は、ゲスト14内で実行するアプリケーション20に可視である略一続きの仮想アドレス空間を意味する。アドレス空間は、所与の範囲の複数の個別のアドレスを意味する。各アドレスは、アプリケーション(例えば、アプリケーション20)がデータを格納可能であって後にデータを取得可能であるメモリロケーション(つまり、アドレス)に対応するとしてよい。本明細書で用いる場合、「ゲスト物理メモリ」という用語は、ゲストOS18に可視である仮想メモリを意味する。
【0013】
ゲスト物理メモリ28は、動作中にカーネルページ30を作成するとしてよい。ゲストOSがゲストカーネルをメモリにロードする場合、ゲストカーネルは複数のページ(例えば、ゲストカーネルページ30)に分割され、一部のページはカーネル命令を含み、他のページはカーネルデータを含む。各ページは、ゲストカーネルページ30のそれぞれを含み、通常は標準サイズ(例えば、4kB)であって、アドレス(例えば、ゲスト仮想アドレス)に対応付けられる。ゲストOS18は、各ページの仮想アドレスを、ページテーブルを用いて、対応する「物理」アドレスにマッピングする。ゲストメモリ(例えば、ゲスト仮想メモリ26およびゲスト物理メモリ28)は仮想メモリであるが、ゲストOS18は、ゲスト物理メモリ28が実在するもの、または、「物理メモリ」であると仮定する。しかし、ゲスト物理メモリ(例えば、ゲスト物理メモリ28)は単に、(実在の)ホスト物理アドレス(マシンアドレスとも呼ぶ)に対する正しいマッピングを維持するべく、ハイパーバイザ12が利用する抽象化である。
【0014】
ページテーブルは、仮想アドレスと「物理」アドレスとの間のマッピングを格納するべくゲストOS18が利用するデータ構造である。ページテーブルは、複数のページテーブルエントリ(PTE)を含む。各PTEは、仮想アドレスを対応する「物理」アドレスにマッピングする(例えば、ゲスト仮想アドレスからゲスト物理アドレスへ、または、ゲスト物理アドレスからマシンアドレスへ)。PTEは、「物理」アドレス(例えば、ゲスト物理アドレスまたはマシンアドレス)、および、適切なメモリ要素(例えば、ゲスト物理メモリ28またはマシンメモリ24)内のページに関連する他の情報、例えば、当該ページが存在するか否か、当該ページがリードオンリーまたはリード/ライトであるか、等を含む。
【0015】
シャドーページテーブル32は、現在実行中のプロセスについて、ゲスト物理メモリ28をマシンメモリ24にマッピングするためにハイパーバイザ12によって利用され得る。「プロセス」は、実行中の命令を持つアプリケーション(またはその一部)のインスタンスである。シャドーページテーブル32は、ゲストカーネルページ30に対応するページテーブルエントリ(PTE)34を含む。各PTE34は、マシンアドレスおよびマシンメモリ24にロードされた各カーネルページに関連する他の情報を含む。実施形態例によると、PTE34は、シャドーページテーブル32においてNOT_PRESENTと分類されるとしてよい。実施形態例によると、ゲストOS18で新しいカーネルページが作成されると常に、シャドーページテーブル32の対応するPTE34は、デフォルトでNOT_PRESENTと分類されるとしてよい。
【0016】
ハイパーバイザ12内のルートキット保護モジュール36は、ゲストカーネルページ30の仮想アドレスに対応するマシンフレーム番号(MFN)をハッシュ36に追加することができる。一実施例によると、MFNは、対応する仮想アドレスについてマシンメモリ24において割り当てられているページ番号を意味する。ページフォールトハンドラ40は、適切なゲストカーネルページ30へのアクセスまたは実行を、条件に応じて許可または拒否するとしてよい。ハイパーバイザ12で実行されているドメイン0(DOM0)42は、物理ハードウェア16にアクセスする特別な権利を持つとしてよく、同様に、システム上で実行されている他のゲストとやり取りする特別な権利を持つとしてよい。DOM0 42は、ハイパーバイザ12内のルートキット保護モジュール36の特定のロックダウン機能を制御するロックダウンモジュール44を含むとしてよい。
【0017】
システム10の技術を説明する目的上、
図1に図示するシステム等の所与のシステムにおける動作およびセキュリティ上の懸念を理解することが重要である。以下に記載する基礎的な情報は、本開示を適切に説明するための基礎と考えられるとしてよい。このような情報は、説明のみを目的として真剣に記載しているものであり、したがって、本開示およびその用途の可能性の広い範囲を限定するものと解釈されるべきではない。
【0018】
通常のコンピューティングアーキテクチャは、意図することなく、または、悪意を持ってより低い特権のコードによって上書きされることが無いように、システムコードおよびデータを保護するべく、複数の特権レベルを持つ4つのリング(0から3と番号を振る)をサポートする。リング0は最高特権レベルであり、リング3は最低特権レベルである。OSは、異なるプロセスについて、異なる特権レベルを利用するとしてよい。例えば、Windows(登録商標)OSは、プロセスおよびデータセキュリティのために、2つの特権レベル(リング0およびリング3)を利用する。Internet ExplorerおよびMicrosoft Word等のアプリケーション用のコード、および、複数のWindows(登録商標)サービス(例えば、サービスコントロールマネージャ、ローカルシステムセキュリティオーソリティ、Winlogon、セッションマネージャ、および、RPCサーバ等)は、リング3で実行される。
【0019】
カーネルレベルコードは、リング0で実行され、デバイスドライバおよびカーネルコンポーネント、例えば、仮想メモリのマネージャ、キャッシュ、入出力、オブジェクト、プラグアンドプレイ、ハードウェア抽象化層、グラフィクスサブシステム、ファイルシステム、および、ネットワークプロトコル実装で利用される。カーネルは、アプリケーションを、コンピューティングデバイスのハードウェアに接続する。一般的に、カーネルは、OSによって異なり得る複数のコンポーネントを含む。例えば、Linux(登録商標)OSは、低レベルドライバ(例えば、中央演算処理装置(CPU)、メモリマネジメントユニット(MMU)およびオンボードデバイスの初期化を行うアーキテクチャ固有のドライバ)、プロセススケジューラ(例えば、複数の異なるプロセスに対して公平にCPUのタイムスライス割り当てを行うコンポーネント)、メモリマネージャ(例えば、複数の異なるプロセスにメモリを割り当てて共有するためのコンポーネント)、ファイルシステム(例えば、一の統合ファイルシステムインターフェースをユーザに提示するべく基礎となる複数のファイルシステムを抽象化するコンポーネント)、ネットワークインターフェース(例えば、複数の異なるネットワーキングデバイスに対してアクセスおよび制御を提供するコンポーネント)、デバイスドライバ(例えば、高レベルドライバ)等のコンポーネントを含むとしてよい。アプリケーションは一般的に、カーネルと通信するべくシステム関数コール(例えば、Win32 APIコール)を利用する。
【0020】
ルートキットは、当該ルートキットの内密の実装を成功させるべく、(例えば、アプリケーションのプロセスの)通常の実行パスの流れを変える。ルートキットは、標準的なOS機能を妨害することによって当該ルートキットの存在を積極的に秘匿しつつ、デバイスへの特権アクセスを継続して可能とするソフトウェアである。ルートキットは通常、システム関数コールが戻したデータを変更して、自身のバイナリファイル、プロセスおよびレジストリエントリを秘匿する。ルートキットは、実行されている箇所およびシステムのうちどのエリアでフックしているかに応じて、概してユーザモードルートキットおよびカーネルルートキットという2種類のいずれかに分類することができる。ユーザモードルートキットは、ユーザモード特権で実行されているので、検出および修復が比較的容易である。一方、カーネルルートキットは、システム特権で実行されており、検出および修復がより難しくなっている。カーネルルートキットは、通常はカーネルモードデバイスドライバをインストールすることによって、自身のコードをカーネルアドレス空間にロード(つまり、注入)する。例えば、カーネルルートキットは、カーネルモジュールを用いて実行中のカーネルにカーネルコードを注入することによって、または、新しいコードを未使用のカーネルメモリに書き込むことによって、または、カーネルモジュールファイルを挿入すること等によって、インストールされるとしてよい。配信メカニズムが入ってしまうと、カーネルルートキットはプロセスの通常実行パスの流れを妨害することができる。
【0021】
カーネルルートキットは、デスクトップのセキュリティにおいて大きな課題である。カーネルルートキットは、システムのバックドアの開設、プライバシー情報の盗難、セキュリティ対策の解除、および、他のマルウェアアプリケーションの実行等、さまざまな攻撃を仕掛けることができる。通常、攻撃者は、最初にルートレベルアクセスを取得した後で、既知の脆弱性を悪用することで、または、パスワードを取得することで(例えば、暗号を解読することで、ソーシャルエンジニアリングによって等)、カーネルルートキットをコンピュータにインストールする。カーネルルートキットがインストールされると、攻撃者は、通常の認証メカニズムおよび承認メカニズムを回避することで、進行中の侵入をマスクして、コンピュータに対する特権アクセスを維持することができる。カーネルルートキットは、カーネルルートキットを発見する目的のソフトウェアを妨害することが可能であるので、検出が困難である場合がある。検出方法には、別の信頼されたオペレーティングシステムを利用すること、挙動ベースの方法、署名スキャン、差分スキャン、および、メモリダンプ分析が含まれる。除去は、特にカーネルルートキットがカーネル内に存在する場合に、複雑であるか、または、実質的に不可能である可能性がある。
【0022】
ハイパーバイザ環境において、攻撃の影響は深刻になる可能性がある。1つのゲストが感染すると、ホストデバイス上の全ての他のゲストが感染する可能性がある。例えば、攻撃者は、ゲストを感染させることによってハードウェア上の管理者特権を得ることができ、ハイパーバイザ環境でゲスト間を移動することができる。ハイパーバイザが数万ものゲストをホストしている場合には、このようなゲスト間攻撃は壊滅的な結果になり得る。
【0023】
ハイパーバイザ環境では、ゲストに設ける保護ソフトウェアを必要とすることなく、カーネルルートキットに対する保護を実現する機会を与えられる。ゲストは、仮想化されたホストデバイスにおいてハイパーバイザの上で実行される。従来のカーネルルートキット保護メカニズムは、ハイパーバイザ上で実行されているゲストの各インスタンスにインストールし得るが、このような方法では、メモリ、ランタイム性能および管理に関してオーバーヘッドが膨大になる。カーネルルートキット保護メカニズムは、カーネル(当該保護メカニズムの保護対象)の外部に存在することが理想であるが、これは非仮想化環境では可能でない場合がある。さらに、クラウド(仮想化)環境においてゲストを実行している顧客は、クラウドサービスプロバイダがカーネルルートキット保護をトランスペアレントに提供することを希望する場合があるとしてよい。
【0024】
一のカーネルルートキット保護方法によると、ハッシュ関数を用いてオンディスクコードライブラリのデジタル署名を算出することができる。ハッシュ関数は、メッセージダイジェストを作成する。メッセージダイジェストは、データの任意のブロックについて、当該データが変化するとハッシュ値が変化するように、算出され得る固定サイズのビットストリングである。定間隔でオンディスクコードライブラリのメッセージダイジェストを再算出して、信頼のおけるフィンガープリントリストと比較することによって、システム内の変更を検出および監視することができる。しかし、現在の方法は、コードの発行者が最後にリリースした時点以降でコードが修正されたか否かのみを確認する。また、カーネルルートキットは、ディスク上で修正を行うのではなくメモリからロードすることによって、このプロセスを妨害する場合がある。他のルートキット保護方法は、コモディティOSに基づいているとしてよい。仮想化環境についてエージェント無しで保護を実現するソフトウェアが必要である。
【0025】
図1で概略を示す、ハイパーバイザ環境においてカーネルルートキットに対する保護を実現するシステムは、このような問題を、他の問題と共に解決することができる。本開示の実施形態は、よりロバスト性の高い方法を可能とするべく、既存の技術の性能を大きく改善しようとしている。実施形態例では、システム10のコンポーネントは、ハイパーバイザ12内のゲストカーネルページ30のソフトホワイトリスト、例えば、ハッシュ38を作成するとしてよい。ソフトホワイトリストは、ゲストOS18内の各ゲストカーネルページ30に対応するエントリを含む。実施形態例によると、ソフトホワイトリストは、ページコンテンツ全体のチェックサムではなく、例えば、それぞれが対応するマシンページフレーム番号(MFN)で表される承認されたゲストカーネルページのリストを含むことを目的とする。実施形態例によると、ソフトホワイトリスト(つまり、ハッシュ38)は、ゲストカーネルページ30に対応するMFNのハッシュを含む。
【0026】
実施形態例によると、ソフトホワイトリストは、ゲストOS18がブートを完了しカーネルコンポーネント(例えば、プロセススケジューラ、メモリマネージャ、ファイルシステム等)をロードした後に作成されるとしてよい。本明細書で用いられる場合、「ブート」という用語は、ブートシーケンスを意味する。ブートシーケンスは、電源が入るとコンピュータが実行する最初の一連の処理である。この後、システム10は、ソフトホワイトリストに存在しない新しいカーネルページからコードが実行できないようにするとしてよい。別の実施形態例によると、ソフトホワイトリストは、ゲストOS18がブートを完了してカーネルコンポーネントをロードする前に作成されるとしてもよい。カーネルページ30は、ページ化プールおよび非ページ化プールにあるとしてよい(全てのカーネルドライバがこれらのページにロードされているため)。ページ化プール範囲および非ページ化プール範囲のそれぞれの不良仮想アドレスのページスタートアドレスは、ハイパーバイザ12内のハッシュテーブル(例えば、ハッシュ38内)に格納されているとしてよい。
【0027】
システム10は、例えば、ホワイトリストに基づいているので、ゼロデイ脅威に対して保護され得る。実施形態例によると、システム10は、パブリッククラウドインフラストラクチャプロバイダおよびプライベートクラウドを採用している企業によって実現され得る。システム10は、トランスペアレントなセキュリティレイヤを提供するとしてよい。この解決方法は、ベースのOS設定を頻繁に変更せず、逆にそれに格納されているデータを変更する顧客(例えば、ウェブホストサービスプロバイダ)にとって特に有用であるとしてよい。
【0028】
ハイパーバイザ環境におけるメモリ管理について、ゲストOS(例えば、ゲストOS18)は、ゲスト仮想メモリ(例えば、ゲスト仮想メモリ26)内の仮想アドレス空間レイアウトをアプリケーション(例えば、アプリケーション20)に提供する。ゲスト仮想メモリのアドレス空間は、アプリケーション(例えば、アプリケーション20)がアクセス可能なユーザ空間、および、ブートドライバ、プロセスページテーブル、システムキャッシュ、ページ化プールおよび非ページ化プールを含むシステム空間等に分割されるとしてよい。通常、システムページのアドレスロケーションは、ハードコードされている(または、事前に知られている)。例えば、4GBのゲスト仮想メモリは、アドレスの範囲が0xBFFFFFFFから0x00000000までの3GBのユーザ空間と、アドレスの範囲が0xFFFFFFFFから0xC0000000までのシステム空間に分割されるとしてよい。
【0029】
ゲストOSは、ページテーブルを用いて仮想−物理アドレスマッピングを処理する。仮想アドレス空間(例えば、ゲスト仮想メモリ26)は連続的であるのが一般的だが、アドレスは、物理アドレス空間(例えば、ゲスト物理メモリ28)内の複数の非連続のブロックにマッピングされるとしてよい。仮想−物理マッピング情報は、ページテーブル内でページテーブルエントリ(PTE)と呼ばれる構造に配置されている。PTEの形式は、OS毎に異なるとしてよく、例えば、Linux(登録商標)OSはある形式を定めており、Windows(登録商標)XP OSは別の形式を定めているとしてよい。一般的に、PTEは通常、当該PTEが参照しているページが存在するか否か(または有効であるか否か)を示す1つのビットを含む。例えば、プロセスがマシンメモリ(例えば、マシンメモリ24)へのロードを開始すると、ゲストOSは、ゲスト物理メモリ(例えば、ゲスト物理メモリ28)にページがロードされていると仮定し、対応するページテーブルを生成する。マシンメモリにロードされているページについての存在ビットは、全てのページがメモリにロードされるまで、0に設定される(NOT_PRESENT(存在しない)を意味する)。全てのページがロードされると、これらのページの存在ビットは、対応するPTEにおいて1に設定されるとしてよい(PRESENT(存在する)を意味する)。ロード中、NOT_PRESENTと分類されたページへのアクセスが試みられると、ページフォールトが生成されるとしてよい。
【0030】
実施形態例によると、ゲスト14で維持されているページテーブルは、対応するシャドーページテーブル(例えば、シャドーページテーブル32)を持つとしてよい。シャドーページテーブルは、ハイパーバイザ12によって生成および維持される。ゲストOS18は、シャドーページテーブル32へのアクセスを持たない。ブート時、ゲストOS18は、カーネルをコンピュータのハードディスクからメモリ(例えば、ゲストカーネルページ30として)にロードするとしてよい。ルートキット保護モジュール36は、ゲストカーネルページ30に対応するPTE34を、シャドーページテーブル32において、NOT_PRESENTと分類するとしてよい。一例を挙げると、ルートキット保護モジュール36は、ページの仮想アドレスを読み出すことによって、当該ページがゲストカーネルページ30のうち1つであると判断するとしてよい。仮想アドレスが特定の範囲(例えば、所定範囲)内にある場合、当該ページは、ゲストカーネルページ30の1つであるとしてよく、対応するPTE34はNOT_PRESENTと分類されているとしてよい。
【0031】
ページフォールトが発生すると、ページフォールトを発生させた命令を実行しているプロセッサ(例えば、プロセッサ22)からハイパーバイザ(例えば、ハイパーバイザ12)へと制御が移行する。ハイパーバイザのページフォールトハンドラ(例えば、ページフォールトハンドラ40)は、例えば、ページフォールトが命令ページフォールトまたはデータページフォールトのいずれであるかを判断するべく、命令ポインタおよび不良アドレスを決定することができる。例えば、命令ポインタ(つまり、プロセッサが次に実行を試みる予定のメモリアドレスを示すポインタ)が不良アドレスを示している場合、ページフォールトは命令ページフォールトである。
【0032】
図1のインフラストラクチャについて、ハイパーバイザ12は複数のゲストOSの複数のインスタンスを実行することができる。ハイパーバイザ12は、サーバ、ファイアウォール、ウイルス対策方法、または、より一般的にコンピュータの一部であるとしてよい。一実施例によると、ハイパーバイザ12は、ベアハードウェアで実行されると共に同一ハードウェア上で同時に複数のOSの複数のインスタンスを実行可能とするXen要素である。通常のXen設定によると、複数のOSの下方でXenが実行されるとしてよく、アプリケーションはOSより上位であり、OSは一群のゲスト(例えば、ゲスト14)に対応付けられている。設定全体は、サーバ(または、何らかのその他のネットワークアプライアンス)で提供されるとしてよい。実施形態例によると、ゲスト14は、DOM0 42に対応付けられているOSを実行することができる。Xen実施例は本開示が適用可能な一の可能な例を表すのみことに留意されたい。任意の数のその他のハイパーバイザが同様に、本明細書に記載するさまざまな教示内容から恩恵を受け得る。
【0033】
ハイパーバイザ12を管理するための制御ツールは、DOM0 42上で実行され得る。DOM0 42は、ハイパーバイザ12上のゲスト(例えば、ゲスト14)を管理する統合インターフェースを提供するとしてよい。DOM0 42は、管理者がハイパーバイザ12を設定するための手段を提供するとしてよく、当該手段は、ストレージの管理、ゲスト挙動のさまざまな側面の制御、仮想ネットワークの設定、ハイパーバイザおよび1以上のゲストの設定、および、ゲストの作成、削除、シャットダウン、ブートアップ等の機能を実現する。例えば、この種の設定は、ゲストの複数のインスタンスをホストするXenをサーバが実行するデータセンターで良く採用され得る。DOM0 42は、修正したLinux(登録商標)カーネルを含むとしてよく、物理I/Oリソースへアクセスする特別な権利を持つと共に、システムで実行されている他の仮想マシンとやり取りする特別な権利も持つとしてよい。通常、DOM0 42は、システムがブートされると開始される最初のドメインであり、全てのその他の通常ゲスト(例えば、ゲスト14)を作成および設定するために利用することができる。ハイパーバイザ環境では、他のゲストを開始させる前にDOM0 42を実行する必要がある。
【0034】
図2を参照すると、
図2は、本開示の実施形態に対応付けられる処理ステップの例を説明するための簡略化フローチャートである。処理100は、DOM0 42がアクティブ化される処理102で開始されるとしてよい。処理104において、ドメイン作成中にロックダウン機能はロックダウンモジュール44によってイネーブルされるとしてよい(ゲストコンテキストからハイパーバイザコンテキストへのVMEXIT移行に対応付けられる)。処理106において、ドメイン固有データ構造内のロックダウン機能ビットがハイパーバイザ12において設定されるとしてよい。処理108において、ハイパーバイザ仮想マシン(HVM)(つまり、ゲスト14)を開始させるとしてよい。処理110において、ゲストOS18は、ハイパーバイザ12へのVMEXITと共に、ゲストカーネルページ30についてページテーブルエントリ(PTE)を作成するとしてよい。処理112において、ルートキット保護モジュール36は、シャドーページテーブル32においてゲストカーネルページ30についてPTE34を作成するとしてよい。処理114において、ルートキット保護モジュール36は、ハイパーバイザ12が維持しているシャドーページテーブル32においてゲストカーネルページ30をNOT_PRESENTと分類するとしてよい。さらに、この処理は、処理116におけるプロセッサ22に対応付けられる仮想マシン命令(VMRUN)と共に実行されるとしてよい。
【0035】
ルートキット保護がイネーブルされると(例えば、ゲストOS18がブートアップしてカーネルコンポーネントをロードすると)、ページフォールトハンドラ40は、ハイパーバイザ12内のシャドーページテーブル32を辿ったり(ウォーキングしたり)、ハッシュ38に仮想アドレス(例えば、まだアクセスされていないページに対応する仮想アドレス)を追加したり、等の動作を実行するとしてよい。実施形態例によると、これらの動作は、ゲストOS18がブートアップを完了した後に一度に実行され、その後、システム10はロックされたと見なされるとしてよい。
【0036】
処理120において、ゲストOS14内のアプリケーション20は、ゲストカーネルページ30へのアクセスを試みるとしてよい。ゲストカーネルページ30へアクセスを試みると、処理122においてページフォールトが発生する可能性がある(ゲストカーネルページ30はNOT_PRESENTと分類されているため)。尚、ルートキット保護がイネーブルされていない場合(例えば、ゲストOS18がブートアップを完了しておらず、カーネルコンポーネントのロードを完了していない)、および、ページフォールトがページ化プール範囲および非ページ化プール範囲の外部である場合、ページフォールトハンドラ40は、単純にページフォールトを修正して各不良仮想アドレス(例えば、ページ化プール範囲および非ページ化プール範囲に含まれる)のページスタートアドレスをハッシュ38に格納することに留意されたい。ページ化プール範囲および非ページ化プール範囲の外部にあるこれらのアドレスに対するアクセスは許可されるとしてよい。これは、カーネルドライバが通常はページ化プール範囲および非ページ化プール範囲内にロードされているためである。
【0037】
処理122においてページフォールトを発見すると、処理124においてページフォールトが命令ページフォールトまたはデータページフォールトのいずれであるかを判断する。ページフォールトがデータページフォールトである場合、ソフトホワイトリスト(つまり、ハッシュ38)において不良仮想アドレスに対応するMFNを検索する。不良仮想アドレスのMFNがハッシュ38内に存在する場合、ページフォールトに対応付けられているページは正当である。したがって、処理126において、ページフォールトハンドラ40は、当該ページの今後のアクセス/実行を許可するべく、ページフォールトを永久的に修正するとしてよい。一方、不良仮想アドレスに対応するMFNがハッシュ38に存在しない場合、カーネルページは新しく、当該カーネルページへ書き込もうとする試みは、コードまたはデータを含むとしてよい。したがって、ページフォールトハンドラ40は、処理126において、ページフォールトを永久的に修正して、ページをNX(実行禁止)と分類するとしてよい。これによって、発生するページフォールトが最小限に抑えられることが保証され得る一方、新しいカーネルページへのアクセスまたは実行が防止される。他のページは、ページを実行しようという試みが発生するまでは、ページフォールトが発生することなく読み書き可能な状態を継続することができる。アプリケーション20は、処理128においてシャドーページテーブル32にアクセスすることが許可されるとしてよい。処理130で処理は終了する。
【0038】
処理124における判断結果がページフォールトが命令フォールトであることを示す場合、ページフォールトハンドラ40は、処理132において、不良仮想アドレスのMFNがハッシュ38に存在するか否かを確認するとしてよい。存在する場合、ページフォールトハンドラ40は、処理134においてページフォールトを永久的に修正して(例えば、今後のアクセス/実行を許可)、ページをリードオンリーと分類して、NXを削除し、アクセス/実行を許可するとしてよい。ページがハッシュ38に存在しない場合、当該ページが新しいカーネルページであることを意味するとしてよく、ページフォールトハンドラ40は、処理136において実行を拒否するとしてよい。実行の拒否は、幾つかの方法で実行することができる。
(i)ページフォールトを修正せず、ゲスト14において不良スレッドを無限にループさせる。
(ii)ページフォールトを修正せず、例外をゲスト14に注入するとしてよい。例外は、不良プロセスによって捕捉されるとしてよい。プロセスがこの例外を処理しない場合、消滅させるとしてよい。
(iii)ページフォールトを修正するが、不良ページに対応付けられるシャドーPTE34は所望のページではなくクラフトページを示すように操作するとしてよい。クラフトページは、ゲスト14をクラッシュさせるコード、または、ノーオペレーション(NOP)命令を問題を起こすことなく実行させるコードを含むように設定され得る。他の例は、例えば、ゲスト14を「ブルースクリーン」状態にして(blue−screening)、潔く終了(exit)を発生させるダミーページを挿入する等の処理を行う。処理138においてプロセスを終了させるとしてよい。
【0039】
カーネルルートキット保護のための(同様に危険性の高いコードが実行されないように禁止するための)ソフトウェアは、さまざまなロケーションに設けられ得る(例えば、ルートキット保護モジュール36内)。一実施例によると、このソフトウェアは、セキュリティ攻撃からの保護を求めている(または、書き込み可能なメモリ領域に対する望ましくない操作または不正な操作から保護されている)コンピュータ内に存在する。より詳細な設定について説明すると、このソフトウェアは具体的に、
図1に図示したコンポーネントを含む(または、これらのコンポーネントとやり取りする)ハイパーバイザのセキュリティレイヤに存在する。さらに別の実施形態によると、ソフトウェアは、このカーネルルートキット保護を実現するべく、ウェブサーバから受信またはダウンロードすることもできる(例えば、複数の別個のデバイス、複数の別個の仮想マシン、ゲスト、ハイパーバイザ、サーバ等について個別のエンドユーザライセンスを購入する場合)。
【0040】
他の例を挙げると、カーネルルートキット保護機能は、これらの特定された要素内に(または、これらの特定の要素の近傍に)設けられ得るか、または、任意の他のデバイス、サーバ、ネットワークアプライアンス、コンソール、ファイアウォール、スイッチ、情報技術(IT)デバイス等に設けられるか、または、補完的な解決策として設けられるか(例えば、ファイアウォールと組み合わせて)、または、ネットワーク内のどこかにプロビジョニングされる、(例えば、ウイルス対策の一環として)専用の要素を含み得る。本明細書で用いられる場合、「コンピュータ」という用語は、セキュリティ環境において電子情報に対して影響を及ぼすか、または、当該電子情報を処理することが可能な要素(VMM、ハイパーバイザ、Xenデバイス、仮想デバイス、ネットワークアプライアンス、ルータ、スイッチ、ゲートウェイ、プロセッサ、サーバ、ロードバランサ、ファイアウォール、または、その他の任意の適切なデバイス、コンポーネント、要素またはオブジェクト)を網羅することを意味する。さらに、このコンピュータは、その動作を容易にする任意の適切なハードウェア、ソフトウェア、コンポーネント、モジュール、インターフェースまたはオブジェクトを含むとしてよい。これは、カーネルルートキットに対して有効な保護を実現する適切なアルゴリズムおよび通信プロトコルを含むとしてよい。また、複数のカーネルルートキット保護機能は、任意の適切な方法で統合することができる。同様の設計代替例が存在すると共に、さまざまな図面に図示したモジュールおよびコンポーネントのいずれを、さまざまな可能な構成で組み合わせるとしてよい。これらはすべて、本明細書の広い範囲に明らかに含まれる。
【0041】
これらの要素(例えば、コンピュータ、サーバ、ネットワークアプライアンス、ファイアウォール、ハイパーバイザ、任意のその他の種類の仮想要素等)はいずれも、本明細書に説明したカーネルルートキット保護処理を実行するソフトウェアまたはアルゴリズムを実行可能なプロセッサを含むとしてよい。また、これらの要素(例えば、コンピュータ、サーバ、ネットワークアプライアンス、ファイアウォール、ハイパーバイザ、任意のその他の種類の仮想要素等)はそれぞれ、メモリ要素(ランダムアクセスメモリ(RAM)、ROM、EPROM、EEPROM、ASIC等)、ソフトウェア、ハードウェア、または、適切な限りにおいて、そして、特定の需要に応じて、任意のその他の適切なコンポーネント、デバイス、要素またはオブジェクトを含むとしてよい。システム10において追跡、送信、受信または格納の対象となっている情報は、特定の需要および実装に応じて、任意のデータベース、レジスタ、テーブル、キャッシュ、待ち行列、制御リストまたはストレージ構造で提供され得る。これらはすべて、任意の適切な時間軸で説明され得る。
【0042】
これらの要素および/またはモジュールは、本明細書で説明したように、ハイパーバイザ環境におけるカーネルルートキット保護に関連する処理を実行するべく、互いに協働するとしてよい。他の実施形態によると、これらの機能は、これらの要素の外部で提供されるとしてもよいし、これらの意図した機能を実現するべく他のデバイスに含まれるとしてもよいし、または、任意の適切な方法で統合するとしてもよい。例えば、さまざまな要素に対応付けられているプロセッサの一部を、一のプロセッサおよび一のメモリロケーションが特定の処理を担当するように、削除または統合するとしてもよい。一般的には、添付図面に図示された構成は、表現がどちらかというと論理的な表現である一方、物理アーキテクチャは、これらの要素をさまざまな方法で置換、組み合わせおよび/または混合したものを含むとしてよい。
【0043】
本明細書で説明したメモリアイテム(例えば、ゲストカーネルページ30、シャドーページテーブル32、マシンメモリ24、ゲスト仮想メモリ26、ゲスト物理メモリ28、ハッシュ38等)はいずれも、「メモリ要素」という広義の用語に含まれると解釈されるべきである。同様に、本明細書で説明した可能な処理要素、モジュールおよびマシンはいずれも、「プロセッサ」という広義の用語に含まれると解釈されるべきである。コンピュータ、ネットワークアプライアンス、仮想要素等はそれぞれさらに、ハイパーバイザ環境においてデータまたは情報を受信、送信および/またはその他の方法で通信するための適切なインターフェースを含み得る。
【0044】
プロセッサは、本明細書で詳細に説明した処理を実現するべく、データに対応付けられた任意の種類の命令を実行することができる。一例を挙げると、プロセッサ(添付図面に図示しているもの)は、要素または物品(例えば、データ)をある状態またはあるものから別の状態または別のものに変換し得る。別の例を挙げると、本明細書で概略を説明している処理は、固定のロジックまたはプログラミング可能なロジック(例えば、プロセッサで実行されるソフトウェア/コンピュータ命令)で実現されるとしてよく、本明細書で特定する要素は、何らかの種類のプログラミング可能なプロセッサ、プログラミング可能なデジタルロジック(例えば、フィールドプログラマブルゲートアレイ(FPGA)、消去可能プログラム可能リードオンリーメモリ(EPROM)、電気的消去可能プログラミング可能ROM(EEPROM))、または、デジタルロジック、ソフトウェア、コード、電子命令または任意の適切なこれらの組み合わせを含むASICであってよい。
【0045】
特定の実施例によると、本明細書で概略を説明しているカーネルルートキット保護機能は、1以上の有形の非一時的媒体(例えば、特定用途向け集積回路(ASIC)に提供されるエンベデッドロジック、デジタルシグナルプロセッサ(DSP)命令、プロセッサまたは他の同様のマシンで実行するソフトウェア(オブジェクトコードおよびソースコードを含む可能性あり)等)にエンコードされているロジックで実現されるとしてよい。これらの例のうち幾つかでは、メモリ要素(添付図面に図示しているもの)は、本明細書で説明した処理に利用されるデータを格納することができる。これは、本明細書で説明する処理を実施するべく実行されるソフトウェア、ロジック、コードまたはプロセッサ命令を格納可能なメモリ要素を含む。さまざまな実施形態によると、これらの要素の一部または全ては、本明細書で概略を説明した処理を実現するべく協調、管理または協働し得るソフトウェア(または、往復ソフトウェア)を含む。これらの要素のうち1以上は、それらの動作を容易にする任意の適切なアルゴリズム、ハードウェア、ソフトウェア、コンポーネント、モジュール、インターフェースまたはオブジェクトを含むとしてよい。
【0046】
尚、本明細書に記載した数多くの例によると、2つ、3つ、4つまたはそれ以上のネットワーク要素およびモジュールについてのやり取りを説明していることに留意されたい。しかし、これは分かり易さ、そして、例示のみを目的としたものに過ぎない。システムは任意の適切な方法で統合し得るものと理解されたい。同様の設計代替例が存在すると共に、図示したモジュール、コンポーネントおよび
図1の要素はいずれも、さまざまな可能な構成で組み合わせることができるとしてよい。これらはすべて、本明細書の広義の範囲に明らかに含まれる。場合によっては、限られた数の要素またはコンポーネントについて言及するのみで所与の一連のフローの機能のうち1以上について説明する方が容易な場合がある。
図1のシステム(およびその教示内容)は、容易に縮小拡張が可能であり、より複雑/高度な構造および構成を含み得ると同様に、多数のコンポーネントを含み得ると理解されたい。したがって、記載した例は、多数の他のアーキテクチャに適用可能であり、システム10の幅広い教示内容の範囲を制限したり、または、阻害するべきではない。
【0047】
また、添付図面を参照しつつ説明した処理は当該システムによって、または、当該システム内で実行可能なシナリオの一部を説明しているに過ぎないことに留意することも重要である。これらの処理の一部は適宜削除または省略するとしてよく、または、これらのステップは、説明した概念の範囲から逸脱することなく、大きく修正または変更し得るものである。また、これらの処理のタイミングは、大きく変更し得るものであり、それでも本開示で教示した結果を実現し得る。上述した処理フローは、例示および説明を目的としたものである。システムについては、説明した概念の教示内容から逸脱することなく任意の適切な配置、時間関係、構成およびタイミングメカニズムを実現し得るという点で、大きな柔軟性が認められる。
[項目1]
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する段階と、
ゲストカーネルページへのアクセスが試みられると、ページフォールトを生成する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正してアクセスおよび実行を許可する段階と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、実行を拒否する段階と
を備える方法。
[項目2]
前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの1つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する段階をさらに備える項目1に記載の方法。
[項目3]
前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正する段階と、
前記ゲストカーネルページを実行不可能と分類する段階と
をさらに備える項目1に記載の方法。
[項目4]
前記ソフトホワイトリストを作成する段階は、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号(MFN)をハッシュに追加する段階を有する項目1に記載の方法。
[項目5]
各ゲストカーネルページに対応するページテーブルエントリ(PTE)を、前記ハイパーバイザのシャドーページテーブルにおいてNOT_PRESENTと分類する段階をさらに備える項目1に記載の方法。
[項目6]
前記実行を拒否する段階は、
前記ゲストOSに無限にループさせる段階、
前記ゲストOSに例外を注入する段階、または、
前記ページフォールトを修正して、前記シャドーページテーブル内の対応するPTEが、前記ゲストカーネルページの代わりにクラフトページを示すようにする段階
の1つを有し、
前記クラフトページは、前記ゲストOSをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令(NOP命令)を実行させるコードを含む項目5に記載の方法。
[項目7]
前記ソフトホワイトリストを作成する段階は、前記ゲストOSがブート時に略全てのカーネルコンポーネントをロードした後に実行される項目1に記載の方法。
[項目8]
前記ソフトホワイトリストを作成する段階は、前記ゲストOSが略全てのカーネルコンポーネントをロードする前に実行され、各ゲストカーネルページは、ページ化プール範囲または非ページ化プール範囲からである項目1に記載の方法。
[項目9]
ルートキット保護をイネーブルするべくドメイン作成中に前記ハイパーバイザのロックダウン機能ビットを設定する段階をさらに備える項目1に記載の方法。
[項目10]
メモリと、
プロセッサと、
ハイパーバイザと
を備え、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成し、
ゲストカーネルページへのアクセスが試みられるとページフォールトを生成し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正してアクセスおよび実行を許可し、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、実行を拒否する、装置。
[項目11]
さらに、前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの1つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する項目10に記載の装置。
[項目12]
さらに、前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正し、
前記ゲストカーネルページを実行不可能と分類する項目10に記載の装置。
[項目13]
前記ソフトホワイトリストを作成することは、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号(MFN)をハッシュに追加することを含む項目10に記載の装置。
[項目14]
前記実行を拒否することは、
前記ゲストOSに無限にループさせること、
前記ゲストOSに例外を注入すること、または、
前記ページフォールトを修正して、前記ハイパーバイザのシャドーページテーブル内の対応するPTEが、前記ゲストカーネルページの代わりにクラフトページを示すようにすること
の1つを含み、
前記クラフトページは、前記ゲストOSをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令(NOP命令)を実行させるコードを含む項目10に記載の装置。
[項目15]
実行されるべきコードを含む非一時的媒体にエンコードされているロジックであって、前記コードがプロセッサによって実行されると、
ハイパーバイザを含むハイパーバイザ環境におけるゲストオペレーティングシステム(ゲストOS)における各ゲストカーネルページに対応するエントリを持つソフトホワイトリストを作成する手順と、
ゲストカーネルページにアクセスが試みられるとページフォールトを生成する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのうち1つに対応する場合、前記ページフォールトを修正してアクセスおよび実行を許可する手順と、
前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、実行を拒否する手順と
を含む処理を実行する、ロジック。
[項目16]
前記処理はさらに、前記ページフォールトが命令ページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリの1つに対応する場合、前記ゲストカーネルページをリードオンリーおよび実行可能と分類する手順を含む項目15に記載のロジック。
[項目17]
前記処理はさらに、
前記ページフォールトがデータページフォールトであり、且つ、前記ゲストカーネルページが前記ソフトホワイトリストの前記エントリのいずれにも対応しない場合、
前記ページフォールトを修正する手順と、
前記ゲストカーネルページを実行不可能と分類する手順と
を含む、項目15に記載のロジック。
[項目18]
前記ソフトホワイトリストを作成する手順は、各ゲストカーネルページの仮想アドレスに対応するマシンページフレーム番号(MFN)をハッシュに追加する手順を有する項目15に記載のロジック。
[項目19]
前記処理はさらに、各ゲストカーネルページに対応するPTEを、前記ハイパーバイザのシャドーページテーブルにおいてNOT_PRESENTと分類する手順を含む項目15に記載のロジック。
[項目20]
前記実行を拒否する手順は、
前記ゲストOSに無限にループさせる手順、
前記ゲストOSに例外を注入する手順、または、
前記ページフォールトを修正して、前記シャドーページテーブル内の対応するPTEが、前記ゲストカーネルページの代わりにクラフトページを示すようにする手順
の1つを有し、
前記クラフトページは、前記ゲストOSをクラッシュさせるコード、または、問題を起こすことなく一連のノーオペレーション命令(NOP命令)を実行させるコードを含む項目19に記載のロジック。