モジュール java.base
パッケージ 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 Threadのinterrupt、stop、suspend、resume、setDaemon、setPriority、setName、およびsetUncaughtExceptionHandlerメソッドの呼び出しなどによるスレッドの変更 攻撃者は、システム内の任意のスレッドの動作を変更できます。
stopThread Threadのstopメソッドの呼出しによるスレッドの停止 スレッドへのアクセス権をすでに取得している場合、コードから、システム内のどのスレッドでも停止できるようになります。 実行中のスレッドが終了させられ、システムが破壊される可能性があります。
modifyThreadGroup ThreadGroupのdestroygetParentresumesetDaemonsetMaxPrioritystop、およびsuspendメソッドの呼び出しなどによるスレッド・グループの変更 攻撃者は、スレッド・グループを作成してその実行優先順位を設定できます。
getProtectionDomain クラスのProtectionDomainの取得 コードから、特定のコード・ソースのポリシー情報を取得できるようになります。 ポリシー情報が盗まれてもシステムのセキュリティが脅かされるわけではないが、攻撃の狙いをより正確に定めるためのローカル・ファイル名などの追加情報を攻撃者に与えてしまうことになります。
getFileSystemAttributes ファイル・システム属性の取得 呼出し側に使用可能なディスク使用量やディスク容量などのファイル・システム情報を、コードで取得できるようにします。 これは、システムのハードウェア構成に関する情報と呼出し側のファイルの書込み特権に関する一部の情報を開示するため、危険を伴う可能性があります。
readFileDescriptor ファイル記述子の読取り コードから、読み出したファイル記述子に関連付けられているファイルを読み出すことができるようになります。 ファイルに機密データが含まれている場合、このアクセス権は危険です。
writeFileDescriptor ファイル記述子への書込み コードから、そのファイル記述子に関連付けられているファイルに書き込めるようになります。 悪意のあるコードでウィルスを感染させたり、ディスク全体を埋めることができるので危険です。
loadLibrary.{library name} 特定のライブラリへの動的リンク Javaのセキュリティ・アーキテクチャが、ネイティブ・コードのレベルで悪意のある動作を防止するようには設計されていないため、ネイティブ・コード・ライブラリをロードするアクセス権をアプレットに与えるのは危険です。
accessClassInPackage.{package name} クラス・ローダーがセキュリティ・マネージャのcheckPackageAccessメソッドを呼び出したときに、クラス・ローダーのloadClassメソッドを介して、指定されたパッケージへアクセスを許可する 通常はアクセスできないパッケージ内のクラスに、コードからアクセスできるようになります。 このため、悪意のあるコードが、このようなクラスを利用してシステムのセキュリティを脅かす可能性があります。
defineClassInPackage.{package name} クラス・ローダーがセキュリティ・マネージャのcheckPackageDefinitionメソッドを呼び出すときに、そのクラス・ローダーのdefineClassメソッドを使用して、指定したパッケージ内にクラスを定義する。 これにより、特定のパッケージ内にクラスを定義するためのアクセス権をコードに与えることになります。 このアクセス権が与えられた悪意のあるコードは、java.securityjava.langなどの信頼できるパッケージ内に破壊行為を行うクラスを定義する可能性があるため、このアクセス権は危険です。
defineClass Lookup.defineClassでクラスを定義します。 これにより、Lookupルックアップ・クラスと同じパッケージ内のクラスを定義するための適切な特権を持つLookupオブジェクトのアクセス権を持つコードが付与されます。
accessDeclaredMembers クラスの宣言されたメンバーへのアクセス 特定のクラス内のpublic、デフォルト(パッケージ)アクセス、protected、およびprivateなフィールドやメソッドに関する問い合わせを行うコード・アクセス権をコードに与えることになります。 このアクセス権が与えられたコードは、privateおよびprotectedなフィールド名とメソッド名にはアクセスできるが、privateおよびprotectedなフィールドのデータにはアクセスできないし、privateなメソッドを呼び出すことはできません。 しかし、攻撃の狙いをより正確に定めるため、悪意のあるコードがこの情報を利用する可能性があります。 また、クラス内のpublicなメソッドを呼び出したり、publicなフィールドにアクセスしたりする可能性があります。 コードが、メソッドとフィールドが含まれるクラスやインタフェースにオブジェクトをキャストできないために、通常はコードがこれらのメソッドを呼び出したり、フィールドにアクセスしたりできない場合は危険です。
queuePrintJob 印刷ジョブ要求の発行 機密情報を印刷してしまうか、用紙の無駄になります。
getStackTrace 別のスレッドのスタック・トレース情報の取得 別のスレッドのスタック・トレース情報を取得できる。 スレッドの実行を監視し、アプリケーションの脆弱性を発見する悪意のあるコードを可能にするので危険です。
getStackWalkerWithClassReference クラス・リファレンスでスタック・フレームを取得できるスタック・ウォーカを取得します。 これにより、スタック・ウォーキングからClassオブジェクトを取り出すことができます。 これにより、悪意のあるコードがスタック上のClassオブジェクトに、独自のコンテキスト外でアクセスできるようになります。
setDefaultUncaughtExceptionHandler キャッチされない例外により、突然スレッドが終了したときに使用されるデフォルトのハンドラを設定する 攻撃者は、スレッドの終了を妨害できる、悪意のあるキャッチされない例外ハンドラを登録できます
preferences 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のメソッドをサブクラス化または呼び出すクラスに付与する必要があります。 パーミッションは、抽象基本クラス・コンストラクタの呼び出し中とそのパブリック・メソッドの呼び出し時にチェックされます。 このアクセス権は、ロガーをシステム・クラスに提供するクラスの信頼を保証します。 詳細については、java.lang.System.LoggerFinderを参照してください。
accessSystemModules ランタイム・イメージのシステム・モジュールにアクセスします。 これにより、ランタイム・イメージ内の「システム・モジュール」内のリソースにアクセスするためのアクセス権が付与されます。

実装上のノート:
実装は追加のターゲット名を定義するかもしれませんが、名前の衝突を避けるために逆ドメイン名表記法などの命名規則を使用する必要があります。
導入されたバージョン:
1.2
関連項目:
BasicPermission, Permission, Permissions, PermissionCollection, SecurityManager, 直列化された形式
  • コンストラクタの詳細

    • RuntimePermission

      public RuntimePermission​(String name)
      指定された名前で、新しいRuntimePermissionを生成します。 名前はRuntimePermissionのシンボリック名で、たとえば「exit」、「setFactory」などを指定します。名前の末尾に「.*」または「*」を付けて、ワイルドカード・マッチングを表します。
      パラメータ:
      name - RuntimePermissionの名前。
      例外:
      NullPointerException - namenullの場合。
      IllegalArgumentException - nameが空である場合。
    • RuntimePermission

      public RuntimePermission​(String name, String actions)
      指定された名前を持つ新しいRuntimePermissionオブジェクトを生成します。 名前はRuntimePermissionのシンボリック名です。Stringのactionsは現在使用されず、nullになります。
      パラメータ:
      name - RuntimePermissionの名前。
      actions - nullでなければならない。
      例外:
      NullPointerException - namenullの場合。
      IllegalArgumentException - nameが空である場合。