アカウント名:
パスワード:
手持ちのアプリケーションをDependency Walkerで確認してみましたが、Visual Studio 6.0及びVisual Studio 2005で作成したスタティックリンク系MFCアプリケーションも、dwmapi.dllを間接的にロードしているように見えます。(実際にロードされるかは未確認)
そもそも、VS2010のMFCもdwmapi.dllを直接ロードしているわけではなく、ダイナミックリンクしているshell32.dllから間接的に呼ばれているわけで……。これ、下手をするとshell32.dllを呼び出すアプリは全滅じゃないですかね?ちなみに、shell32.dllはその名の通りシェル関連のDLLで、SHGetMallocのようなSH接頭
system32あたりに空ファイル作ってdwmapi.dllという名前にしておけばXPでも無問題という風に読めたんだけど、違うかな?
>dwmapi.dllが存在しないため、LoadLibraryは標準のDLL検索パスを捜査し続け最終的にはカレントディレクトリここらへんがちょっと違う。LoadLibraryのディレクトリ探索順はカレントの方が先なんだけど、レジストリに登録済みのDLLはそっちが先に読まれる。だからこそアーカイバDLLとかが問題になってる。Webなんとかの問題みたいに考えられてるけど、これも違って、普通にアーカイブ内に関連付けで脆弱appが起動するファイルとdllを置いておけば、exe等のバイナリじゃない単なるファイルを起動しただけで見知らぬバイナリが実効されることになる。
#レジストリに登録って馬から落馬だよね。
DLL Hijacking全般の話と、この件のみの話がごっちゃになってる。
この件は古いOSの問題なんだから古いOSの話しないと意味ないでしょうに。>dwmapi.dllの存在するプラットフォーム(Vista以降)でそんな危険な探索順のものは存在しません存在するなら問題ないんだって。
> system32あたりに空ファイル作って> dwmapi.dllという名前にしておけばXPでも無問題> という風に読めたんだけど、違うかな?
ライブラリファイルの検索&ロードは、失敗するとファイルが無かったと見なされるので、空っぽのファイル入れても、ロード失敗するだけなので、全く無意味ですね。
ちゃんとPEヘッダの整合性のとれたファイル入れれば違うのかも。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生unstable -- あるハッカー
VS 2010+MFCだけの問題? (スコア:1, 興味深い)
手持ちのアプリケーションをDependency Walkerで確認してみましたが、Visual Studio 6.0及びVisual Studio 2005で作成したスタティックリンク系MFCアプリケーションも、dwmapi.dllを間接的にロードしているように見えます。
(実際にロードされるかは未確認)
そもそも、VS2010のMFCもdwmapi.dllを直接ロードしているわけではなく、ダイナミックリンクしているshell32.dllから間接的に呼ばれているわけで……。
これ、下手をするとshell32.dllを呼び出すアプリは全滅じゃないですかね?
ちなみに、shell32.dllはその名の通りシェル関連のDLLで、SHGetMallocのようなSH接頭
Re:VS 2010+MFCだけの問題? (スコア:5, 参考になる)
一方で、MFCは、どのプラットフォーム上においてもLoadLibrary("dwmapi.dll")を実行してしまいます。これは、Vista以降では、正しいdwmapi.dllをロードしますが、XP上では、dwmapi.dllが存在しないため、LoadLibraryは標準のDLL検索パスを捜査し続け、最終的にはカレントディレクトリも捜査してしまうため、カレントディレクトリに偽物のdwmapi.dllがあれば、誤ってそれを読み込んでしまう(実行してしまうこと)になります。
つまり、XPではこの攻撃は有効です。
対策としては、<a href="http://support.microsoft.com/kb/2389418/ja">DLL プリロード攻撃を防止するためのライブラリの安全な読み込み</a>にあるように、SetDllDirectory("")によって、カレントディレクトリをDLLのDLL検索パスから除外することがもっとも簡単で有効な方法であると考えられます。
あてずっぽうだけど (スコア:0)
system32あたりに空ファイル作って
dwmapi.dllという名前にしておけばXPでも無問題
という風に読めたんだけど、違うかな?
Re:あてずっぽうだけど (スコア:1)
>dwmapi.dllが存在しないため、LoadLibraryは標準のDLL検索パスを捜査し続け最終的にはカレントディレクトリ
ここらへんがちょっと違う。
LoadLibraryのディレクトリ探索順はカレントの方が先なんだけど、レジストリに登録済みのDLLはそっちが先に読まれる。
だからこそアーカイバDLLとかが問題になってる。
Webなんとかの問題みたいに考えられてるけど、これも違って、普通にアーカイブ内に関連付けで脆弱appが起動するファイルとdllを置いておけば、
exe等のバイナリじゃない単なるファイルを起動しただけで見知らぬバイナリが実効されることになる。
#レジストリに登録って馬から落馬だよね。
Re:あてずっぽうだけど (スコア:1)
DLL Hijacking全般の話と、この件のみの話がごっちゃになってる。
この件は古いOSの問題なんだから古いOSの話しないと意味ないでしょうに。
>dwmapi.dllの存在するプラットフォーム(Vista以降)でそんな危険な探索順のものは存在しません
存在するなら問題ないんだって。
Re:あてずっぽうだけど (スコア:1)
> system32あたりに空ファイル作って
> dwmapi.dllという名前にしておけばXPでも無問題
> という風に読めたんだけど、違うかな?
ライブラリファイルの検索&ロードは、失敗するとファイルが無かったと見なされるので、
空っぽのファイル入れても、ロード失敗するだけなので、全く無意味ですね。
ちゃんとPEヘッダの整合性のとれたファイル入れれば違うのかも。