コード アクセス セキュリティの概要
更新 : 2007 年 11 月
コード アクセス セキュリティとは、保護されているリソースや操作に対して、コードが持つアクセス権を制限できるようにするための機構です。.NET Framework では、コード アクセス セキュリティは次の機能を果たします。
さまざまなシステム リソースへのアクセス権を表すアクセス許可およびアクセス許可セットを定義します。
管理者が、アクセス許可のセットをコードのグループ (コード グループ) に関連付けることにより、セキュリティ ポリシーを構成できるようにします。
コードを実行するために必要なアクセス許可や、持っていると便利なアクセス許可をコード自身が要求できるようにすると共に、コードには与えないアクセス許可を指定します。
読み込まれた各アセンブリに対して、コードが要求したアクセス許可と、セキュリティ ポリシーによって許可されている操作に基づいてアクセス許可を与えます。
呼び出し元に特定のアクセス許可が与えられていることをコード自身が要求できるようにします。
呼び出し元にデジタル署名があることをコード自身が要求できるようにします。これにより、特定の組織またはサイトからの呼び出し元だけが、保護されたコードを呼び出すことができます。
コール スタック上のすべての呼び出し元に実際に与えられているアクセス許可と、それらの呼び出し元が持つ必要があるアクセス許可とを比較することによって、コードに対して実行時に制限を適用します。
コードがリソースにアクセスしたり、操作を実行したりすることを許可されているかどうかを判断するために、ランタイムのセキュリティ システムはスタック ウォークを行い、コール スタック内の各呼び出し元に与えられているアクセス許可と、要求されているアクセス許可とを比較します。コール スタックに、要求されたアクセス許可を持っていない呼び出し元があった場合は、セキュリティ例外がスローされ、アクセスは拒否されます。スタック ウォークは、信頼レベルの低いコードが信頼レベルの高いコードを呼び出して利用し、承認されていないアクションを実行しようとする攻撃を防止できるようにするために実行します。コードの呼び出し元すべてに対して実行時にアクセス許可を要求することは、確かにパフォーマンスに影響しますが、信頼レベルの低いコードによる攻撃からコードを保護できるようにするためには必要です。パフォーマンスを最適化するためにコードが実行するスタック ウォークを減らすこともできますが、その場合は、セキュリティの脆弱性を露呈しないように注意する必要があります。
アセンブリ A4 のメソッドが、その呼び出し元にアクセス許可 P が与えられていることを要求する場合、結果として行われるスタック ウォークを次の図に示します。
セキュリティ スタック ウォーク
コード アクセス セキュリティを使用する典型的なシナリオでは、ユーザーがデータを入力するためのコントロールを、アプリケーションがローカル イントラネットのホスト Web サイトからクライアントに直接ダウンロードします。このコントロールは、組み込み済みのクラス ライブラリを使用して作成されています。このようなシナリオでコード アクセス セキュリティを使用する方法を次にいくつか示します。
コントロールを読み込む前に、管理者は、特定のデジタル署名を持つコードに特定の権限 (通常のローカル インターネット コードが受け取るよりも多くのアクセス許可) を与えるように指定するセキュリティ ポリシーを構成できます。既定では、ローカル イントラネットからダウンロードされるすべてのコードには、定義済みの LocalIntranet アクセス許可セットが関連付けられます。
コントロールの読み込み時には、信頼されている署名をコントロールが持っていない限り、ランタイムはコントロールに対して LocalIntranet アクセス許可セットに関連付けられているアクセス許可しか与えません。この場合、コントロールには LocalIntranet アクセス許可セットに関連付けられているアクセス許可が与えられ、信頼されている署名を持つコントロールの場合には、さらに追加のアクセス許可が与えられます。
実行時には、呼び出し元 (この場合にはホストされているコントロール) が、保護されているリソースを公開するライブラリ、またはアンマネージ コードを呼び出すライブラリにアクセスするたびに、そのライブラリがセキュリティ確認要求を実行し、これによって呼び出し元のアクセス許可が適切かどうかがチェックされます。このようなセキュリティ チェックにより、コントロールが許可されていないアクションをクライアント コンピュータで実行することを防止できるようになります。