安全なプログラムの実行

id:hideakii:20041224 を読んで思ったのですが、IR に利用するプログラムの場合、exe 本体だけでなく、関連する dll も用意しておいてやる必要がありそうです。
Linux などでは、コンパイル時に static link にしておくことで、ライブラリ関数に類するコードを実行ファイルの中に埋め込み、実行環境への依存度を下げることができます*1が、Windows では各プログラムの DLL 依存度が高いため、static link という概念が(ほとんど)成り立ちません。
…というわけで、ひさしぶりに MSDN Library の LoadLibrary の説明を見ていたのですが、レジストリの HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode を 0 にすることにより、カレントディレクトリの DLL のロードが抑制されるように変更されていたんですね。知りませんでした。
カレントディレクトリからの DLL のロードが予防できたとしても、PATH や SetDLLDirectory を利用することにより、汚染された DLL をロードさせることは可能かも知れません。そういうことを考慮すると、やはり IR なプログラムには、同じディレクトリに DLL も用意してあげないといかないですね。
また EXE と DLL だけでなく、すでにシステムにロードされている汚染されたDLLを利用しないために、Side-By-Side用のマニフェストファイルも用意する必要がありそうです。
…なかなか一筋縄ではいきそうにないですね。

hideakiiさんのコメント

いっそ、リモートからプロセスを起動(実行)させたほうが安全ですかねぇ。

リモートから起動させる…。ちょっとイメージがわかないのですが、結局、「汚染された」EXEなりDLLが実行されるのではないでしょうか? 結局、ドライバとしてIRな機能を組み込んでおくとかになるんでしょうかねぇ。

*1:それでもカーネルやドライバが汚染されていれば、だめですね