DEP用新API提供
Microsoft、データ実行防止技術を推進する新APIを提供(Computerworld.jp)にあるように、「第1〜2四半期にリリースされる予定のWindows Vista SP1、Windows XP SP3、Windows Server 2008に搭載される」らしい。DEP(Data Execution Prevention)はNX(No eXecute)とも呼ばれるもので、データ領域におかれたコードの実行を禁止することで、バッファオーバーフロー攻撃を防ぐものであり、Windows XP SP2から導入されている。
この記事の元ネタ*1はMichael Howardのブログの"New NX APIs added to Windows Vista SP1, Windows XP SP3 and Windows Server 2008"。
ざっくり言うと、1) 古いATLではDEPが使えなかったので、使えるようにした ということと、2) ソフトウェアからDEPの制御を可能にしたということだ。ATL(Active Template Library)とはまた懐かしいものがと思った*2が、ATLとDEPの組み合わせの問題はMichael Howardにより次のように説明されている。
Older versions of ATL, and by older I mean pre-Visual C++ 2005, used dynamically generated code in small isolated cases. Obviously, without the appropriate APIs this is going to cause problems on a DEP-enabled computer, because you can't execute data. This code is referred to as a "thunk" and versions of ATL in VC++ 2005 and later work correctly with DEP.
"New NX APIs added to Windows Vista SP1, Windows XP SP3 and Windows Server 2008"より
VC2005以前では、動的に生成されたコードを使っていたが、それらはDEP有効にした環境では動作しないので、APIを準備したということだ。最新のATLを用いれば解決するらしいが、このように古いATLまで気にしなければいけないということは、それだけDEPを有効にした環境が増えてきたという証拠か。
新しく用意されるのは、3つのAPI(ブログから読む限り)。
- SetProcessDEPPolicy
- GetSystemDEPPolicy
- GetProcessDEPPolicy
SetProcessDEPPolicyでプロセスのDEP制御をするもので、残りの2つはシステムとプロセスのDEP状況を把握するものだ*3。
アプリケーションからDEPの有効/無効を制御できるようにしたのは、互換性の問題を解決するため。
If you support DEP but want to allow customers to disable DEP if there are serious compatibility issues, then this is the API to use because the argument can be a configuration option.
"New NX APIs added to Windows Vista SP1, Windows XP SP3 and Windows Server 2008"より
なんで、この時期に? というのもあるが、それは、
なお、新しいAPIをこの時期に提供する理由については、「同SPが多数のユーザーに導入されるからにほかならない。われわれはDEPによるアプリケーションの保護を推進中であり、新APIの提供はその一環」とHoward氏は説明した。
だそうだ。