(57)【特許請求の範囲】
【請求項１】
ハイパーバイザモードにおけるコードの安全な実行方法であって、工程（Ａ）〜工程（Ｆ）を含み、
工程（Ａ）では、コンピューティングデバイスのハードウェアプロセッサによって、保護された仮想メモリページの整合性をチェックするように構成されたハイパーバイザをロードし、
工程（Ｂ）では、前記ハードウェアプロセッサによって、前記ハイパーバイザに対するハイパーコールを生成するように構成された信頼できるプログラムをロードし、
工程（Ｃ）では、前記ハイパーバイザに対する第１のハイパーコールを前記信頼できるプログラムによって生成し、
工程（Ｄ）では、前記第１のハイパーコールに対応し、後のハイパーコールの間に前記信頼できるプログラムを前記ハイパーバイザによって識別するために用いられるトークンを前記ハイパーバイザによって生成し、
工程（Ｅ）では、前記ハードウェアプロセッサによって、前記トークンと前記ハイパーバイザのメモリアドレスを格納するためのメモリページを割り当て、
工程（Ｆ）では、割り当てられたメモリページのメモリアドレスを前記信頼できるプログラムへ返す、
方法。
【請求項２】
前記信頼できるプログラムは、ウイルス対策アプリケーションのコンポーネントである、請求項１に記載の方法。
【請求項３】
ハイパーバイザをロードする前記工程（Ａ）は、１つ以上のゲストオペレーションシステムをロードする前に前記ハイパーバイザをロードする工程を含む、請求項１に記載の方法。
【請求項４】
前記ハイパーバイザによってトークンを生成する工程（Ｄ）は、各ゲストオペレーティングシステムのためのユニークトークンをランダム生成する工程を含む、請求項１に記載の方法。
【請求項５】
前記メモリページの上書きを禁止する前記メモリページのためのセキュリティパラメータを設定する工程（Ｇ）をさらに含む、請求項１に記載の方法。
【請求項６】
工程（Ｈ）〜（Ｊ）をさらに含み、
工程（Ｈ）では、ハイパーバイザによって生成される上記トークンを含む第２のハイパーコールを信頼できるプログラムによって生成し、
工程（Ｉ）では、上記トークンを第２のハイパーコールが信頼できるプログラム由来であるかを確認するためのトークンであるかをハイパーバイザによって検証し、
工程（Ｊ）では、上記トークンが正しいと確認された場合に、ハイパーバイザに対し、整合性チェックのための１つ以上の保護されたメモリページのアドレスを信頼できるプログラムによって提供し、
工程（Ｋ）では、保護されたメモリページの周期的冗長検査をハイパーバイザによって実行する、
請求項１に記載の方法。
【請求項７】
前記１つ以上の保護されたメモリページの繰り返し周期的冗長検査をハイパーバイザによって設定する工程（Ｌ）をさらに含む、請求項６に記載の方法。
【請求項８】
ハイパーバイザモードにおけるコードの安全な実行システムであって、
ハードウェアプロセッサを備え、前記ハードウェアプロセッサは、
保護された仮想メモリページの整合性をチェックするように構成されたハイパーバイザをロードし、
前記ハイパーバイザに対するハイパーコールを生成するように構成された信頼できるプログラムをロードし、
前記ハイパーバイザに対する第１のハイパーコールを前記信頼できるプログラムによって生成し、
前記第１のハイパーコールに対応し、後のハイパーコールの間に前記信頼できるプログラムを前記ハイパーバイザによって識別するために用いられるトークンをハイパーバイザによって生成し、
前記トークンと前記ハイパーバイザのメモリアドレスを格納するためのメモリページを割り当て、
割り当てられた前記メモリページのメモリアドレスを前記信頼できるプログラムへ返すように構成されている、
システム。
【請求項９】
前記信頼できるプログラムは、ウイルス対策アプリケーションのコンポーネントである、請求項８に記載のシステム。
【請求項１０】
ハイパーバイザのロードにおいて、１つ以上のゲストオペレーションシステムをロードする前に前記ハイパーバイザをロードする、請求項８に記載のシステム。
【請求項１１】
前記ハイパーバイザによるトークンを生成において、各ゲストオペレーティングシステムのためのユニークトークンをランダム生成する、請求項８に記載のシステム。
【請求項１２】
前記メモリページの上書きを禁止する前記メモリページのためのセキュリティパラメータを設定するようにさらに構成されている、請求項８に記載のシステム。
【請求項１３】
ハイパーバイザによって生成される上記トークンを含む第２のハイパーコールを信頼できるプログラムによって生成し、
上記トークンを第２のハイパーコールが信頼できるプログラム由来であるかを確認するためのトークンであるかをハイパーバイザによって検証し、
上記トークンが正しいと確認された場合に、ハイパーバイザに対し、整合性チェックのための１つ以上の保護されたメモリページのアドレスを信頼できるプログラムによって提供し、
保護されたメモリページの周期的冗長検査をハイパーバイザによって実行するようにさらに構成されている、請求項８に記載のシステム。
【請求項１４】
前記１つ以上の保護されたメモリページの繰り返し周期的冗長検査をハイパーバイザによって設定するようにさらに構成されている、請求項１３に記載のシステム。
【請求項１５】
ハイパーバイザモードにおけるコードの安全な実行のためのコンピュータ実行可能命令を格納する非一過性の記録媒体であって、
保護された仮想メモリページの整合性をチェックするように構成されたハイパーバイザをロードする命令と、
ハイパーバイザに対するハイパーコールを生成するように構成された信頼できるプログラムをロードする命令と、
ハイパーバイザに対する第１のハイパーコールを信頼できるプログラムによって生成する命令と、
第１のハイパーコールに対応し、後のハイパーコールの間に信頼できるプログラムをハイパーバイザによって識別するために用いられるトークンがハイパーバイザによって生成する命令と、
トークンとハイパーバイザのメモリアドレスを記憶するためのメモリページを割り当てる命令と、
割り当てられたメモリページのメモリアドレスを信頼できるプログラムへ返す命令と、
を含む記録媒体
【請求項１６】
前記信頼できるプログラムは、ウイルス対策アプリケーションのコンポーネントである、請求項１５に記載の記録媒体。
【請求項１７】
ハイパーバイザのロードにおいて、１つ以上のゲストオペレーションシステムをロードする前に前記ハイパーバイザをロードする、請求項１５に記載の記録媒体。
【請求項１８】
前記ハイパーバイザによるトークンを生成において、各ゲストオペレーティングシステムのためのユニークトークンをランダム生成する、請求項１５に記載の記録媒体。
【請求項１９】
前記メモリページの上書きを禁止する前記メモリページのためのセキュリティパラメータを設定する命令をさらに含む、請求項１５に記載の記録媒体。
【請求項２０】
ハイパーバイザによって生成される上記トークンを含む第２のハイパーコールを信頼できるプログラムによって生成する命令と、
上記トークンを第２のハイパーコールが信頼できるプログラム由来であるかを確認するためのトークンであるかをハイパーバイザによって検証する命令と、
上記トークンが正しいと確認された場合に、ハイパーバイザに対し、整合性チェックのための１つ以上の保護されたメモリページのアドレスを信頼できるプログラムによって提供する命令と、
保護されたメモリページの周期的冗長検査をハイパーバイザによって実行する命令と、
をさらに含む、請求項１５に記載の記録媒体。
【請求項２１】
前記１つ以上の保護されたメモリページの繰り返し周期的冗長検査をハイパーバイザによって設定する命令をさらに含む、請求項２０に記載の記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般的にコンピュータセキュリティの分野に関し、特にハイパーバイザモードにおけるコードの安全な実行システムおよび方法に関する。
【背景技術】
【０００２】
コンピュータマルウェア(トロイの木馬、ウイルスやワームなど)の開発のペースは上昇し続けており、ウイルス対策アプリケーションを回避するための多くの方法が用いられている。そのような方法の一つは、コンピュータシステム(ファイルやレジストリブランチなど)の特定のリソースを、アンチウイルスチェックを行うウイルス対策アプリケーションから隠す。ウイルス対策企業の分類によれば、このような方法を利用する悪意あるプログラムは、ルートキットとして、またはルートキット技術を利用するものとして知られている。ルートキット技術は、カーネルレベルで動作するオペレーティングシステム(OS)のコンポーネント中の脆弱性を利用する場合にはより危険となる。今日のウイルス対策アプリケーションは、このような技術を利用する悪意あるプログラムを検出することができない。
【０００３】
このような状況を解決するための一つの方法は、互いに異なるOSを分離、実行中のOS間のリソースの分割、リソースの管理を行うハイパーバイザを使用することである。同時に、ハイパーバイザモードにおけるコードの実行は、カーネルレベルでのコードの実行より低レベルでも起こる。驚くことではないが、ウイルス対策アプリケーションを作成している企業は、このようなアプローチに興味を持っている。しかしながら、現在の解決策は効果がなく、一部のケースでは採用することができない。
【発明の概要】
【０００４】
ハイパーバイザモードにおけるコードの安全な実行システムおよび方法が開示される。例示的一態様による方法は、工程（Ａ）〜工程（Ｆ）を含む。工程（Ａ）では、保護された仮想メモリページの整合性をチェックするように構成されたハイパーバイザをロードし、工程（Ｂ）では、ハイパーバイザに対するハイパーコールを生成するように構成された信頼できるプログラムをロードし、工程（Ｃ）では、ハイパーバイザに対する第１のハイパーコールを信頼できるプログラムによって生成し、工程（Ｄ）では、第１のハイパーコールに対応し、後のハイパーコールの間に信頼できるプログラムをハイパーバイザによって識別するために用いられるトークンをハイパーバイザによって生成し、工程（Ｅ）では、トークンとハイパーバイザのメモリアドレスを格納するためのメモリページを割り当て、工程（Ｆ）では、割り当てられたメモリページアドレスを信頼できるプログラムへ返す。
【０００５】
例示的な一態様においては、信頼できるプログラムは、ウイルス対策アプリケーションのコンポーネントである。
【０００６】
例示的な一態様においては、ハイパーバイザをロードする工程（Ａ）は、１つ以上のゲストオペレーションシステムをロードする前にハイパーバイザをロードする工程を含む。
【０００７】
例示的な一態様においては、ハイパーバイザによってトークンを生成する工程（Ｄ）は、各ゲストオペレーティングシステムのためのユニークトークンをランダム生成する工程を含む。
【０００８】
例示的な一態様においては、上記方法は、メモリページの上書きを禁止するメモリページのためのセキュリティパラメータを設定する工程（Ｇ）をさらに含む。
【０００９】
例示的な一態様においては、上記方法は、工程（Ｈ）〜（Ｊ）をさらに含み、工程（Ｈ）では、ハイパーバイザによって生成される上記トークンを含む第２のハイパーコールを信頼できるプログラムによって生成し、工程（Ｉ）では、上記トークンを第２のハイパーコールが信頼できるプログラム由来であるかを確認するためのトークンであるかをハイパーバイザによって検証し、工程（Ｊ）では、上記トークンが正しいと確認された場合に、ハイパーバイザに対し、整合性チェックのための１つ以上の保護されたメモリページのアドレスを信頼できるプログラムによって提供し、工程（Ｋ）では、保護されたメモリページの周期的冗長検査をハイパーバイザによって実行する。
【００１０】
例示的な一態様においては、上記方法は、保護されたメモリページの繰り返し周期的冗長検査をハイパーバイザによって設定する工程（Ｌ）をさらに含む。
【００１１】
ハイパーバイザの安全な実行のためのシステムの例示的一態様は、ハードウェアプロセッサを備え、該ハードウェアプロセッサは、保護された仮想メモリページの整合性をチェックするように構成されたハイパーバイザをロードし、ハイパーバイザに対するハイパーコールを生成するように構成された信頼できるプログラムをロードし、ハイパーバイザに対する第１のハイパーコールを信頼できるプログラムによって生成し、第１のハイパーコールに対応し、後のハイパーコールの間に信頼できるプログラムをハイパーバイザによって識別するために用いられるトークンがハイパーバイザによって生成し、トークンとハイパーバイザのメモリアドレスを格納するためのメモリページを割り当て、割り当てられたメモリページアドレスを信頼できるプログラムへ返すように構成されている。
【００１２】
例示的一態様によるハイパーバイザの安全な実行のためのコンピュータ実行可能命令を格納する非一過性の記録媒体は、保護された仮想メモリページの整合性をチェックするように構成されたハイパーバイザをロードする命令と、ハイパーバイザに対するハイパーコールを生成するように構成された信頼できるプログラムをロードする命令と、ハイパーバイザに対する第１のハイパーコールを信頼できるプログラムによって生成する命令と、第１のハイパーコールに対応し、後のハイパーコールの間に信頼できるプログラムをハイパーバイザによって識別するために用いられるトークンがハイパーバイザによって生成する命令と、トークンとハイパーバイザのメモリアドレスを格納するためのメモリページを割り当てる命令と、割り当てられたメモリページアドレスを信頼できるプログラムへ返す命令とを含む。
【００１３】
例示的態様における上記の簡単な概要は、本開示の基本的な理解を提供するのに役立つ。本概要は、すべての企図される態様の広範な概観ではなく、すべての態様の主要または重大な要素を特定することも意図しておらず、本開示における、任意又は全ての態様の範囲を線引きもしないということが意図される。その唯一の目的は、以下の本開示のより詳細な説明の前置きとして簡略化された形式で1または複数の態様を提示することである。前述の達成のために、本開示の1つまたは複数の態様について、説明され、部分的に特許請求の範囲に示してある特徴を含む。
【図面の簡単な説明】
【００１４】
添付図面は、詳細な説明と共に、本明細書に組み込まれ、その一部を構成し、本開示における1つまたは複数の実施態様を示しており、それらの原理及び実装を説明するのに役立つ。
【００１５】
【図１】図1は、ハイパーバイザモードにおける信頼されたコード呼出し機構が実現される例示的システムを示す。
【図２】図２は、信頼できるプログラムのためのハイパーバイザコールアドレスを提供する例示的一態様による方法を示す。
【図３】図３は、信頼できるプログラムからのコールのためのハイパーバイザアドレスを含むメモリページの例を示す。
【図４】図４は、ハイパーバイザを利用したメモリページ保護の例示的一態様による方法を示す。
【図５】図５は、本開示のシステム及び方法のいくつかの態様を実施することが可能な手段による汎用コンピュータシステムを示す。
【詳細な説明】
【００１６】
本開示の例示的な態様は、ハイパーバイザモードにおけるコードの安全な実行のために、システム、方法、及びコンピュータプログラム製品に関連して本明細書に開示される。当業者は、以下の説明は単なる例示であり、決して限定であることを意図するものではないことを理解するであろう。他の態様は、本開示の利益を有する当業者にとって、容易に示唆となりえる。参照は、添付の図面に示されるように、現在の例示の態様の実装について詳細に説明するものである。同じ参照指標は、同一または同様の項目を参照するため、図面及び以下の説明の全体を通じて、可能な限り使用される。
【００１７】
ハイパーバイザは、複数のオペレーティングシステム(OS)を同じコンピュータ上で同時実行、並列実行することを可能とするプログラムである。ハイパーバイザには２つのタイプがあり、第１のタイプは独自の組み込みのデバイスドライバとスケジューラを有しているため特定のOSに依存しないが、一方で第２のタイプはメインOS（カーネルモードまたはリング0）のカーネルと同じリングで動作する。第１のタイプのハイパーバイザは、またベアメタルとして知られ、そして本発明におけるハイパーバイザを実現するための好ましい例である。ハイパーバイザモードにおけるコードの実行は、カーネルモードまたはリング0でのコードの実行よりもさらに低いレベルで発生する。
【００１８】
ハイパーバイザモードにおいて実行されるコードの呼出し(ハイパーコール)は、プロセッサの一部に仮想化技術のハードウェアサポートを必要とするハイパーバイザモードにおけるコードの実行(また、単に「実行」と呼ばれる)への移行である。
【００１９】
信頼できるOSは、アクセス権に違反することなく、ユーザーグループが異なる機密度の情報の同時処理を可能にするために適切なハードウェアおよびソフトウェアを使用するオペレーティングシステムである。一般的に、信頼できるOSは、ユーザデータの機密性と完全性を提供可能である。「AGuidetoUnderstandingConfigurationManagementinTrustedSystems(1988)」で高信頼性システムについての詳細を学ぶことができる。
【００２０】
信頼できるコード呼出しは、呼出しが、悪意のあるまたは信頼できないプログラムからの外部コードの呼出しの可能性を除外した信頼できるソース(信頼できるアプリケーションのプロセスに属しているメモリページ)からの呼出しであると保証されている間の外部コードの呼出しである。信頼できるアプリケーションは、実行可能ファイルがデジタル署名を有し、悪意のないプログラムである。
【００２１】
図1は、ハイパーバイザモードにおける信頼されたコード呼出し機構が実現される例示的システムを示す。オペレーティングシステム110は、様々なアプリケーション130を実行し、同様に信頼できるプログラム150および悪意のあるプログラム140も実行する。アプリケーション130は、ブラウザ、ワードプロセッサ、その他の種々のユーザアプリケーションを含む。ウイルス、ワーム、トロイの木馬などの悪意のあるプログラム140は、ウイルス対策アプリケーション（図１に図示せず。しかし、アプリケーション１３０の一つであってよい。）による検出を回避することを可能とするように、オペレーティングシステムにおいてその存在を隠蔽するさまざまな方法を使用できる（例えば、ルートキット技術を利用する）。この事実は、OS110が信頼できるとはいえず、ユーザデータへの脅威であることを意味する。オペレーティングシステムにおいて悪意あるプログラムの存在を隠蔽する方法について様々な情報源で読むことが可能であり、例えば「https://en.wikipedia.org/wiki/Rootkit」で読める。
【００２２】
悪意のあるプログラム140の存在を検出するため、そして悪意のあるプログラム140のユーザ情報へのアクセスの可能性を回避するため、信頼できるプログラム150およびハイパーバイザ120を用いることができる。信頼できるプログラム150は、セパレートアプリケーション形式及びウイルス対策アプリケーションのコンポーネント形式の両方で実現可能である。信頼できるプログラム150の主要特性は、ハイパーバイザ120のコードを実行する呼出しを行うその機能である。上述のように、ハイパーバイザモードにおけるコードの実行は、悪意のあるプログラム140により利用されるルートキット技術を無視することが可能なカーネルモードでのコードの実行よりもさらに低いレベルでも発生する。カーネルモード（リング0）で実行されるコードは、ハイパーバイザモードにおいて実行されるコードへのアクセスを行わない。同じように、ユーザモード（リング3）で実行されるコードは、カーネルモードで実行されるコードへのアクセスを行わない。保護リングに関する詳細については様々な刊行物を参照することができ、例えば「Russinovich、MarkE.;DavidA.Solomon(2005).MicrosoftWindowsInternals(4ed.).MicrosoftPress」などがある。なお、リング0でのコードの実行は、カーネルレベルでの実行としても知られ、リング3のコードの実行は、ユーザーレベルでの実行のことである。
【００２３】
上述のように、信頼できるプログラム150(ハイパーバイザモードにおいて実行されるであろうコードを含む)は、ハイパーバイザ150のコード実行のためのコールを生成し、例えば、それはハイパーコールである。OS110は最初は信頼されているが、悪意のあるプログラム140はOSの信頼レベルを危うくすると想定される。悪意のあるプログラム140は、OS110にインストールされたウイルス対策アプリケーション(図1には示さず)による検出の回避を可能とする複雑なロジック(ルートキットの機能など)を有すると考えられる。よって、悪意のあるプログラム140から機密ユーザ情報のための保護を提供する必要がある。
【００２４】
最新のOSでは、情報は複数の方法で保護され得る（暗号化、データストレージへのアクセス制御、ユーザデータを扱うそれらのプロセスの仮想メモリ保護の提供など）。本発明は、概してプロセスの仮想メモリの保護のためのシステムおよび方法に関する。
【００２５】
プロセスの仮想メモリを保護する方法は知られている。例えば、NXビットは、実行可能なコードとしてのデータの実行を防止可能なように、メモリページ向けの実行を禁止するビットを設定することができる。例えば、本明細書中に参考として援用する米国特許No.8990934（共同所有）には、エクスプロイトの書込みと実行を防止するための、相互に排他的なメモリページ向けの実行ビットおよび書込みビットの設定を制御する技術が記載されている。
【００２６】
しかしながら、既知の技術はOSカーネルのレベルで動作するという欠点を有し、コンピュータの電源をオンにした後のOSの起動（初期化）作業の際に、同じ権限レベルでの悪意あるコード実行の可能性を残す。このような悪質あるコードは、上記のメモリ保護アルゴリズムを切断、さらに悪い場合には制御することができ、このような場合にもユーザの情報を保護することができない。コンピュータの電源を入れた後のOSの起動（初期化）の詳細については、様々な刊行物を参照することができ、例えば、「Russinovich、MarkE.;DavidA.Solomon(2005);MicrosoftWindowsInternals(4ed.);MicrosoftPress」などがある。
【００２７】
ハイパーバイザモードにおけるコードの実行は、後者がカーネルモードで実行された場合でも、悪質あるコードの一部におけるメモリの変更を検出することを可能とする。しかしながら、ハイパーバイザモードにおけるコードの実行のためのコール、すなわちハイパーコールの生成は、ハイパーコールなどを生成するであろうコードを含むセパレートアプリケーションを必要とする。本開示では、セパレートアプリケーションは、ウイルス対策アプリケーションであってよい信頼できるプログラム150である。
【００２８】
OS110において稼働するプロセスの仮想メモリページの検証を含むであろうモノリシックコードセクタの形式であるハイパーバイザ120モードにおいて、コードを生成することは一般的に非常に困難であることに注意が必要である。その理由は複数あり、例えば下記の理由がある。
ハイパーバイザコードが「オーバーロード状態」(書込み及びデバッグするには複雑すぎることがわかる)となり、あまりにも多くのシステムリソース、特にプロセッサ時間を消費し始める。
ハイパーバイザコードが低すぎるレベル(ハイパーバイザレベル)において動作する、すなわち、ハイパーバイザコードがより高いレベルで動作するOS(カーネルレベル)の動作機構を「知って」いない。この問題は、ベアメタルハイパーバイザの特性である。
【００２９】
そのため、ハイパーバイザ120から信頼できるプログラム150へ一部の機能を移行し、一方でハイパーバイザ120にはメモリページ検証機能のみを残すことが望まれている。信頼できるプログラム150はOS110の詳細認識を許され(例えば、WindowsOSの仮想メモリページ構成の認識)、クロスプラットフォームハイパーバイザ120としての本ハイパーバイザ120を有することが可能となる。
【００３０】
例示的な一態様においては、信頼できるプログラム150とハイパーバイザ120の間の保護された通信チャネルが存在する。このような通信チャネル提供するために、信頼できるプログラム150はハイパーバイザ120のコードの呼出し(ハイパーコール)が可能であることが必要である。ハイパーバイザ120コードがRAMに格納されることを鑑みると、本コードが呼び出されることによるアドレスの機密性を担保することが必要である。
【００３１】
図２は、信頼できるプログラムのためのハイパーバイザコールアドレスを提供する例示的一態様による方法を示す。工程205では、ハイパーバイザ120は、コンピュータシステムの起動直後、OS110の初期化前にロードされる。原則として、ベアメタルタイプのハイパーバイザは、ホストOSの起動前に初期化される。ホストOSとは、ハイパーバイザの初期化後に起動するいかなるOSをも意味しており、ここではOS110である。工程207では、信頼できるプログラム150がロードされ、一般的にOS110のドライバの形で実現され、可能な限り早くロードされる。この要件は、工程207においてOS110を信頼するために必要である。なぜなら、信頼できるプログラム150の早期起動が悪意のあるプログラム140の起動前に信頼できるプログラム150を起動することを可能にするからである。工程210では、ハイパーバイザ120のアドレス(所謂セーフハイパーコールアドレス)がメモリに返された後に、信頼できるプログラム150がハイパーバイザ120コードの第１のコール(ハイパーコール)を実行する。次に、工程220においてメモリページ300を作成するためにこのアドレスは不正アクセスに対して保護されている必要がある（メモリページ300の例示的な構造は図３に示されている）。メモリページ自体は、ハイパーコールが実行可能である一連のメモリアドレスによって構成される。例示的な一態様においては、１つのコールのみが直ちにハイパーコールとなり、一方でその他のコールはその後の再起動を伴うOS110の動作において例外とエラー発生を引き起こす。メモリページ300は、信頼できるプログラム150によって又はその第１のコールの間に直接ハイパーバイザ120によって作成され得る。コールを伴ったコードによるページ入力は、ハイパーバイザ120によって工程230において行われる。メモリページは、例えば、工程２４０においてはメモリページに上書できないことを示唆するセキュリティパラメータ(例えば、セキュリティビット)を設定することによってさらに保護され得る。様々な態様において、セキュリティパラメータは、信頼できるプログラム150またはハイパーバイザ120によって設定され得る。
【００３２】
信頼できるプログラム150に対するハイパーバイザ120の正しいコールアドレスの送信機構について説明する。信頼できるプログラム150のプロセスのメモリにアドレスそれ自体を格納することは安全ではないかもしれず、アドレスを取得するための悪意のあるプログラム140による介入を排除することが出来ないため、信頼できるプログラム150はランダム生成キーの形式であるハイパーコールを生成するために用いることができるトークンも格納する。トークンそれ自体は、ハイパーバイザ120によって第１のコール時生成され(図２における工程２１０)、ハイパーコール中のトークンの値を比較するため信頼できるプログラム150に送られ、ハイパーバイザ120の悪意あるコールが実行される状況が防がれる。トークンはコンピュータシステムの作動中(電源を入れた後)に一度生成され、OS110に固有のものとなる。よって、他のホストOSがコンピュータシステムに存在する場合、ハイパーバイザ120は個々のトークンをそれぞれに対して生成する。
【００３３】
図４は、ハイパーバイザを利用したメモリページ保護の例示的一態様による方法を示す。工程410では、信頼できるプログラム150がハイパーコールを生成し、トークンがチェックされ、工程420において信頼できるプログラム150のトークンがハイパーバイザ120の保存されているトークンと一致した場合(工程430でのチェック)、工程450で信頼できるプログラム150は保護を必要とするメモリページのアドレスを送信する。このメモリ保護は、さまざまな操作（読取り、書込み、およびコードを実行）を許可/禁止するビットを設定する工程を含む。工程460では、保護されたメモリページに格納されたデータに対するチェックサム検証が行われる(周期的冗長検査、CRC)。工程470では、攻撃がリニアアドレスによる操作を含む可能性があるため、ハイパーバイザ120が保護されたメモリページに対するチェックサムの計算による定期検証を命ずる。定期検証は等間隔にハイパーコールを用いてハイパーバイザ120または信頼できるプログラム150によって初期化される。ハイパーバイザ120は、悪意のあるプログラム140によって変更されていないことを確かめるための信頼できるプログラム150の整合性チェックも行うことができる。整合性チェックは、チェックサムを計算する工程と、信頼できるプログラム150にける変更を特定するために以前保存された値と比較する工程とを含む。このチェックは工程４２０で行われる。信頼できるプログラム150のコードが変更されていた場合、ハイパーバイザはメモリ内においてディスクからロードすることによりコードを修復することができる。
【００３４】
下記は、リニアアドレスによる操作を含む攻撃の例である。例えば、OS110のIDT(InterruptDispatchTable)は、リニアアドレス0xF1D10000に位置するが、これは物理アドレス0x123000のマッピング(すなわち、物理アドレス上への仮想メモリページのアドレスのマッピング)である。ハイパーバイザ120はアドレス0x123000における物理ページに対し上記保護を確立することができる(パフォーマンスのロスなしで)。悪意のあるプログラム140は、例えば0x321000などの物理ページを選び、必要な要素を置き換えて(この例においては、割り込みハンドラである)オリジナルページ0x123000のコンテンツをそこへコピーし、マッピング0xF1D10000->0x321000を確立させ、ハイパーバイザ120が上記変更を検出できない、すなわちOS110において仮想メモリの動作の論理上の情報を有しないようになる。そのため、信頼できるプログラム150は、OS110内のページテーブルの正確性を定期的にチェックすべきであり、この例においては0xF1D1000が0x123000に確かに対応し、他の何かでないことをチェックする。
【００３５】
ハイパーバイザ120のロード前のハイパーバイザ120のストレージについて説明する。ハイパーバイザ120のコードは、UEFI(UnifiedExtensibleFirmwareInterface)サービス内またはPCI若しくはPCIeボード上の別のデバイス内に格納され得る。別のデバイスは、どのデバイスであるかOS110内では定義されていないか(例えば、ハイパーバイザ120または信頼できるプログラム150はこのデバイスからの割り込みを独立して処理する)、またはディスク仮想化を利用する(ハイパーバイザ120はディスクドライバの基本的な機能を変更することによりそのコードを記憶したディスクのセクタを除外する).
【００３６】
図５は、本開示のシステム及び方法を実施することが可能な汎用コンピュータシステム（パーソナルコンピュータまたはサーバであってよい）を表す。示されているように、コンピュータシステムは、中央処理装置21と、システムメモリ22と、中央処理装置21と関連するメモリを含む様々なシステムコンポーネントに接続しているシステムバス23とを備える。システムバス23は、先行技術から知られている任意のバス構造に類似であってよく、他のバスアーキテクチャと相互作用することが可能なバスメモリまたはバスメモリコントローラ、周辺バス、ローカルバスを含んでよい。システムメモリは、固定メモリ（ROM）24及びランダムアクセスメモリ（RAM）25を含む.基本入力/出力システム（BIOS）26は、ROM24を使用したオペレーティングシステムの読み込み時などのパーソナルコンピュータ20の要素間の情報伝達を保証する基本的手順を含む。
【００３７】
パーソナルコンピュータ２０は、同様に、データを読み込み及び書き込むためにハードディスク２７、リムーバル磁気ディスク２９に読み取り及び書き込みするために磁気ディスクドライブ２８及びリムーバル光学ディスクドライブ３１（ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ及び別の光学情報メディア）を読み取り及び書き込みするために光学ドライブ３０を含む。ハードディスク２７、磁気ディスクドライブ２８及び光学ドライブ３０は、ハードディスクインターフェース３２、磁気ディスクインターフェース３３及び光学ドライブインターフェース３４それぞれを介して、システムバス２３に接続されている。ドライブ及び対応するコンピュータ情報メディアは、パーソナルコンピュータ２０における、コンピュータ命令、データ構造、プログラムモジュール及び別のデータを記憶するために、電力的に独立しているモジュールである。
【００３８】
本開示は、ハードディスク２７、リムーバブル磁気ディスク２９及びリムーバブル光学ディスク３１を使用するシステムの実装を提供するが、別のタイプのコンピュータ情報媒体５６の採用が可能であることが理解されるべきであり、それは、コンピュータによって読み取り可能な形式でデータを格納することができるもの（半導体ドライブ、フラッシュメモリカード、デジタルディスク、ランダムアクセスメモリ（ＲＡＭ）など）であり、それは、コントローラ５５を介してシステムバス２３に接続されている。
【００３９】
コンピュータ20は、ファイルシステム36（記録されるシステム35はここに保持される）、さらに、追加プログラム・アプリケーション37、他のプログラムモジュール38及びプログラムデータ39を備える。ユーザは、入力デバイス（キーボード40、マウス42）を用いて、パーソナルコンピュータ20にコマンドと情報を入力することが可能である。他の入力デバイス（図示せず）は、マイクロフォン、ジョイスティック、ゲームコントローラ、スキャナ、等を用いることができる。そのような入力デバイスは、通常コンピュータシステム20に、シリアルポート46を介して、接続され、それは、順に、システムバスに接続されるが、それらは、他の方法で、例えば、パラレルポート、ゲームポート及びユニバーサルシリアルバス（USB）の助けを借りて、接続される。モニター47又は他の種類のディスプレイデバイスも、ビデオアダプター48等のインターフェースを介してシステムバス23に接続される。モニター47に加えて、パーソナルコンピュータは、ラウドスピーカー、プリンタ等他の周辺外部デバイス（図示せず）に備えてもよい。
【００４０】
パーソナルコンピュータ20は、1つ又は複数のリモートコンピュータ49とのネットワーク接続を用いて、ネットワーク環境で操作できる。リモートコンピュータ（またはコンピュータ）49も、図３に示すように、前述の要素（パーソナルコンピュータ20の特質を説明したもの）の大部分又は全てを有するパーソナルコンピュータ又はサーバである。他のデバイスも、ルータ、ネットワーク局、ピアデバイス又は他のネットワークノード等、コンピュータネットワークに存在してもよい。
【００４１】
ネットワーク接続は、ローカル・エリア・コンピュータ・ネットワーク（LAN）50、及びワイドエリア・コンピュータ・ネットワーク（WAN）を形成することができる。そのようなネットワークは、企業コンピュータネットワーク又は社内ネットワークで使用され、それらは、概してインターネットアクセスを有している。LAN又はWANネットワークで、パーソナルコンピュータ20は、ネットワークアダプター又はネットワークインターフェース51を介して、ローカル・エリア・ネットワーク50に接続される。ネットワークが用いられる場合、パーソナルコンピュータ20は、インターネット等のワイド・エリア・ネットワークでのコミュニケーションを提供するために、モデム54又は他のモジュールを採用する。モデム54は、内部的又は外部的デバイスであり、シリアルポート46によって、システムバス23と接続される。ネットワーク接続は、一例であり、ネットワークの正確な構成を示す必要はないことを留意されたい。すなわち、実際には、技術的な通信モジュールによる、あるコンピュータと他のコンピュータとの接続を確立する他の方法がある。
【００４２】
様々な態様において、本明細書で説明するシステム及び方法は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの任意の組み合わせで実現されてもよい。ソフトウェアで実装される場合、本方法は、非一時的なコンピュータ可読媒体の1つ又は複数の命令又はコードとして格納されてもよい。コンピュータ可読媒体は、データ記憶装置を含む。例として、限定するものではないが、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROM、フラッシュメモリ、又は、電気的、磁気的、又は他の種類の光学記憶媒体を備えてもよい。それは、命令又はデータ構造の形式で、所望のプログラムコードを搬送又は格納されてもよく、且つ、汎用コンピュータのプロセッサにアクセスできる。
【００４３】
様々な側面で、本開示に記載されたシステム及び方法はモジュールの観点から理解することが可能である。本明細書で使用される用語"モジュール"は、特定用途向け集積回路（ASIC）又はフィールド・プログラマブル・ゲート・アレイ（FPGA）（例えば、ハードウェアとソフトウェアの組み合わせ）などによって、ハードウェアを用いて実装される、実世界のデバイス、構成要素、又は構成要素の配置を意味している。例えば、マイクロプロセッサシステム及びジュールの機能を実装するための命令セットによって、それは、（実行時）マイクロプロセッサシステムを専用機に変換する。モジュールも、これらの組み合わせとして実装されてもよく、ハードウェア単体で容易である特定の機能で、及び、ハードウェアとソフトウェアの組み合わせによって容易である他の機能で実装されてもよい。ある実施態様で、モジュールの少なくとも一部、及び、場合によっては、全てが、汎用コンピュータ（上記、図５により詳細に説明したもの等）のプロセッサで実行することができる。したがって、各モジュールは、様々な適切である構成で実現することができ、本明細書において例示される任意の特定の実装に限定されるものではない。
【００４４】
明瞭にするために、本態様における繰り返される機能の全てが、本明細書に開示されるわけではない。本開示の任意で実際の実装における開発で、多数の実装固有の決定が、開発者の特定の目標を達成するために、成されなければならないことが理解されるであろう。これらの具体的な目標は、実装及び開発者ごとに変化するであろう。そのような開発努力は複雑で時間がかかるかもしれないことが、それにもかかわらず、本開示の利益を有する当業者にとっては、エンジニアにとっては日常の仕事であることが、理解されるであろう。
【００４５】
さらに、本明細書で使用される表現又は用語は、説明の目的のためであり、制限を目的としていないことを理解すべきである。本明細書の用語又は表現は、関連技術での熟練の知識と組み合わせて、本明細書に提示される教示及び指針に照らして当業者によって解釈されるべきである。さらに、明示的記載がない限り、本明細書又は特許請求の範囲における任意の用語に対して、一般的でない又は特別な意味を帰することは意図されていない。
【００４６】
本明細書に開示される様々な態様は、例示により本明細書に言及される既知のモジュールに、現在及び将来の既知の均等物を包含する。さらに、態様及び用途を図示し、且つ、説明してきたが、本明細書に開示された発明の概念から逸脱することなく、上述したよりも多くの改変が可能であることは、この開示の利益を有する当業者には明らかであろう。
【図１】
0006282305.tif 000002
【図２】
0006282305.tif 000003
【図３】
0006282305.tif 000004
【図４】
0006282305.tif 000005
【図５】
0006282305.tif 000006