(57)【特許請求の範囲】
【請求項１】
リソースロケーションから受け取られたコードアセンブリに関連する許可セットを処理して前記コードアセンブリの実行を制御する方法であって、
前記コードアセンブリに関連する少なくとも１つの許可を含む前記許可セットを受け取るステップと、
前記コードアセンブリに関連する要求可能な許可セットを受け取るステップと、
前記コードアセンブリのランタイム実行に先立って前記要求可能な許可セットによって指定される前記許可セットのサブセットから交付可能な許可セットを生成するステップと、
前記要求可能な許可セットにおいて指定される第１のオプションの許可のセットが前記許可セットのサブセットである場合に、コードアセンブリ機能の第１のレベルを実行するステップと、
前記要求可能な許可セットにおいて指定される第２のオプションの許可のセットが前記許可セットのサブセットである場合に、コードアセンブリ機能の第２のレベルを実行するステップとを含み、
前記要求可能な許可セットは、前記コードアセンブリに関連して最低限の許可条件を指定し、
前記生成する動作は、前記最低限の許可条件に基づいて前記許可セットをフィルタして前記交付可能な許可セットを生成して、前記交付可能な許可セットが前記許可セットのサブセットを含み、不必要な許可セットの交付が回避されることを特徴とする方法。
【請求項２】
前記生成する動作は、前記許可セットおよび前記要求可能な許可セットについて論理集合演算を計算して前記交付可能な許可セットを生成することを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記許可セットと前記要求可能な許可セットによって指定される最低限の許可条件とを比較するステップと、
前記許可セットが前記最低限の許可条件を満たすことができない場合、前記コードアセンブリのロードを防止するステップとをさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記許可セットが、前記要求可能な許可セットによって指定される最低限の許可条件を満たすことができない場合、前記コードアセンブリの実行を防止するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項５】
セキュリティポリシー指定に基づき、１つ以上のコードグループを含むコードグループ集合を定義するステップと、
前記コードアセンブリに関連する証拠を受け取るステップと、
前記証拠に基づき、前記１つ以上のコードグループにおける前記コードアセンブリのメンバーシップを評価するステップと、
前記１つ以上のコードグループにおける前記コードアセンブリの前記メンバーシップに基づいて前記許可セットを生成するステップとをさらに含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記要求可能な許可セットは複数の分類された許可要求セットを指定し、それぞれのタイプの許可要求セットにより前記コードアセンブリに関連して要求される別個のタイプの許可選好を指定することを特徴とすることを特徴とする請求項１に記載の方法。
【請求項７】
前記最低限の許可条件が前記許可セットのサブセットでない場合、前記コードアセンブリのロードを防止するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記最低限の許可条件が前記許可セットのサブセットでない場合、前記コードアセンブリの実行を防止するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記要求可能な許可セットは、前記コードアセンブリに関連して前記交付可能な許可セットから除外される１つ以上の許可のセットを指定する拒否要求セットを指定することを特徴とする請求項１に記載の方法。
【請求項１０】
前記拒否要求セットによって指定された１つ以上の許可の前記セットを前記交付可能な許可セットから除外するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記要求可能な許可セットが前記コードアセンブリに関連して要求されるオプションの許可のセットを指定するオプションの要求セット、および前記コードアセンブリに関連して要求可能な許可のセットを指定する最低限の要求セットを含む方法であって、
前記生成する動作は、
前記オプションの要求セット並びに最低限の要求セットの和集合を計算して最大限の要求セットを提供すること、および、
前記最大限の要求セットと前記許可セットの積集合を計算することを含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記要求可能な許可セットが前記コードアセンブリに関連して前記交付可能な許可セットから除外される１つ以上の許可のセットを指定する拒否要求セットをさらに指定する方法であって、
前記生成する動作は、
前記最大限の要求セットと前記許可セットの前記積集合から、前記拒否要求セットの中で指定された１つ以上の許可の前記セットを除くことをさらに含むことを特徴とする請求項１１に記載の方法。
【請求項１３】
前記要求可能な許可セットを受け取る前記動作は、前記要求可能な許可セットおよび前記コードアセンブリを単一回のネットワーク通信で受け取ることを含むことを特徴とする請求項１に記載の方法。
【請求項１４】
前記要求可能な許可セットを受け取る前記動作は、前記コードアセンブリが受け取られるネットワーク通信とは別個のネットワーク通信で前記要求可能な許可セットを受け取ることを含むことを特徴とする請求項１に記載の方法。
【請求項１５】
リソースロケーションから受け取られたコードアセンブリに関連する許可セットを処理して前記コードアセンブリの実行を制御するためのポリシーマネージャモジュールであって、
前記コードアセンブリに関連する前記許可セットおよび要求可能な許可セットを受け取り、前記要求可能な許可セットに基づいて前記許可セットを前記コードアセンブリの実行の前に、フィルタするフィルタを含み、
前記フィルタは、前記要求可能な許可セットによって指定された前記許可セットのサブセットから交付可能な許可セットを生成し、不必要な許可セットの交付が回避されることを特徴とするモジュール。
【請求項１６】
証拠セットを受け取り、前記証拠セットに基づいて前記コードアセンブリに関連して許可セットを生成する許可セット生成器をさらに含むことを特徴とする請求項１５に記載のポリシーマネージャモジュール。
【請求項１７】
前記フィルタは、前記許可セットおよび前記要求可能な許可セットについて論理集合演算を計算して交付可能な許可セットを生成することを特徴とする請求項１５に記載のポリシーマネージャモジュール。
【請求項１８】
前記フィルタは、前記許可セットが要求可能な許可セットによって指定される最低限の許可条件を満たすことができない場合、前記コードアセンブリのロードを防止することを特徴とする請求項１５に記載のポリシーマネージャモジュール。
【請求項１９】
前記フィルタは、前記許可セットが要求可能な許可セットによって指定される最低限の許可条件を満たすことができない場合、前記コードアセンブリの実行を防止することを特徴とする請求項１５に記載のポリシーマネージャモジュール。
【請求項２０】
前記要求可能な許可セットは複数の分類された許可要求セットを指定し、それぞれのタイプの許可要求セットにより前記コードアセンブリに関連して要求される別個のタイプの許可選好を指定することを特徴とする請求項１５に記載のポリシーマネージャモジュール。
【請求項２１】
前記要求可能な許可セットは、前記コードアセンブリに関連して要求可能な最低限の許可のセットを指定することを特徴とする請求項１５に記載のポリシーマネージャモジュール。
【請求項２２】
前記要求可能な許可セットは、前記コードアセンブリに関連して要求可能なオプションの許可のセットを指定することを特徴とする請求項１５に記載のポリシーマネージャモジュール。
【請求項２３】
前記フィルタは、前記要求可能な許可セットの拒否要求セットの中で指定された１つ以上の許可を除外して交付可能な許可セットを生成することを特徴とする請求項１５に記載のポリシーマネージャモジュール。
【請求項２４】
前記要求可能な許可セットが前記コードアセンブリに関連して要求可能なオプションの許可のセットを指定するオプションの要求セット、および前記コードアセンブリに関連して要求可能な最低限の許可のセットを指定する最低限の要求セットを指定するポリシーマネージャモジュールであって、
前記フィルタする動作は、
前記オプションの要求セット並びに最低限の要求セットの和集合を計算して最大限の要求セットを提供すること、および、
前記最大限の要求セットと前記許可セットの積集合を計算することを含むことを特徴とする請求項１５に記載のモジュール。
【請求項２５】
前記フィルタがオプションの要求セットに基づいて交付可能な許可セットを生成し、前記交付可能な許可セットは、前記オプションの要求セットが前記交付可能な許可セットのサブセットである場合は第１のレベルのコードアセンブリ機能に関連付けられ、前記オプションの要求セットが前記交付可能な許可セットのサブセットではない場合は第２のレベルのコードアセンブリ機能に関連付けられることを特徴とする請求項１５に記載のポリシーマネージャモジュール。
【請求項２６】
セキュリティポリシー指定に基づいて１つ以上のコードグループを含むコードグループ集合を生成するコードグループ集合生成器と、
前記コードアセンブリに関連する証拠に基づき、前記１つ以上のコードグループにおける前記コードアセンブリのメンバーシップを判定するメンバーシップエバリュエータと、および、
前記１つ以上のコードグループにおける前記コードアセンブリの前記メンバーシップに基づいて前記許可セットを生成する許可セット生成器をさらに含むことを特徴とする請求項１５に記載のポリシーマネージャモジュール。
【請求項２７】
リソースロケーションから受け取られたコードアセンブリに関連する許可セットを処理して前記コードアセンブリの実行を制御するコンピュータプロセスをコンピュータシステム上で実行するためのコンピュータプログラムを符号化するコンピュータプログラムであって、
前記コンピュータプロセスは、
セキュリティポリシー指定に基づいて１つ以上のコードグループを含むコードグループ集合を定義すること、
前記コードアセンブリに関連する証拠を受け取ること、
前記証拠に基づき、前記１つ以上のコードグループにおける前記コードアセンブリのメンバーシップを評価すること、
前記１つ以上のコードグループにおける前記コードアセンブリの前記メンバーシップに基づいて前記許可セットを生成すること、
前記コードアセンブリに関連して要求可能な許可セットを受け取ること、および、
前記コードアセンブリの実行の前に前記許可セットおよび前記要求可能な許可セットに対する論理集合演算を計算して交付可能な許可セットを生成すること、
前記要求可能な許可セットにおいて指定されるオプションの許可のセットが前記許可セットのサブセットでない場合に、前記コードアセンブリの基本的な機能を実行することと、および
前記要求可能な許可セットにおいて指定される前記オプションの許可のセットが前記許可セットのサブセットである場合に、前記コードアセンブリの高度な機能を実行することを含み、
前記要求可能な許可セットは、前記コードアセンブリに関連して最低限の許可条件を指定し、
前記交付可能な許可セットを生成する動作は、前記最低限の許可条件に基づいて前記許可セットをフィルタして前記交付可能な許可セットを生成して、前記交付可能な許可セットが前記許可セットのサブセットを含み、不必要な許可セットの交付が回避されることを特徴とするコンピュータプログラム。
【請求項２８】
前記要求可能な許可セットが前記コードアセンブリに関連して要求可能なオプションの許可のセットを指定するオプションの要求セット、および前記コードアセンブリに関連して要求可能な最低限の許可のセットを指定する最低限の要求セットを含むコンピュータプログラムであって、
前記コンピュータの動作は、
前記オプションの要求セット並びに最低限の要求セットの和集合を計算して最大限の要求セットを提供すること、および、
前記最大限の要求セットと前記許可セットの積集合を計算することを含むことを特徴とする請求項２７に記載のコンピュータプログラム。
【請求項２９】
前記要求可能な許可セットが前記コードアセンブリに関連して前記交付可能な許可セットから除外される１つ以上の許可のセットを指定する拒否要求セットをさらに指定するコンピュータプログラムであって、
前記計算の動作は、
前記最大限の要求セットと前記許可セットの前記積集合から、前記拒否要求セットの中で指定された１つ以上の許可の前記セットを除くことをさらに含むことを特徴とする請求項２８に記載のコンピュータプログラム。
【請求項３０】
前記要求可能な許可セットは、前記コードアセンブリにより必要とされる前記許可の特徴を含むことを特徴とする請求項１に記載の方法。
【請求項３１】
前記交付可能な許可セットに基づいて前記コードアセンブリの実行を制御するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３２】
前記コードアセンブリの実行を制御するステップは、
前記コードアセンブリに関連した許可の要求を受け取ること、および
前記コードアセンブリのランタイム実行の間に、前記交付可能な許可セットの機能として、前記要求された許可を選択的に交付することを含むことを特徴とする請求項３１に記載の方法。
【発明の詳細な説明】
【０００１】
本出願は、合衆国以外のすべての国々を指定する合衆国国籍、合衆国所在のマイクロソフト（登録商標）コーポレーション（MICROSOFT（登録商標）CORPORATION）によるＰＣＴ出願として出願されている。
【０００２】
（技術分野）
本発明は一般にコンピュータセキュリティに関し、より詳細には、コードアセンブリに関連する許可要求を使用して許可セットをフィルタすることに関する。
【０００３】
（発明の背景）
ユーザのシステムに対する許可のないアクセスを許すなどのセキュリティリスクが、多くのオンライン活動に付き物である。したがって、ユーザのシステムを保護するセキュリティ機構が開発されている。例えば、ユーザは、インターネットからオンデマンドアプリケーションをダウンロードし、ブラウザ内からそのアプリケーションを実行することができる。ユーザのシステムリソース（例えば、ユーザのハードディスク上のディレクトリ）に対する許可のないアクセスを防止するため、ユーザのシステムは、ブラウザ環境内で実施される「サンドボックス」セキュリティによって保護されている。サンドボックスセキュリティは、セキュアな領域の外部に常駐するシステムリソースにアプリケーションがアクセスするのを防止するようにアプリケーションが実行されることが可能な、コンピュータメモリの限られたセキュアな領域に関わる。
【０００４】
ただし、一部の状況では、ユーザは、ダウンロードされたアプリケーションが、ユーザのシステム内部のあるリソースに制御されたアクセスを行うのを許すことを望むことが可能である。例えば、ユーザは、オンデマンドワードプロセッシングアプリケーションを使用してドキュメントを生成した後、そのドキュメントをユーザのシステム中のディレクトリに保存するのを望むことが可能である。
【０００５】
そのようなアプリケーションにユーザのシステムに対するセキュアで、制御されたアクセスを提供するための既存の手法は、あまりにも扱いにくく、柔軟性を欠いている。一方では、例えば、所与のアプリケーションが許可セットに関連付けられるセキュリティポリシーが、ポリシーデータベース内部で定義される。このセキュリティポリシーは、出所（origin）情報、署名情報、およびアクセス制約との組み合わせで、アプリケーションとユーザのシステムの間の「信頼される」関係を定義するのに役立つ。
【０００６】
次の例を考慮されたい。
【０００７】
【表１】
0004718753.tif 000002
【０００８】
この例では、ソースロケーション"www.BobsWidgets.com"からのアプレットが、BobsCertificateの中に含まれる他の鍵に対応する鍵で署名されている場合、このアプレットに、あるファイルアクセス許可を交付する。アプレットは、従来、オペレーティングシステム内から直接にではなく、ブラウザ内から実行されるように設計されたプログラムである。このアプレットには、ホストシステム上の「/tmp」ディレクトリからファイルを読み取り、また「/tmp/bwdir」ディレクトリの中にファイルを作成し、書き込む許可が交付される。別の一般的な許可修飾子が、「実行する」許可である。その他のセキュリティポリシー指定により、例えば、アプリケーションのソースに関わらず、またはアプリケーションに署名されているか、署名されていないかに関わらず、任意のシステムロケーションにおけるファイルにアクセスする広い許可が交付されることが可能である。
【０００９】
そのような手法では、セキュリティポリシーは、特に静的であり、長期間にわたり固定されたままである。インターネットを介するオンデマンドアプリケーション処理がより一般的になるにつれ、実質的に、静的セキュリティポリシーでは、あまりにも制約がある。さらに、実際に行われる（通常、システム管理者によって行われる）頻度の低いセキュリティポリシー変更は、セキュリティの弱点またはセキュリティギャップを導入する、または前にアクセスの許可を受けたアプリケーションにアクセスを行うことを拒否することにより、許可されたアプリケーションが実行されるのが妨げられる可能性がある。このため、既存のセキュリティアーキテクチャは、ユーザのシステムに対するある量のアクセスをアプリケーション（またはアプリケーションの所与のコードアセンブリ）に任せることができるかどうかを動的に、また柔軟に判定することができない。
【００１０】
さらに、既存のセキュリティフレームワークでは、許可の割振りが、ユーザのシステムにおいて定義されたセキュリティポリシーによって決定され、場合によっては、アプリケーションの実行中またはロード中のユーザに対するクエリによって決定される。このため、オンデマンドアプリケーションの構成要素は、一般に、どの許可がセキュリティポリシーに従って割り振られるかに影響を与えない。例えば、許可されたロケーションからの構成要素に、コンピュータシステムの保護されたエリアに対する広汎なアクセスが交付される可能性があり、その構成要素が、そのようなアクセスを必要としない、または所望さえしない可能性があっても交付される可能性がある。責任上の理由から、構成要素は、より限られたアクセスを所望する可能性がある。さらに、構成要素は、最低限の許可のセットなしには、実行することができない可能性がある。既存のセキュリティフレームワークでは、コードアセンブリの実行中、許可が欠如されているために要求された動作が失敗したときにだけ、不十分な許可交付セットが検出され、その時点では、実行時間が無駄になっており、誤り回復がより複雑である可能性がある。
【００１１】
（発明の概要）
本発明によれば、以上の問題およびその他の問題が、リソースロケーションから受け取られたコードアセンブリに対して許可交付セットを生成する証拠ベースのポリシーマネージャによって解決される。許可交付セットは、コードアセンブリに関連して受け取られた許可要求によって影響される（例えば、フィルタされる）ことが可能である。許可要求は、コードアセンブリの許可ニーズの特性を定義することができる。例えば、許可要求は、少なくとも基本的機能を伴って適切に動作するのにコードアセンブリによって必要とされる許可を指定する最低限の許可セットを含むことが可能である。また、許可要求は、代替レベルの機能を提供するのにコードアセンブリによって必要とされる許可を指定するオプションの要求セットを含んでもよい。さらに、許可要求は、コードアセンブリに交付されるべきでない許可を指定する拒否要求セットを含むことも可能である。
【００１２】
本発明の実施形態では、リソースロケーションから受け取られたコードアセンブリに関連する許可セットを処理するための方法が提供されて、コードアセンブリの実行が制御される。許可セットは、コードアセンブリに関連する少なくとも１つの許可を含む。許可要求セットは、コードアセンブリに関連して受け取られる。許可セットが、許可要求セットに基づいてフィルタされてコードアセンブリの実行が制御される。
【００１３】
本発明の別の実施形態では、方法は、１つ以上のコードグループにおけるコードアセンブリのメンバーシップに基づいて許可セットを生成することをさらに含む。コードグループ集合が、セキュリティポリシー指定に基づいて定義される。コードグループ集合は、１つ以上のコードグループを含む。証拠が、コードアセンブリに関連して受け取られる。１つ以上のコードグループにおけるコードアセンブリのメンバーシップが、その証拠に基づいて評価される。
【００１４】
本発明のさらに別の実施形態では、リソースロケーションから受け取られたコードアセンブリに関連する許可セットを処理してそのコードアセンブリの実行を制御するためのポリシーマネージャモジュールが提供され、このモジュールは、コードアセンブリに関連する許可セットおよび許可要求セットを受け取るフィルタを含む。また、フィルタは、許可要求セットに基づいて許可セットをフィルタして、コードアセンブリの実行を制御する。
【００１５】
本発明のその他の実施形態では、製造品が、コンピュータプログラム（computer program products）として提供される。コンピュータプログラムの一実施形態は、コンピュータシステムによって読取り可能であり、リソースロケーションから受け取られたコードアセンブリに関連する許可セットを処理してそのコードアセンブリの実行を制御するためのコンピュータプロセスを実行するためのコンピュータプログラムを符号化するコンピュータプログラム記憶媒体を提供する。コンピュータプログラムの別の実施形態は、コンピュータシステムによるキャリアで実現され、リソースロケーションから受け取られたコードアセンブリに関連する許可セットを処理してそのコードアセンブリの実行を制御するためのコンピュータプログラムを符号化するコンピュータデータ信号で提供することができる。
【００１６】
一実施形態では、コンピュータプログラムは、セキュリティポリシー指定に基づいてコードグループ集合を定義するコンピュータプロセスをコンピュータシステム上で実行するためのコンピュータプログラムを符号化する。コードグループ集合は、１つ以上のコードグループを含む。証拠が、コードアセンブリに関連して受け取られる。１つ以上のコードグループにおけるコードアセンブリのメンバーシップが、その証拠に基づいて評価される。許可セットは、その１つ以上のコードグループにおけるコードアセンブリのメンバーシップに基づいて生成される。許可セットは、コードアセンブリに関連する少なくとも１つの許可を含む。許可セットおよび許可要求セットに対して論理集合演算が行われて、許可交付セットが生成される。
【００１７】
本発明の実施形態の大きな効用は、許可要求に従ってポリシーマネージャによってコードアセンブリに交付される許可がフィルタされることである。これにより、コードアセンブリが、適用可能なセキュリティポリシーが許すものと協調して、自らが受け取る許可に影響を与える。許可は、コンピュータシステム内部でコードアセンブリの実行を制御するのに使用される。コードアセンブリによって実際に要求された許可だけを交付するのが有利である。例えば、セキュリティポリシーが、信頼されるコードアセンブリに広い許可を交付することが可能である。ただし、そのコードアセンブリが所与の許可を要求しない場合、そのコードアセンブリにおける誤りによって生じさせられるようなコンピュータシステムの保護されたエリアへの不慮のアクセスを回避することができる。さらに、コードアセンブリは、所与の許可のセットを拒否して、コンピュータシステムの保護されたエリアにアクセスする（また、場合によっては破壊する）ことで責任を負う可能性にさらされるのを回避することができる。
【００１８】
本発明を特徴付ける以上の特徴およびその他の様々な特徴、並びにその他の利点は、以下の詳細な説明を読み、関連する図面を詳しく見ることで明白となる。
【００１９】
（発明の詳細な説明）
本発明の実施形態は、リソースロケーションから受け取られたコードアセンブリに関する許可交付セットを生成する証拠ベースのポリシーマネージャを提供する。一般に、コードアセンブリは、.EXEファイル、または.DLLファイルなどのパッケージ化されたコードの単位である。ポリシーマネージャは、ランタイム環境の確認モジュールおよびクラスローダと組み合わせで、コンピュータシステム（例えば、Webクライアントまたはネットワーク化されたワークステーション）において実行することができる。ただし、ポリシーマネージャはランタイム環境の外部でも実行することができる。コードアセンブリに対して生成された許可交付セットが、ランタイム呼出しスタックの中で適用されて、システムがコードアセンブリによる所与のシステム動作が許可されるかどうかを判定するのを助ける。ポリシーマネージャは、コードアセンブリに関連して受け取られた許可要求を処理することができる。さらに、コードアセンブリと証拠をともに、ローカルソース（例えば、ローカルのマシン内部から）、ローカルネットワークまたは周辺機器、またはネットワーク（例えば、インターネット）を介する遠隔リソースロケーションから受け取ることができる。
【００２０】
本発明の実施形態では、許可要求を使用して、コードアセンブリに関連して受け取られたセキュリティポリシー指定および証拠に基づいてポリシーマネージャによって最初に提供された許可がフィルタされる。これにより、コードアセンブリが、そのコードアセンブリに関連付けられる結果の許可交付セットに影響を与えて、過度の、または不必要な許可を受け取るのを回避するようにすることができる。
【００２１】
図１は、本発明の実施形態における証拠ベースのセキュリティポリシーマネージャ１０４を描いている。サーバなどのリソースロケーション１００がネットワーク（図示せず）を介してコンピュータシステム１０２（例えば、WebクライアントまたはWebサーバ）によってアクセス可能である。リソースロケーションは、一般にＵＲＩ（ユニフォームリソース識別子）で示され、ＵＲＩはWorld Wide Web上のオブジェクトを参照するすべてのタイプの名前およびアドレスの総称である。ＵＲＬ（ユニフォームリソースロケータ）は一種のＵＲＩである。例としてのリソースには、限定するものとしてではなく、ネットワークを介してアクセス可能なドキュメント、イメージ、オーディオデータ、アプリケーション、ルーチン、並びにその他のデータおよびコードデータストアが含まれることが可能である。リソースロケーションは、コンピュータシステム１０２にローカルであることもコンピュータシステム１０２に遠隔である（例えば、インターネットで結合される）ことも可能であることを理解されたい。
【００２２】
本発明の実施形態に関係のある１つのタイプのリソースが、コードアセンブリである。コードアセンブリは、例えばアプレットコード、アプリケーションコード、クラスコード、ルーチンコード、およびデータから成ることが可能である。コードアセンブリに含まれるコードおよびデータは、バイトコード、中間コード、マシンコード、およびデータ構成要素（クラス、イメージ、オーディオクリップおよびビデオクリップ等）の形であることが可能である。さらに、リソースロケーションからダウンロードされる１つ以上のクラスを含むアーカイブファイルにコードアセンブリをパッケージ化することもできる。本発明の一実施形態では、アプリケーションのクラスを組み合わせてモジュール（リンクプロセスの出力）にし、また１つ以上のモジュールを組み合わせてコードアセンブリにすることができる。
【００２３】
図１は、コンピュータシステム１０２上で実行されるダウンロードされたアプリケーションに関して描かれている。別の実施形態は、ダウンロードされたアプレット、ACTIVEXコントロール、並びにその他のルーチンおよびオブジェクトを含んでいてもよい。一例としてのダウンロードされたアプリケーションは、１つ以上のローカルまたは遠隔のコードアセンブリにおいて定義されたオブジェクトから成る。ローカルコードアセンブリは、コンピュータシステム１０２内部に記憶され、必要なときにメモリの中にロードされる。遠隔コードアセンブリは、リソースロケーション１００のようなリソースロケーションからダウンロードされる。
【００２４】
コンピュータシステム１０２が、ランタイム環境を開始してダウンロードされたアプリケーションを実行し、システム１０２のセキュリティを管理する。コンピュータシステム１０２のランタイム環境は、ランタイム環境の外部にあるオペレーティングシステムシェル、ブラウザ、ＳＱＬサーバ、またはその他のコードなどの「信頼されるホスト」によって初期化されることが可能である。ホストも、アプリケーションを構成する様々なコードアセンブリ１０６をシステム１０２にダウンロードし、実行のために仮想マシン１１０にそのコードアセンブリ１０６を渡すことによってアプリケーションの実行を開始する。
【００２５】
仮想マシンは、別個のコンピュータの機能の多くを実行する自己完結型の動作環境を提供する。例えば、ホストオペレーティングシステムに直接にアクセスすることなく、仮想マシンにおいてアプリケーションを実行することができる。この設計は、少なくとも２つの利点を有する。
・システム独立性：アプリケーションは、システムの基礎となるハードウェアおよびソフトウェアに関わらず、そのアプリケーションが書かれているプログラミング言語をサポートする任意の仮想マシンにおいて同様に実行される。例えば、同一のアプリケーション（すなわち、同一のプログラミングコード）が、異なるタイプのマイクロプロセッサおよび異なるタイプのオペレーティングシステムを有する、異なるコンピュータシステム上の仮想マシンにおいて実行されることが可能である。
・セキュリティ：仮想マシンにおいて実行されているアプリケーションが、一般に、保護されたシステムリソース（すなわち、オペレーティングシステム、ファイルシステム、メモリの保護された領域、接続されたネットワークまたは接続された周辺機器）にアクセスするのが防止される。ただし、本発明の実施形態は、証拠およびセキュリティポリシーを評価して、アプリケーションが保護されたシステムリソースにアクセスするのを許すかどうかを判定できることを理解されたい。所与の動作（operation）に対する許可が交付された場合、アプリケーションは、その動作に関して「信頼される」ものとみなされる。コードアセンブリに関連して受け取られた許可要求を使用して、そのコードアセンブリがどの動作を行うことができるかを判定するのに使用される結果の許可交付セットをフィルタすることができる。
【００２６】
アプリケーション構成要素（例えば、ダウンロードされたコードアセンブリ１０６）がシステム１０２によって受け取られ、確認モジュール１１２がコードアセンブリ１０６の中のダウンロードされたコードが適切にフォーマットされており、コード言語または仮想マシン１１０の安全制約に違反しないことを確かめる。また、ポインタアドレス指定が存在しないこと、内部スタックにオーバーフローまたはアンダーフローが生じるのが不可能なこと、コード命令が正しく分類されたパラメータを有することを確認するなどのその他の確認も行うことができる。次に、コードアセンブリはクラスローダ１１３に渡され、クラスローダ１１３は、そのアプリケーションが、ランタイム環境内でシステムレベル構成要素に置き換わらないことを確実にする（すなわち、クラスローダは、ホストによって提供されたコードアセンブリが、要求されたときに実行されることを強制し、これにより、ダウンロードされたコードアセンブリとの名前のコンフリクトを排除する）。その後、クラスローダ１１３は、仮想マシン１１０からの要求に応答してランタイム呼出しスタック１１４上にコードアセンブリ１０６をロードする。
【００２７】
例えば、仮想マシンが、第２のコードアセンブリ（例えば、図２のパーサコードアセンブリ）によって提供されるルーチンを呼び出す第１のコードアセンブリ（例えば、図２のメインコードアセンブリ２０２）を実行する。クラスローダ１１３が第２のコードアセンブリに関する仮想マシンの要求を受け取り、第２のコードアセンブリをランタイム呼出しスタック１１４にロードして、第１のコードアセンブリが、必要とされるルーチンを呼び出すことができるようにする。
【００２８】
保護された領域に対する許可のないアクセスが防止されるのを確実にするため、ダウンロードされたコードアセンブリ１０６のそれぞれに関連する証拠１０８がポリシーマネージャ１０４に入力される。ポリシーマネージャ１０４は、各コードアセンブリに関連する許可交付セットを判定する（図４の許可交付セット４１４参照）。また、セキュリティポリシー指定１１６もポリシーマネージャ１０４に入力されて、適切な交付の計算を助ける。さらに、許可要求１２０がダウンロードされたコードアセンブリ１０６に関連して受け取られて、それぞれダウンロードされたコードアセンブリ１０６の許可ニーズの特性が指定される。一実施形態では、許可要求は、コードアセンブリ自体の中に２進シリアル化フォーマットで記録され、したがって、単一回のネットワーク通信でコードアセンブリとともにダウンロードされる。あるいは、許可要求は別のネットワーク通信でポリシーマネージャ１０４によってアクセス可能なリソースロケーションにおける別のどこかに記録されていてもよい。さらに、許可要求を記録することに関して２進シリアル化フォーマットが例としてのフォーマットとして指定されているが、本発明の範囲内で別のデータフォーマット（例えば、ＸＭＬ）も企図される。
【００２９】
さらに、ＸＭＬなどの１つのデータフォーマットが、許可要求を初期に指定するのに開発者によって使用されることが可能である。したがって、コードアセンブリに組み込むため、ＸＭＬ仕様の許可要求を２進シリアル化フォーマットなどの別のデータフォーマットに符号化することができる。さらに、一部のコンパイラは、開発者がコードアセンブリのソースコードの中で宣言セキュリティ注釈を使用して許可要求を指定できるようにしている。次に、コンパイラは、その注釈を符号化してコードアセンブリに組み込まれた許可要求にすることができる。
【００３０】
本発明の実施形態では、許可要求１２０は「分類（typed）」されており、したがって、各タイプの許可要求を適用して許可を異なる仕方でフィルタすることができる。以上の入力に基づき、ポリシーマネージャ１０４は各コードアセンブリに関する適切な交付を計算し、結果の許可交付セットをランタイム呼出しスタック１１４に渡す。
【００３１】
このため、ランタイム呼出しスタック１１４の中の各コードアセンブリは、対応する許可交付セット（例えば、図２の許可交付セット２０８、２１０、および２１２）に関連付けられている。交付セットがポリシーマネージャから受け取られ、対応するコードアセンブリに関して計算された様々な許可を定義する。各コードアセンブリに関連する許可は、すべて「証拠」１０８と呼ばれる、コードアセンブリの相対的出所（例えば、ローカルまたは遠隔）、コードアセンブリの特定の出所（例えば、特定のＵＲＬ）、またはコードアセンブリのその他の信頼特性に基づいて大幅に異なる可能性がある。本発明の実施形態では、信頼特性を使用して所与のコードアセンブリに関する許可交付セットが判定される。さらに、セキュリティポリシー指定１１６により、所与のコードアセンブリの信頼特性が評価される所与の企業、マシン、ユーザ、アプリケーション等に関するセキュリティフレームワーク内で、複数のポリシーレベルを定義することが可能である。
【００３２】
図２は、呼び出された順序で積み重ねられた個々のコードアセンブリを含むランタイム呼出しスタック２００を表している。個々のコードアセンブリは、遠隔リソースロケーションからダウンロードすること、または図１のコンピュータシステム１０２からローカルで取り出すことが可能である。個々のコードアセンブリは、図１の仮想マシン１１０によるアクセスおよび実行のためにクラスローダ１１３によってランタイム呼出しスタック１１４にロードされる。
【００３３】
例えば、コードアセンブリ２０２中のメインアプリケーションクラスのオブジェクトが、まずクラスローダにより、図示するランタイム呼出しスタック２００にロードされる。仮想マシンがそのメインクラスを実行すると、メインクラスはコードアセンブリ２０４からパーサオブジェクトを作成し、そのパーサオブジェクト中のメソッドを呼び出してコンピュータシステムの保護された領域中のデータファイルを構文解析する。したがって、クラスローダがコードアセンブリ２０４のパーサコードをランタイム呼出しスタック２００にロードする。その後、パーサオブジェクトがコードアセンブリ２０６からファイルアクセスオブジェクトを作成し、そのファイルアクセスオブジェクトの中のメソッドを呼び出して保護されたファイルに対する読取り動作を行う。したがって、クラスローダがコードアセンブリ２０６のファイルアクセスコードをランタイム呼出しスタック２００にロードする。
【００３４】
各許可交付セットが、ランタイム呼出しスタックの中のコードアセンブリに対応する。このため、保護されたリソースにアクセスしようとするコードアセンブリの試みが、関連する許可交付セット、並びにランタイム呼出しスタック２００中のその他のコードアセンブリの許可交付セットに照らして評価される。図２で示したアプリケーションによる保護されたファイルに対する読取り動作の例では、メインコードアセンブリ２０２が、許可交付セット２０８に関連している。メインコードアセンブリ２０２が許可交付セット２１０に関連しているパーサコードアセンブリ２０４の中のメソッドを呼び出す（矢印２１４で表される）。保護されたファイルにアクセスするため、パーサコードアセンブリ２０４は許可交付セット２１２に関連するファイルアクセスコードアセンブリ２０６中のメソッドを呼び出す（矢印２１６で表される）。ファイルアクセスコードアセンブリ２０６が保護されたファイルにアクセスすることができるかどうかを判定するため、許可交付セット２０８、２１０、２１２の「積集合（intersection）」が計算され、ファイルアクセス動作が許可されるかどうかを判定するのに使用される。例えば、許可交付セット２１２が保護されたファイルから読取りを行う許可を含むが、許可交付セット２０８または２１０の一方は、それを含まない場合には、保護されたファイルに対するアクセスが拒否される。
【００３５】
一般に、「積集合」演算（記号「∩」で表される）は、オペランドセットの共通要素をもたらす集合演算である。例えば、Set１が要素Ａ、Ｂ、およびＣを含み、Set２が要素Ｂ、Ｃ、およびＤを含む場合には、Set１とSet２の積集合（すなわち、Set１∩Set２）は、ＢおよびＣに等しい。これとは対照的に、「和集合」演算（記号「∪」で表される）は、オペランドセット中のすべての要素（すなわち、セット中のすべての要素の重複しない集合）をもたらす集合演算である。例えば、Set１が要素Ａ、Ｂ、およびＣを含み、Set２が要素Ｂ、Ｃ、およびＤを含む場合には、Set１とSet２の和集合（すなわち、Set１∪Set２）は、Ａ、Ｂ、Ｃ、およびＤに等しい。
【００３６】
図３は、本発明の実施形態における証拠ベースのセキュリティを管理するためのコンピュータシステムを描いている。サーバ３００（例えば、Webサーバ）が、通信網（図示せず）を介してクライアント３０２（例えば、Webクライアント）に結合される。クライアント３０２は、ランタイム環境（例えば、マイクロソフト（登録商標）コーポレーションからのCOM+2.0ランタイム環境）を実行してクライアント３０２上のアプリケーションの実行を管理する。本発明の実施形態では、ランタイム環境は、確認モジュール３０４、ローダモジュール３０６、およびポリシーマネージャ３０８を含む。
【００３７】
前述した通り、仮想マシン３１２による実行のためにコードアセンブリがランタイム呼出しスタック３１８にロードされる。コードアセンブリの第１のカテゴリはローカルコードアセンブリ３１４によって代表され、ローカルコードアセンブリ３１４はクライアント３０２上を出所（origin）としているため、一般に、信頼されるコードアセンブリとみなされる。これとは対照的に、コードアセンブリの第２のカテゴリは、ダウンロードされたコードアセンブリ３１６によって代表され、ダウンロードされたコードアセンブリ３１６は、サーバ３００などの遠隔のリソースロケーションまたは信頼されないリソースロケーションを出所とする可能性がある。本発明の実施形態では、ローカルコードアセンブリ３１４およびダウンロードされたコードアセンブリ３１６が、確認のために確認モジュール３０４に入力される。その後、コードアセンブリは、ローダモジュール３０６に入力されてランタイム呼出しスタック３１８にロードされる。
【００３８】
コードアセンブリ３１４および３１６は、一般に、各コードアセンブリに関する許可交付セットを計算するのに使用される証拠（または証明）に関連している。一例としての証拠構成要素は、AUTHENTICODE署名であることが可能である。別の例としての証拠構成要素は、ＰＩＣＳ（インターネットコンテンツ選択のためのプラットフォーム）ラベルであり、ＰＩＣＳラベルは、インターネットリソースのプロパティ（例えば、実行可能コードがウイルス検査済みである）を述べる。ＰＩＣＳラベルに関するさらなる詳細は、P.ResnickおよびJ.Millerによる「PICS:Internet Access Controls without Censorship（検閲なしのインターネットアクセス管理）」、Communications of ACM, 39（1996年）、87〜93ページで述べられており、この論文は、www.w3.org/pub/WWW/PICS/iacwcv2.htmにおいても閲覧可能である。証拠のその他の例には、限定するものとしてではなく、購入の証明またはライセンス、作成者識別子、ベンダ識別子、バージョニング情報、およびプログラム式の証明が含まれることが可能である。プログラム式の証明は、例えば、他の証明によって行われたステートメントを検査し、ネットワークから補足の情報をフェッチしてから、どの証拠ステートメントをポリシーマネージャ３０８に提供するかを決定するプログラムコードの形態であることが可能である。
【００３９】
コードアセンブリ自体に関する証拠は、ホストによって提供されること、またはコードアセンブリ自体から抽出することが可能である。ローカルの、またはホストによって提供される証拠３２２は黙示的に信頼され、真であると信じられる。ただし、ダウンロードされた、またはアセンブリによって提供された証拠３２０は黙示的に信頼されることはなく、自己確認が行われるか（例えば、デジタル署名されている）、または独立に確認されるものでなければならない。ダウンロードされた証拠３２０は、１つ以上のリソースロケーションからダウンロードされていることが可能であり、コードアセンブリの出所であるリソースロケーションからダウンロードされた証拠に限定されない。
【００４０】
ローカルの証拠３２２およびダウンロードされた証拠３２０はポリシーマネージャ３０８に入力され、ポリシーマネージャ３０８はセキュリティポリシーに基づいてその証拠を評価する。ポリシーマネージャ３０８内部で、証拠がセキュリティポリシー指定３２６（およびオプションとして、コードアセンブリによって要求された許可セットを定義する許可要求３２４）との組み合わせで評価されて、所与のコードアセンブリに対応する最終の許可交付セットが生成される。
【００４１】
本発明の実施形態では、許可要求３２４は１つ以上のコードアセンブリ３１４および３１６に関連し、３つのタイプの許可要求セット、すなわち、（１）最低限の要求セット（ＭｉｎＲＳ）、（２）オプションの要求セット（ＯｐｔＲＳ）、および（３）拒否要求セット（ＲｅｆｕｓｅＲＳ）の少なくとも１つを含むことが可能である。本発明の範囲内で別のタイプの許可要求セットも企図されることを理解されたい。
【００４２】
本発明の一実施形態（図６のフィルタリングの流れ図を参照）では、MinRSおよびRefuseRSに関するデフォルト値が、空集合に等しく、またOptRSに関するデフォルト値が、全集合に等しい。この結果、許可要求が全く提供されない場合には、図４の中間許可セット４２２が、結果の許可交付セット４１４として交付される。
【００４３】
最低限の要求セットは最低限の許可条件を定義しており、関連するコードアセンブリが実行されるのに必要とする最低限の許可のセットを含むことが可能である。ポリシーマネージャ３０８によって生成された許可交付セットが最低限の許可条件を満たさない場合（例えば、最低限の要求セットが図５の許可セット生成器５１８によって出力される中間許可セットのサブセットではない場合）は、ポリシーマネージャ３０８は、関連するコードアセンブリ３１４または３１６がロードされるべきでないとローダ３０６に知らせるポリシー例外を発生させる。この実施形態では、コードアセンブリのロードおよび実行に先立って、最低限の要求セットが関わるセキュリティ判定が評価される。あるいは、ポリシーマネージャ３０８が、コードアセンブリが不十分な許可交付セットを伴ってロードされるのを許すことが可能であり、ただし、この不十分な許可交付セットのため、コードアセンブリは実行することができない。
【００４４】
限定するものとしてではなく、順序付けされた要求セットの少なくとも１つが中間許可セットのサブセットである場合、最低限の許可条件が満たされる複数の順序付けされた要求セットを提供することを含め、本発明の範囲内で別の最低限の許可条件を使用することもできる。このため、満たされる第１の順序付けされた要求セットを使用して中間許可セットをフィルタすることができる。
【００４５】
さらに、限定するものとしてではなく、最低限の許可条件が満たされていないことを示す関連するコードアセンブリ３１４または３１６に関連する属性を設定することを含め、コードアセンブリが実行されるのを防止するための別の技法を使用することもできる。例えば、ローダ３０６が各コードアセンブリに関する属性を検査してから、コードアセンブリをロードすることに取りかかることが可能である。また、ローダ３０６が結果を仮想マシン３１２に戻して、コードアセンブリのロードが失敗し、実行できないことを示すことも可能である。
【００４６】
本発明の別の実施形態では、クライアント３０２内部のランタイム環境が、最低限の要求セットを満たす許可をコードアセンブリが獲得するのに失敗したのに応答して、修正処置を提供しようと試みることが可能である。例えば、最低限の要求セットが所与の保護されたディレクトリに書き込むための必須の許可を含む場合、ランタイム環境がユーザにクエリを行ってこの許可を交付することが可能である。さらに、ユーザが、そのような必須の許可を対話式に交付するのに必要とされる権限は、ユーザの身元に基づいて制限することができる（例えば、管理者ステータスを有するユーザだけが、対話式にそのような許可を交付することができる）。
【００４７】
オプションの要求セットは、交付されることをコードアセンブリが選好するが、コードアセンブリが実行されるのに絶対的に必要ではない許可を含む。そのようなオプションの許可により、コードアセンブリが、より高い機能を提供することが可能になる。ただし、オプションの許可が交付されない場合には、最低限の要求セットによって定義されるより基本的な機能がそれでも利用可能である。
【００４８】
本発明の一実施形態は、コードアセンブリにオプションの機能を組み込むことによってオプションの要求セットのオプションとしての性質を扱う。つまり、オプションの要求セット中の許可のいくつか、またはすべてが交付されなかった場合、コードアセンブリは、実行中、要求の動作が拒否されたとき（または、要求のオプションの許可が拒否されたとき）、このことを知ることができる。そのような拒否に応答して、コードアセンブリは、最低限の許可セットの中で示される許可などの、異なる許可を利用する別の、または追加のコードを実行することができる。この実施形態では、オプションの要求セットが関わるセキュリティ判定がコードアセンブリの実行中に評価される。
【００４９】
別の実施形態では、複数のオプションの要求セットが、ポリシーマネージャ３０８によって取得されてもよい。複数のオプションの要求セットを処理して、複数のレベルの機能に対応して要求された許可を指定するようにしてもよい。許可セットによって満たされることが可能な、または可能でないオプションの要求セットに基づき、ポリシーマネージャ３０８は、１つ以上のクラスをロードするのを除外するようローダ３０６に合図することができる。例えば、所与のクラスによって必要とされる許可が入手可能でないことをローダ３０６が事前に知っている場合、そのクラスをロードすることが必要ない可能性がある。そのようなオプションの要求セットに順序付けを行って、最高レベルの許可交付により、適切なコードアセンブリのロードが行われて、最高レベルの機能が提供されるようにすることができる。
【００５０】
あるいは、オプションの要求セットを使用してオプションの許可のグループを指定することができる。例えば、第１のレベルの機能を提供するのに、コードアセンブリが許可Ａ、Ｂ、Ｃ、およびＤ（第１のオプションの要求セットによって指定される）を必要とし、一方、第２のレベルの機能を提供するのに、そのコードアセンブリが許可ＡおよびＢ（第２のオプションの要求セットによって指定される）だけしか必要としないことが可能である。このため、許可セットが許可Ａ、Ｂ、およびＣだけしか提供できない場合、第１のオプションの要求セットは満たされないが、第２のオプションの要求セットは満たされる。したがって、第２のオプションの要求セットが許可セットをフィルタして許可ＡおよびＢだけを提供し、許可Ｃの不必要な交付を回避する。
【００５１】
さらに、確認モジュール３０４における確認プロセス、およびポリシーマネージャ３０８におけるセキュリティ管理プロセスが、同時に実行されることが可能であり、この２つのプロセスは、互いに影響を及ぼすように通信することができる。例えば、ポリシーマネージャ３０８は、証拠を評価して、所与のコードアセンブリのタイプの安全性が保証されるのを示すことができる。したがって、このタイプの安全性の保証が確認モジュール３０４に伝えられることが可能であり、確認モジュール３０４は、その情報に基づいてタイプを検査する動作をスキップすることができる。あるいは、確認モジュール３０４が、所与のコードアセンブリがタイプの安全性の検査に合格しないと判定することができる。これに応答して、確認モジュール３０４はポリシーマネージャ３０８と通信して、タイプの安全性の検査に合格しなかったにも関わらず、そのコードアセンブリに実行の許可が交付されるかどうかの照会を行うことができる。
【００５２】
図４は、本発明の実施形態における証拠ベースのセキュリティを管理するためのポリシーマネージャのモジュールを描いている。図４に関連して説明した実行可能なモジュールがコンピュータシステム上で実行可能なソフトウェアモジュールとして実装されていることが可能である。あるいは、ハードウェアで、またはハードウェアとソフトウェアの組み合わせで実装される実行可能なモジュールも本発明の範囲の中で企図される。さらに、本発明の範囲を逸脱することなく、本明細書で開示するモジュールをマージしてより少ない数のモジュールにするか、または分割して追加のモジュールにすることができる。
【００５３】
ポリシーマネージャ４００が、セキュリティポリシー指定４０２および証拠セット４０４を受け取るように結合される。セキュリティポリシー指定４０２は、１つ以上のコードグループの定義を指定する。一実施形態では、コードグループは１つ以上のコードグループ集合に構成される。あるいは、コードグループを１つ以上のコードグループ階層に構成してもよい。また、セキュリティポリシー指定は、１つ以上のポリシーレベルも定義することができる。証拠セット４０４は、コンピュータシステムによって受け取られたコードアセンブリに関連する信頼特性を定義する。
【００５４】
本発明の一実施形態では、パーサモジュール４０６がセキュリティポリシー指定４０２を受け取り、１つ以上の名前付きコードグループの定義を抽出する。各コードグループは、メンバーシップ基準、子定義（コードグループの０または１つ以上の子コードグループを指定する）、およびコードグループ許可セットに関連している。メンバーシップ基準は、所与のコードグループに関するメンバーシップの条件を指定し、証拠セットは、対応するコードアセンブリがそのコードグループのメンバーであるとみなされるためには、その条件を満たさなければならない。子コードグループ定義は、所与のコードグループの子を指定する。コードアセンブリが第１のコードグループ（すなわち、親コードグループ）におけるメンバーシップを証明した場合、そのコードアセンブリは、その親コードグループの子コードグループにおけるメンバーに入れるように考慮される。コードグループ許可セットは、コードグループに割り当てることができる許可の集合を表す。コードアセンブリがコードグループのメンバーであると判定された場合、関連する許可セットの許可がコードアセンブリに交付されることが可能であり、コードアセンブリは、ポリシーマネージャ内部でその他の動作を受ける。
【００５５】
その他のコードグループ実施形態には、別のデータ構成が含まれることが可能である。例えば、一実施形態では、コードグループ集合はそれぞれがメンバーシップ基準および許可セットを含み、前述の子コードグループ定義を省略するコードグループの１次元リストで表される。この実施形態では、１次元リストは、順序付けられていても、順序付けられていなくてもよい。さらに、本発明の範囲内でその他のデータ構成も企図される。
【００５６】
本発明の例としての実施形態では、許可セットに命名を行い、セキュリティポリシー指定４０２の中で識別を可能にすることができる。同じ名前の付けられた許可セットに複数のコードグループを割り当てることができる。このため、名前付き許可セットに変更（例えば、個々の許可の挿入または削除）が行われた場合、その変更は、その名前付き許可セットに関連するコードグループのすべてに影響を及ぼす。例えば、異なるコードグループのメンバーであるいくつかのエクストラネットビジネスパートナーのＷｅｂサイトに同じ許可を交付するため、単一の名前の付けられた許可セットを定義し、そのいくつかのコードグループに割り当てることができる。
【００５７】
本発明の実施形態では、３つのタイプの名前付き許可セットがサポートされる。すなわち、（１）標準の許可セット−このセットは、事前定義され、変更することができない、（２）事前定義された許可セット−このセットは、管理者が変更することができる、および（３）カスタムの許可セット−このセットは、許可セットの名前が標準の許可セットの名前または事前定義された許可セットの名前とコンフリクトしない限り、ユーザが定義することができる。一実施形態では、標準の許可セットは、すべてのポリシーレベルで利用可能であり、個別のどのポリシーレベルでも再定義することができない（汎用範囲）。この実施形態では、事前定義された許可セットおよびカスタムの許可セットは任意の所与のポリシーレベル中で定義されて参照され、その他のポリシーレベルからは参照することができない（ポリシーレベル範囲）。ただし、本発明の別の実施形態では、どの許可セットの範囲も所与のポリシーレベルを超えて広がることが可能であることを理解されたい。
【００５８】
次の表１は、本発明の実施形態で利用可能な標準の許可セットを説明している。インターネットセットおよびローカルイントラネットセットなどのいくつかの標準の許可セットは、事前定義されているが、ユーザまたは管理者によって変更されることが可能である。確認スキップなどのその他の許可セットは、本発明の実施形態では変更することができない。また、本発明の範囲内で別の名前付き許可セットも企図され、表１の中で説明する名前付き許可セットは、本発明を逸脱することなく変更することができる。
【００５９】
【表２】
0004718753.tif 000003
【００６０】
本発明の実施形態における例としての許可として、本明細書で多数の許可について述べたが、本発明の範囲内で企図される可能な許可のリストは、これらの例としての許可に限定されない。例えば、確認が失敗したのにも関わらず、コードアセンブリが実行されるのを許す許可を交付することもできる。あるコードアセンブリの中のクラスが、別のコードアセンブリ中のクラスから継承を行うことを可能にする別の許可（例えば、サブクラスに対する権利）を交付することもできる。
【００６１】
所与のコードグループに関連するコードグループ許可セットが、コードグループに関連する許可を指定することができる。あるいは、所与のコードグループに関連するコードグループ許可セットが、コードグループおよびすべての親元コードグループに関連する許可を指定することができる。この柔軟性により、セキュリティポリシー指定の中で様々なセキュリティ構成（例えば、ポリシーレベル、許可セット、メンバーシップ基準等）を定義することが可能になる。以下で述べる通り、ポリシーマネージャは、そのような様々なセキュリティ構成に対応するように開発することができる。
【００６２】
一実施形態では、セキュリティポリシー指定４０２は、それぞれが１つ以上のコードグループを有する複数のポリシーレベルも指定することができる。コードグループは、１つ以上のコードグループ集合に構成することができる。ポリシーレベルにより、管理者が、例えば、異なるマシン、異なるユーザ、異なるアプリケーション、異なる期間、異なるユーザグループ等に関して異なるセキュリティポリシーを定義することが可能になる。メンバーシップエバリュエータ４１０は、所与のポリシーレベルに関するポリシーレベル許可セットを生成する際、そのポリシーレベルに関連するコードグループ全部を横断（traverse）する。したがって、ポリシーマネージャ４００は個々のポリシーレベルに関連する許可セットを生成することができる。その後、複数のポリシーレベルからの許可セットを処理して（例えば、マージまたは選択して）、結果の許可交付セット４１４を生成することができる。
【００６３】
図示する実施形態では、コードグループ集合生成器モジュール４０８がパーサモジュール４０６から構文解析された定義を受け取り、コンピュータシステムのメモリの中で１つ以上のコードグループ集合を生成する。メンバーシップエバリュエータモジュール４１０は証拠セット４０４を受け取り、対応するコードアセンブリに関係する信頼特性（trust characteristics）を抽出する。メンバーシップエバリュエータモジュール４１０はコードグループ全体を横断して、コードアセンブリが１つ以上のコードグループのメンバーであるかどうかを判定する。許可セット生成器モジュール４１２が、メンバーシップエバリュエータモジュール４１０からメンバーシップ判定を受け取り、コードアセンブリがメンバーであると判定されたコードグループに関連するコードグループ許可セットの論理上の組み合わせに基づき、中間許可セット４２２を生成する。許可／要求フィルタモジュール４２４が中間許可セット４２２をフィルタして、結果の許可交付セット４１４を生成する。
【００６４】
図５は、本発明の実施形態においてポリシーマネージャが動作する例としてのポリシーレベルを描いている。セキュリティポリシー指定５００がポリシーマネージャ５０２上で処理されて、１つ以上のセキュリティポリシーレベル５０６、５０８、および５１０が生成される（この処理は、ポリシーレベルのそれぞれをポイントする破線で表される）。本発明の実施形態では、セキュリティポリシー指定５００はＸＭＬ（エクステンシブルマークアップ言語）ファイル内に書かれる。ただし、別の実施形態では、ＳＧＭＬ（標準一般化マークアップ言語）、ＨＴＭＬ（ハイパーテキストマークアップ言語）、ＲＤＦ（リソース記述フレームワーク）、ビジュアルベーシック、およびその他の標準およびカスタマイズされたデータフォーマットおよびコードフォーマットを限定するものとしてではなく含む、その他のデータフォーマットも使用することができる。
【００６５】
本発明の実施形態では、セキュリティポリシー指定５００は、各ポリシーレベルがコードグループから構成されたセキュリティポリシーの永続的な表現（例えば、ポリシーレベルの順序付けされた集合および／またはコードグループ集合）である。より下位のポリシーレベルは、一般に、より高位のポリシーレベルより制限的なポリシー制限を指定する。セキュリティポリシー指定５００は、通常、適切な許可を有するシステム管理者、ユーザ、またはアプリケーションセットアッププログラムによって生成される。例としてのポリシーレベルには、限定するものとしてではなく、企業ポリシーレベル、マシンポリシーレベル、ユーザポリシーレベル、およびアプリケーションポリシーレベルが含まれることが可能である。
【００６６】
本発明の一実施形態では、最高レベルのポリシーレベルは、任意の所与の企業内部のすべてのシステムに適用されるセキュリティポリシーを定義することが可能な企業ポリシーレベルである。より低いポリシーレベルは、所与のシステム上のすべてのユーザに適用されるセキュリティポリシーを定義することが可能なマシンポリシーレベルである。ユーザポリシーレベルは、ユーザがどの個別のシステムにログインしているかに関わらず、所与のユーザに適用されるセキュリティポリシーを定義することができる。アプリケーションポリシーレベルは、アプリケーションを実行するユーザまたはシステムに関わらず、所与のアプリケーションに適用されるセキュリティポリシーを定義することができる。本発明の範囲内で、さらなるポリシーレベルおよびポリシーレベル順序も企図される。
【００６７】
また、セキュリティポリシー指定５００は、コードグループ集合（例えば、コードグループレベルの集合）を使用してセキュリティを管理することもでき、コードグループ集合はメンバーシップ条件によって定義され、許可セットおよび特別の属性を含む。セキュリティポリシー指定５００は、関連する許可のセットを有するコードグループの宣言から成る。所与のコードグループのメンバーであるコードアセンブリには、そのコードグループに関連する許可セットからの許可が交付されることが可能である。コードグループメンバーシップは、デジタル署名、コードアセンブリの出所（origin）などのコードアセンブリに関連する証拠セット５０４を使用してポリシーマネージャ５０２によって判定される。管理者は、新しいコードグループに属するコードアセンブリに追加の許可を交付するため、コードグループ集合にコードグループを追加することができる。
【００６８】
本発明の実施形態では、コードグループに「排他」プロパティフラグを属性として与えることができ、このフラグは、その特定のコードグループに関連する許可だけが、メンバーのコードアセンブリに適用されるべきことを指定する。その他のメンバーコードグループからの許可セットは無視される（すなわち、マージされない）。
【００６９】
本発明の実施形態では、コードグループは、「オール」コードアセンブリに対応するルートノードを有するコードグループ階層中で定義される。このルートノードは、子ノードを有する親コードグループを表し、子ノードのそれぞれも子ノードを有することが可能であり、以下同様、コードグループ階層が形成される。限定するものとしてではなく、コードグループの順序付けされた、または順序付けされていないリストを含め、別のコードグループ集合も本発明の範囲内で企図される。ポリシーマネージャ５０２が、あるコードアセンブリが親コードグループのメンバーであると判定した場合には、そのコードアセンブリは親コードグループの子に照らして試験されて、子としてのメンバーシップが判定される。例としてのコードグループタイプおよびメンバーシップ基準を次の表２で説明しているが、本発明の範囲内でその他のコードグループタイプも企図される。さらに、コードグループタイプをプロパティに関連付けることができる。例えば、コードグループタイプ「ソフトウェア発行元」を「発行元：マイクロソフト（登録商標）」のように、特定の発行元「マイクロソフト（登録商標）」に関連付けることができる。
【００７０】
【表３】
0004718753.tif 000004
【００７１】
さらに、セキュリティポリシー指定５００は、複数のポリシーレベルを定義することができる。図示する実施形態では、各ポリシーレベル（例えば、企業レベル５０６、マシンレベル５０８、およびユーザレベル５１０）が個別のコードグループ集合を有する。前述した通り、本発明の範囲内で複数のポリシーレベルが割り振られる（例えば、ルートノードの子に関連するサブツリー１つあたり１つのポリシー）１つ以上のコードグループ集合などの、その他のポリシーレベル構成を使用してもよい。
【００７２】
図示する実施形態では、各ポリシーレベルからポリシーレベル許可セット（例えば、企業レベル許可セット５１２、マシンレベル許可セット５１４、またはユーザレベル許可セット５１６）が生成される。ポリシーレベル許可セットマージャ５１８が、ポリシーレベル許可セット５１２、５１４、および５１６をマージし、あるいは別の方法で処理して中間許可セット５２６を生成する。
【００７３】
許可／要求フィルタ５２４は、許可要求５２２を入力し、フィルタアルゴリズムを中間許可セット５２６に適用して、適切な場合、結果の許可交付セット５２０を生成する。
【００７４】
例としての実施形態では、許可／要求フィルタ５２４は、図６との組み合わせで説明する通り、フィルタアルゴリズムを適用して許可交付セット５２０を生成する。
１）MaxRS ＝（MinRS∪OptRS） [動作６００]
２）If（MinRSがIntPSのサブセットでない） [動作６０２]、then ポリシーマネージャ５０２が、ポリシー例外を発生させてコードアセンブリのロードおよび／または実行を防止する [動作６０４]
３）If（MinRSがIntPSのサブセットである） [動作６０２]、then PGS ＝（MaxRS∩IntPS）− RefuseRS [動作６０６]
４）If（PGSが実行許可を含む） [動作６０８]、then コードアセンブリが図３のローダ３０６によってロードされることが可能であり［動作６１０]、また、ＰＧＳがコードアセンブリに関連して図３のランタイムスタック３１８にロードされることが可能である［動作６１２］
５）If（PGSが実行許可を含まない） [動作６０８]、then ポリシーマネージャ５０２がポリシー例外を発生させてコードアセンブリのロードおよび／または実行を防止する [動作６１４］
ただし、PGSは許可交付セット５２０を表し、IntPSは中間許可セット５２６を表し、MaxRSは最大限の要求セットを表し、MinRSは最低限の許可要求を表し、OptRSはオプションの許可要求を表し、また、RefuseRSは拒否許可要求を表す。MinRS、OptRS、およびRefuseRSは、許可要求５２２の要素として受け取られる。
【００７５】
本発明の実施形態では、MinRS、OptRS、またはRefuseRSが指定されない場合、これらには、デフォルトの値が割り当てられる。MinRSおよびRefuseRSに関して、デフォルトの値は、空集合である。OptRSに関して、デフォルトの値は、全集合である。例えば、MinRSおよびOptRSが指定されない場合、PGSは、IntPS−RefuseRSに等しい。
【００７６】
論理集合演算６０６を使用して中間許可セットのサブセットを生成して、必要とされる許可だけが許可交付セットの中に含められるようにする。つまり、中間許可セットは、コードアセンブリによって必要とされるか、または要求される許可セットより、はるかに広い可能性がある。したがって、不必要な、または要求されていない許可を結果の許可交付セットから除外することができる。
【００７７】
以上に開示したアルゴリズムは、許可要求を使用して中間許可セットをフィルタするための例としてのアルゴリズムにすぎないことを理解されたい。本発明の範囲内で別のアルゴリズムも企図され、特に、別の許可要求の組み合わせが使用される場合はそうである（例えば、追加のタイプの許可要求セット）。
【００７８】
図７は、本発明の実施形態を実施するために役立つ例としてのシステムを示している。本発明の実施形態のための例としてのコンピュータシステムには、プロセッサユニット７０２と、システムメモリ７０４と、システムメモリ７０４を含む様々なシステム構成要素をプロセッサユニット７００に結合するシステムバス７０６とを含む従来のコンピュータシステム７００の形態の汎用コンピュータデバイスが含まれる。システムバス７０６は、様々なバスアーキテクチャの任意のものを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造の任意のものであることが可能である。システムメモリは、読取り専用メモリ（ＲＯＭ）７０８およびランダムアクセスメモリ（ＲＡＭ）７１０を含む。コンピュータシステム７００内部の要素間における情報の転送を助ける基本ルーチンを含む基本入力／出力システム７１２（ＢＩＯＳ）がＲＯＭ７０８の中に記憶されている。
【００７９】
コンピュータシステム７００は、ハードディスクに対して読取りおよび書込みを行うためのハードディスクドライブ７１２と、取外し可能な磁気ディスク７１６に対して読取りおよび書込みを行うための磁気ディスクドライブ７１４と、ＣＤ−ＲＯＭ、ＤＶＤ、またはその他の光媒体などの取外し可能な光ディスク７１９に対して読取りおよび書込みを行うための光ディスクドライブ７１８とをさらに含む。ハードディスクドライブ７１２、磁気ディスクドライブ７１４、および光ディスクドライブ７１８は、それぞれ、ハードディスクドライブインターフェース７２０、磁気ディスクドライブインターフェース７２２、および光ディスクドライブインターフェース７２４でシステムバス７０６に接続される。以上のドライブおよび関連するコンピュータ可読媒体により、コンピュータシステム７００のためのコンピュータ可読命令、データ構造、プログラム、およびその他のデータの不揮発性ストレージが提供される。
【００８０】
本明細書で説明する例としての環境は、ハードディスク、取外し可能な磁気ディスク７１６、および取外し可能な光ディスク７１９を使用するが、データを記憶することができるその他のタイプのコンピュータ可読媒体も、例としてのシステムで使用することができる。例としての動作環境で使用することができるその他のタイプのコンピュータ可読媒体の例には、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、および読取り専用メモリ（ＲＯＭ）が含まれる。
【００８１】
オペレーティングシステム７２６、１つ以上のアプリケーションプログラム７２８、その他のプログラムモジュール７３０、およびプログラムデータ７３２を含め、いくつかのプログラムモジュールが、ハードディスク、磁気ディスク７１６、光ディスク７１９、ＲＯＭ７０８、またはＲＡＭ７１０の上に記憶されていることが可能である。ユーザは、キーボード７３４、およびマウス７３６またはその他のポインティングデバイスなどの入力デバイスを介してコンピュータシステム７００にコマンドおよび情報を入力することができる。その他の入力デバイスの例には、マイクロホン、ジョイスティック、ゲームパッド、サテライトディッシュ、およびスキャナが含まれることが可能である。以上の入力デバイス、およびその他の入力デバイスは、しばしば、システムバス７０６に結合されたシリアルポートインターフェース７４０を介して処理装置７０２に接続される。それでも、以上の入力デバイスは、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースで接続されてもよい。また、モニタ７４２または他のタイプの表示デバイスも、ビデオアダプタ７４４などのインターフェースを介してシステムバス７０６に接続される。モニタ７４２に加え、コンピュータシステムは、通常、スピーカおよびプリンタなどのその他の周辺出力デバイス（図示せず）も含む。
【００８２】
コンピュータシステム７００は、遠隔コンピュータ７４６のような１つ以上の遠隔コンピュータに対する論理接続を使用するネットワーク化された環境で動作することができる。遠隔コンピュータ７４６は、コンピュータシステム、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の一般的なネットワークノードであることが可能であり、通常、コンピュータシステム７００に関連して前述した要素の多く、またはすべてを含む。ネットワーク接続は、ローカルエリアネットワーク（ＬＡＮ）７４８およびワイドエリアネットワーク（ＷＡＮ）７５０を含む。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータ網、イントラネット、およびインターネットで一般的である。
【００８３】
ＬＡＮネットワーキング環境で使用される場合、コンピュータシステム７００は、ネットワークインターフェースまたはネットワークアダプタ７５２を介してローカルネットワーク７４８に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータシステム７００は、通常、インターネットなどのワイドエリアネットワーク７５０を介して通信を確立するためのモデム７５４またはその他の手段を含む。内部または外部にあることが可能なモデム７５４は、シリアルポートインターフェース７４０を介してシステムバス７０６に接続される。ネットワーク化された環境では、コンピュータシステム７００に関連して描いたプログラムモジュール、またはプログラムモジュールの部分を遠隔メモリ記憶デバイスの中に記憶することができる。図示したネットワーク接続は例としてのものであり、コンピュータ間で通信リンクを確立するその他の手段も使用できることが理解されよう。
【００８４】
図示する実施形態では、セキュリティポリシー指定が、例えばハードディスクドライブ７１２上のファイルからメモリ７０４に読み込まれることが可能である。ＣＰＵ７０２が仮想マシンを実装し、リソースロケーションから受け取られたコードアセンブリに関連付けられた分類された許可要求を使用して許可交付セットを生成するコンピュータプロセスのためのメモリ常駐命令コードを実行する。さらに、ＣＰＵ７０２は、特許請求の範囲で記載するポリシーマネージャを実装するソフトウェア構成要素も実行する。
【００８５】
図８は、本発明の実施形態におけるリソースロケーションから受け取られたコードアセンブリに関連する分類された許可要求を使用して許可交付セットを生成するための動作を示す流れ図である。定義する動作８００が、セキュリティポリシー指定に従ってコードグループ集合を定義する。コードグループ集合は１つ以上のコードグループを含み、またコードグループ階層として構成することができる。受け取る動作８０２がコードアセンブリに関連する証拠を受け取る。メンバーシップ動作８０４がコードグループとの関係でコードアセンブリのメンバーシップを評価する。一般に、この評価は各コードグループに関連するメンバーシップ基準に基づく。
【００８６】
生成する動作８０６が、メンバーシップ動作８０４によって行われた１つ以上のメンバーシップ判定に基づいて許可セットを生成する。例えば、コードグループ集合がコードグループ階層として構成される一実施形態では、許可セットは、コードアセンブリがメンバーであると判定された親コードグループおよび子コードグループに関連する許可を組み合わせることによって動的に生成される。組み合わせられた許可は、生成する動作８０６から許可セットとして出力され、この許可セットが許可／要求フィルタモジュールによって受け取られる。
【００８７】
受け取る動作８０８が、コードアセンブリに関連する許可要求を受け取る。この許可要求は、コードアセンブリの一部として受け取ること、あるいはローカルのリソースロケーション（例えば、コンピュータシステム内部で、接続された周辺機器または記憶媒体から、またはローカルのネットワーク記憶場所から）、または遠隔のリソースロケーション（例えば、インターネットを介して）などの別のソースから受け取る（または取得する）ことが可能である。
【００８８】
フィルタする動作（filtering operation）８１０が、許可要求セットに基づいて許可セットをフィルタして、コードアセンブリの実行を制御する。フィルタする動作８１０が、最低限の要求セットがコードアセンブリに関連して提供される場合、その要求セットが許可セットのサブセットでないと判定した場合、ポリシーマネージャがコードアセンブリのロードまたは実行を防止することができる。同様に、実行許可が許可セットに含まれない場合、フィルタする動作８１０はコードアセンブリのロードまたは動作を防止することができる。
【００８９】
また、フィルタする動作８１０は、最低限の要求セットまたはオプションの要求セットがコードアセンブリに関連して提供される場合、コードアセンブリによって要求されていない許可を交付するのを回避するために許可交付セットを生成するとき、その要求セットに含まれない許可を除外することもできる。さらに、拒否要求セットがコードアセンブリに関連して提供される場合、その要求セットに含まれる許可も許可交付セットから除外することができる。
【００９０】
本明細書で説明する本発明の実施形態は、１つ以上のコンピュータシステムにおける論理ステップとして実施される。本発明の論理動作は、（１）１つ以上のコンピュータシステムにおいて実行される一続きのプロセッサによって実施されるステップとして、また（２）１つ以上のコンピュータシステム内部の相互に接続されたマシンモジュールとして実施される。実施形態は、本発明を実施するコンピュータシステムのパフォーマンス要件に応じた選択の問題である。したがって、本明細書で説明する本発明の実施形態を構成する論理動作は、動作、ステップ、オブジェクト、またはモジュールと様々に呼ばれる。
【００９１】
以上の明細、例、およびデータにより、本発明の例としての実施形態の構造および使用法の完全な説明が提供される。本発明の多くの実施形態を本発明の趣旨および範囲を逸脱することなく実施することができるので、本発明は、頭記の特許請求の範囲に存する。
【図面の簡単な説明】
【図１】  本発明の実施形態における証拠ベースのセキュリティポリシーマネージャを描いた図である。
【図２】  本発明の実施形態におけるランタイム呼出しスタックを示す図である。
【図３】  本発明の実施形態における証拠ベースのセキュリティを管理するためのコンピュータシステムを描いた図である。
【図４】  本発明の実施形態における証拠ベースのセキュリティを管理するためのポリシーマネージャモジュールを描いた図である。
【図５】  本発明の実施形態におけるポリシーマネージャが動作する例としてのポリシーレベルを描いた図である。
【図６】  本発明の実施形態で使用されるフィルタリングを示す流れ図である。
【図７】  本発明の実施形態を実施するのに役立つ例としてのシステムを示す図である。
【図８】  本発明の実施形態における許可セットを処理するための動作（operations）を示す流れ図である。
【図１】
0004718753.tif 000005
【図２】
0004718753.tif 000006
【図３】
0004718753.tif 000007
【図４】
0004718753.tif 000008
【図５】
0004718753.tif 000009
【図６】
0004718753.tif 000010
【図７】
0004718753.tif 000011
【図８】
0004718753.tif 000012