アカウント名:
パスワード:
Windowsの多くのソフトが危うくて危険が険しいと言うことですか。WebDavとかいうのが一番悪いというわけではなく、WindowsのDLL読み込み順序の仕様が致命的なミスを誘うようになってたと言うことですか?
よくわからんのですが、例えばある解凍ソフトがあるDLLを使う場合に、そのDLLと同名の悪意を持ったDLLを解凍ソフトの.exeと同じフォルダに配置して、解凍ソフトを実行した場合に悪意を持ったDLLが読み込まれて問題が起きると言うことですか?その場合は.exeと同じ場所(もしくは環境変数で指定されている場所など)に悪意を持ったDLLを置かせないよう、気を付けていれば問題ないのですか?
>解凍ソフトの.exeと同じフォルダ
この場合、適当な圧縮ファイルをダブルクリックすると解凍ソフトが立ち上がると思うが、その時その圧縮ファイルと同じフォルダに悪意のある名前のDLLが有れば、それが実行されてしまう。そしてWebDavのおかげでそのフォルダがネットの向こうにあっても構わない。
> 「.EXEのあるディレクトリから該当するDLLを削除したのちに」
それは不要でしょう。XPなんかだと、カレントディレクトリの方がシステムディレクトリや環境変数PATHの検索より優先順位が高いので、・「Windowsのシステムが提供するDLL」などのシステムディレクトリにあるDLL・複数アプリケーションで共有するためなどの理由で、EXEファイルとは別の、PATHの通ったディレクトリに置いてあるDLLについては、同名のDLLによる差し替えが可能になります。それで十分驚異的。
タレコミに上がっている実行例ではwab32res.dll が狙われています。
だから他の人が指摘してるけど、XPSP2以降はそんな検索順序じゃねぇ。XPSP2未満だと既にサポート外だから最初から危険。
纏めるっていうなら伝聞だけでなくちゃんと調べろ。流言蜚語をばら撒くな、馬鹿。http://msdn.microsoft.com/en-us/library/ms682586(v=VS.85).aspx [microsoft.com]へのリンクがこれだけ指摘されているのに何言っているんだ。http://srad.jp/security/comments.pl?sid=505937&cid=1816531 [srad.jp]http://srad.jp/security/comments.pl?sid=505937&cid=1816648 [srad.jp]http://srad.jp/security/comments.pl?sid=505937&cid=1816634 [srad.jp]読み込もうとするDLLがカレントディレクトリか%PATH%にのみ存在する場合が危ないの。
叩くってこんな感じでいい?もうちっと強いほうがデマは沈静化するかな。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日々是ハック也 -- あるハードコアバイナリアン
つまりどういうことだってばよ!? (スコア:0)
Windowsの多くのソフトが危うくて危険が険しいと言うことですか。
WebDavとかいうのが一番悪いというわけではなく、
WindowsのDLL読み込み順序の仕様が致命的なミスを誘うようになってたと言うことですか?
よくわからんのですが、例えばある解凍ソフトがあるDLLを使う場合に、
そのDLLと同名の悪意を持ったDLLを解凍ソフトの.exeと同じフォルダに配置して、
解凍ソフトを実行した場合に悪意を持ったDLLが読み込まれて問題が起きると言うことですか?
その場合は.exeと同じ場所(もしくは環境変数で指定されている場所など)に
悪意を持ったDLLを置かせないよう、気を付けていれば問題ないのですか?
Re: (スコア:0)
>解凍ソフトの.exeと同じフォルダ
この場合、適当な圧縮ファイルをダブルクリックすると解凍ソフトが立ち上がると思うが、
その時その圧縮ファイルと同じフォルダに悪意のある名前のDLLが有れば、それが実行されてしまう。
そしてWebDavのおかげでそのフォルダがネットの向こうにあっても構わない。
Re: (スコア:0)
より正確に言えば、解凍ソフトの.exeが置かれているフォルダに目的とするDLLが存在せず、かつ、圧縮ファイルの置かれたディレクトリにその名前と同名の悪意のあるDLLファイルが置かれている場合、でしょ。DLLのサーチ順序は、カレントディレクトリよりもEXEファイルが置かれているディレクトリの方が先ですから。
要するに攻撃者が攻撃を成功させるためには「.EXEのあるディレクトリから該当するDLLを削除したのちに」、悪意のあるDLLとそれをキックするための文書ファイルを送り付けなきゃいけないわけで、サーチ順序の最初にある「.exeが置かれているフォルダ」というのを無視した議論なんじゃないのかねぇ
Re: (スコア:1, 参考になる)
> 「.EXEのあるディレクトリから該当するDLLを削除したのちに」
それは不要でしょう。XPなんかだと、カレントディレクトリの方がシステムディレクトリや環境変数PATHの検索より優先順位が高いので、
・「Windowsのシステムが提供するDLL」などのシステムディレクトリにあるDLL
・複数アプリケーションで共有するためなどの理由で、EXEファイルとは別の、PATHの通ったディレクトリに置いてあるDLL
については、同名のDLLによる差し替えが可能になります。それで十分驚異的。
タレコミに上がっている実行例ではwab32res.dll が狙われています。
Re:つまりどういうことだってばよ!? (スコア:0, 参考になる)
自分の理解をまとめてみました。
1)アプリケーション(exe)は、ユーザが任意に(explorerとかで)普通に起動する。
このexeやdll(exeと同じディレクトリにあるdll, System32に置いてあるdll)自体は、悪意をもつものではない。
(悪意をもつものであったら、そもそもそのPCがやばい、ということで。)
2)アプリケーションは、ユーザがファイルを選択する機能を提供する。(Wordの「ファイル→開く」のように)
このとき、多くの開発者は、GetOpenFileName等のコモンダイアログを使用する。
GetOpenFileNameは、カレントディレクトリを「ユーザが選択したファイルが存在するディレクトリ」に移動させる。
(移動を抑止するOFN_NOCHANGEDIRフラグは、NT以降効かない旨の記述がMSDNにある。)
ファイル選択ダイアログを自前で実装する人もいるが、選択したディレクトリを保存する目的等で
カレントディレクトリを移動する実装にしていれば、同じ。
※ユーザは、実行ファイルを選択したわけではなく、単なるデータファイルを選択しているに過ぎない。
3)その後、アプリケーションが新たにDLLをロードしようとする。
リンク時に指定した遅延ロードか、コードの中で動的に行うLoadLibrary(フルパスでない指定)によって、
新たにDLLをロードしようとする。
このときに、下記のDLLロード順に従ってDLLが探される。
・(XPまで) exeと同じフォルダ → カレント → System32 → System → Windows → Path
・(Vista以降) exeと同じフォルダ → System32 → System → Windows → カレント → Path
親コメの通り、システムフォルダにあるDLL(XPまで)やEXEファイルとは別のPATHの通ったフォルダに置いてあるDLLは、
カレントディレクトリにあるDLLより順位が低いため、カレントに同名のDLLがあればカレントの方が読まれる。
カレントが移動したことや、DLLがカレントから読まれる可能性があることをアプリ開発者が知らないで実装した場合、
こうなる可能性がある。
4)なので、実は2)でユーザが選んでいたデータファイルを格納したフォルダと同じフォルダ(から見た相対パス?)に
細工したdllを置いておけば、攻撃が成功する。
データファイルを読む場所はWebDavだろうがファイルサーバだろうが自分のローカルだろうが、
意図しないコードが実行されるシチュエーションが想像できる気がします。
2)の※の通り、ユーザはただデータファイルを読んだだけ(なので任意のコードなど実行されるはずがない)
という意識でいるにもかかわらず、実は細工されたDLLが読み込まれる可能性があることが、
このDLLハイジャックとか呼ばれている問題である。
という認識で合っていますでしょうか。間違ってたら指摘して叩いてください。
# 因みに蛇足。user32.dllやkernel32.dllみたいなコアなDLLは、system32フォルダにありますが、
# 同じ名前のdllをexeと同じフォルダに配置してもちゃんとsystem32のdllを読んでくれます。
# 理由は単純で、レジストリに登録してあるdllは、ロード順を無視して
# いきなり特定のフォルダを読みに行く仕様になっているからです。
# なので、それ以外のDLLを動的/静的にlinkしている場合に起こる問題ですね。
叩いてやるよ (スコア:1, 参考になる)
だから他の人が指摘してるけど、XPSP2以降はそんな検索順序じゃねぇ。
XPSP2未満だと既にサポート外だから最初から危険。
纏めるっていうなら伝聞だけでなくちゃんと調べろ。
流言蜚語をばら撒くな、馬鹿。
http://msdn.microsoft.com/en-us/library/ms682586(v=VS.85).aspx [microsoft.com]
へのリンクがこれだけ指摘されているのに何言っているんだ。
http://srad.jp/security/comments.pl?sid=505937&cid=1816531 [srad.jp]
http://srad.jp/security/comments.pl?sid=505937&cid=1816648 [srad.jp]
http://srad.jp/security/comments.pl?sid=505937&cid=1816634 [srad.jp]
読み込もうとするDLLがカレントディレクトリか%PATH%にのみ存在する場合が危ないの。
叩くってこんな感じでいい?
もうちっと強いほうがデマは沈静化するかな。
Re: (スコア:0)
・検索の順に誤りがある
・デフォルト動作の変更時期に誤りがある
ということを指摘したうえでご紹介いただいたマイクロソフトさんの
情報へのリンクが掲載されていたら文調の強弱によらず素晴しいコメ
ントだったように思います。
それはそうと、
> 読み込もうとするDLLがカレントディレクトリか%PATH%にのみ存在する場合が危ないの。
というそもそもの話題について誤解させるようなことを書いてしまっ
たら台無しではないでしょうか。