(57)【特許請求の範囲】
【請求項１】
プロセッサと、
前記プロセッサに結合されたメモリと、
前記メモリ上のセキュリティで保護されていない信頼されていない環境と、
前記信頼されていない環境と接続され、前記信頼されていない環境にとってアクセスできない前記メモリ上のセキュリティで保護された信頼された環境と、
前記信頼されていない環境において実行される前記プロセッサ上の少なくとも１つのアプリケーション、拡張、またはコンポーネントを監視する、前記信頼された環境において実行される前記プロセッサ上の複数の監視エージェントであって、各監視エージェントは、前記信頼されていない環境におけるアプリケーションに関連付けられ、攻撃および不整合に関して関連付けられたアプリケーションを監視する、監視エージェントと、
前記信頼されていない環境を監視する前記信頼された環境において実行される前記プロセッサ上の少なくとも１つの基本監視エージェントと
を備え、前記プロセッサがブートされると、各監視エージェントが、前記信頼されていない環境のイベントを検出し、検出されたイベントを前記基本監視エージェントに通知することよって信頼された環境の信頼性を信頼されていない環境に投影して、前記基本監視エージェントが、前記監視エージェントにより報告された信頼されていない環境のイベントを承認するか、または承認しないことを特徴とするシステム。
【請求項２】
各監視エージェントは、該監視エージェントが関連付けられたアプリケーションの一部分を含むことを特徴とする請求項１に記載のシステム。
【請求項３】
各監視エージェントは、前記関連付けられたアプリケーションに対する脅威を標的にするためのプログラム可能なレベルの検査を有することを特徴とする請求項１に記載のシステム。
【請求項４】
各監視エージェントは、キーボード操作を暗号化することによるセキュリティで保護された入力を受け取り、前記セキュリティで保護された入力を前記関連付けられたアプリケーションに転送することを特徴とする請求項１に記載のシステム。
【請求項５】
前記監視エージェントの少なくとも１つは、前記信頼された環境において実行されるアプリケーションエージェントを監視することを特徴とする請求項１に記載のシステム。
【請求項６】
前記信頼された環境において実行される前記プロセッサ上の別の監視エージェントをさらに備え、該監視エージェントは、互いに通信していることを特徴とする請求項１に記載のシステム。
【請求項７】
前記基本監視エージェントは、前記信頼されていない環境における不整合を検出することを特徴とする請求項１に記載のシステム。
【請求項８】
前記信頼されていない環境において実行されるアプリケーションにおける不整合を検出する前記プロセッサ上の複数の監視エージェントをさらに備えたことを特徴とする請求項７に記載のシステム。
【請求項９】
前記信頼された環境において実行されるアプリケーションにおける不整合を検出する前記プロセッサ上の追加の監視エージェントをさらに備えたことを特徴とする請求項８に記載のシステム。
【請求項１０】
前記少なくとも１つの基本監視エージェントは、さらに入力を受け取るためのキーボード操作を暗号化することによるセキュリティで保護された入力を備え、該基本監視エージェントは、前記受け取られた入力に基づいて信頼されていない環境イベントを承認するか、または承認しないことを特徴とする請求項９に記載のシステム。
【請求項１１】
前記基本監視エージェントの少なくとも１つは、キーボード操作を暗号化することによるセキュリティで保護された入力を介して承認を受け取ることなしに、前記信頼されていない環境に対する変更を許可することを拒否することを特徴とする請求項１に記載のシステム。
【請求項１２】
前記基本監視エージェントの少なくとも１つは、変更が承認されたパーティによって署名されたパッケージによって記述されていない限り、前記信頼されていない環境に対する変更を許可することを拒否することを特徴とする請求項１に記載のシステム。
【請求項１３】
前記信頼されていない環境において実行される少なくとも１つのアプリケーション、拡張、またはコンポーネントを監視する前記信頼された環境において実行される前記プロセッサ上の監視エージェントをさらに備え、該監視エージェントは、密封されたストレージを使用して、前記信頼されていない環境の中に常駐するオペレーティングシステムまたはアプリケーションに関する秘密を保持することを特徴とする請求項１に記載のシステム。
【請求項１４】
前記監視エージェントは、前記オペレーティングシステムまたは前記アプリケーションが、前記秘密の所有者に合致するダイジェストを有さない限り、前記オペレーティングシステムまたは前記アプリケーションに前記秘密を明らかにすることを拒否することを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記監視エージェントは、前記オペレーティングシステムまたは前記アプリケーションが、前記秘密を読み取ることができるダイジェストのリスト上に存在しない限り、前記オペレーティングシステムまたは前記アプリケーションに前記秘密を明らかにすることを拒否することを特徴とする請求項１３に記載のシステム。
【請求項１６】
前記監視エージェントは、正当なエンティティが前記秘密を要求しているかどうかを判定する所定の試験を使用することを特徴とする請求項１３に記載のシステム。
【請求項１７】
前記所定の試験は、前記エンティティのスタックを検査し、前記スタックが正当なスタック内容を有することを確認することを含むことを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記信頼されていない環境において実行される少なくとも１つのアプリケーション、拡張、またはコンポーネントを監視する前記信頼された環境において実行される前記プロセッサ上の監視エージェントをさらに備え、該監視エージェントは、前記信頼されていない環境の状態を編集して、該信頼されていない環境をセキュリティで保護されているようにするか、または別の形で許容できるようにすることを特徴とする請求項１に記載のシステム。
【請求項１９】
前記状態は、初期構成またはエラー報告オプションを備えたことを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記基本監視エージェントは、前記信頼されていない環境の既知の良好な構成、または前記信頼された環境に属さない物理メモリをゼロにすることを特徴とする請求項１に記載のシステム。
【請求項２１】
前記信頼されていない環境は、基本入出力システム（ＢＩＯＳ）、ファームウェア、またはローダを備えたことを特徴とする請求項１に記載のシステム。
【請求項２２】
ブート時に前記基本監視エージェントを実行するためのネクサスをさらに備えたことを特徴とする請求項１に記載のシステム。
【請求項２３】
前記基本監視エージェントが実行されるべきかどうかを判定するのに使用される前記信頼された環境におけるカウンタをさらに備えたことを特徴とする請求項１に記載のシステム。
【請求項２４】
前記カウンタは、信頼されていないメモリ編集動作の回数をカウントすることを特徴とする請求項２３に記載のシステム。
【請求項２５】
メモリ上のセキュリティで保護されていない信頼されていない環境を監視する方法であって、
前記信頼されていない環境および前記信頼されていない環境において実行されるオペレーティングシステムを処理装置が提供すること、
前記メモリ上の保護された信頼された環境と前記信頼されていない環境とを前記処理装置が接続すること、
前記信頼された環境において実行される複数の監視エージェントを前記処理装置が提供すること、
前記複数の監視エージェントの少なくとも１つを、前記信頼されていない環境において実行される少なくとも１つのアプリケーション、拡張、またはコンポーネントに前記処理装置が関連付けること、
前記複数の監視エージェントの少なくとも１つを使用して前記少なくとも１つのアプリケーション、拡張、またはコンポーネントを前記処理装置が監視すること、
前記信頼された環境において実行される少なくとも１つの基本監視エージェントを前記処理装置が提供すること、
前記少なくとも１つの基本監視エージェントを前記オペレーティングシステムに前記処理装置が関連付けること、
ブート時に前記基本監視エージェントを実行するためのネクサスを前記処理装置が提供すること、
前記監視エージェントを前記基本監視エージェントに前記処理装置がバインドして、前記監視エージェントを前記ネクサスにバインドすること、
前記複数の監視エージェントの少なくとも１つを使用して攻撃および不整合に関して前記信頼されていない環境およびオペレーティングシステムを前記処理装置が監視して、前記信頼されていない環境およびオペレーティングシステムのイベントを検出し前記基本監視エージェントに通知することよって信頼された環境の信頼性を信頼されていない環境に投影すること、および、
前記基本監視エージェントを使用して前記監視エージェントにより報告された信頼されていない環境およびオペレーティングシステムのイベントを前記処理装置が承認するか、または承認しないこと
を備えたことを特徴とする方法。
【請求項２６】
各監視エージェントをアプリケーションに前記処理装置が関連付けること、および、
攻撃および不整合に関してそれぞれの関連付けられたアプリケーションを前記処理装置が監視すること
をさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項２７】
アプリケーションを前記監視エージェントの１つに前記処理装置が関連付け、前記アプリケーションの一部分を前記監視エージェントに転送して、前記一部分が前記信頼された環境の中に常駐するようにすることをさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項２８】
アプリケーションを前記監視エージェントに前記処理装置が関連付け、前記関連付けられたアプリケーションに対する脅威を標的にするためのプログラム可能なレベルの検査を有する監視エージェントを提供することをさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項２９】
アプリケーションを前記監視エージェントに前記処理装置が関連付けること、
前記監視エージェントにおいてキーボード操作を暗号化することによるセキュリティで保護された入力を前記処理装置が受け取ること、
前記セキュリティで保護された入力を前記アプリケーションに前記処理装置が転送すること
をさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項３０】
前記監視エージェントは、互いに通信していることを特徴とする請求項２５に記載の方法。
【請求項３１】
前記基本監視エージェントが、キーボード操作を暗号化することによるセキュリティで保護された入力から入力を受け取ることをさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項３２】
前記基本監視エージェントが、キーボード操作を暗号化することによるセキュリティで保護された入力を介して承認を受け取ることなしに、前記信頼されていない環境に対する変更を許可することを拒否することをさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項３３】
前記基本監視エージェントは、変更が承認されたパーティによって署名されたパッケージによって記述されていない限り、前記信頼されていない環境に対する該変更を許可することを拒否することをさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項３４】
前記監視エージェントの１つが、密封されたストレージを使用して、前記信頼されていない環境の中に常駐するオペレーティングシステムまたはアプリケーションに関する秘密を保持することをさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項３５】
前記監視エージェントは、前記オペレーティングシステムまたは前記アプリケーションが、前記秘密の所有者に合致するダイジェストを有さない限り、前記オペレーティングシステムまたは前記アプリケーションに前記秘密を明らかにすることを拒否することを特徴とする請求項３４に記載の方法。
【請求項３６】
前記監視エージェントは、前記オペレーティングシステムまたは前記アプリケーションが、前記秘密を読み取ることができるダイジェストのリスト上に存在しない限り、前記オペレーティングシステムまたは前記アプリケーションに前記秘密を明らかにすることを拒否することを特徴とする請求項３４に記載の方法。
【請求項３７】
正当なエンティティが前記秘密を要求しているかどうかを判定する所定の試験を前記処理装置が使用することをさらに備えたことを特徴とする請求項３４に記載の方法。
【請求項３８】
前記所定の試験は、前記エンティティのスタックを検査し、前記スタックが正当なスタック内容を有することを確認することを備えたことを特徴とする請求項３７に記載の方法。
【請求項３９】
前記監視エージェントの１つが、前記信頼されていない環境の状態を編集して、該信頼されていない環境をセキュリティで保護されているようにするか、または別の形で許容できるようにすることをさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項４０】
前記状態は、初期構成またはエラー報告オプションを備えたことを特徴とする請求項３９に記載の方法。
【請求項４１】
前記基本監視エージェントが、前記信頼されていない環境の既知の良好な構成、または前記信頼された環境に属さない物理メモリをゼロにすることをさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項４２】
前記信頼されていない環境は、基本入出力システム（ＢＩＯＳ）、ファームウェア、またはローダを備えたことを特徴とする請求項２５に記載の方法。
【請求項４３】
カウンタに応答して前記基本監視エージェントが実行されるべきかどうかを前記処理装置が判定することをさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項４４】
前記カウンタは、信頼されていないメモリ編集動作の回数をカウントすることを特徴とする請求項４３に記載の方法。
【請求項４５】
前記信頼されていない環境において実行されるアプリケーションにおける不整合を検出する複数の監視エージェントを前記処理装置が提供することをさらに備えたことを特徴とする請求項２５に記載の方法。
【請求項４６】
前記信頼された環境において実行されるアプリケーションにおける不整合を検出する追加の監視エージェントを前記処理装置が提供することをさらに備えたことを特徴とする請求項４５に記載の方法。
【請求項４７】
プロセッサと、
前記プロセッサに結合されたメモリと、
オペレーティングシステム、ファームウェア、および基本入出力システム（ＢＩＯＳ）の少なくとも１つを有する、前記メモリ上のセキュリティで保護された信頼された環境と、
前記メモリ上のセキュリティで保護されていない信頼されていない環境と、
前記オペレーティングシステム、前記ファームウェア、および前記ＢＩＯＳの１つと関連付けられ、前記信頼されていない環境において実行される前記プロセッサ上のアプリケーションに関連付けられ、前記信頼された環境において実行される前記プロセッサ上の少なくとも１つの監視エージェントと、
前記信頼された環境において実行される前記プロセッサ上のネクサスと、
前記信頼されていない環境を監視する前記信頼された環境において実行される前記プロセッサ上の少なくとも１つの基本監視エージェントと
を備え、前記プロセッサがブートされると、各監視エージェントが、前記信頼されていない環境のイベントを検出し、検出されたイベントを前記基本監視エージェントに通知することよって信頼された環境の信頼性を信頼されていない環境に投影して、前記基本監視エージェントが、前記ネクサスにバインドされるか、リンクされるか、またはコンパイルされて、前記監視エージェントにより報告された信頼されていない環境のイベントを承認するか、または承認しないことを特徴とするシステム。
【請求項４８】
前記少なくとも１つの監視エージェントは、前記オペレーティングシステム、前記ファームウェア、および前記ＢＩＯＳの１つと関連付けられ、前記信頼されていない環境において実行されるアプリケーションに関連付けられた能力を有する複数の監視エージェントを備えたことを特徴とする請求項４７に記載のシステム。
【請求項４９】
前記信頼された環境は、第１のプロセッサアーキテクチャを実行し、前記信頼されていない環境は、第２のプロセッサアーキテクチャを実行し、
前記第１のプロセッサアーキテクチャ上で実行される基本監視エージェントをさらに備えたことを特徴とする請求項４７に記載のシステム。
【請求項５０】
前記信頼された環境と前記信頼されていない環境とは、同一のプロセッサ上で実行され、
前記信頼された環境において実行される前記同一のプロセッサ上の基本監視エージェントをさらに備えたことを特徴とする請求項４７に記載のシステム。
【請求項５１】
前記信頼された環境は、第１のプロセッサ上で実行され、前記信頼されていない環境は、第２のプロセッサ上で実行され、前記第１のプロセッサおよび前記第２のプロセッサは、信頼されたモードまたは信頼されていないモードで実行されることを特徴とする請求項４７に記載のシステム。
【請求項５２】
前記信頼された環境の中に常駐する前記プロセッサ上のネクサスおよび基本監視エージェントをさらに備え、該基本監視エージェントは、該ネクサス上で実行されるユーザモードプロセッサであることを特徴とする請求項４７に記載のシステム。
【請求項５３】
前記信頼された環境の中に常駐し、前記信頼されていない環境のオペレーティングシステムと同じ構築環境または関連する構築環境により、該構築環境を使用して、および該構築環境の中で開発された前記プロセッサ上の基本監視エージェントをさらに備えたことを特徴とする請求項４７に記載のシステム。
【請求項５４】
セキュリティ評価のための信頼されたコンピューティングベースの一部である前記信頼された環境の中に常駐する前記プロセッサ上の基本監視エージェントをさらに備えたことを特徴とする請求項４７に記載のシステム。
【請求項５５】
前記信頼された環境の中に第１の部分が常駐し、物理的に遠隔のマシン上に第２の部分が常駐し、前記第１の部分と前記第２の部分がセキュリティで保護されたリンクで接続されている前記プロセッサ上の基本監視エージェントをさらに備えたことを特徴とする請求項４７に記載のシステム。
【請求項５６】
プロセッサと、
前記プロセッサに結合されたメモリと、
前記メモリ上のセキュリティで保護されていない信頼されていない環境と、
前記信頼されていない環境において実行される前記プロセッサ上のオペレーティングシステムと、
前記信頼されていない環境において実行される前記プロセッサ上のアプリケーションと、
前記信頼されていない環境にとってアクセスできない前記メモリの一部分のセキュリティで保護された信頼された環境と、
前記信頼された環境において実行される前記プロセッサ上の監視エージェントと、
前記オペレーティングシステムに関連付けられ、前記監視エージェントおよび前記信頼されていない環境を監視する、前記信頼された環境において実行される前記プロセッサ上の基本監視エージェントと
を備え、前記監視エージェントが、仮想マシン監視エージェントであり、前記プロセッサがブートされると、前記信頼されていない環境のイベントを検出し、検出されたイベントを前記基本監視エージェントに通知することよって信頼された環境の信頼性の投影を前記信頼されていない環境において実行される前記プロセッサ上のアプリケーションに提供して、前記基本監視エージェントが、前記監視エージェントにより報告された信頼されていない環境のイベントを承認するか、または承認しないことを特徴とするシステム。
【請求項５７】
前記基本監視エージェントは、仮想マシン基本監視エージェントであり、前記仮想マシン基本監視エージェントの中にオペレーティングシステムイメージを投影することを特徴とする請求項５６に記載のシステム。
【請求項５８】
前記仮想マシン監視エージェントに関連付けられたアプリケーションをさらに備え、前記基本監視エージェントは、仮想マシン基本監視エージェントであり、前記アプリケーションに対する投影を提供することを特徴とする請求項５６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータセキュリティの分野に関する。より詳細には、本発明は、単一のコンピューティングデバイス上の複数の実行環境（例えば、オペレーティングシステム）の使用に関し、そのようなオペレーティングシステムまたは環境の信頼性をサポートする技術を提供する。
【背景技術】
【０００２】
最初のコンピュータは、一度に１つのプログラムだけしか実行することができなかった。しかし、最近では、コンピュータは、一度にいくつかの異なるソフトウェアの部分を実行できることが見込まれている。例えば、典型的なマルチタスキングオペレーティングシステムは、単一のマシン上で一度にいくつかのアプリケーションプログラムを実行することができる。そのこと、ならびに共有のオープンネットワーク（例えば、インターネット）の発展に鑑みて、セキュリティおよびプライバシーが、コンピュータ業界が直面する２つの重要で困難な問題となっている。パーソナルコンピュータが自宅、職場、および学校でより中心的になるにつれ、消費者もビジネス顧客も同様に、プライバシー問題およびセキュリティ問題をますます意識するようになっている。デジタル情報の整合性、およびコンピュータユーザのプライバシーを保護するソフトウェアおよびハードウェアの能力を向上させることが、ソフトウェア開発者とハードウェア製造業者の両方に重要な関心の的となっている。ワシントン州リッチモンド市のマイクロソフトコーポレーションが、オペレーティングシステムにおけるセキュリティおよびプライバシーを提供するNext-Generation Secure Computing Base（ＮＧＳＣＢ）パーソナルコンピュータプラットフォームを商品化している。
【０００３】
図２に示すコンピュータ１１０内部の従来のＮＧＳＣＢにおいて、「右手側」（ＲＨＳ）セキュリティシステムが、従来の「左手側」（ＬＨＳ）システムおよび中央処理装置（ＣＰＵ）と連携して機能する。ＲＨＳは、オペレーティングシステムがオープンであることを保ちながら、悪意のあるソフトウェアから保護するように設計されている。ＮＧＳＣＢを使用すると、アプリケーションは、ソフトウェアによる改ざんおよび干渉に対して強い耐性のある保護されたメモリ空間内で実行される。典型的には、ＬＨＳとＲＨＳがともに使用する１つのチップセットがコンピュータ１１０内部に存在する。ＬＨＳおよびＲＨＳは、コンピュータ１１０の論理上の、ただし、物理的に実施される部分またはパーティションである。
【０００４】
ＬＨＳは、Microsoft（登録商標）Word（登録商標）やMicrosoft（登録商標）Excel（登録商標）のような従来のアプリケーション２０５、２１０、ならびにMicrosoft（登録商標）Windows（登録商標）オペレーティングシステムのような従来のオペレーティングシステム２０１を含む。２つのアプリケーションを図示しているが、通常、任意の数を実装することができる。
【０００５】
ＲＨＳは、信頼されたエージェント２５５、２６０、ならびに「ネクサス」２５１を含む。ネクサスは、その動作に関してあるレベルの保証を提供し、ＲＨＳ上のすべてのカーネルモードコードを含むことができる「高保証」オペレーティングシステムである。例えば、ネクサスを、秘密情報（例えば、暗号化キー）を扱うように使用することができる。秘密情報は、ネクサス外部の世界に情報を漏らさないことが保証される仕切られたメモリを提供すること、およびある認定されたアプリケーションだけがネクサスの下で実行され、仕切られたメモリにアクセスすることを許すことにより、漏らされてはならない。ネクサス２５１は、メインオペレーティングシステム２０１で生じているイベントが、ネクサス２５１の動作を危うくする何らかの方法で、メインオペレーティングシステム２０１と対話してはならない。ネクサス２５１は、すべてのアプリケーションの実行を許可することができ、またはマシン所有者が、ネクサス２５１によってあるエージェントだけが実行を許されるマシンポリシーを構成してもよい。つまり、ネクサス２５１は、マシン所有者がネクサス２５１に実行するように指示するいずれのエージェントも実行する。マシン所有者は、何を実行すべきでないかもネクサスに指示する。
【０００６】
ネクサス２５１は、信頼されたエージェント２５５、２６０を隔離し、信頼されたエージェント２５５、２６０との通信を管理し、格納済みデータ（例えば、ハードディスクドライブの中に格納された）を暗号で密封する。より詳細には、ネクサス２５１は、信頼された空間内においてカーネルモードで実行され、信頼されたエージェントおよびその他のアプリケーションと通信するためのプロセス機構の確立などの基本サービスを信頼されたエージェント２５５、２６０に提供し、ハードウェア／ソフトウェアのプラットフォームまたは実行環境の証明や、秘密の密封および密封解除などの特殊信頼サービスを提供する。証明は、データの一部にデジタル署名しまたは別の形で証明し、そのデータが偽造不能な暗号識別されたソフトウェアスタックによって構成されていることを受取人にさらに保証するコードの一部の能力である。
【０００７】
信頼されたエージェントは、プログラム、プログラムの一部、または信頼された空間内においてユーザモードで実行されるサービスである。信頼されたエージェント２５５、２６０は、セキュリティ関連サービス、ならびにメモリ管理などの重要な一般的サービスについてネクサス２５１を呼び出す。信頼されたエージェントは、密封されたストレージを使用して秘密を格納し、ネクサスの証明サービスを使用して自らを認証することができる。それぞれの信頼されたエージェントまたはエンティティは、独自の信頼ドメインを制御し、互いを頼る必要がない。
【０００８】
ＲＨＳは、公開キー基盤（ＰＫＩ）キーペアならびに暗号化関数を使用してセキュリティで保護された状態を提供するセキュリティサポートコンポーネント（ＳＳＣ）２５３をさらに含む。
【０００９】
ＮＧＳＣＢは、「証明」、「密封されたストレージ」、および「強力なプロセス隔離（strong process isolation）」などの機能を提供する。証明は、コンピュータが実際に自称するとおりのコンピュータであり、実行していると自ら主張しているソフトウェアを実行していることを他のコンピュータに知らせる。ＮＧＳＣＢのソフトウェアおよびハードウェアが、ユーザ、ならびに他のコンピュータ、プログラム、およびサービスに暗号確認可能なので、システムは、他のコンピュータおよびプロセスが信頼できることを確認してから、そのコンピュータおよびプロセスを関与させる、または情報を共有することができる。従って、証明により、ユーザは、動作環境の選択された特性を外部要求者に明らかにすることができる。
【００１０】
密封されたストレージにより、ユーザは、信頼できるアプリケーションだけが情報にアクセスすることができるように情報を暗号化することができる。信頼できるアプリケーションには、最初に情報を作成したアプリケーションだけが含まれることも、またはデータを所有するアプリケーションによって信頼される任意のアプリケーションが含まれることも可能である。従って、密封されたストレージにより、プログラムは、ウイルスまたはトロイの木馬などの信頼されていないプログラムが取り出すことができない秘密を格納することができる。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
強力なプロセス隔離は、セキュリティで保護された領域（ＲＨＳ）を切り開くことによって信頼された空間を提供する。ＲＨＳ上で実行される動作は、ＬＨＳから保護されて隔離され、これにより、動作は、攻撃から大幅により強力なセキュリティで保護される。
【００１２】
ＮＧＳＣＢは、セキュリティで保護された入力および出力も提供する。ＮＧＳＣＢを使用すると、キーボード操作は、暗号化されてからでないと、ＲＨＳに到達した後、ソフトウェアによって読み取られ、解読されない。これは、悪意のあるソフトウェアを使用してキーボード操作を記録する、盗む、または変更することができないことを意味する。セキュリティで保護された出力も同様である。画面上に現れる情報を、他の誰も傍受して読むことができないようにユーザに提示することができる。総合すると、以上により、ユーザは、自身のコンピュータ内部のソフトウェアが、行うべきことを行っていることを高い信頼度で知ることができる。
【００１３】
ＲＨＳが利用できる相当な信頼リソースにもかかわらず、ＬＨＳは、信頼されないままである。本発明は、現在の信頼できるコンピューティングシステムのこの欠点、およびその他の欠点に対処する。
【課題を解決するための手段】
【００１４】
本発明は、信頼された環境におけるエンティティの信頼性を信頼されていない環境におけるエンティティに投影するための機構を提供する。
【００１５】
信頼されていない環境および信頼された環境が提供されるシステムおよび方法を説明する。基本監視エージェントが、信頼された環境において実行される。基本監視エージェントは、信頼されていない環境を監視する。
【００１６】
一実施形態によれば、監視エージェントは、アプリケーションに関連し、監視エージェントは、攻撃を示す可能性があるイベントまたは動作について関連付けられたアプリケーションを監視する。監視エージェントの信頼された性質により、それらのイベント／動作が信頼できる形で検出され、報告されることが可能になり、信頼された環境の信頼性が信頼されていない環境に投影される。基本監視エージェントは、監視エージェントに報告される、または検出される信頼されていない環境のイベントを承認する、禁止する、または変更することができる。例えば、ＧＤＴ（グローバル記述子テーブル）を移動しようとする試みをハードウェアがネクサスに報告し、次に、ネクサスが、それを基本監視エージェントに報告するようなケースをカバーするように報告される。検出は、例えば、基本監視エージェント（ＯＳ用の）または監視エージェント（何らかのアプリケーション用の）が、信頼されていないアプリケーションのメモリをスキャンすることによって問題を検出するケースである。
【００１７】
別の実施形態では、基本監視エージェントは、セキュリティで保護された入力から受け取られた入力に応答する。例えば、基本監視エージェントは、セキュリティで保護された入力を介して承認を受け取ることなしには、信頼されていない環境に対する変更を拒否することができる。別の例として、基本監視エージェントは、変更が、承認済みのパーティによって署名されたパッケージによって記述されていない限り、信頼されていない環境に対する変更を許すことを拒否することができる。
【００１８】
さらに別の実施形態では、監視エージェントは、密封されたストレージを使用して、信頼されていない環境の中に存在するオペレーティングシステムまたはアプリケーションに関する秘密を保持する。監視エージェントは、オペレーティングシステムまたはアプリケーションが、秘密の所有者に合致するダイジェストを有さない限り、オペレーティングシステムまたはアプリケーションに秘密を明らかにすることを拒否することができる。代替として、監視エージェントは、オペレーティングシステムまたはアプリケーションが、秘密を読み取ることができるダイジェストのリスト上に存在しない限り、オペレーティングシステムまたはアプリケーションに秘密を明らかにすることを拒否することができる。
【００１９】
他の特徴によれば、監視エージェントは、正当なエンティティが秘密を要求しているかどうかを判定する試験を使用する。そのような試験の１つは、エンティティのスタックを検査し、スタックが正当なスタック内容を有することを確認することを含む。さらに、監視エージェントは、信頼されていない環境の状態を編集して、その状態がセキュリティで保護されているようにするか、または別の形で許容できるようにすることができる。状態は、初期構成またはエラー報告オプションを含むことができる。
【００２０】
本発明のさらなる特徴および利点は、添付の図面を参照して行われる例示的な実施形態の以下の詳細な説明から明白になる。
【００２１】
以上の概要、ならびに好ましい実施形態の以下の詳細な説明は、添付の図面と併せて読むことで、よりよく理解される。本発明を例示するため、本発明の典型的な構成を図面に示しているが、本発明は、開示する特定の方法および手段
【発明を実施するための最良の形態】
【００２２】
（概要）
信頼されていない環境で実行されるエンティティと信頼された環境で実行されるエンティティとを有する単一のマシンにおいて、本発明は、信頼された環境におけるエンティティの信頼性を信頼されていない環境におけるエンティティに投影するための機構を提供する。本発明は、第１の実行環境（例えば、オペレーティングシステム）が第２の実行環境をホストする際に使用される機構を対象とする。本発明は、通常のオペレーティングシステム（例えば、Windows（登録商標）オペレーティングシステム）がセキュリティで保護されたオペレーティングシステム（例えば、ネクサス）をホストするMicrosoft（登録商標）のNext-Generation Secure Computing Base（ＮＧＳＣＢ）のような状況に適用される。第２の環境が自らの信頼性を第１の環境に投影することを可能にする様々な機構を説明する。
【００２３】
（例示的なコンピューティング環境）
図１は、本発明の態様を実装することができる適切なコンピューティングシステム環境１００の例を示している。コンピューティングシステム環境１００は、適切なコンピューティング環境の一例に過ぎず、本発明の用途または機能の範囲に関して何ら限定を示唆するものではない。また、コンピューティング環境１００が、典型的な動作環境１００に示したコンポーネントのいずれか１つ、またはいずれかの組合せに関連する依存関係または要件を有するものと解釈してはならない。
【００２４】
本発明は、多数の他の汎用、または専用のコンピューティングシステム環境またはコンピューティングシステム構成で機能する。本発明で使用するのに適する可能性がある周知のコンピューティングシステム、コンピューティング環境、および／またはコンピューティング構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドデバイスまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、モバイル電話機、プログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、以上のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれるが、以上には限定されない。
【００２５】
本発明は、コンピュータによって実行されている、プログラムモジュールなどのコンピュータ実行可能命令の一般的な文脈で説明することができる。一般に、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本発明は、通信ネットワークまたは他のデータ伝送メディアを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境において実施してもよい。分散コンピューティング環境において、プログラムモジュールおよびその他のデータを、メモリ記憶装置を含むローカルコンピュータ記憶メディアとリモートコンピュータ記憶メディアの両方の中に配置することができる。
【００２６】
図１を参照すると、本発明を実装するための典型的なシステムは、コンピュータ１１０の形態で汎用コンピューティングデバイスを含む。コンピュータ１１０のコンポーネントは、処理装置１２０、システムメモリ１３０、ならびにシステムメモリから処理装置１２０までを含む様々なシステムコンポーネントを結合するシステムバス１２１を含むことができるが、以上には限定されない。システムバス１２１は、様々なバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含め、いくつかの種類のバス構造のいずれかである。例として、限定としてではなく、そのようなアーキテクチャは、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカルバス、および（メザニンバスとしても知られる）ＰＣＩ（Peripheral Component Interconnects）バスを含む。
【００２７】
コンピュータ１１０は、通常、様々なコンピュータ読取り可能メディアを含む。コンピュータ読取り可能メディアは、コンピュータ１１０がアクセスすることができる任意の利用可能なメディアであることができ、揮発性メディアと不揮発性メディア、取り外し可能メディアと取り外し不能メディアがともに含まれる。例として、限定としてではなく、コンピュータ読取り可能メディアは、コンピュータ記憶メディアおよび通信メディアを含むことができる。コンピュータ記憶メディアは、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するために任意の方法または技術で実装された揮発性メディアと不揮発性メディア、取り外し可能メディアと取り外し不能メディアをともに含む。コンピュータ記憶メディアは、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは所望の情報を格納するのに使用することができ、コンピュータ１１０がアクセスすることができる任意の他のメディアを含むが、以上には限定されない。通信メディアは、通常、搬送波などの変調されたデータ信号、または他のトランスポート機構でコンピュータ読取り可能命令、データ構造、プログラムモジュール、またはその他のデータを実体化し、あらゆる情報配信メディアが含まれる。「変調されたデータ信号」という用語は、信号内に情報をエンコードするような形で特徴の１または複数が設定または変更されている信号を意味する。例として、限定としてではなく、通信メディアは、有線ネットワークまたは直接有線接続などの有線メディア、ならびに音響メディア、ＲＦメディア、赤外線メディア、およびその他の無線メディアなどの無線メディアを含む。また、前述したメディアのいずれかの組合せも、コンピュータ読取り可能メディアの範囲に含まれるべきものである。
【００２８】
システムメモリ１３０は、ＲＯＭ１３１やＲＡＭ１３２などの揮発性メモリおよび／または不揮発性メモリの形態でコンピュータ記憶メディアを含む。始動中などにコンピュータ１１０内部の要素間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム１３３（ＢＩＯＳ）が、典型的には、ＲＯＭ１３１の中に記憶されている。ＲＡＭ１３２は、典型的には、処理ユニット１２０が即時にアクセスすることができ、および／または処理ユニット１２０によって現在、処理されているデータおよび／またはプログラムモジュールを含む。例として、限定としてではなく、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示している。
【００２９】
コンピュータ１１０は、その他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶メディアも含むことができる。単に例として、図１は、取り外し不能不揮発性磁気メディアに対して読み取りまたは書き込みを行うハードディスクドライブ１４１、取り外し可能不揮発性の磁気ディスク１５２に対して読み取りまたは書き込みを行う磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭまたは他の光メディアなどの取り外し可能不揮発性の光ディスク１５６に対して読み取りまたは書き込みを行う光ディスクドライブ１５５を示している。典型的な動作環境において使用することができるその他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶メディアは、磁気テープカセット、フラッシュメモリカード、デジタルバーサタイルディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどを含むが、以上には限定されない。ハードディスクドライブ１４１は、典型的には、インタフェース１４０のような取り外し不能メモリインタフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、典型的には、インタフェース１５０のような取り外し可能メモリインタフェースでシステムバス１２１に接続される。本発明は、ＣＰＵ、ならびにメモリのすべてが単一のパッケージの中の単一のダイ（ｄｉｅ）上にある組み込みマイクロプロセッサ上に実装できることもさらに企図されている。
【００３０】
前述し、図１に示したドライブ、および関連するコンピュータ記憶メディアにより、コンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータのストレージがコンピュータ１１０に提供される。図１で、例えば、ハードディスクドライブ１４１が、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納していることが示されている。以上のコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じであることも、異なることも可能であることに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７に、ここでは、少なくともそれらが異なるコピーであることを示すために異なる符号を付けている。ユーザは、キーボード１６２や、マウス、トラックボール、またはタッチパッドと一般に呼ばれるポインティングデバイス１６１などの入力デバイスを介して、コマンドおよび情報をコンピュータ１１０に入力することができる。その他の入力デバイス（図示せず）は、マイク、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどを含むことができる。以上の入力デバイス、およびその他の入力デバイスは、しばしば、システムバスに結合されたユーザ入力インタフェース１６０を介して処理ユニット１２０に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインタフェースおよびバス構造で接続してもよい。また、モニタ１９１、または他のタイプのディスプレイデバイスも、ビデオインタフェース１９０などのインタフェースを介してシステムバス１２１に接続される。モニタに加えて、コンピュータは、出力周辺インタフェース１９５を介して接続することができるスピーカ１９７やプリンタ１９６などの他の周辺出力デバイスも含むことができる。
【００３１】
コンピュータ１１０は、リモートコンピュータ１８０などの１または複数のリモートコンピュータに対する論理接続を使用するネットワーク化された環境において動作することが可能である。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の一般的なネットワークノードであることができ、典型的には、コンピュータ１１０に関連して前述した要素の多く、またはすべてを含むが、メモリ記憶装置１８１だけを図１に示している。示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、その他のネットワークを含むこともできる。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータ網、イントラネット、およびインターネットで一般的である。
【００３２】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ１１０は、ネットワークインタフェースまたはネットワークアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータ１１０は、通常、インターネットなどのＷＡＮ１７３を介して通信を確立するためのモデム１７２、またはその他の手段を含む。内部にあることも、外部にあることも可能なモデム１７２は、ユーザ入力インタフェース１６０、またはその他の適切な機構を介してシステムバス１２１に接続することができる。ネットワーク化された環境では、コンピュータ１１０に関連して示したプログラムモジュール、またはプログラムモジュールの部分は、リモートメモリ記憶装置の中に記憶されることが可能である。例として、限定としてではなく、図１は、リモートアプリケーションプログラム１８５が、メモリ装置１８１上に常駐しているのを示している。図示したネットワーク接続は、例示的であり、コンピュータ間で通信リンクを確立する他の手段も使用できることが認められよう。
【００３３】
（例示的な実施形態）
前述したとおり、コンピュータは、２つの別個の環境、つまり、信頼された環境および信頼されていない環境を提供するように構成できることが当技術分野で知られている。信頼性が確認されていない通常のコード（すなわち、動作が確認されていない、または悪意のある目的に役立つ可能性を排除できないコード）は、信頼されていない環境において実行される。ゲーム、ワードプロセッサ、スプレッドシートなどの通常のアプリケーションソフトウェア、ならびに通常のオペレーティングシステム、デバイスドライバ、およびデバッガは、一般に、信頼されていないカテゴリに入る。信頼性が何らかの形で確認されているコードは、信頼された環境において実行されることが可能である。コンピュータのメモリのいくらかの部分（すなわち、「隔離された」メモリまたは「仕切られた」メモリ）は、信頼される環境だけがアクセスできるように指定される。
【００３４】
以下の説明では、エージェントは、整合性を保つように、または整合性の違反を明らかにするように設計されたセキュリティで保護された手続きに従ってインスタンスが作成されている場合、「信頼される」。例えば、エージェントは、エージェントのＩＤ、ならびにエージェントが実行され（証明）、信頼されたエージェントであれ、信頼されていないエージェントであれ、他のいずれのエージェントもアクセスすることができないセキュリティで保護されたメモリ域（仕切られたメモリ）が割り当てられ、秘密を密封できる環境を確認する信頼される手続きを介して初期化されることが可能である。そのような信頼されるエージェントは、一意に、信頼できる形で識別されることが可能である。
【００３５】
信頼された環境では、コードが行うことが許されることに制限が存在する。例えば、存在する信頼されるＡＰＩの数がより少なく（通常のＬＨＳにおける非常に豊富なＡＰＩセットに対して）、信頼された環境において実行されるエージェントが、制限された正式のプロセス間通信（ＩＰＣ）機構を介してだけ互いに通信することができ、エージェントは、ユーザにテキストおよびイメージを提示するためにより限られたプリミティブなＡＰＩおよびサービスのセットにしかアクセスすることができない。これらの制限により、複雑さが小さくなり、結果として、信頼された環境、ならびに信頼された環境内で動作する信頼されたエージェントの攻撃表面が小さくなる。他方、信頼されていない環境は、「オープンな」コンピューティングシステム（例えば、パーソナルコンピュータ、ハンドヘルドコンピュータなど）上のオペレーティングシステムによって、典型的に生成される環境と同様である。すなわち、ほとんどあらゆるコードが、そのような信頼されていない環境において実行されることが許され、標準の環境において実行されているコードは、プログラミングサービスおよびインタフェースの大きい豊富なセットに対する完全なアクセスを有する。信頼されていない環境および信頼された環境は、下位環境にさらに分割することができる。例えば、信頼されていない環境は、信頼されていないユーザモード（通常のアプリケーションが実行される）と、信頼されていないカーネルモード（通常のオペレーティングシステムが実行される）に分割することができる。同様に、信頼された環境は、信頼されたユーザモード（特殊な信頼されたアプリケーションが実行される）と、信頼されたカーネルモード（信頼されたアプリケーション用の信頼された環境をもたらす信頼されたオペレーティングシステムが実行される）に分割することができる。
【００３６】
信頼された環境と信頼されていない環境が、同一のコンピュータシステム内部に並存する場合、信頼された環境は、自らの信頼性が信頼されていない環境において生じる何によっても、または信頼された環境におけるいずれのユーザモードによっても影響される可能性がないことを確実にするステップを行うことができる。本発明の実施形態は、信頼されていない側の利益のために信頼された側の信頼性を投影する、または別の形で使用するための機構を提供する。
【００３７】
図３は、本発明による投影システムの一実施形態のブロック図であり、図４は、本発明による投影の方法の一実施形態の流れ図である。コンピュータ１１０上で実行されているシステムのＬＨＳは、図２に関して前述したものと同様である。２つのアプリケーション３０５、３１０が、オペレーティングシステム３０１に関連して実行されている。ＲＨＳの諸部分も、図２に関して説明したものと同様である。２つの信頼されたエージェント３５５、３６０が、ネクサス３５１およびＳＳＣ３５３とともに実行されている。任意の数のアプリケーションをＬＨＳ上で実行することができ、任意の数のエージェントをＲＨＳ上で実行することができることが企図されている。
【００３８】
図３は、オペレーティングシステム３０１およびネクサス３５１が単一のコンピュータ１１０上で実行されるシステムを示している。オペレーティングシステム３１０とネクサス３５１の論理的分離３５０により、オペレーティングシステム３１０を起点とするイベントからネクサス３５１を保護しながら、オペレーティングシステム３０１とネクサス３５１の間である通信を行うことができる。
【００３９】
図３で示した実施形態では、オペレーティングシステム３０１は、ホストオペレーティングシステムであり、ネクサス３５１は、ＯＳ３０１によってホストされるゲストである。つまり、ＯＳ３０１は、メモリやプロセッサ時間などのあるサービスおよびリソースをネクサス３５１に提供する。一実施形態では、ネクサス３５１が、オペレーティングシステム３０１において生じ、ネクサス３５１が自らの動作仕様に反する形で動作するようにさせる可能性があるアクション（悪意のある、または悪意のない）から、自らを保護することができるようにしながらも、論理的分離３５０により、ネクサス３５１が、オペレーティングシステム３０１の一部のリソースを利用することができるようにする。例えば、ネクサス３５１、およびネクサス３５１に関連する信頼されたリソース、例えば、ＳＳＣ３５３が、論理的分離を管理することができる。ただし、本発明は、特定の形態のネクサス３５１に限定されないことが理解されよう。対話と保護のこのバランスを可能にするように分離３５０を構成できるようにする機構が企図されている。
【００４０】
図３は、オペレーティングシステム３０１を「ホスト」として、ネクサス３５１を「ゲスト」として示していることに留意されたい。一般に、この特徴付けは、以上の例では、オペレーティングシステム３０１が、オペレーティングシステム３０１およびネクサス３５１によって使用されるあるオペレーティングシステムインフラストラクチャ（例えば、デバイスドライバ、スケジュール設定など）を提供することを指している。ネクサス３５１は、インフラストラクチャリソースを自ら提供するのではなく、オペレーティングシステム３０１の一部のインフラストラクチャリソースを利用することができるという意味で「ゲスト」である。ただし、何によりオペレーティングシステムが「ホスト」または「ゲスト」になるかのパラメータには、柔軟性があることに留意されたい。本明細書で説明する技術は、同一のマシン上で（あるいは同一の１組の接続されたマシン上でさえ）実行される任意の２つ以上のオペレーティングシステムの対話に適用することができることを認識されたい。単一のマシン上で実行される２つ以上のオペレーティングシステムは、単一のマシン上で互いに対話する必要がある可能性がある「環境」の例であるが、本発明は、従来のオペレーティングシステムに限定されないことが理解されよう。
【００４１】
投影は、信頼されたエージェント（ＲＨＳ上の）の能力およびプロパティのいくつかをＬＨＳコードに拡張することができる機構である。一例によれば、投影により、ＮＧＳＣＢパーソナルコンピュータプラットフォームの能力を既存のコードに適用することができるようになる。例えば、Microsoft（登録商標）Excel（登録商標）などのアプリケーションをＲＨＳに移植するのではなく、本発明による投影により、そのアプリケーション（本明細書でモータル（mortal）とも呼ぶ）用の監視エージェント（本明細書でエンジェルとも呼ぶ）の構成が可能になり、これにより、既存のアプリケーションが、信頼されたエージェントと同じ有用なプロパティの多くを備えて実行される。投影は、ＬＨＳオペレーティングシステム（例えば、Microsoft（登録商標）Windows（登録商標））と、ある程度の信頼された動作が所望されるあらゆるＬＨＳアプリケーションプログラム（例えば、Microsoft（登録商標）Office（登録商標））の両方に適用することができる。投影は、ＬＨＳデバイスドライバにも適用することができる。従って、以下により詳細に説明するとおり、投影により、信頼されたエージェントが、ＬＨＳのオペレーティングシステム、サービス、およびプログラムを保護し、保証し、証明し、拡張することができる。
【００４２】
図３は、アプリケーション３０５に対応する監視エージェント３９０、ならびにアプリケーション３１０に対応する監視エージェント３９５を示している（図４のステップ４００）。各監視エージェント、つまり各エンジェルは、関連付けられたアプリケーションを保護する。
【００４３】
一実施形態では、当該のＬＨＳエンティティ（例えば、アプリケーション）の作成者は、ＬＨＳエンティティを守るエンジェルも作成する。これにより、作成者が、エンジェルが監視するアプリケーションの深い知識を、エンジェルに与えることができる。このようなエンジェルは、エンジェルが監視するアプリケーションにおける異常により敏感であることができ、従って、アプリケーションをより効果的に保護し、検証することができる。例えば、オペレーティングシステム開発者によって作成される基本監視エージェントは、エージェントが疑わしいメモリ動作を迅速に識別することを可能にするオペレーティングシステムのメモリ管理に関する詳細な知識を組み込むことができる。
【００４４】
別の実施形態では、エンジェルは、関連付けられたアプリケーションにおいて異常な活動、または疑わしい活動を検出した場合、是正措置または防止措置をとることができる。例えば、エンジェルは、アプリケーション作成者によって不変であると考えられるメモリの中の重要な変数を変更しようとする関連付けられたアプリケーションによる試みを検出し、その変数に対する書き込みを阻止することができる。そのような書き込み動作は、悪意のある、例えば、ウイルスのコードによる明白な破壊でないとしても、アプリケーションコードの少なくとも破損を示す可能性が高い。要するに、エンジェルは、関連付けられたアプリケーションにおける良くない活動または疑わしい活動を警戒し、是正措置または防止措置をとる監視エージェントとして動作する。エンジェルの動作は、エンジェルが関連付けられたアプリケーションに損害を与えるのを防止するように制限することができる。エンジェルは、例えば、特定のエンティティ、プログラム、またはアプリケーション、あるいは一群のそのようなエンティティ、プログラム、および／またはアプリケーションに結合することができる。
【００４５】
基本監視エージェント（本明細書でアークエンジェルとも呼ぶ）３８０が、基本オペレーティングシステム（すなわち、ＬＨＳ  ＯＳ３０１）に関連付けられる（ブロック４１０）。一実施形態では、基本監視エージェント３８０は、ＬＨＳオペレーティングシステムの作成者によって書かれる。これにより、基本監視エージェント３８０が、ＬＨＳオペレーティングシステムに関するより詳細な知識を組み込むことが可能になり、これにより、エージェント３８０が、関連付けられたオペレーティングシステムによる異常な動作により敏感になる。
【００４６】
例えば、アークエンジェルは、仮想アドレスデータベース、プロセスデータベース、およびＰＦＮ（ページフレーム番号）データベースのフォーマットを知っていることができ、それに基づき、不正なデバイスドライバが、プロセスが有するはずのないＰＦＮをマップすることによって、プロセスに対する不正なマッピングを行っているケースを検出することができる。従って、アークエンジェルは、メモリマネージャによって行われていない（例えば、不正なデバイスドライバによる）マッピングを検出することができ、存在するべきでないクロスプロセスマッピング（cross process mapping）を検出することができる。
【００４７】
そのような場合、アークエンジェルは、変更されたモータルＯＳと共謀することができる。ＯＳとアークエンジェルは、例えば、特定のロックが保たれていない場合はいつでもＰＦＮデータベースが常に整合性を有していなければならず、チェックサムを介してその整合性を表現することができなければならないことに合意することができる。従って、定期的な間隔で、アークエンジェルは、ロックを検査し、ロックが解除されていることが分かると（これは、メモリ変数であり、従って、試験するのが容易である）、ＰＦＮデータベースのチェックサムを行う。アークエンジェルは、チェックサムが一致しないことが分かった場合、ＰＦＮデータベースが改ざんされていることを知る。
【００４８】
さらに、アークエンジェルは、カーネルデバッガに関する制御変数を知っており、カーネルデバッガの使用を無効にするように制御変数を強制することもできる。
【００４９】
さらなる例には、プロセス読み込みが含まれる。すなわち、ローダ、キャッシュマネージャ、ページフォールトハンドラなどを監視して、正しいビットがユーザモードプロセス（または、システムに読み込まれた任意の他のモジュール）に正しく読み込まれ、または適切に署名され、場合により、アークエンジェルが知っているテーブルの中に保持されるハッシュのリストにリストされていることを確実にする。アークエンジェルは、ローダ、ページフォールトハンドラなどがいつ、コード／データをプロセスに、またはプロセスからマップする（ページングなど）必要があるかを予期することができる。ＲＨＳは、ＯＳが既知の良好な機能を実行しているのでない限り、そのプロセスに関するＬＨＳ物理ページをロックしたままにする（ＬＨＳ  ＯＳに対してさえ）ことができる。ＲＨＳは、ＬＨＳプロセスに関するページテーブルを制御する。従って、不良な動作を制限するようにアークエンジェルライタがアークエンジェルに書き込むことができるいくつかの機構が存在する。
【００５０】
さらなる例は、プロセス硬化（process hardening）を含む。１つのプロセスが別のプロセスを変更する周知の承認された機構が存在する。アークエンジェルは、すべての共有メモリマップ、ならびにデータの異なるプロセス空間へのコピー、または異なるプロセス空間からのコピーが制限されることを確実にすることができる。別の例は、カーネルドライバおよびデバイスドライバのすべての「テキスト」ページ（コードページ）が封鎖される読み取り専用カーネルに関わる。
【００５１】
アークエンジェル３８０は、エンジェルに対するプロセスごとの（制限されたアクセスの）投影もサポートする。これは、ユーザがシステムに実行するように求める（ユーザポリシーに合致して）あらゆるエンジェルをシステムが実行する点でエージェントと同様であり、以下に定義する証明ベクトルの一部ではない（すなわち、アークエンジェルは、実際、マシンの構成の一部である）エンジェルが、例えば、左側のプライバシーに侵入し、適用されるはずではないモータルアプリケーションをのぞき込み、大きな被害を与える可能性があることを意味する。従って、エンジェルは、特定のアプリケーション（モータル）に強くバインドされることが望ましい。これは、好ましくは、エンジェルが開始するモータルだけにエンジェルが影響を与えることを許すこと、あるいは、ダイジェスト検査がアークエンジェルによって行われて、エンジェルのマニフェストの中の宣言されたダイジェストに合致するモータルにだけ、かつモータルアプリケーションがエンジェルのダイジェストを使用してアプリケーションを開始するように呼び出して初めて行われる。これが望ましいのは、これにより、大きな被害をもたらす、または他のすべてに関するプライバシーを破壊する危険を冒すことなく、あらゆるアプリケーションベンダが、自らのアプリケーション用のエンジェルを書くことができるようにし、あらゆるユーザがそのエンジェルを使用するのを許すことが安全で、現実的になるからである。
【００５２】
従って、アークエンジェルは、ＬＨＳを監視するエージェントと、他のエンジェルにサービスを提供するエンジェルの両方である。アークエンジェルが、ＬＨＳプロセス構造の最も詳細な知識を有するため、いずれのエンジェルをいずれのＬＨＳプロセスにバインドすることができるかを決めるのは、おそらくアークエンジェルである。制限とは、エンジェル（ネクサス証明ベクトルの一部ではない）が、エンジェルが開始したプロセスだけに、または保護されるようにエンジェルに要求したプロセスだけに触れることができることを意味する。この分割（アークエンジェルは、ＯＳレベルの能力を獲得し、ネクサスのように検証され、エンジェルは、制限されたアプリケーションレベルの能力を獲得し、他のあらゆるエージェントと同様に自由に実行されることが可能である）は望ましい。
【００５３】
一実施形態では、エンジェルは、証明ベクトルの中にアークエンジェル（および、その延長上に、ＬＨＳ基本ＯＳ）を含むことができる。証明ベクトルは、エンティティのセキュリティ関連構成を確立するセキュリティ関連コンポーネントのダイジェストのリストである。例えば、エージェントに関するダイジェストは、マシンまたはマザーボード自体、ネクサス、およびエージェント自体、ならびにその他の情報を含むことができる。この数値スタックは、エージェントがどのようなものであるか、どのような環境でエージェントが実行されているかの強力な信頼できるインジケータである。これにより、別のエンティティが、「本当のエージェント」を相手にしているか否かを信頼することができるようになる。証明ベクトルスタック（従って、エージェントのダイジェストは、ネクサスに関するベクトルの一部ではないが、ネクサスのダイジェストは、エージェントに関するダイジェストの一部である）。従って、何物かの証明ベクトルが別の物の中に含められる場合、これは、それらがすべて、認識可能なセキュリティ構成に一括してバインドされていることを意味する。証明のプロパティは、証明により、システムのセキュリティ関連構成が非常に強力に明らかにされることである。
【００５４】
つまり、証明ベクトルは、ＲＨＳのソフトウェアＩＤを定義するダイジェスト値のリストである。好ましくは、ＲＨＳ上に読み込まれるソフトウェアは、読み込まれる前にダイジェスト化され、プロセス自体は、変化する可能性がないようによく隔離される。これは、帰納的プロセスである。すなわち、ハードウェアがネクサスのダイジェストに署名し（ネクサスのダイジェストを証明し）、ネクサスが、エージェントを証明する。このようにして、外部パーティは、そのダイジェストを既知のリストに照らして検証して、外部パーティがシステム上で実行されるそのソフトウェアを承認するかどうかを決めることができる。エンジェルおよびアークエンジェルは、ＲＨＳ上で実行されているため、明確に定義されたコードＩＤを有する。この理由で、それらのコードＩＤを、ＬＨＳコードが実行されている環境を記述する証明ベクトルの中にリストすることができる。エンジェルは、ＬＨＳコードの実行を完全に制御することができないため、このコードＩＤステートメントは、ＲＨＳエージェントのコードＩＤステートメントほど強力ではないが、所与のＬＨＳコードが、強力なコードＩＤを有するエンジェル、アークエンジェル、およびネクサスの制限の下で実行されていることを意味する。
【００５５】
アークエンジェルの実施形態は、エンジェルに対して何らかのＡＰＩセットを公開して、エンジェルのいくつかの機能および／または機構のサポートを提供することができる。例えば、あらゆるメモリ動作に関して、望ましくは、アークエンジェルが仲介する。エンジェルは、仮想アドレスＶＡ＝１００においてカバーされたアプリケーション（covered application）コードを検査することを所望することができる。しかし、その仮想アドレスがどのような物理アドレスにマップされるかが分かっていない可能性がある。ネクサスは、そのような構造について知らない。従って、アークエンジェル（ＬＨＳ  ＯＳがどのように機能するかを知っている）が、基本的なネクサスサービス（アークエンジェルだけが呼び出すことができる）を使用して、妥当なＬＨＳカーネルメモリを読み取る。アークエンジェルは、ＬＨＳ  ＯＳメモリからのデータを使用して、ＬＨＳアプリケーションメモリに関する正しいマッピングを計算する。次に、エンジェルに、どのカバーされたアプリケーションアドレスがエンジェルアドレスに対応するかが知らされ、エンジェルは、その内容を検査して、処理を継続することができる。要するに、プロセスにバインドされたエンジェル（すなわち、ＬＨＳ状態の上でランダムにローミングするのではなく、許可されたプロセスだけに適用されるエンジェル）に関して、アークエンジェルがＬＨＳデータ構造を解釈することが望ましい。
【００５６】
さらなる典型的な機能は、ＬＨＳアプリケーションおよびＲＨＳエンジェルだけがデータを見ることを可能にするセキュリティで保護されたＩＰＣチャネルを提供することを含む。ＬＨＳカーネルは、通常、ＬＨＳとＲＨＳの間のＩＰＣチャネルを通過するすべてのページを見ることができるが、それらのページに、アークエンジェルの監視の目の下でしかアクセスすることができない場合、当該のプロセス（所与のエンジェルによって制御されるプロセス）だけが、チャネルの中のデータを見ることができるという高い保証が提供される。別の典型的な機能は、どのようなモジュール（例えば、ＤＬＬ）を、またそのモジュールのどのバージョンを所与のプロセスのプロセス空間に読み込むことができるかを制御する能力をエンジェルに与える。
【００５７】
信頼されたエンティティとして、アークエンジェル３８０は、ＬＨＳに関連するメモリに対するアクセスを有し、ＬＨＳ上で何かが生じた場合にはいつでも通知を受ける。アークエンジェル３８０は、アークエンジェル３８０が、不整合を検出して、セキュリティまたは保護のために何らかの措置がとられるべきかどうかを判定するのに使用する一連の知識があらかじめプログラミングされる。例えば、アークエンジェル３８０は、あるセットのＬＨＳイベントを捕らえることができる。それらは、ＬＨＳによって許され、ネクサス３５１、またはネクサス３５１が管理する信頼環境によって排除されないイベントであることができる。例えば、アークエンジェル３８０は、攻撃またはセキュリティの問題の可能性を示すＬＨＳ上の不適切なマッピング（不適切でなければ、ネクサス３５２が許す）を検出することができる。アークエンジェル３８０は、整合性検査も実行することができる。
【００５８】
図３に示した実施形態では、各エンジェルが、アークエンジェル３８０およびネクサス３５１によってバインドされるか、それ以外の形で監視される（ブロック４２０）。アークエンジェル３８０は、エンジェルと関連するＬＨＳコードの間のバインドを実施し、このバインドにより、ＬＨＳ上の、例えば、プライバシーおよびセキュリティにエンジェルが影響を与える能力が制限される。
【００５９】
エンジェルの動作は、エンジェルが結合されることになっているプロセスだけに影響を与えることに制限されることが望ましい。何故ならば、ネクサス３５１およびアークエンジェル３８０は、ユーザのポリシーに従って、ユーザがネクサス３５１およびアークエンジェル３８０に実行するように指示するあらゆるエンジェルを実行するからである。アークエンジェルは、ネクサスと同等の能力を有し、およそ同じ程度まで精査される。エンジェルに関して、他のあらゆるエージェントの場合と同様に、ネクサスは、ユーザが指示するものであれば何でも実行する。従って、ネクサスおよびアークエンジェルは制約されているが、通常のエンジェル（エージェントのような）は、制約されていない（ただし、ユーザは、例えば、特定の評価者によって署名されたエージェントまたはエンジェルを実行するように、または実行しないようにネクサスに指示するポリシーを設定することができる）。
【００６０】
エンジェルが制約されることが望ましい。例えば、「第１のプログラム用のエンジェル」と告げる署名ブロックを有するエンジェルは、ＬＨＳ基本ＯＳメモリを使用すること、または他のプログラムのメモリを使用することが許されてはならない。それを許すことにより、多くのユーザ権利が侵害され、エンジェルが、役立つのではなく、危険になる。従って、アークエンジェルは、エンジェルがアクセスすることができるとされているＬＨＳプログラムだけに対して、エンジェルがアクセスを得ることを確実にする。
【００６１】
信頼されたエージェントは、好ましくは、いずれのＬＨＳプログラムを超える能力も有さない。詳細には、信頼されたエージェントは、ＬＨＳ  ＯＳを調べることも、ＬＨＳ  ＯＳ構成状態を制御または変更することもできない。代わりに、エンジェルは、好ましくは、エンジェルが適用されるモータルのメモリを検査する、または変更することだけが許される。さらに、一部の実施形態では、アークエンジェルは、エンジェルがモータルのコードを変更することを許さず、エンジェルを、モータルのユーザモードアドレス空間内のあらゆるものを読み取ることに制限し、エンジェルが、モータルの共有でない読み取り／書き込みメモリに書き込むことを許すことができる。ただし、一部の機構は、エンジェルに対するモータルの呼び出しが、呼び出しポイントではなく、計算されたリターンポイントに戻ることが許されることを要求する。これにより、エンジェルが、モータルにおける既知の正しいアドレスで一部のイベントが開始されるように強制することが可能になり、これは、リターンアドレスを変更する壊れたスタックに基づくトランポリン（trampoline）攻撃に対抗する強力なやり方である。
【００６２】
エンジェルは、関連付けられたエンティティ、または関連付けられたグループのエンティティだけを監視することができ（ブロック４３０）、任意の他のエージェントと同程度にしか信頼されない。エンジェルは、関連しないエンティティを監視する、または別の形で調べることができない。詳細には、エンジェルは、以下の属性の１または複数を有する。すなわち、  
ａ．エンジェルは、エンジェルが結合されたプロセスまたはプロセス群（すなわち、モータル）だけのユーザモードメモリを監視することができる（通常、ＲＨＳコードに与えられる能力ではなく−上記参照）。  
ｂ．アークエンジェルだけが、アークエンジェルが結合されたＬＨＳ  ＯＳのカーネルモードメモリを見ることができる。  
ｃ．エンジェルは、エンジェルを呼び出し、要求するＬＨＳプロセスだけに適用することができるか、またはエンジェルが開始するＬＨＳプロセスだけに適用される。  
ｄ．エンジェルは、宣言型実行（declarative enforcement）によって制限することができる。例えば、ネクサスおよび／またはアークエンジェルが、エンジェルに関するマニフェストの中で宣言された実行可能ファイルに合致する実行可能ファイルを含むプロセスだけに投影されるようにエンジェルを制限することができる。従って、何者かがエンジェルに関するマニフェストを変更することなしに、「ハッカツール」用のエンジェルが、偶然に、または悪意によってＬＨＳアプリケーションに投影される可能性はない。そのようなマニフェスト変更は、ポリシーツールには明白である。
【００６３】
アークエンジェル３８０は、以上の制限を実施することができる（ブロック４４０および４５０）。この目的で、アークエンジェルに、ＬＨＳに対する広範なアクセスを与えることができ、その場合には、アークエンジェルは、ネクサスと同様にある程度の精査（すなわち、厳しい精査）を受ける。例えば、アークエンジェルは、ＬＨＳ  ＯＳを支配し、従って、ＬＨＳ上で実行されるすべてを支配する。つまり、アークエンジェルは、あらゆるＬＨＳメモリを読み取ることができるが、ＲＨＳカーネルメモリに対するアクセス、あるいは他のエージェントプロセスを調べる、またはネクサスまたは他のＲＨＳエージェントを制限する、増強する、変更するなどの能力などの特殊なＲＨＳ能力は有さない。エンジェルは、エンジェルが適用されるプログラムのアドレス空間だけしか読み取ることができない（すなわち、エンジェルは、エンジェルが適用されるモータルだけに適用される特殊な能力を有する）。アークエンジェルは、エンジェルが監視し、保護するプログラムのアドレス空間だけをエンジェルが調べることができるようにプロセス専用のサービスを提供しながら、すべてのＬＨＳメモリを読み取ることもできる（ステップ４４０）。
【００６４】
エンジェルは、少なくとも以下の形で保護対象（protectee）を「投影する」ことができる（ステップ４３０および４５０）。すなわち、  
ａ．エンジェルは、場合により、保護対象の動作と協調して、保護対象に対するある変更（例えば、ウイルス攻撃）を防止するようにメモリの様々な要素をロックする、または読み取り専用としてマークを付けることができる。  
ｂ．エンジェルは、信頼された空間内で保護対象のためにいくつかの重要な動作を実行することができる。  
ｃ．エンジェルは、どのような構成変更を行うことができるかを制限すること、あるいはセキュリティで保護された入力機構を使用する許可された人間によって承認された場合にそのような変更が行われるのを許すことなどの、保護対象専用の保護を強要することができる。  
ｄ．エンジェルは、整合性エラー、破損などを探して、所望の間隔で保護対象のメモリおよび状態をスキャンし、さらなる損傷、または意図しない／許可されていない動作が生じる前にユーザに警報する、または保護対象を停止することができる。  
ｅ．エンジェルは、必要に応じて保護対象に対して密封された／暗号化されたデータを開放して、任意の一時点で攻撃される可能性があるそのようなデータの量を最小限に抑えることができる。  
エンジェルは、密封されたストレージを使用して、ＬＨＳ（またはＬＨＳアプリケーション）のために秘密を密封しておき、秘密所有者に合致するか、または秘密所有者によって許容されるものとしてリストされるダイジェストを有さないいずれのＬＨＳ（またはＬＨＳアプリケーション）にもその秘密を与えることを拒否することができる。  
ｆ．適切なＡＰＩが与えられると、エンジェルは、保護対象の実行状態を変更することができる。つまり、エンジェルは、既知の実行ポイントにスレッドを誘導すること、制御の流れを目標アプリケーションにリダイレクトすること、または目標アプリケーションのために分岐の計算および実行を行うことができる。エンジェルは、構成状態、スタートアップ状態などを編集して、保護対象のセキュリティで保護された／正しい動作のための妥当なモードになるよう状況を強いることができる。  
ｇ．エンジェルは、アークエンジェルを呼び出し、保護対象のために防止、保護、検出、または反応を実行するようにアークエンジェルに求めることができる。  
ｈ．エンジェルは、アプリケーションから出力データを抽出し（例えば、呼び出し、またはメモリ検査により）、そのようなデータを検証し（例えば、チェックサムなどを行って）、次に、セキュリティで保護された出力ハードウェアを使用してそのデータを提示することができる。  
エンティティまたはアプリケーションの機能の一部は、エンジェルの中に移すことができる。同様に、ＬＨＳカーネルの機能の一部は、アークエンジェルに移すことができる。アプリケーション作成者は、エンジェルの中にアプリケーションの機能のいくつかを実装することができる。これにより、ＲＨＳの負担が増大するが、移された機能を信頼された環境の中で実行することが可能になる。同様に、ＬＨＳ  ＯＳ３０１の一部分も、アークエンジェル３８０の中に移すことができる。
【００６５】
エンジェルは、いくつかの形で読み込む、または呼び出すことができる。アプリケーション３０５のようなＬＨＳプログラムが、エンジェル３９０を要求することができる。このようにして、例えば、アプリケーションのスタートアップ時に、対応するエンジェルが読み込まれる。代替として、エンジェルは、ＲＨＳから呼び出されることも可能であり、次に、エンジェルが、対応するＬＨＳプロセスまたはＬＨＳアプリケーションを呼び出す。エンジェルは、アークエンジェルを使用してＬＨＳまで呼び出しを行い、アプリケーションが開始されることを要求する。アークエンジェルは、エージェントをアプリケーションにバインドする。一実施形態では、ネクサスおよびアークエンジェルがアプリケーションエンジェルに提供するＡＰＩにより、エンジェルが作成したプロセスだけが、また場合により、そのプロセスの子も、エンジェルに見えるようにする。
【００６６】
別の代替として、ＬＨＳプログラムを、マニフェストによって呼び出すことができ、次に、ＲＨＳに向けて、ＲＨＳがエンジェルを開始し、エンジェルが、ＬＨＳを呼び返して、対応するＬＨＳプロセスまたはＬＨＳアプリケーションを開始する。典型的には、ＬＨＳプログラムは、そのプログラムを含むファイル（例えば、「run c:\somedir\someotherdir\someprogram.exe」であるＡＰＩ）を指名することによって開始される。ＲＨＳコード（エージェントまたはエンジェル）の場合は、マニフェストを指名することによって開始され、マニフェストが、バイナリを指名する。これは、ロケーション独立である。また、マニフェストは、典型的には、例えば、署名され、証明され、従って、スプーフィングすることがはるかに困難である。従って、典型的な機構は、結合された左／右マニフェストをＲＨＳ（ネクサス）に提示して、ＲＨＳ（ネクサス）が、ＬＨＳアプリケーションと関連するエンジェルをともに開始し、アプリケーションとエンジェルをバインドすることである。さらに、エンジェルを使用してＬＨＳまたはＲＨＳからアプリケーションを開始することができる。
【００６７】
本発明の実施形態では、アークエンジェルは、ＬＨＳプロセスの最初に読み込まれたコードイメージが、エンジェルに関連する宣言された目標コードイメージに合致することを確認することができる。宣言された目標コードイメージを、エンジェルのマニフェストを介して提供することができる。これにより、特定のアプリケーションに関するエンジェルであると主張するコードが、別のアプリケーションを代わりに開始することが防止され、これにより、攻撃に対するさらなるセキュリティが提供される。
【００６８】
本発明の一部の実施形態によれば、エンジェルは、エンジェルが関連するＬＨＳアプリケーションまたはＬＨＳプロセスのコードイメージを編集しないようにする。エンジェルは、データを読み取る／書き込むことができるが、コードを読み取ることしかできない。
【００６９】
以上のポリシーおよび同様のポリシーを使用して、エンジェルが、ＬＨＳに対する監督または制限なしに実行されることから防止することができ、不正なエンジェルが、ＬＨＳプログラムおよびＬＳＨアプリケーションを使用してスプーフィングすることから防止される。
【００７０】
前述した開始機構に加えて、正しいエンジェルが正しいＬＨＳ（またはＲＨＳ）アプリケーションに結合され、結合されたままになることを確実にする他のやり方が存在する。実行中のアプリケーションが、アプリケーションのエージェントにコールを行う前に、攻撃者によって変更される、またはＬＨＳウイルスが、コールを傍受し、変更して何らかの他のエンジェルを目標にする可能性がある。
【００７１】
本発明の実施形態は、アプリケーションからアプリケーションのエージェントへのコールを、アークエンジェルまたはネクサスのような信頼された権限を介して処理することによってこれに対処することができる。例えば、アークエンジェルが、呼び出し側ＬＨＳアプリケーションをダイジェスト化し、そのダイジェストをＲＨＳエンジェルに関連する「承認された」ダイジェストのリストと比較することができる。ＬＨＳアプリケーションが変更されているためか、またはコールが異なるエンジェルを目標にするように変更されているためにダイジェストが一致しない場合、コールは失敗し、システムは、ユーザに警報し、および／または他の任意のいくつかの措置をとることができる。
【００７２】
システムポリシーを使用して、いずれのエンジェルがいずれのＬＨＳアプリケーションに結合することができるかを指定することができる。強力なポリシー機構を使用することにより、スプーフィングするのが困難で、誤った初期化をすることが困難な機構が提供され、このような依存関係を設定する。
【００７３】
一部の実施形態では、エンジェルは、好ましくは、関連付けられたアプリケーションに対する脅威を標的にするための調整可能な、または様々なプログラミング可能なレベルの検査を有する。認識される脅威または攻撃に対するエンジェルの感度を、調整することができる。
【００７４】
ＬＨＳ  ＯＳまたはＬＨＳアプリケーションに投影（例えば、防御、保護、助言）を提供することに加えて、エンジェルを、信頼されたコンピューティング環境において実行されているエージェントに適用することもできる。そのような場合、目標エージェント（通常、被害妄想のエンティティ）は、自らに結合されたエンジェルを信頼する。これにより、外部の監視プロセスが、目標エージェントにおける様々なバグおよびエクスプロイトを阻止することが可能になる。エンジェルは、セキュリティエラーを探してスキャンする（例えば、従来のウイルス対策技術のように）のではなく、セキュリティの不変量を実施し、ネクサスが提供する堅固なプロセス分離およびプロセス保護の使用を実施することができる。
【００７５】
一実施形態では、エージェントは、ＯＳイメージが起動されている、何らかの現実のマシンの「実質的に同一の重複コピー」を提供する仮想マシンである。信頼された環境は、エージェントが仮想マシンのプロセスメモリにアクセスするのを許すことができる。アクセスする側のエージェントは、プロセスメモリを監視して、仮想マシンを仮想マシンが含むイメージからの攻撃から保護することができる。信頼された環境により、エンジェルがＯＳイメージを仮想マシンの中に投影することができ、エンジェルが、アプリケーションを仮想マシンの中に投影することができる。ＬＨＳアプリケーションに、通常、適用されるのと同一の機構が、仮想マシンに代わりに適用されることが企図されている。
【００７６】
本発明の一実施形態では、ネクサスが、メモリ検査およびメモリ改変のためのＡＰＩ（少なくとも）をアークエンジェルに提供する。制御構造を変更しようとする試みを捉え、反応するためのＡＰＩサポートにより、投影が容易になる。例えば、ｘ８６アーキテクチャ上で、ＧＤＴ、ＬＤＴ、ＩＤＴ、デバグレジスタ、ＴＲなどの制御構造の保護に、ＡＰＩを介して提供することができる。ＧＤＴとは、グローバル記述子テーブルを指し、ＬＤＴとは、ローカル記述子テーブルを指す。ＧＤＴＲ（グローバル記述子テーブルレジスタ）を封鎖することにより、攻撃者が通常、ジャンプすることができない場所へのジャンプを可能にするように、仮想アドレスの意味をゆがめることに依存する攻撃が阻止される。ＩＤＴは、割り込みのルーティングを制御する割り込みディスパッチテーブルである。ＩＤＴの場所は、ＩＤＴＲ（割り込みディスパッチテーブルレジスタ）によって示される。ＩＤＴＲを封鎖することは、攻撃者がＩＤＴおよびポストされた割り込みを使用して、攻撃者がそれ以外のやり方では到達することができないコードへの分岐を強制する攻撃を阻止することにより、投影をより強力にする。
【００７７】
信頼された環境（すなわち、ＲＨＳ）およびオープンな環境（すなわち、ＬＨＳ）が何らかの形で接続されていることが望ましい。この接続により、信頼された環境が状態を検査し、オープンな環境におけるイベントを知らされることになる。本明細書の教示は、以下の構造を含むが、決してそれに限定されない構造に関して有効である。
【００７８】
１．ＲＨＳとＬＨＳが、同一のマシン上に存在し、ＲＨＳが、ＬＨＳメモリを直接に検査することができる（他方、ＬＨＳは、許可なしにＲＨＳメモリを検査することができない）。
【００７９】
２．ＲＨＳとＬＨＳは、場合により異なるメモリを有する、異なるプロセッサ上に存在するが、バス、ネットワーク、ポート、またはその他の相互接続により、ＲＨＳが、ＬＨＳメモリを調べることができる。例えば、ＡＲＭサービスプロセッサが、完全に信頼されたスタックを実行することができ、信頼されたスタックが、ｘ８６ＭＰシステムのメインメモリを検査することができる。例えば、ｘ８６メインプロセッサを備えたマシン、ならびにサービスプロセッサとしてＡＲＭまたはＰｏｗｅｒＰＣが存在し、本発明の機構を使用して、サービスプロセッサがメインプロセッサ上のソフトウェアを監視できる。
【００８０】
３．ＲＨＳがＬＨＳイベント（例えば、マップの変更）の通知を受け取ることができるが、そのイベントを変更する、または防止することができない、あるいはＬＨＳメモリを調べることができない場合、それでも、投影のいくらかの部分（例えば、弱い部分）が可能である。
【００８１】
４．ＲＨＳが、自由にＬＨＳメモリを検査することができ、ＬＨＳメモリのマッピング構造およびアドレス変換構造に対するＬＨＳ編集を制御する（すなわち、防止する、または変更する）ことができ、割り込みディスパッチベクトルがどこをポイントするかを制御することができる（ただし、割り込みコントローラを制御するとは限らないが、そのような制御が提供される場合、それにも利点がある）。強力な投影をサポートするようにＲＨＳが完全に制御することができることが望ましい状態／イベントのリストを特定することは、各プロセッサアーキテクチャに関して行われるべき作業であるものと企図され、リストは、異なるアーキテクチャに関して異なることが当業者には理解されよう。
【００８２】
５．一実施形態では、ｘ８６ＴＲレジスタの変更、ならびにハードウェアデバッグレジスタの設定もＲＨＳによって制御可能である。
【００８３】
従来技術のハードウェアにおいて、信頼された環境は、実行されることが保証されていない。とうのは、信頼された環境は、一般的な割り込みハードウェア、ＬＨＳ割り込みディスパッチテーブルなどに依存する可能性があるためである。
【００８４】
以上にリストしたハードウェアでは、ＩＤＴ（ｘ８６上で、または他の場所の等価物上で）を制御できることにより、ＲＨＳが、任意に選んだ何らかの割り込みにより、ＲＨＳを呼び出すコードが常に実行されることを確実にできる。
【００８５】
ただし、ＬＨＳ攻撃者またはＬＨＳエラーにより、割り込みコントローラが壊される、割り込みがオフにされるなどの可能性がある。ＡＴＣ（アドレス変換制御）を使用して、ＲＨＳが時々、実行されるのを確実にすることが企図されている。ＲＨＳは、ＡＴＣを使用している場合、カウンタを増分するようにＡＴＣを変更することができる。カウンタは、ＲＨＳがアークエンジェルをスケジュール設定した場合にはいつでも、何らかの値に設定される。カウンタがゼロに達した場合、ＡＴＣは、アークエンジェルが「余りにも長い間」、実行されていないことを知り、アークエンジェルを強制的に実行するネクサスエントリポイントを呼び出す。この技術は、アークエンジェルがいずれの特定の時点でも実行されることを保証しないが、アークエンジェルが、数回のＬＨＳメモリ編集動作の後に実行されることを確実にする。従って、アクティブであるＬＨＳは、いつかはアークエンジェルを実行させることになる。
【００８６】
ＲＨＳがＩＤＴを封鎖することができ、システムがＮＭＩ（マスク可能でない割り込み）の信頼できるソースを有する場合、ＲＨＳは、右側を呼び出すようにＮＭＩハンドラを強制することができる。
【００８７】
典型的な実施形態では、ハードウェアは、数回のティック（tick）の後にＲＨＳに対して割り込みを強制するタイマを有する。
【００８８】
本発明は、１つのコンピューティング環境の信頼性が、第２のコンピューティング環境に投影されることを可能にする機構を提供する。単一のマシン上で実行される２つ以上のオペレーティングシステムが、単一のマシン上で互いに対話する必要がある「環境」の例であるが、本発明は、従来のオペレーティングシステムに限定されないことが理解されよう。さらに、本明細書で説明する技術の少なくとも一部を一般的なケースで使用して、任意のタイプの実行可能なエンティティ（例えば、任意のソフトウェア）から他の任意のタイプのエンティティに信頼性を投影することができる。
【００８９】
２つのエンティティが単一のマシン上に並存し、互いに対話する必要がある場合、対話は、様々な形態をとることが可能である。例えば、２つのエンティティは、互いにデータをやりとりするように通信する必要がある場合もある。エンティティがオペレーティングシステム（または仮想マシン上でスクリプトを実行するスクリプトエンジンなどの他の種類の実行環境）である場合、エンティティは、他の形で、例えば、メモリを共用して、プロセッサ上の時間を共用して、リソースを共用して、割り込みを処理して、互いに対話する必要がある場合もある。本発明は、一方のエンティティが自らの信頼性を他方のエンティティに投影することを可能にしながら、２つのエンティティが、以上のタイプの対話に参加することができるようにする技術を提供する。
【００９０】
前述した実施形態は、監視されるリソースとしてメモリを中心に扱うが、本発明は、そのように限定されない。メモリ以外のリソースに関するセキュリティモニタが利用可能な場合、基本監視エージェント（例えば、アークエンジェル）が、そのようなモニタを信頼された代理として使用して、自らの信頼領域（sphere of trust）を拡張することができる。例えば、セキュリティで保護されたＮＩＣが利用可能な場合、基本監視エージェントは、セキュリティで保護されたＮＩＣを使用して、あるヘッダを有するパケットを送ることを除外することができる。一般に、そのような信頼された代理は、測定不変点、例えば、＜ｒｅｇｅｘｐ＞に一致するヘッダを理解し、その不変点の変更時に監視エージェントに信頼できる形で警報するだけでよい。
【００９１】
以上の説明は、単に説明のために提示しており、本発明を限定するものと解釈されるべきではないことに留意されたい。本発明を様々な実施形態に関連して説明してきたが、本明細書で使用した言葉は、限定の言葉ではなく、説明および例示の言葉であることが理解されよう。さらに、本発明を特定の手段、材料、および実施形態に関連して本明細書で説明してきたが、本発明は、本明細書で開示した詳細に限定されるものではなく、むしろ、本発明は、特許請求の範囲に含まれるようなすべての機能的に等価の構造、方法、および用途に拡張される。本明細書の教示の恩恵を受ける当業者は、本発明の多数の変更形態を実施することができ、変更は、本発明の態様の範囲および趣旨を逸脱することなく実施することができる。
【図面の簡単な説明】
【００９２】
【図１】本発明の態様を実装することができる典型的なコンピューティング環境を示すブロック図である。
【図２】信頼された環境と信頼されていない環境の両方を有する既存のＮＧＳＣＢシステムを示すブロック図である。
【図３】本発明による例示的な投影システムを示すブロック図である。
【図４】本発明による例示的な投影方法を示す流れ図である。
【符号の説明】
【００９３】
２０１，３０１  オペレーティングシステム
２０５，３０５  アプリケーション１
２１０，３１０  アプリケーション２
２５１，３５１  ネクサス
２５５，３５５  信頼されたエージェント１
２６０，３６０  信頼されたエージェント２
３８０  ＢＭＡ（アークエンジェル）
３９０  ＭＡ１（エンジェル１）
３９５  ＭＡ２（エンジェル２）
【図１】
0004726449.tif 000002
【図２】
0004726449.tif 000003
【図３】
0004726449.tif 000004
【図４】
0004726449.tif 000005