ちゃっぴの監禁部屋

ガチガチに締めすぎて動きがとれなくなる。。。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  405  : 記事  5  : コメント  12114  : トラックバック  134

ニュース

記事カテゴリ

書庫

日記カテゴリ

Communities

Personal Information

2010年8月25日 #

安全でないライブラリのロードにより、リモートでコードが実行される という seurity advisory が出ています。まあ、ここ読んでいるような人にとってはすでに知っていることだと思いますが。

ちょっと興味があったので、いろいろ情報あさっていましたが、正確なところはわかりませんがどうやら下記のようなことじゃないかと。

LoadLibraryLoadLibraryEx 等を利用して DLL を動的に load する場合、絶対 path を指定しないと Dynamic-Link Library Search Order の順序に従って DLL が検索されます。

この検索先の中に current directory が含まれるのがミソで、load する予定の DLL と名前が完全に一致する DLL が存在するとそいつが読み込まれてしまう。

直接呼ばれる関数に攻撃 code を仕込んでおけばいいわけですが、Win32 DLL には DllMain という DLL を load されるときに自動的に実行される entry point があるので、こいつを使えばもっとお手軽。

ここまでは全然新しくない話なんですが、今回出てきたのは current directory が remote (SMB や WebDav) 上だった場合、remote に file を配置しておくだけで攻撃が可能ということ。

個人的には application が file を開くときに current directory を変更して開くなんて考えずらいと思っていましたが、この攻撃が可能な application は 40 以上存在するとのことなので。

Update: 40 Windows apps contain critical bug, says researcher

この問題への対応としては、Dynamic-Link Library Security にまとめられています。

  • LoadLibrary, LoadLibraryEx, CreateProcess, ShellExecute を呼び出すときは可能な限り fully qualified path を利用する。
  • Dynamic-Link Library Redirection, Manifests を利用し正しい DLL を呼び出すことを強制する。
  • Registry HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode を変更し DLL の検索順序を変更する。
  • DLL を呼び出す前に SetDllDirectory に "" を指定して current directory の path を除去する。 (Multi thread, process 間での競合注意)
  • Safe process search mode が有効になっていないときは SearchPath を利用しない。SearchPath をどうしても利用する必要があるときは先に SetSearchPathMode に BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE を指定して呼び出した後に利用する。Current directory は最後に回されるが除去はされないので注意が必要。
  • LoadLibrary?が検索する DLL の検索順序は OS によって異なるので、推測だけで行わない。ちゃんと OS version 確認しましょう。

基本的な対応としては application code の修正です。ということで、DLL を dynamic load している application の開発者は について既存の code に問題が無いかご確認ください。

なお、DLL の検索対象から current directory を除去する方法については WebDav や SMB のみ除去するといった設定が可能になる patch が提供されています。

DLL 検索パス アルゴリズムを制御する新しい CWDIllegalInDllSearch レジストリ エントリについて

WebDav のみ SMB のみ不可といった制限も可能なので patch を適用した上で設定を変更しておいたほうがよいでしょう。WebDav, SMB 不可程度であればほぼ影響は無いでしょうから。

posted @ 5:28 | Feedback (21)