このクラスは、実行時のアクセス権に関連します。RuntimePermission は、ターゲット名とも呼ばれる名前を格納しますが、アクションリストは格納しません。 名前の付いたアクセス権 (名前付きアクセス権) は持っても持たなくてもかまいません。
ターゲット名には、実行時アクセス権 (下を参照) の名前を指定します。命名規約は、階層型プロパティーの命名規約に従います。また、ターゲット名のあとにアスタリスクを指定し (「.」のあとに指定するか、単独で指定)、ワイルドカードによる照合を行うこともできます。たとえば、「loadLibrary.*」や「*」は有効ですが、「*loadLibrary」や「a*b」は無効です。
| アクセス権ターゲット名 |
アクセス権により許可される機能 |
このアクセス権を許可した場合のリスク |
| createClassLoader |
クラスローダーの作成 |
このアクセス権を与えるのは、きわめて危険です。悪意のあるアプリケーションが独自のクラスローダーのインスタンスを生成し、破壊行為を行うクラスをシステムにロードする可能性があります。この新たにロードされたクラスが同じクラスローダーによって保護ドメインに置かれ、ロードされたクラスに、そのドメインのアクセス権が自動的に与えられる可能性があります。 |
| getClassLoader |
クラスローダー (クラスを呼び出すためのクラスローダーなど) の取得 |
これにより、特定のクラスのクラスローダーを取得するためのアクセス権を、攻撃者に与えることになります。あるクラスのクラスローダーにアクセスできると、攻撃者は、そのクラスローダーから使用できるほかのクラスをロードできるようになるため、このアクセス権は危険です。本来は、そのようなクラスにはアクセスすることはできません。 |
| setContextClassLoader |
スレッドが使うコンテキストクラスローダーの設定 |
コンテキストクラスローダーは、システムクラスローダーに存在しない可能性のあるリソースを探す必要があるときに、システムコードおよびエクステンションによって使用されます。setContextClassLoader アクセス権を与えると、コードは、システムスレッドを含め、特定のスレッドで使用するコンテキストクラスローダーを変更できるようになります。 |
| setSecurityManager |
セキュリティーマネージャーの設定 (既存の設定を置き換える可能性あり)
|
セキュリティーマネージャーとは、アプリケーションがセキュリティーポリシーを実装できるクラスです。setSecurityManager アクセス権を与えると、コードは、別のセキュリティーマネージャー (より制限の少ないセキュリティーマネージャーなど) をロードし、使用するセキュリティーマネージャーを変更できるようになります。この結果、元のセキュリティーマネージャーによって課されていたチェックを回避できるようになります。 |
| createSecurityManager |
新しいセキュリティーマネージャーの作成 |
ほかのクラスまたは実行スタックの情報を公開する可能性がある、保護された、機密性の高いメソッドへのアクセスをコードに与えます。 |
| exitVM |
Java 仮想マシンの停止 |
仮想マシンを自動的に停止させることで、攻撃者はサービス妨害攻撃を展開することができます。注:アプリケーションクラスパスからロードされたすべてのコードにアクセス権「exitVM」が付与されるため、アプリケーションは自らを終了させることができます。 |
| shutdownHooks |
仮想マシンのシャットダウンフックの登録と解除 |
悪意のあるシャットダウンフックを登録することで、攻撃者は仮想マシンの正常なシャットダウンの妨害攻撃を展開することができます。 |
| setFactory |
ServerSocket または Socket が使うソケットファクトリ、あるいは URL が使うストリームハンドラファクトリの設定 |
これにより、コードから、ソケット、サーバーソケット、ストリームハンドラ、または RMI ソケットファクトリの実際の実装を設定できるようになります。注:java.net.ServerSocket, java.net.Socket は、J2ME Foundation Profile などの J2ME CDC プロファイルにあります。攻撃者は、データストリームを狂わせる異常な実装を設定する可能性があります。 |
| setIO |
System.out、System.in、および System.err の設定 |
標準システムストリームの値を変更できるようになります。攻撃者は System.in を変更してユーザーの入力を監視および盗聴したり、System.err を「null」の OutputStream に設定して、System.err に送られたエラーメッセージがまったく表示されないようにすることができます。 |
| modifyThread |
Thread の stop、suspend、resume、setPriority、および setName などのメソッドの呼び出しを介してのスレッドの変更 |
攻撃者は、システム内の任意のスレッドを開始または停止できます。 |
| stopThread |
Thread の stop メソッドの呼び出しを介してのスレッドの停止 |
スレッドへのアクセス権をすでに取得している場合、コードから、システム内のどのスレッドでも停止できるようになります。実行中のスレッドが終了させられ、システムが破壊される可能性があります。 |
| modifyThreadGroup |
ThreadGroup の destroy、getParent、resume、setDaemon、setMaxPriority、stop、および suspend などのメソッドの呼び出しを介してのスレッドグループの変更 |
攻撃者は、スレッドグループを作成してその実行優先順位を設定できます。 |
| getProtectionDomain |
クラスの ProtectionDomain の取得 |
コードから、特定のコードソースのポリシー情報を取得できるようになります。ポリシー情報が盗まれてもシステムのセキュリティーが脅かされるわけではないが、攻撃の狙いをより正確に定めるためのローカルファイル名などの追加情報を攻撃者に与えてしまうことになります。 |
| readFileDescriptor |
ファイル記述子の読み取り |
コードから、読み出したファイル記述子に関連付けられているファイルを読み出すことができるようになります。ファイルに機密データが含まれている場合、このアクセス権は危険です。 |
| writeFileDescriptor |
ファイル記述子への書き込み |
コードから、そのファイル記述子に関連付けられているファイルに書き込めるようになります。悪意のあるコードでウィルスを感染させたり、ディスク全体を埋めることができるので危険です。 |
| loadLibrary.{library name} |
特定のライブラリへの動的リンク |
Java のセキュリティーアーキテクチャーが、ネイティブコードのレベルで悪意のある動作を防止するようには設計されていないため、ネイティブコードライブラリをロードするアクセス権をアプレットに与えるのは危険です。 |
| accessClassInPackage.{package name} |
クラスローダーがセキュリティーマネージャーの checkPackageAcesss メソッドを呼び出したときに、クラスローダーの loadClass メソッドを介して、指定されたパッケージへアクセスを許可する |
通常はアクセスできないパッケージ内のクラスに、コードからアクセスできるようになります。このため、悪意のあるコードが、このようなクラスを利用してシステムのセキュリティーを脅かす可能性があります。 |
| defineClassInPackage.{package name} |
クラスローダーがセキュリティーマネージャーの checkPackageDefinition メソッドを呼び出したときに、クラスローダーの defineClass メソッドを介して、指定されたパッケージ内のクラスを定義する |
これにより、特定のパッケージ内にクラスを定義するためのアクセス権をコードに与えることになります。このアクセス権が与えられた悪意のあるコードは、java.security や java.lang などの信頼できるパッケージ内に破壊行為を行うクラスを定義する可能性があるため、このアクセス権は危険です。 |
| accessDeclaredMembers |
クラスの宣言されたメンバーへのアクセス |
特定のクラス内の public、デフォルト (パッケージ) アクセス、protected、および private なフィールドやメソッドに関する問い合わせを行うコードアクセス権をコードに与えることになります。このアクセス権が与えられたコードは、private および protected なフィールド名とメソッド名にはアクセスできるが、private および protected なフィールドのデータにはアクセスできないし、private なメソッドを呼び出すことはできません。しかし、攻撃の狙いをより正確に定めるため、悪意のあるコードがこの情報を利用する可能性があります。また、クラス内の public なメソッドを呼び出したり、public なフィールドにアクセスしたりする可能性があります。コードが、メソッドとフィールドが含まれるクラスやインタフェースにオブジェクトをキャストできないために、通常はコードがこれらのメソッドを呼び出したり、フィールドにアクセスしたりできない場合は危険です。
|
| queuePrintJob |
印刷ジョブ要求の初期化 |
機密情報を印刷してしまうか、用紙の無駄になります。 |