データ実行防止(DEP)とは
データ実行防止(DEP)は、
Microsoft Windowsが提供するセキュリティ機能であり、アプリケーションやサービスが実行できないメモリ領域でのコード実行を防ぐことを目的としています。この機能は、
バッファオーバーフローなどの攻撃を防ぐために役立ちます。
DEPには主に2つの動作モードがあります。それは、ハードウェアDEPとソフトウェアDEPです。ハードウェアDEPは、対応する
CPUにおいてメモリページを実行不可能にマークすることで機能します。一方、ソフトウェアDEPは、ハードウェアサポートがない場合に使用され、他の種類の攻撃を防止する役割があります。
ハードウェアDEP
ハードウェアDEPは、
NXビットを有効にすることで機能します。これは、32ビットWindowsではPAE
カーネルを自動的に使用し、64ビット
カーネルではネイティブにサポートされています。この機能によって、メモリの特定の領域がデータ保持のみを目的としてマークされ、実行不可能であることが認識されます。その結果、
バッファオーバーフロー攻撃の成功が妨げられます。
Windows Vista以降では、各プロセスのDEPの状態がタスクマネージャーで確認できるため、ユーザーは簡単に状況を把握できます。ただし、時には正当なソフトウェアが意図せず影響を受け、DEPが誤って実行を妨げる場合もあります。アプリケーションが提供するメモリの一部は、実行を許可するフラグを立てる必要がありますが、厳密な検証を怠ると、逆に攻撃のリスクを高めることにもなります。
ソフトウェアDEP
ソフトウェアDEPは、
NXビットとは直接関係はなく、Microsoftが呼ぶ「安全な構造化例外処理(SafeSEH)」に基づいています。これは、例外が発生したときに、アプリケーションの関数テーブルに例外が登録されているかどうかをチェックする仕組みです。ただし、ソフトウェアDEPは、データページからのコード実行を防止するものではないため、別の防御策であることを理解する必要があります。
DEPの問題点と限界
どのようなセキュリティ機能にも限界があり、DEPも例外ではありません。例えば、他のオペレーティングシステムに見られる同様の保護機構とは異なり、DEPは
アドレス空間配置のランダム化(ASLR)を提供しません。これにより、攻撃者によるreturn-to-libc攻撃の可能性が残ります。この攻撃は、DEPを無効にするために利用されるかもしれません。
また、DEPはオペレーティングシステムの古いソフトウェアと互換性がない場合がありますが、それが必ずしも悪い結果をもたらすわけではありません。特定のアプリケーションにおいては、DEPが問題を解決することもあります。ユーザーは、DEPのエラーによってクラッシュした場合、まずソフトウェアの作者に連絡して修正バージョンがないか確認することが推奨されています。
DEPの構成とモード
DEPには、さまざまな設定が可能です。代表的なものを以下に示します。
- - OptIn: これはデフォルト設定であり、限られたWindowsのアプリケーションとサービスでのみ有効になります。アプリケーションは自らの要求で保護を受ける必要があります。
- - OptOut: Windows Serverでのデフォルト構成で、すべてのプログラムがDEPの保護を受け、特定のプログラムのみがオプトアウトできます。
- - AlwaysOn: すべてのプログラムに対してDEPを常に適用します。例外の要求は無視されます。
- - AlwaysOff: DEP機能を完全に無効にします。
これらの設定は、Windowsのシステムプロパティから制御できますが、最近のバージョンでは、コマンドプロンプトを通じて直接設定することが求められます。
このように、データ実行防止(DEP)は、
Windowsのセキュリティ機能の中で重要な役割を果たしていますが、その適用と限界を理解し、適切に管理することが必要です。