このクラスはセキュリティアクセス権のために用意されています。SecurityPermission は名前 (「ターゲット名」とも呼ばれる) を持ちますが、アクションリストは持ちません。ユーザは名前付きアクセス権を持つ場合と、持たない場合があります。
ターゲット名はセキュリティ設定パラメータの名前です (下記を参照)。現在、SecurityPermission オブジェクトを使うと、Policy、Security、Provider、Signer、Identity オブジェクトへのアクセスを保護できます。
以下の表に、可能な SecurityPermission ターゲット名のすべてと、そのターゲット名のそれぞれについてアクセス権が許可する内容、およびコードにアクセス権を与えるリスクについての説明の一覧を示します。
アクセス権ターゲット名 |
アクセス権が許可する内容 |
このアクセス権を許可する際のリスク |
getPolicy |
システム全体のセキュリティポリシーの取得 (特に、現在インストール済みの Policy オブジェクトが対象) |
このアクセス権は、ユーザが getPermissions 呼び出しを経由してポリシーを照会することを許可する。これによって、指定された CodeSource にどのアクセス権が与えられるかを知ることができる。ポリシーが知られてもそれだけでシステムのセキュリティが危険にさらされるわけではないが、攻撃のねらいを定めるための追加情報を悪意のあるコードに与えることになる。必要以上の情報を公開しないほうが賢明である |
setPolicy |
システム全体のセキュリティポリシーの設定 (特に、Policy オブジェクトが対象) |
このアクセス権を与えるのは非常に危険である。このアクセス権によって、悪意のあるコードがシステムを攻撃するのに必要なさまざまなアクセス権を自分自身に与えることが可能になるからである |
getProperty.{key} |
指定の鍵を使ったセキュリティポリシーの取得 |
アクセスが許可されている特定の鍵に基づいて、コードが、システム全体およびユーザセキュリティポリシーの位置だけでなく、セキュリティプロバイダのリストにもアクセスすることができる。この情報が知られてもそれだけでシステムのセキュリティが危険にさらされるわけではないが、攻撃のねらいを定めるための追加情報を悪意のあるコードに与えることになる
|
setProperty.{key} |
指定の鍵を使ったセキュリティプロパティの設定 |
このアクセス権があれば、セキュリティプロバイダを設定したり、システム全体のセキュリティポリシーの位置を定義したりできる。新しいセキュリティプロバイダを設定するアクセス権を悪意のあるコードが持つと、暗号非公開鍵のような機密情報を横取りする悪意のあるプロバイダを設定する危険がある。さらに、システム全体のセキュリティポリシーの位置を設定するアクセス権を悪意のあるコードが持つと、その位置を、システムに攻撃をしかけるのに必要なすべてのアクセス権を攻撃者に与えるようなセキュリティポリシーを指すようにする可能性もある
|
insertProvider.{provider name} |
指定の名前を使った新しいプロバイダの追加 |
このアクセス権は、悪意のある可能性のあるプロバイダ (たとえば、渡された非公開鍵を明らかにしてしまうもの) を優先順位のもっとも高いプロバイダとして導入する許可をユーザに与えてしまう。これが可能になるのは、Security オブジェクト(インストール済みプロバイダを管理する) が現在、プロバイダの接続前にその整合性や信頼性をチェックしないためである |
removeProvider.{provider name} |
指定のプロバイダの削除 |
このアクセス権は、プログラムのほかの部分の動作を変更したり、その実行を無効にする。今後プログラムからの要求を受けるプロバイダが削除された場合、実行は失敗する。また、削除済みプロバイダがプログラムの残りからの明示的な要求を受けていない場合、これは通常、暗号サービスが (プロバイダリストの従来の順番に基づいて) 要求されたときに選択されるプロバイダになるが、別のプロバイダが選ばれたり、適したプロバイダが見つからないこともあるので、プログラムの失敗につながる |
setSystemScope |
システム識別情報スコープの設定 |
このアクセス権は、信頼できない証明書でシステムのアイデンティティの有効範囲を設定することを攻撃者に許可するので、システムのアイデンティティの元の有効範囲では拒否されるはずの証明書特権で署名されたアプレットやアプリケーションコードを認めることになる |
setIdentityPublicKey |
Identity の公開鍵の設定 |
アイデンティティが「信頼できる」としてマークされている場合、このアクセス権は、システムのアイデンティティの有効範囲によって信頼されていない異なる公開鍵 (たとえば、それ自身) を導入することを攻撃者に許可するので、本来は拒否されるはずの公開鍵特権で署名されたアプレットやアプリケーションコードを認めることになる |
setIdentityInfo |
Identity の汎用情報文字列の設定 |
このアクセス権は、アイデンティティの汎用記述を設定することを攻撃者に許可する。これによりアプリケーションは、意図したものとは違うアイデンティティを使用させられたり、特定のアイデンティティを見つけることを妨害されたりする可能性がある |
addIdentityCertificate |
Identity の証明書の追加 |
このアクセス権は、アイデンティティの公開鍵の証明書を設定することを攻撃者に許可する。これは、システム全体に渡る信頼関係に影響を及ぼすので危険である。この公開鍵は、突然、本来よりも幅広いユーザに信頼されるようになる |
removeIdentityCertificate |
Identity の証明書の削除 |
このアクセス権は、アイデンティティの公開鍵の証明書を削除することを攻撃者に許可する。これは、システム全体に渡る信頼関係に影響を及ぼすことので危険である。この公開鍵は、突然、本来よりも信頼に足らないと見なされるようになる |
printIdentity |
アイデンティティの本人の名前、および必要に応じてそのアイデンティティが使用されるスコープ、そのアイデンティティがスコープ内で「trusted(信頼できる)」 と見なされているかどうかを表示する |
表示されるスコープはファイル名となる場合があり、その場合には、ローカルシステムの情報も付随する。たとえば、「carol」という名前のアイデンティティがユーザアイデンティティデータベースで「not trusted (信頼できない)」としてマークされている場合の表示は次のようになる
carol[/home/luehe/identitydb.obj][not trusted]
|
clearProviderProperties.{provider name} |
Provider を「クリア」することで、そのプロバイダが実装するサービスを検索するのに使うプロパティを持たないようにする |
このアクセス権は、プロバイダによって実装されたサービスの検索を無効にする。そのため、通常その Provider を利用するプログラムのほかの部分の動作を変更したり、その実行を無効にしたりできる (「removeProvider.{provider name}」アクセス権の説明を参照) |
putProviderProperty.{provider name} |
指定した Provider のプロパティを設定 |
プロバイダプロパティはそれぞれ、プロバイダが実装する特定サービスの名前と位置を指定する。このアクセス権を与えることによって、コードがサービス仕様をほかのものと置き換えることで、異なる実装を指定できるようになる |
removeProviderProperty.{provider name} |
指定した Provider からプロパティを削除 |
このアクセス権は、プロバイダが実装するサービスの検索を無効にする。サービスの名前と位置を指定しているプロパティの削除によって、それ以上サービスにアクセスできなくなる。そのため、通常その Provider を利用するプログラムのほかの部分の動作を変更したり、その実行を無効にしたりできる (「removeProvider.{provider name}」アクセス権の説明を参照)。 |
getSignerPrivateKey |
Signer の非公開鍵の取得 |
非公開鍵は秘密に保管すべきものであり、非公開鍵へのアクセスを許可することは非常に危険である。アクセスを許可してしまうと、コードは、非公開鍵を使ってさまざまなファイルに署名したり、Signer からの署名を要求したりすることができる |
setSignerKeyPair |
Signer の鍵ペア (公開鍵と非公開鍵) の設定 |
このアクセス権は、ターゲットである他者の鍵ペアを弱い鍵ペア (たとえば、サイズの小さい鍵ペア) に置き換えることを攻撃者に許可する。これは同時に、ターゲットとそのピアとの暗号通信を盗聴することも攻撃者に許可する。ターゲットのピアは、ターゲットの「新しい」公開鍵で暗号セッション鍵をラップする可能性がある。この「新しい」公開鍵によって、攻撃者 (対応する非公開鍵を持つ) がセッション鍵のラップを解除して、そのセッション鍵で暗号化された通信データの暗号を解読できるようになる |