java.lang.Object
java.security.Permission
java.security.BasicPermission
java.security.SecurityPermission
- すべての実装されたインタフェース:
Serializable
,Guard
public final class SecurityPermission extends BasicPermission
このクラスはセキュリティ・アクセス権のために用意されています。
SecurityPermission
には名前(「ターゲット名」とも呼ばれる)は含まれますが、アクション・リストは含まれません。したがって、名前付きアクセス権を得るか、アクセス権を得ないかのどちらかになります。
ターゲット名には、セキュリティ構成パラメータの名前(下記を参照)を指定します。 現在、SecurityPermission
オブジェクトは、AccessControlContext
、Policy
、Provider
、Security
、Signer
、およびIdentity
オブジェクトへのアクセスを保護するために使用されます。
次の表に、標準のSecurityPermission
ターゲット名を示します。それぞれには、許可が許可する内容とコードに許可を与えるリスクの説明が記載されています。
アクセス権ターゲット名 | アクセス権により許可される操作 | このアクセス権を許可した場合のリスク |
---|---|---|
authProvider.{provider name} | 指定されたプロバイダをログインおよびログアウト操作のためのAuthProviderにします。 | これにより、指定されたプロバイダはログイン操作とログアウト操作を実行できます。 指定されたプロバイダはAuthProvider を拡張する必要があり、ログイン操作にはPINやパスワードなどの機密性の高い認証情報が関与するため、信頼できるプロバイダに付与するように注意する必要があります。 |
createAccessControlContext | AccessControlContextの作成 | このアクセス権はDomainCombiner を使用してAccessControlContextをインスタンス化する。 このアクセス権を付与するときは、十分な注意を払う必要があります。 悪意のあるコードは、コードに与えるアクセス権のセットを拡張したり、コードAllPermission さえも付与したりするDomainCombinerを作成する可能性があります。 |
getDomainCombiner | AccessControlContextのDomainCombinerを取得。 | このアクセス権はAccessControlContextのDomainCombiner を取得する。 DomainCombinerには重要な情報があるので、プライバシの漏洩につながる可能性があります。 |
getPolicy | システム全体のセキュリティ・ポリシー(具体的には、現在インストールされているPolicyオブジェクト)の取得。 | 特定のCodeSourceに対してどのようなアクセス権が与えられているかを知ることができるgetPermissions の呼出しにより、システム全体のセキュリティ・ポリシーに対して問い合わせができるようになります。 ポリシー情報が盗まれてもシステムのセキュリティが脅かされるわけではありませんが、攻撃の狙いをより正確に定めるための追加情報を悪意のあるコードに与えてしまいます。 必要以上の情報は公開しないようにする必要があります。 |
setPolicy | システム全体のセキュリティ・ポリシー(具体的には、Policyオブジェクト)の設定。 | このアクセス権を与えると、悪意のあるコードは、システムを攻撃するのに必要なアクセス権のすべてを自らに与えることができるようになるため、極めて危険です。 |
createPolicy.{policy type} | プロバイダからPolicy実装のインスタンスを取得。 | このアクセス権を付与すると、コードはPolicyオブジェクトを取得できるようになります。 悪意のあるコードが、Policyオブジェクトを照会することにより、自分以外のコードに付与されているアクセス権を特定しようとする場合があります。 |
getProperty.{key} | キーを指定してのセキュリティ・プロパティの取得。 | 指定したキーにより可能になるアクセスの種類によっては、コードから、システム全体のポリシーとユーザー・セキュリティ・ポリシーの場所のほか、セキュリティ・プロバイダのリストにもアクセスできるようになります。この情報が盗まれてもシステムのセキュリティが脅かされるわけではありませんが、攻撃の狙いをより正確に定めるための追加情報を悪意のあるコードに与えてしまいます。 |
setProperty.{key} | キーを指定してのセキュリティ・プロパティの設定。 | これには、セキュリティ・プロバイダの設定と、システム全体のセキュリティ・ポリシーの場所の定義が含まれます。 新しいセキュリティ・プロバイダを設定するアクセス権が与えられた悪意のあるコードは、暗号化非公開キーなどの機密情報を盗むプロバイダを設定する可能性があります。 また、システム全体のセキュリティ・ポリシーの場所を設定するアクセス権が与えられた悪意のあるコードは、システムを攻撃するのに必要なアクセス権のすべてを攻撃者に与えるセキュリティ・ポリシーの場所をその場所に設定する可能性があります。 |
insertProvider | 新しいプロバイダの追加 | 悪意のあるプロバイダ(受け取った非公開キーを暴露するプロバイダなど)を、もっとも高い優先順位を持つプロバイダとして追加できるようになります。 これは、インストールされているプロバイダを管理する現在のSecurityオブジェクトは、プロバイダを追加する前に、その整合性や信頼性のチェックは行わないためです。 「insertProvider」アクセス権は、「insertProvider.{provider name}」アクセス権を包含しています(詳細は次の項を参照)。 |
removeProvider.{provider name} | 指定したプロバイダの削除。 | プログラムの他の部分の動作を変更したり、その実行を無効にすることができるようになります。 プログラムが要求したプロバイダがすでに削除されてしまった場合、実行が異常終了する可能性があります。 また、削除されたプロバイダがプログラムの残りの部分で要求されていなくても、そのプロバイダが、通常、暗号化サービスが要求されたときに選ばれるプロバイダである場合は(プロバイダのリストで前の方にあるため)、代わりに別のプロバイダが選ばれるか、適切なプロバイダが見つからない場合はエラーになります。 |
clearProviderProperties.{provider name} | Providerによって実装されているサービスの参照に使用されるプロパティが空になるように、Providerを「クリア」する。 | プロバイダによって実装されているサービスの参照が無効になります。 したがって、アクセス権「removeProvider.{provider name}」の部分で説明しているように、通常はそのProviderを利用しているプログラムの他の部分の動作が変更されたり、その実行が無効になったりする可能性があります。 |
putProviderProperty.{provider name} | 指定したProviderのプロパティの設定。 | プロバイダのプロパティは、そのプロバイダによって実装されている特定のサービスの名前と場所を指定します。 このアクセス権を与えると、コードからサービスの指定を変更し、別の実装を指定できるようになります。 |
removeProviderProperty.{provider name} | 指定したProviderからのプロパティの削除。 | プロバイダによって実装されているサービスの参照が無効になります。 プロバイダの名前と場所を指定したプロパティが削除されるため、そのプロバイダにはアクセスできなくなります。 したがって、アクセス権「removeProvider.{provider name}」の部分で説明しているように、通常はそのProviderを利用しているプログラムの他の部分の動作が変更されたり、その実行が無効になったりする可能性があります。 |
次のアクセス権は、新しいアクセス権で置き換えられているか、または推奨されなくなったクラスに関連付けられています。Identity
、IdentityScope
、Signer
。 それらの使用は非推奨です。 詳細については、該当するクラスを参照してください。
アクセス権ターゲット名 | アクセス権により許可される操作 | このアクセス権を許可した場合のリスク |
---|---|---|
insertProvider.{provider name} | 指定した新しいプロバイダの追加。 | Provider.getName() メソッドをオーバーライドすることで名前制約を回避できる可能性があるため、このアクセス権の今後の使用は非推奨です。 また、特定の名前または選択された名前を持つプロバイダを挿入するアクセス権をコードに付与することに関しても、同等レベルのリスクがあります。 ユーザーは、かわりに「insertProvider」アクセス権を使用するようにしてください。
悪意のあるプロバイダ(受け取った非公開キーを暴露するプロバイダなど)を、もっとも高い優先順位を持つプロバイダとして追加できるようになります。 これは、インストールされているプロバイダを管理する現在のSecurityオブジェクトは、プロバイダを追加する前に、その整合性や信頼性のチェックは行わないためです。 |
setSystemScope | システムのアイデンティティ・スコープの設定。 | 攻撃者は、信頼されるべきでない証明書を使用してシステムのアイデンティティ・スコープを構成し、そのような証明書を使用して署名されたアプレットやアプリケーションのコードに、システムの元のアイデンティティ・スコープでは拒否されていた特権を与えることができます。 |
setIdentityPublicKey | Identityの公開キーの設定。 | アイデンティティが「信頼できるもの」としてマークされている場合、攻撃者は、システムのアイデンティティ・スコープが信頼していない別の公開キー(独自の公開キーなど)を設定し、その公開キーを使用して署名されたアプレットやアプリケーションのコードに、本来なら否定されていた特権を与えることができます。 |
setIdentityInfo | Identityの概要を表す文字列の設定。 | 攻撃者は、アイデンティティの概要を表す文字列を設定できるようになります。 これにより攻撃者は、アプリケーションを騙して目的のものとは異なるアイデンティティを使用させるようにしたり、特定のアイデンティティを見つけることができないようにしたりできます。 |
addIdentityCertificate | Identityの証明書の追加。 | 攻撃者は、アイデンティティの公開キーに証明書を設定できるようになります。 システム全体の信頼関係に影響するため、このアクセス権は危険です。 この公開キーは、本来よりも広い範囲のコードに対して急に信頼性を持つようになります。 |
removeIdentityCertificate | Identityの証明書の削除。 | 攻撃者は、アイデンティティの公開キーのための証明書を削除できるようになります。 システム全体の信頼関係に影響するため、このアクセス権は危険です。 この公開キーは、急に本来よりも信頼性が低く見なされるようになります。 |
printIdentity | アイデンティティの本人の名前、および必要に応じてそのアイデンティティが使用されるスコープ、そのアイデンティティがスコープ内で「信頼できる」と見なされているかどうかを表示する。 | 出力されるスコープがファイル名の場合、ローカル・システムの情報が伝達されてしまうことがあります。 たとえば、「carol」という名前のアイデンティティのサンプル出力を示します。「carol」は、ユーザーのアイデンティティ・データベースでは「信頼されない」としてマーク付けされています。 carol[/home/luehe/identitydb.obj][not trusted] |
getSignerPrivateKey | 署名者の非公開キーの取得。 | 非公開キーへのアクセスを許可するのは非常に危険です。非公開キーは、ほかに知られないようにしておくことが前提になっています。 非公開キーが知られてしまうと、コードはその非公開キーを使用してさまざまなファイルに署名し、署名がその署名者のものであると主張できるようになります。 |
setSignerKeyPair | 署名者のキーのペア(公開キーと非公開キー)の設定。 | 攻撃者は、他人(標的)のキーのペアを、それよりも弱いキーのペア(キー・サイズの小さいものなど)と置き換えることができるようになります。 また、標的とその通信相手との間の暗号化されたやりとりを傍受できるようにもなります。 標的の通信相手が、標的の「新しい」公開キーを使用して暗号化セッション・キーをラップしても、攻撃者(対応する非公開キーの所有者)は、「新しい」公開キーを使用してそのセッション・キーのラップを解除し、そのセッション・キーを使用して暗号化された通信データを解読できます。 |
- 実装上のノート:
- 実装は追加のターゲット名を定義するかもしれませんが、名前の衝突を避けるために逆ドメイン名表記法などの命名規則を使用する必要があります。
- 導入されたバージョン:
- 1.2
- 関連項目:
-
コンストラクタのサマリー
コンストラクタ説明SecurityPermission
(String name) 新しいSecurityPermissionを指定された名前で作成します。SecurityPermission
(String name, String actions) 指定された名前を持つ新しいSecurityPermissionオブジェクトを作成します。 -
メソッドのサマリー
クラス java.security.BasicPermissionで宣言されたメソッド
equals, getActions, hashCode, implies, newPermissionCollection
クラス java.security.Permissionで宣言されたメソッド
checkGuard, getName, toString
-
コンストラクタの詳細
-
SecurityPermission
public SecurityPermission(String name) 新しいSecurityPermissionを指定された名前で作成します。 この名前はSecurityPermissionのシンボリック名です。 名前の末尾には「*」や「.*」を付けて、ワイルドカードを指定できます。- パラメータ:
name
- セキュリティ・アクセス権の名前- 例外:
NullPointerException
-name
がnull
の場合。IllegalArgumentException
-name
が空である場合。
-
SecurityPermission
指定された名前を持つ新しいSecurityPermissionオブジェクトを作成します。 nameはSecurityPermissionのシンボリック名です。actionsの文字列は現在使用されておらず、nullになります。- パラメータ:
name
- セキュリティ・アクセス権の名前actions
- nullでなければならない。- 例外:
NullPointerException
-name
がnull
の場合。IllegalArgumentException
-name
が空である場合。
-