概要

Windows では、「DLL ハイジャッキング」と呼ばれるセキュリティ脆弱性が発生する可能性があります。 これは、アプリケーションが意図した DLL ではなく悪意のある DLL を読み込むことで発生します。 このリスクは、システムが書き込み可能なディレクトリや権限のないユーザーによって制御されているディレクトリ内でアプリケーション依存の DLL を検索する場合に発生し、正当な DLL が同名の悪意のある DLL に置き換えられる可能性が高くなります。

Java アプリケーションにおけるこのリスクを軽減するため、Wrapper では、ネイティブライブラリによってロードされる DLL をシステムが検索する場所を設定できます。 検索対象を信頼できるディレクトリに限定することで、信頼できないライブラリがロードされるのを防ぐことができます。

次のプロパティを使用して、DLL の検索パスを指定できます。

注意

これらの設定の範囲は Java アプリケーションのプロセスに限定されているため、設定された検索パスは子プロセスに継承されません。

さらに、これらの設定はネイティブ コードによってロードされるライブラリにのみ影響し、「system.LoadLibrary()」などの メソッドを使用して Java によって明示的にロードされるライブラリには影響しません。JVM がネイティブライブラリを 検索する場所を指定するには、代わりに[wrapper.java.library.path.<n>]プロパティを使用しください。

wrapper.java.windows.dll.search.mode プロパティ

対応バージョン :3.6.3
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)Linux (未対応)IBM AIX (未対応)FreeBSD (未対応)HP-UX (未対応)Solaris (未対応)IBM z/Linux (未対応)

このプロパティを使用すると、DLL 検索をシステムのデフォルトの動作に任せるモードと、 [wrapper.java.windows.dll.search.path.<n>]プロパティで 指定されたパスのみに検索を制限するモードの2つのモードを設定できます。

2つのモードは次のトークンで表されます。

  • LEGACY」:システムのデフォルトの動作(最新バージョンの Windows のセーフ DLL 検索モード)です。

  • RESTRICTED」:DLL を検索するディレクトリを制限します。

デフォルト値は「LEGACY」です。

設定例:
wrapper.java.windows.dll.search.mode=RESTRICTED

注意

LEGACY」モードを使用する場合、Wrapper はシステムが DLL をロードするための デフォルトのメカニズムを使用することを許可します。

Windows XP Service Pack 2以降、Windows はアプリケーションの作業ディレクトリを除外する、より安全なDLL検索順序を採用しています。 この変更により、安全でない場所から悪意のある DLL がロードされるリスクが軽減されます。ただし、この検索順序には PATH 環境変数で 指定されたディレクトリも含まれることに注意が必要です。PATH はシステム全体で共有されることが多いため、 アプリケーションがライブラリをロードするには安全ではないディレクトリが含まれている可能性があります。

特定のディレクトリは、[wrapper.system.library.path.<n>]プロパティを使用してパスの先頭に追加できます。


対照的に、「RESTRICTED」モードを使用する場合、 システムはパス環境変数にリストされているディレクトリで DLL を検索しません。 パスには常に[wrapper.java.windows.dll.search.path.<n>]の値が 入力されていますが、これらのプロパティを通じて指定されたディレクトリは、DLL を検索するときにシステムでは使用されません。 したがって、「RESTRICTED」Lモードは、system32 パス、Java コマンドを含む ディレクトリ、および[wrapper.java.windows.dll.search.path.<n>]で指定されたパスに制限されます。

警告

RESTRICTED」モードを使用して、JVM またはアプリケーションによって予想されるディレクトリを 禁止する過度に制限的な設定として慎重になり、DLL のロード障害とランタイムエラーが発生する可能性がありますので注意してください。

wrapper.java.windows.dll.search.path.<n> プロパティ

対応バージョン :3.6.3
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSX (未対応)Linux (未対応)IBM AIX (未対応)FreeBSD (未対応)HP-UX (未対応)Solaris (未対応)IBM z/Linux (未対応)

このプロパティセットを使用すると、DLL がネイティブライブラリからロードされたときに検索するパスを設定できます。 これらのプロパティは[wrapper.java.windows.dll.search.mode]が「RESTRICTED」に設定される場合にのみ適用され、「LEGACY」に設定されている場合には無視されます。

<n>]コンポーネント:
各要素は「プロパティ名」を持ち、その名前は [wrapper.java.windows.dll.search.path.]で始まり、 プロパティ名の「<n>」コンポーネント部には、 「1」からカウントアップしていくインテージャー(整数値)のナンバリング数値を入れて指定します。 デフォルトでは、連番であり欠番で飛ぶことはないはずです。 [wrapper.ignore_sequence_gaps]プロパティで、シーケンス内で ギャップ(途切れ)検索を「許可する/許可しない」を任意に設定にすることができます。

設定例:
wrapper.java.windows.dll.search.path.1=../syslib

参照: ライブラリー