java.lang.Object
java.security.Permission
java.security.BasicPermission
java.lang.RuntimePermission
- すべての実装されたインタフェース:
Serializable
,Guard
public final class RuntimePermission extends BasicPermission
このクラスは、実行時のアクセス権に関連します。
RuntimePermission
には名前(「ターゲット名」とも呼ばれる)は含まれますが、アクション・リストは含まれません。したがって、名前付きアクセス権を得るか、アクセス権を得ないかのどちらかになります。
ターゲット名には、実行時アクセス権(下を参照)の名前を指定します。 命名規約は、階層的なプロパティ命名規約に従います。 また、ターゲット名のあとにアスタリスクを指定し(「.」のあとに指定するか、単独で指定)、ワイルドカードによる照合を行うこともできます。 たとえば、"loadLibrary.*"および"*"はワイルドカードによる照合を行いますが、"*loadLibrary"および"a*b"は行いません。
次の表に、標準のRuntimePermission
ターゲット名を示し、それぞれに許可される権限の説明と、コードに権限を付与するリスクについて説明します。
アクセス権ターゲット名 | アクセス権により許可される操作 | このアクセス権を許可した場合のリスク |
---|---|---|
createClassLoader | クラス・ローダーの作成 | このアクセス権を与えるのはきわめて危険です。 悪意のあるアプリケーションが独自のクラス・ローダーのインスタンスを生成し、破壊行為を行うクラスをシステムにロードする可能性があります。 この新たにロードされたクラスが同じクラス・ローダーによって保護ドメインに置かれ、ロードされたクラスに、そのドメインのアクセス権が自動的に与えられる可能性があります。 |
getClassLoader | クラス・ローダー(クラスを呼び出すためのクラス・ローダーなど)の取得 | これにより、特定のクラスのクラス・ローダーを取得するためのアクセス権を、攻撃者に与えることになります。 あるクラスのクラス・ローダーにアクセスできると、攻撃者は、そのクラス・ローダーから使用できるほかのクラスをロードできるようになるため、このアクセス権は危険です。 本来は、そのようなクラスにはアクセスすることはできません。 |
setContextClassLoader | スレッドが使うコンテキスト・クラス・ローダーの設定 | コンテキスト・クラス・ローダーは、システム・クラス・ローダーに存在しない可能性のあるリソースを探す必要があるときに、システム・コードおよびエクステンションによって使用されます。 setContextClassLoaderアクセス権を与えると、コードは、システム・スレッドを含め、特定のスレッドで使用するコンテキスト・クラス・ローダーを変更できるようになります。 |
enableContextClassLoaderOverride | スレッドのコンテキスト・クラス・ローダー・メソッドのサブクラス実装 | コンテキスト・クラス・ローダーは、システム・クラス・ローダーに存在しない可能性のあるリソースを探す必要があるときに、システム・コードおよびエクステンションによって使用されます。 enableContextClassLoaderOverrideアクセス権の許可によって、スレッドのサブクラスは、特定のスレッドのコンテキスト・クラス・ローダーの取得または設定に使用されるメソッドをオーバーライドできます。 |
closeClassLoader | ClassLoaderのクローズ | このアクセス権を付与すると、コード内から参照している任意のURLClassLoaderを閉じることができるようになります。 |
setSecurityManager | セキュリティ・マネージャの設定(既存の設定を置き換える可能性あり) | セキュリティ・マネージャとは、アプリケーションがセキュリティ・ポリシーを実装できるクラスです。 setSecurityManagerアクセス権を与えると、コードは、別のセキュリティ・マネージャ(より制限の少ないセキュリティ・マネージャなど)をインストールして、使用するセキュリティ・マネージャを変更できるようになり、この結果、元のセキュリティ・マネージャによって課されていたチェックを回避できるようになります。 |
createSecurityManager | 新しいセキュリティ・マネージャの作成 | ほかのクラスまたは実行スタックの情報を公開する可能性がある、保護された、機密性の高いメソッドへのアクセスをコードに与えます。 |
getenv.{variable name} | 指定された環境変数の値の読取り。 | コードを使って特定の環境変数の値の読み取りや存在の判定を行うことができる。 変数が機密データを格納している場合、これは危険です。 |
exitVM.{exit status} | 指定された終了ステータスでのJava仮想マシンの停止。 | 仮想マシンを自動的に停止させることで、攻撃者はサービス妨害攻撃を展開することができます。 ノート: アプリケーション・クラス・パスからロードされたすべてのコードにアクセス権「exitVM.*」が付与されるため、アプリケーションは自らを終了させることができます。 また、アクセス権「exitVM」は「exitVM.*」と同等です。 |
shutdownHooks | 仮想マシンのシャットダウン・フックの登録および解除。 | 悪意のあるシャットダウン・フックを登録することで、攻撃者は仮想マシンの正常なシャットダウンの妨害攻撃を展開できます。 |
setFactory | ServerSocketまたはSocketにより使用されるソケット・ファクトリ、またはURLにより使用されるストリーム・ハンドラ・ファクトリの設定。 | これにより、コードから、ソケット、サーバー・ソケット、ストリーム・ハンドラ、またはRMIソケット・ファクトリの実際の実装を設定できるようになります。 攻撃者は、データ・ストリームを狂わせる異常な実装を設定する可能性があります。 |
setIO | System.out、System.in、およびSystem.errの設定。 | 標準システム・ストリームの値を変更できるようになります。 攻撃者はSystem.inを変更してユーザーの入力を監視および盗聴したり、System.errを「null」のOutputStreamに設定して、System.errに送られたエラー・メッセージがまったく表示されないようにすることができます。 |
modifyThread | スレッドの変更(スレッドinterrupt, setDaemon, setPriority, setName およびsetUncaughtExceptionHandler メソッドへのコール経由など) |
攻撃者は、システム内の任意のスレッドの動作を変更できます。 |
modifyThreadGroup | スレッド・グループの変更(例: ThreadGroup getParent 、setDaemon およびsetMaxPriority メソッドの呼出し経由) |
攻撃者は、スレッド・グループを作成してその実行優先順位を設定できます。 |
getProtectionDomain | クラスのProtectionDomainの取得 | コードから、特定のコード・ソースのポリシー情報を取得できるようになります。 ポリシー情報が盗まれてもシステムのセキュリティが脅かされるわけではないが、攻撃の狙いをより正確に定めるためのローカル・ファイル名などの追加情報を攻撃者に与えてしまうことになります。 |
getFileSystemAttributes | ファイル・システム属性の取得 | 呼出し側に使用可能なディスク使用量やディスク容量などのファイル・システム情報を、コードで取得できるようにします。 これは、システムのハードウェア構成に関する情報と呼出し側のファイルの書込み特権に関する一部の情報を開示するため、危険を伴う可能性があります。 |
readFileDescriptor | ファイル記述子の読取り | コードから、読み出したファイル記述子に関連付けられているファイルを読み出すことができるようになります。 ファイルに機密データが含まれている場合、このアクセス権は危険です。 |
writeFileDescriptor | ファイル記述子への書込み | コードから、そのファイル記述子に関連付けられているファイルに書き込めるようになります。 悪意のあるコードでウィルスを感染させたり、ディスク全体を埋めることができるので危険です。 |
loadLibrary.{library name} | 特定のライブラリへの動的リンク | Javaのセキュリティ・アーキテクチャが、ネイティブ・コードのレベルで悪意のある動作を防止するようには設計されていないため、ネイティブ・コード・ライブラリをロードするアクセス権をアプレットに与えるのは危険です。 |
accessClassInPackage.{package name} | クラス・ローダーがセキュリティ・マネージャのcheckPackageAccess メソッドを呼び出したときに、クラス・ローダーのloadClass メソッドを介して、指定されたパッケージへアクセスを許可する |
通常はアクセスできないパッケージ内のクラスに、コードからアクセスできるようになります。 このため、悪意のあるコードが、このようなクラスを利用してシステムのセキュリティを脅かす可能性があります。 |
defineClassInPackage.{package name} | クラス・ローダーがセキュリティ・マネージャのcheckPackageDefinition メソッドを呼び出すときに、そのクラス・ローダーのdefineClass メソッドを使用して、指定したパッケージ内にクラスを定義する。 |
これにより、特定のパッケージ内にクラスを定義するためのアクセス権をコードに与えることになります。 このアクセス権が与えられた悪意のあるコードは、java.security やjava.lang などの信頼できるパッケージ内に破壊行為を行うクラスを定義する可能性があるため、このアクセス権は危険です。 |
defineClass | Lookup.defineClass でクラスを定義します。 |
これにより、Lookup のルックアップ・クラスと同じパッケージ内のクラスを定義する適切な権限を持つLookup オブジェクト権限を持つコードが付与されます。 |
accessDeclaredMembers | クラスの宣言されたメンバーへのアクセス | 特定のクラス内のpublic、デフォルト(パッケージ)アクセス、protected、およびprivateなフィールドやメソッドに関する問い合わせを行うコード・アクセス権をコードに与えることになります。 このアクセス権が与えられたコードは、privateおよびprotectedなフィールド名とメソッド名にはアクセスできるが、privateおよびprotectedなフィールドのデータにはアクセスできないし、privateなメソッドを呼び出すことはできません。 しかし、攻撃の狙いをより正確に定めるため、悪意のあるコードがこの情報を利用する可能性があります。 また、クラス内のpublicなメソッドを呼び出したり、publicなフィールドにアクセスしたりする可能性があります。 コードが、メソッドとフィールドが含まれるクラスやインタフェースにオブジェクトをキャストできないために、通常はコードがこれらのメソッドを呼び出したり、フィールドにアクセスしたりできない場合は危険です。 |
queuePrintJob | 印刷ジョブ要求の発行 | 機密情報を印刷してしまうか、用紙の無駄になります。 |
getStackTrace | 別のスレッドのスタック・トレース情報の取得 | 別のスレッドのスタック・トレース情報を取得できる。 スレッドの実行をモニターし、アプリケーションの脆弱性を発見する悪意のあるコードを可能にするので危険です。 |
getStackWalkerWithClassReference | クラス参照を使用してスタック・フレームを取得できるスタック・ウォーカを取得します。 | これにより、スタック・ウォーキングからクラス・オブジェクトを取得できます。 これにより、悪意のあるコードが自身のコンテキスト外にあるスタック上のClassオブジェクトにアクセスできるようになる可能性があります。 |
setDefaultUncaughtExceptionHandler | キャッチされない例外により、突然スレッドが終了したときに使用されるデフォルトのハンドラを設定する | 攻撃者は、スレッドの終了を妨害できる、悪意のあるキャッチされない例外ハンドラを登録できます |
プリファレンス | java.util.prefsへのアクセスに必要なアクセス権を表す。preferences実装のユーザーまたはシステム・ルートは、preferences持続バッキング・ストア内で取得または更新操作を実行できる。 | このアクセス権により、コードを実行しているユーザーが必要なOS特権を持っている場合、そのユーザーはpreferences持続バッキング・ストアに読み取りや書込みを行うことができます。 実際のバッキング・ストアは、従来のファイル・システム・ディレクトリか、プラットフォームのOSに依存するレジストリ内にあります。 |
manageProcess | ネイティブ・プロセスの終了とプロセスに関する情報ProcessHandle 。 |
コードで、作成しなかったプロセスの識別および終了を許可します。 |
localeServiceProvider | このRuntimePermission は、java.util.spi.LocaleServiceProvider をサブクラス化して実装するクラスに付与する必要があります。 アクセス権は、抽象基底クラス・コンストラクタの呼出し時にチェックされます。 この権限は、このセキュリティに敏感なプロバイダ・メカニズムを実装するクラスへの信頼を保証します。 |
詳細については、java.util.spi.LocaleServiceProvider を参照してください。 |
loggerFinder | このRuntimePermission は、java.lang.System.LoggerFinder のメソッドをサブクラス化または呼び出すクラスに付与する必要があります。 権限は、抽象ベース・クラス・コンストラクタの呼出しおよびpublicメソッドの呼出し時にチェックされます。 このアクセス権は、システム・クラスにロガーを提供するクラスへの信頼を保証します。 |
詳細については、java.lang.System.LoggerFinder を参照してください。 |
accessSystemModules | ランタイム・イメージ内のシステム・モジュールにアクセスします。 | これにより、ランタイム・イメージ内の「システム・モジュール」内のリソースにアクセスする権限が付与されます。 |
inetAddressResolverProvider | このRuntimePermission は、java.net.spi.InetAddressResolverProvider をサブクラス化して実装するクラスに付与する必要があります。 アクセス権は、抽象基底クラス・コンストラクタの呼出し時にチェックされます。 このアクセス権により、InetAddress ホスト名およびアドレス解決メソッドによって使用されるリゾルバを提供するクラスでの信頼性が確保されます。 |
詳細については、InetAddressResolverProvider を参照してください。 |
- 実装上のノート:
- 実装では、追加のターゲット名を定義できます。ただし、名前の競合を回避するために、リバース・ドメイン名表記などのネーミング規則を使用する必要があります。
- 導入されたバージョン:
- 1.2
- 関連項目:
-
コンストラクタのサマリー
コンストラクタコンストラクタ説明RuntimePermission
(String name) 指定された名前で、新しいRuntimePermissionを生成します。RuntimePermission
(String name, String actions) 指定された名前を持つ新しいRuntimePermissionオブジェクトを生成します。 -
メソッドのサマリー
クラスjava.security.BasicPermissionで宣言されたメソッド
equals, getActions, hashCode, implies, newPermissionCollection
クラスjava.security.Permissionで宣言されたメソッド
checkGuard, getName, toString
-
コンストラクタの詳細
-
RuntimePermission
public RuntimePermission(String name) 指定された名前で、新しいRuntimePermissionを生成します。 名前はRuntimePermissionのシンボリック名で、たとえば「exit」、「setFactory」などを指定します。名前の末尾に「.*」または「*」を付けて、ワイルドカード・マッチングを表します。- パラメータ:
name
- RuntimePermissionの名前。- 例外:
NullPointerException
-name
がnull
の場合。IllegalArgumentException
-name
が空である場合。
-
RuntimePermission
指定された名前を持つ新しいRuntimePermissionオブジェクトを生成します。 名前はRuntimePermissionのシンボリック名です。Stringのactionsは現在使用されず、nullになります。- パラメータ:
name
- RuntimePermissionの名前。actions
- nullでなければならない。- 例外:
NullPointerException
-name
がnull
の場合。IllegalArgumentException
-name
が空である場合。
-