概要

本来、PC で実行されている全てのプログラムは、ハッカーがオペレーティングシステムを攻撃するためのエントリポイントとして使われる可能性があります。 最近の Windows では、ハッカーの操作がより困難になる機能を備えたプログラムを作成できるようにすることで、この懸念を軽減しています。 Wrapper は、これらの機能を利用してシステムのセキュリティを向上させ、システムを安全に保つために資しています。

バージョン 3.5.33より、Wrapper はそのバイナリ(wrapper.exe、wrapperw.exe と wrapper.dll)が「データ実行防止(英:Data Execution Prevention、DEP)」と互換性があり、「アドレス空間配置のランダム化(英:Address Space Layout Randomization、 ASLR)」をロード時に有効にします。

- DEP は、Wrapper に割り当てられたメモリ領域をコード実行不可能に設定し、マルウェアより注入されたシェルコードの実行防止します。

- ASLR は、プログラムのデータ領域の位置をメモリー内にランダムに配置することで、バッファオーバーフロー攻撃からシステムを守ります。Wrapper が実行される度にスタック、ヒープ及びライブラリは仮想メモリー内に別の位置に配置されることで攻撃者が標的のアドレスを予測することができなくなります。

こちらで書いてある機能を記述する用語は、少し技術的に思われるかもしれませんが、これらの機能を利用することで目立ったパフォーマンスへの影響はなく、Wrapper をより安全に OS 上で実行することが出来ると理解すればよいです。 DEP と ASLR を有効にするには Wrapper コンフィギュレーションファイルで特別な設定が不要です。両機能は Wrapper 3.5.33版以降を実行すれば自動的に適用されます。

データ実行防止(DEP)

Wrapper は、Windows XP SP3 以降のすべての Windows バージョンで DEP を有効にした状態で実行されます。「java.exe」と「javaw.exe」、別の方法で (/NXCOMPAT)オプションをバイナリーヘッダーに追加され、DEP サポートを指定します。このオプションは Windows Vista 以降にサポートされていますが、Windows XP ではサポートされていません。 この動作に合わせるために、Java プロセスで使用されるネイティブライブラリ(wrapper.dll)は同じオプションを使用し、同じバージョンの Windows で DEP を有効にします。

このオプションの存在を確認するには「dumpbin.exe」実行後し、DLL characteristics 配下に "NX Compatible" が表示されていれば存在しているとのことです。

dumpbin /headers <PATH_TO_WRAPPER_DLL>

64ビットの実行可能ファイルを実行している場合、Windows は DEP を強制しますので、64ビットの Wrapper は常に DEP が有効な状態で実行されています(3.5.33以前のバージョンでも)。

DEP をサポートしていない Windows の旧バージョンでは、Wrapper は(通常のセキュリティレベルで)正常に動作します。

DEP は、システムレベルで4つの異なるポリシーで設定できます。

- 最初の二つのポリシーは、Windows の GUI を使い、ローカルユーザーで設定できます。 Windows 10で、「PC」にクリックし、「プロパティ」を選択します。

コントロールパネルの左側のメニューより「システムの詳細設定」を選択します。

「システムのプロパティ」のウィンドウが開き、「詳細設定」のタブで「パフォーマンス」項目の「設定」をクリックします。

「パフォーマンス オプション」のウィンドウが別に開き、「データ防止実行タブ」を選択します。

  • 「重要な Windows のプログラムおよびサービスについてのみ有効にする」は、Windows が Windows プロセス、サービス、64ビットプロセスおよびすべてのバイナリーを DEP 適用を有効にします(Wrapper 3.5.33版以降を含む)。
  • 「次に選択するものを除くすべてのプログラムおよびサービスについてDEPを有効にする」を選択することで、下のボックスに記載されているプロセスと DEP と互換性がないと明示的に指定しているすべてのバイナリとを除き、全てのプロセスに対応するように設定します。(Wrapper の全バージョンは対象外に含まれません。) このオプションは 3.5.33版以降の 32ビット Wrapper を有効にするために使用できますが、システム内の他のプロセスも有効にするため、DEP を対応していないプロセスに影響する可能性もあります。

