DEP用新API提供

Microsoft、データ実行防止技術を推進する新APIを提供(Computerworld.jp)にあるように、「第1〜2四半期にリリースされる予定のWindows Vista SP1、Windows XP SP3、Windows Server 2008に搭載される」らしい。DEPData 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氏は説明した。

Microsoft、データ実行防止技術を推進する新APIを提供(Computerworld.jp)より

だそうだ。

*1:というか、より詳しい解説

*2:失礼

*3:Michael Howardのブログでは自明だろうとして説明されていない