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, 2014, Oracle and/or its affiliates. All rights reserved.