- 管理者が別の二つのポリシーを利用出来ますが、殆どの場合は必要ありません。 Windows では、すべてのプロセス(例外リストやバイナリに埋め込まれているオプションを無視して)に対して強制的に DEP を実行させることができます。逆に、システム上で実行されているすべてのプロセスに対して完全に DEP を無効にすることもできます。これは管理者としてコマンドラインに「bcdedit.exe」(Windows XP で「boot.ini」)を実行することで可能になります。

アドレス空間配置のランダム化(ASLR)

ASLR は Windows Vista で導入され、以降のすべての Windows バージョンで実装されています。「java.exe」と「javaw.exe」はバイナリヘッダーに(/DYNAMICBASE)オプションを指定し、OS に Java アプリケーションをロード時に ASLR を使用し再ベースさせるように表します。 「wrapper.exe」、「wrapperw.exe」と「wrapper.dll」は同じオプションで ASLR 適用にリンクされています。

このオプションの存在を確認するには「dumpbin.exe」が DLL characteristics 配下に "Dynamic base" が表示されているかどうか確認できます。

dumpbin /headers <PATH_TO_WRAPPER_DLL_OR_EXE>

ASLR について、システムレベルでの特別な設定は不要です。Windows Vista 以降のバージョンは 実行可能ファイル用に ASLR を適用にし、DLL も特別に ASLR 対応にリンクされています。 互換性のため、他のアプリケーションではデフォルトで有効になっていません。Wrapper 3.5.33版以降は ASLR を適用し作動されます。

ASLR をサポートしていない Windows の旧バージョンでは、Wrapper は(通常のセキュリティレベルで)正常に動作します。

Wrapper が DEP/ASLR を有効にした状態で実行されているかどうかの確認方法

Windows タスク マネージャーの「詳細」タブより、「データ実行防止」という列を表示させることが出来ます。列のヘッダーにカーソルを合わせ、右クリックし、「列の選択(S)」をクリックした後「データ実行防止」にチェックを入れます。

DEP が適用された状態で実行されているプロセスはすべて、横に「有効」と表示され、適用されていないプロセスの横には「無効」と表示されます。

あいにく、ASLR の有効状況を確認できる列はありません。

DEP と ASLR が有効になっているかどうかを確認するには Microsoft 社が提供する「Process Explorer」を使用するのは一番簡単な方法です。下記 URL よりダウンロードいただけます(英語版のみ)。

https://technet.microsoft.com/en-us/sysinternals/processexplorer.aspx

ダウンロード後、フォルダーへ抽出し、「procexp.exe」(32 ビット OS 用)若しくは「procexp64.exe」(64 ビット OS 用)を実行してください。

階層的にプロセスを示すウィンドウが表示されます。Wrapper が作動中の場合、Wrapper プロセスとそのチャイルド Java プロセスが表示されます。

DEP、若しくは ASLR が各プロセス用に有効になっているか確認するには、列ヘッダーに→クリックし、「列を選択」を選び、「プロセスイメージ」タブにクリックし、「DEP 状況」と「ASLR 有効」にチェックを入れ、最後に「OK」をクリックするとその2列が追加されます。

下記に Wrapper 3.5.22版と 3.5.33版(32ビットと 64ビット)を Windows Vista 以降で実行された場合の結果が表示されます:

Wrapper 3.5.32版 - 32ビット:DEP も ASLR も Wrapper プロセス用に有効にされていませんが、Java は両機能を有効にしています。


Wrapper 3.5.32版 - 64ビット:DEP は自動的に Wrapper の64ビットプロセス用に有効になっていますが、ASLR はサポートされていません。


Wrapper 3.5.33版 - 32ビット(64ビットも同様):DEP も ASLR も、両方が Wrapper プロセス用に有効になっています。