public final class RuntimePermission extends BasicPermission
ターゲット名には、実行時アクセス権 (下を参照) の名前を指定します。命名規約は、階層的なプロパティー命名規約に従います。また、ターゲット名のあとにアスタリスクを指定し (「.」のあとに指定するか、単独で指定)、ワイルドカードによる照合を行うこともできます。たとえば、「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 | Java 仮想マシンのシャットダウンフックの登録および解除。 | 悪意のあるシャットダウンフックを登録することで、攻撃者は仮想マシンの正常なシャットダウンの妨害攻撃を展開できます。 |
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 の destroy 、getParent 、resume 、setDaemon 、setMaxPriority 、stop 、および suspend メソッドの呼び出しなどによるスレッドグループの変更 |
攻撃者は、スレッドグループを作成してその実行優先順位を設定できます。 |
getProtectionDomain | クラスの ProtectionDomain の取得 | コードから、特定のコードソースのポリシー情報を取得できるようになります。ポリシー情報が盗まれてもシステムのセキュリティーが脅かされるわけではないが、攻撃の狙いをより正確に定めるためのローカルファイル名などの追加情報を攻撃者に与えてしまうことになります。 |
getFileSystemAttributes | ファイルシステム属性の取得 | 呼び出し側に使用可能なディスク使用量やディスク容量などのファイルシステム情報を、コードで取得できるようにします。これは、システムのハードウェア構成に関する情報と呼び出し側のファイルの書き込み特権に関する一部の情報を開示するため、危険を伴う可能性があります。 |
readFileDescriptor | ファイル記述子の読み取り | コードから、読み出したファイル記述子に関連付けられているファイルを読み出すことができるようになります。ファイルに機密データが含まれている場合、このアクセス権は危険です。 |
writeFileDescriptor | ファイル記述子への書き込み | コードから、そのファイル記述子に関連付けられているファイルに書き込めるようになります。悪意のあるコードでウィルスを感染させたり、ディスク全体を埋めることができるので危険です。 |
loadLibrary.{library name} | 特定のライブラリへの動的リンク | Java のセキュリティーアーキテクチャーが、ネイティブコードのレベルで悪意のある動作を防止するようには設計されていないため、ネイティブコードライブラリをロードするアクセス権をアプレットに与えるのは危険です。 |
accessClassInPackage.{package name} | クラスローダーがセキュリティーマネージャーの checkPackageAccess メソッドを呼び出したときに、クラスローダーの loadClass メソッドを介して、指定されたパッケージへアクセスを許可する |
通常はアクセスできないパッケージ内のクラスに、コードからアクセスできるようになります。このため、悪意のあるコードが、このようなクラスを利用してシステムのセキュリティーを脅かす可能性があります。 |
defineClassInPackage.{package name} | クラスローダーがセキュリティーマネージャーの checkPackageDefinition メソッドを呼び出すときに、そのクラスローダーの defineClass メソッドを使用して、指定したパッケージ内にクラスを定義する。 |
これにより、特定のパッケージ内にクラスを定義するためのアクセス権をコードに与えることになります。このアクセス権が与えられた悪意のあるコードは、java.security や java.lang などの信頼できるパッケージ内に破壊行為を行うクラスを定義する可能性があるため、このアクセス権は危険です。 |
accessDeclaredMembers | クラスの宣言されたメンバーへのアクセス | 特定のクラス内の public、デフォルト (パッケージ) アクセス、protected、および private なフィールドやメソッドに関する問い合わせを行うコードアクセス権をコードに与えることになります。このアクセス権が与えられたコードは、private および protected なフィールド名とメソッド名にはアクセスできるが、private および protected なフィールドのデータにはアクセスできないし、private なメソッドを呼び出すことはできません。しかし、攻撃の狙いをより正確に定めるため、悪意のあるコードがこの情報を利用する可能性があります。また、クラス内の public なメソッドを呼び出したり、public なフィールドにアクセスしたりする可能性があります。コードが、メソッドとフィールドが含まれるクラスやインタフェースにオブジェクトをキャストできないために、通常はコードがこれらのメソッドを呼び出したり、フィールドにアクセスしたりできない場合は危険です。 |
queuePrintJob | 印刷ジョブ要求の発行 | 機密情報を印刷してしまうか、用紙の無駄になります。 |
getStackTrace | 別のスレッドのスタックトレース情報の取得 | 別のスレッドのスタックトレース情報を取得できる。スレッドの実行を監視し、アプリケーションの脆弱性を発見する悪意のあるコードを可能にするので危険です。 |
setDefaultUncaughtExceptionHandler | キャッチされない例外により、突然スレッドが終了したときに使用されるデフォルトのハンドラを設定する | 攻撃者は、スレッドの終了を妨害できる、悪意のあるキャッチされない例外ハンドラを登録できます |
preferences | java.util.prefs へのアクセスに必要なアクセス権を表す。preferences 実装のユーザーまたはシステムルートは、preferences 持続バッキングストア内で取得または更新操作を実行できる。 | このアクセス権により、コードを実行しているユーザーが必要な OS 特権を持っている場合、そのユーザーは preferences 持続バッキングストアに読み取りや書き込みを行うことができます。実際のバッキングストアは、従来のファイルシステムディレクトリか、プラットフォームの OS に依存するレジストリ内にあります。 |
usePolicy | このアクセス権を付与すると、Java Plug-In のデフォルトのセキュリティープロンプト動作が無効になる。 | 詳細については、Java Plug-In のガイド、アプレットのセキュリティーの基本、および usePolicy アクセス権を参照してください。 |
コンストラクタと説明 |
---|
RuntimePermission(String name)
指定された名前で、新しい RuntimePermission を生成します。
|
RuntimePermission(String name, String actions)
指定された名前を持つ新しい RuntimePermission オブジェクトを生成します。
|
equals, getActions, hashCode, implies, newPermissionCollection
checkGuard, getName, toString
public RuntimePermission(String name)
name
- RuntimePermission の名前。NullPointerException
- name
が null
である場合。IllegalArgumentException
- name
が空である場合。public RuntimePermission(String name, String actions)
name
- RuntimePermission の名前。actions
- null でなければならない。NullPointerException
- name
が null
である場合。IllegalArgumentException
- name
が空である場合。 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.