Windowsでのデータ実行防止は、「プログラムを監視してプログラムがコンピュータのメモリを安全に使用していることを確認する」ことにより、悪意のあるコードに対する防御策と思われます。ただし、すべてのプログラムがDEP用に作成されているわけではなく、「安全な」アプリがブロックされ、安全でないと見なされると、クラッシュやその他の問題が発生する可能性があることも知っています。
DEP設定パネル(下のスクリーンショット)では、コンピューターにインストールされているすべてのプログラムに対してこのサービスを有効にすることができます。
DEPは実際にエクスプロイトからの保護に機能しますか(私はすでに優れたAVとファイアウォールを持っていると仮定しましょう)、それとも互換性リスクに値しないだけですか?
DEPの機能を理解するには、まず、プロセス内でのメモリの配置方法について少し知る必要があります。重要な概念は、コード(CPUが実行できる命令)とデータ(スタックとオブジェクト)がメモリの別々の領域に存在することです。ユーザー入力、ファイル、プログラムデータなどはすべてメモリのデータ領域にあります。
DEPでは、メモリ内のコードページを「実行可能」としてマークすることにより、この分離を強制できます。同様にデータページにマークを付けないことで、プロセッサはメモリ領域がCPU命令用である場合とそうでない場合を認識することができます。保護として、CPUに障害が発生し、DEPが有効になっているときにOSがプロセスを終了できるようになり、プロセッサがデータメモリからコードを実行しようとしていることがわかります。
要約すると、これはユーザーが実行可能コードを含むデータを単純に入力できず、脆弱性を介してプロセッサーの命令ポインターをそのデータにポイントし、以前に広範囲にわたるDEP採用の前に可能であったコードの実行を開始できないことを意味します。
セキュリティメカニズムとして、これはシステム上で任意の/悪意のあるコードを実行するエクスプロイトを軽減するための1つの戦略です。ただし、最近のエクスプロイトは通常、DEPを打ち破ることができます。
DEPを処理できないプログラムに出会ったことはありません。また、Windowsで最初に提供されて以来、DEPを有効にしていましたXP SP2。プログラムが存在しないわけではありません。これによって混乱する可能性がありますが、DEPが有効になっていると、最新のプログラム(Webブラウザーなどの非常に複雑なプログラム)でも動作します。
上記のスクリーンショットに示されているDEPのハードウェアサポートと、DEPの幅広い最新のアプリケーションサポート(およびASLRのようなより高度な緩和策)を考えると、DEPを有効にしてもパフォーマンスの違いに気付くはずがありません。このことを考えると、システムサービスに対してのみDEPを実行しても意味がありません。それをすべて実行しても害はありません。 DEPが原因でクラッシュする問題が発生した場合は、その個々のプログラムをブラックリストに追加できますが、より最新の製品を見つけることも検討します。インターネット向けアプリケーションをDEPなしで実行することは絶対に許可しません(そしてすべて他の利用可能な悪用緩和策)が有効になっています。 DEPをグローバルに有効にすることによって引き起こされるリスクについては知りません。そうしないと、リスクを受け入れることになります。