「データ実行防止」の版間の差分

削除された内容 追加された内容
NXビットへのリダイレクト
 
en:Data Execution Prevention 2010年7月21日 (水) 14:09 (UTC) の版より翻訳
1行目:
'''データ実行防止''' ({{lang-en-short|Data Execution Prevention}}, '''DEP''') は、現代の[[Microsoft Windows]][[オペレーティングシステム]]に含まれるセキュリティ機能である。この機能の目的は、[[アプリケーションソフトウェア|アプリケーション]]やサービスが実行不可能なメモリ領域からコードを実行することの防止である。これはある種の攻撃 (たとえば[[バッファオーバーフロー]]を経由してコードを格納するもの) を防止する効果がある。DEPには2つの動作モードがある: メモリページを実行不可能とマークできる[[CPU]]のためのハードウェアDEPと、ハードウェアサポートがないCPUのためのソフトウェアDEPで、後者の防御はより限られている。ソフトウェアDEPはコードがデータページから実行されることを防がないが、代わりに他の攻撃 (SEH オーバーライト) を防止する。
#REDIRECT [[NXビット]]
 
DEPは[[Windows XP]] Service Pack 2で導入され、 and is included in Windows XP Tablet PC Edition 2005、[[Windows Server 2003]] Service Pack 1以降<ref name="KB875352">{{cite web|url=http://support.microsoft.com/kb/875352/EN-US/|title=A detailed description of the Data Execution Prevention (DEP) feature in Windows XP Service Pack 2, Windows XP Tablet PC Edition 2005, and Windows Server 2003|publisher=[[Microsoft]]|date=2006-09-26|accessdate=2008-07-11}}</ref>、[[Windows Vista]]、[[Windows Server 2008]]、およびそれ以降のすべてのバージョンのWindowsに含まれている。
 
== モード ==
=== ハードウェアDEP ===
ハードウェアDEPは互換性のあるCPU上で[[NXビット]]を有効にする。このために32ビットWindowsでは[[物理アドレス拡張|PAE]][[カーネル]]が自動的に使われる。64ビットカーネルではネイティブサポートされる。[[Windows Vista]]のDEPはメモリの特定の部分がデータの保持のみを目的にしているとマークし、NXもしくはXDビットの有効なプロセッサがその領域を実行不可能であると認識することによって機能する<ref name="KB875352"/>。これは[[バッファオーバーフロー]]攻撃の成功を妨げる。Windows Vistaでは、プロセスのDEPの状態、すなわち、DEPがある特定のプロセスで有効か無効かは[[Windows タスク マネージャー]]の''プロセス''タブに表示できる。
 
場合によっては、データ実行防止は正当なソフトウェアの実行を妨げるという[[意図しない結果]]をもたらすことがある。この場合、影響を受けるソフトウェアはそのメモリの一部からコードの実行を許すようフラグを立てる必要があるが、もしアプリケーションが実行可能であるとマークされたメモリ領域に渡されたデータの検証を厳密に行わないと、これ自身が攻撃の可能性につながる。
 
もし[[x86]]プロセッサががこの機能をハードウェアでサポートし、またシステムのBIOSがこの機能をサポートし、かつ製造業者もしくはユーザーのどちらかが機能を有効にしたなら<ref>{{cite web | title = Microsoft Knowledge Base kb912923| date = 2007-10-07 | url = http://support.microsoft.com/kb/912923| accessdate = 2009-03-14}}</ref>、NXの機能はWindowsで、限られた「オプトイン」に基づいて有効にされる<ref>{{cite web | title = Microsoft Knowledge Base kb875352| date = 2006-09-26 | url = http://support.microsoft.com/kb/875352 | accessdate = 2009-03-14}}</ref>。この設定はWindowsシステムとバイナリファイルの限られた一部にのみ保護を提供する。完全な保護を達成するには、ユーザーはthe user must choose either 「オプトアウト」を選んで特別に免除されていないすべてのプログラムとプロセスを対象にするか、「常に有効 (AlwaysOn)」を選んでそのような例外なしですべてを対象にする必要がある。これらは「システムのプロパティ」のインターフェースを通して構成可能である<ref>{{cite web | title = System-wide configuration of DEP| date = 2006-09-26 | url = http://support.microsoft.com/kb/875352#5 | accessdate = 2009-03-14}}</ref>。もし機能がx86プロセッサによってサポートされていないなら、保護は提供されない。[[x86]]アーキテクチャ以外では、NXと同様のものがインテルの[[IA-64]]アーキテクチャにも存在し、Windowsによってサポートされている。
 
=== ソフトウェアDEP ===
ソフトウェアDEPはNXビットとは関係ないが、マイクロソフトが「安全な構造化例外処理 (SafeSEH)」と呼んでいるものである。ソフトウェアDEP/SafeSEHは単純に例外が投げられたときチェックを行い、例外がアプリケーションの関数テーブルに登録されていることを確認する。このためプログラムは関数テーブルを含めてビルドされる必要がある。しかしながら、ソフトウェアDEPはデータページからのコードの実行を防止することと関連があるという印象を与えるとしても、それは保護とは異なるものである<ref name="KB875352" />。
 
== 問題点 ==
=== 限界 ===
他のオペレーティンすシステムで利用可能な類似の保護機構と異なり、DEPは[[Address Space Layout Randomization]] (ASLR、Windows Vistaで利用可能になった新機能) を提供しない。このため[http://woct-blog.blogspot.com/2005/01/dep-evasion-technique.html 攻撃中にDEPを無効にする]ために使える可能性のある[[return-to-libc攻撃]]を許すかもしれない。
この可能性は、以下の''Uninformed''[http://uninformed.org/?v=2&a=4&t=sumry]の記事"skape & Skywing"の著者によって、すでにWindowsのハードウェアDEPに対してデモンストレーションされた。これはreturn-to-libc型の攻撃に依存している。この技術は、OptIn/OptOut機構を適用する既知のサービスパック依存の位置をEIPレジスタが直接指すことに依存している。またOptOut/OptInを利用可能にするブート時オプションに依存している。もしすべてのページが厳密にDEPを適用されていれば、攻撃は成功しないであろう。[[PaX]]の文書は、なぜASLRが必要なのかさらに[http://pax.grsecurity.net/docs/aslr.txt 詳しく]解説している。DEPは、コードを実行時に書き込んで実行する必要がある場合にも役に立たない。[[ジャストインタイムコンパイル方式|JITコンパイラ]]がよく知られた例である。JITコンパイラは (たとえば[[JIT Spray]]の使用により) 攻撃コードの生成に使われる可能性がある。生成されたコードは実行可能であるとフラグが立てられており、そのためDEPによってトラップされない。
 
=== 互換性 ===
DEPは (通常古いソフトウェアで) ソフトウェアの問題の原因となることがある。しかし、[[エイジ オブ ミソロジー]]のような一部のアプリケーションについては問題を解決することもある{{Dubious|date=November 2008}}。DEPはプロセス全体に適用されるので、アプリケーションがまったく問題なくDEP有効で動作したとしても、DEP非互換の拡張機能が追加されるとDEPを無効にしなければならないことがある。
 
ユーザーは、Vistaと[[Windows Server 2003 R2#Windows Server 2003 R2|Windows Server 2003 R2]]の一部として含まれている、マイクロソフトのServices for Unixの一部である各種コマンドラインコマンドで問題に遭遇することがある。
 
ほとんどの場合、これらの問題はDEPの機能を無効にすることによって解決できる。DEPはアプリケーションごとに無効にすることもできるし、重要なWindowsのプログラムとサービスを除いてすべてで無効にすることもできる<ref>{{cite web
| author=Marc Liron
| url=http://www.updatexp.com/dep-exceptions.html
| title=Adding Software Exceptions In Data Execution Prevention (DEP)
| work=Windows XP Update
| accessdate=June 8, 2006
}}</ref>。マイクロソフトはアプリケーションがDEPのエラーでクラッシュしたときに、DEPをシステム全体で無効にしないよう推奨している。代わりに、問題を起こしたソフトウェアの作者やベンダーにまず連絡して、DEPに違反しない更新バージョンを確認し、それに失敗したら、DEPを問題の起きたアプリケーションでのみ無効にすべきであるとしている<ref>{{cite web|url=http://windowshelp.microsoft.com/Windows/en-US/help/186de3d0-01af-4d4c-981d-674637d2f4bf1033.mspx|title=Data Execution Prevention: frequently asked questions|accessdate=2008-09-15|publisher=[[Microsoft]]}}</ref>。
 
「COMサロゲートが動作を停止しました」というエラーがときどきWindows Vistaでメディアフォルダを見ているときに発生し、dllhost.exeでDEPを無効にすることで解決する場合がある。Windows Vistaでこのエラーが起きる原因は、多くの[[サードパーティー]]製の映像や音声の[[コーデック]]がDEP互換ではないことにある。この問題は一般に、すべてのインストールされているコーデックを最新バージョンに更新することによっても解決する場合がある。
 
DEPの問題は、[[Windows Explorer]]、[[Internet Explorer]]および[[Windows Installer]]のような、DEP互換の中核的なオペレーティングシステムコンポーネントでも発生しうる。これらは、DEP互換ではないかもしれない[[サードパーティー]]製のプロセス内拡張やプラグインをサポートするからである<ref>{{cite web|url=http://support.microsoft.com/kb/929710|date=2007-03-15|title=Windows Installer custom action code must be compatible with Data Execution Prevention in Windows Vista|publisher=[[Microsoft]]|accessdate=2008-07-10}}</ref>。
 
== 構成 ==
本節では、4つの利用可能なDEPのモードについて解説する。モードのうち2つ (OptIn, OptOut) は[[コントロールパネル (Windows)|コントロールパネル]]の''システム''アプレットの''パフォーマンスオプション''ダイアログボックスを通して制御できるが、残りの2つ (AlwaysOn, AlwaysOff) はcan only be controlled by way of the boot.ini file on Windows XPではboot.iniの直接編集で、Windows Vistaとそれ以降ではコマンドプロンプトの''bcdedit''コマンドによってのみ制御可能である<ref name="KB875352"/>。
 
;OptIn: この設定はWindows XP、Vistaおよび7の既定の構成である。このモードでは、DEPは限られたWindowsのシステムアプリケーションとサービスでのみ有効になる。アプリケーションはオペレーティングシステムによってオプトインを強いられない -- オプトインを望むアプリケーションは、明示的に保護の要求を提示しなければならない<ref name="SetProcessDEPPolicy">{{cite web
|url=http://msdn.microsoft.com/en-us/library/bb736299%28VS.85%29.aspx
|title=SetProcessDEPPolicy Function
|work=Microsoft Developer Network
|publisher=Microsoft Corporation
|date=3 December 2009
|accessdate=5 December 2009
}}</ref>。ただしWindows Vista x64上の64ビットアプリケーションとサービスは例外である: このモードで走る64ビットのアプリケーションとサービスは明示的にオプトアウトの要求を提示しない限り、自動的に保護される<ref>{{cite web
| author=Robert Hensing
| url=http://blogs.technet.com/robert_hensing/archive/2007/04/04/dep-on-vista-explained.aspx
| title=DEP on Vista exposed!
| accessdate=February 26, 2009
}}</ref><ref name="UnderstandDEP">{{cite web
|url=http://blogs.technet.com/srd/archive/2009/06/12/understanding-dep-as-a-mitigation-technology-part-1.aspx
|title=Understanding DEP as a mitigation technology (Part 1)
|work=Microsoft Security Research & Defense Blog
|publisher=Microsoft TechNet Blog
|date=12 June 2009
|accessdate=5 December 2009
|last=Hensing
|first=Robert
}}</ref>。
 
;OptOut: この設定はWindows Server 2003 SP1のデフォルト構成である。このモードでは、DEPは既定ですべてのプログラムとサービスに対して有効にされる。コントロールパネルのシステムダイアログボックスを使って、DEPが適用されるべきでない特定のプログラムの一覧を入力できる。ネットワーク管理者はApplication Compatibility Toolkitを使って、DEPの保護からプログラムを「オプトアウト」できる。DEPの保護を望まないプログラムとサービスは明示的にオプトアウトの要求を提示しなければならない<ref name="UnderstandDEP" /><ref name="SetProcessDEPPolicy" />。
 
;AlwaysOn: この設定はシステム全体に完全なDEPの保護を提供する。すべてのプログラムは常にDEPを適用して実行される。例外の一覧、アプリケーション互換shimおよびオプトアウト要求は無視される。
 
;AlwaysOff: この設定はDEPを完全に無効にする。すべてのオプトイン要求は無視される。
 
Boot.iniファイルのパラメーター'''/noexecute=''policy_level'''''でDEP設定を調整できる。ここで''policy_level''は''OptIn''、''OptOut''、''AlwaysOn''もしくは''AlwaysOff''のいずれかである<ref name="KB875352"/>。
 
== 関連項目 ==
* [[NXビット]] – 他のオペレーティングシステムで使われている類似の技術の名前の一覧がある
* [[実行保護]]
* [[バッファオーバーフロー]]
* [[ヒープオーバーフロー]]
* [[スタックオーバーフロー]]
* [[バッファオーバーフロー保護]]
 
== 出典 ==
<references/>
 
== 外部リンク ==
* [http://vlaurie.com/computers2/Articles/dep.htm DEPとその構成方法の説明]{{en icon}}
* [http://user.cs.tu-berlin.de/~normanb/ NXTEST] DEPが有効で機能していることを確認するため、データセグメント、プロセスヒープおよびスタックからコード実行をテストできるフリーのツール{{en icon}}
* [http://blogs.zdnet.com/Ou/?p=150 Guide to hardware-based DEP protection]{{en icon}}
* [http://support.microsoft.com/kb/899298/ Windows Server 2003 Service Pack 1 のヘルプ トピック「データ実行防止とは」に記載されている DEP のデフォルト設定に関する記述が正しくない]
* [http://www.0xc0000005.com/dep-exceptions.html VistaとXPでDEPの例外を定義する簡単な手順] {{en icon}}
* [http://www.grc.com/securable.htm SecurAble] DEPサポートが利用可能かどうか、そして利用可能なら、有効化どうかをテストするフリーのツール{{en icon}}
* [http://www.winitor.net/en/pestudio.html Test 任意の32ビットおよび64ビットのアプリケーションもしくはライブラリに対するASLRとDEPサポートのテスト]{{en icon}}
{{Windows Components}}
 
[[Category:Microsoft Windows]]
[[Category:オペレーティングシステムの仕組み]]
[[Category:コンピュータセキュリティ]]
 
[[en:Data Execution Prevention]]
[[fa:جلوگیری از اجرای داده]]
[[fr:Data Execution Prevention]]
[[ko:데이터 실행 방지]]
[[ms:Data Execution Prevention]]
[[pl:Data Execution Prevention]]
[[pt:Data Execution Prevention]]
[[ru:Data Execution Prevention]]