|
|
◆コラム◆安全でないライブラリーのロード(DLLのプリロード)問題2010年8月24日に、マイクロソフトからセキュリティアドバイザリー(2269637)「安全でないライブラリーのロードにより、リモートでコードが実行される」が公開されました。以下で、どのような問題なのかを概観します。 この問題は、「バイナリーの植え付け(Binary Planting)問題」「DLLのプリロード(DLL Preloading)問題」「DLLの乗っ取り(DLL Hijacking)問題」と呼ばれています。アプリケーションがDLL(ダイナミックリンクライブラリー)ファイルを読み込む際に問題が発生し得るぜい弱性で、DLLファイルが格納されているディレクトリーを検索する順序に起因したものです。既に100近くのアプリケーションに対して問題の存在が指摘されています。ただし、この指摘は今回が初めてではなく、2000年にInternet Explorerのぜい弱性発見で著名なゲオルギ・グニンスキー(Georgi Guninski)氏がマイクロソフトのOffice製品で今回と同様な問題が発生すると報告しています。マイクロソフトでは、2001年11月のWindows XP、2003年7月のWindows 2000 SP4以降、ディレクトリー検索順序を変更するSafeDllSearchMode機能の導入、2010年8月には、ユーザーがディレクトリー検索順序を変更制御できるようにするCWDIllegalInDllSearch機能の導入などの対策を進めてきています(図1)。
図1●安全でないライブラリーのロードの対応経緯(2269637)
DLLファイルが格納されているディレクトリーを検索する順序DLLファイルが格納されているディレクトリーを検索する順序は、SafeDllSearchMode機能の設定有無で異なります。ここでは、SafeDllSearchMode機能が有効となっているWindows XP SP3上のアドレス帳(wab.exe)と、アドレス帳が参照するDLLファイル(wab32res.dll)を例にとって説明します。 通常、Windows XP SP3上のwab.exeは、次に示すディレクトリー順序でwab32res.dllを検索します。wab32res.dllは、7. C:\Program Files\Common Files\Systemに格納されているため、1〜6の検索作業ではDLLファイルを見つけられないという状況が発生することになります。ここに、DLLのプリロード(DLL Preloading)問題が発生する要因があります。
攻撃者が、1〜6 のディレクトリーに、偽DLLファイル(wab32res.dll)を置くことができた場合、wab.exeは、本来読み込むべきではない偽DLLファイルを先に読み込んでしまうことになります。結果として、利用者がアドレス帳を開いたときに、攻撃者は偽DLLファイルとして用意した任意のコードを実行できることになります。特に、WebDAVおよびリモートのネットワーク共有を利用する場合、USBメモリーなどの外部媒体を利用する場合には、攻撃者は、カレントディレクトリーを悪用しやすくなるため、攻撃可能条件が揃う可能性が高くなります。 プロセスモニターを利用したDLLファイル検索順序の確認マイクロソフトからシステムの動作モニターツールとして提供されているプロセスモニターを利用して、Windows XP SP3上のwab.exeがwab32res.dllファイルを検索する様子をみていきましょう。ここで示す事例は、カレントディレクトリー(C:\現在の作業ディレクトリー)に置いたsample.wabファイルをダブルクリックしたときのwab32res.dllを検索する流れを追いかけています。
■事例1:何も手を加えない場合
写真1●事例1:何も手を加えない場合(cpe:/o:microsoft:windows_xp::sp3)
■事例2:カレントディレクトリーにwab32res.dllを置いた場合
写真2●事例2:カレントディレクトリーにwab32res.dllを置いた場合
■事例3:exeファイルのあるディレクトリーにwab32res.dllを置いた場合
写真3●事例3:exeファイルのあるディレクトリーにwab32res.dllを置いた場合
連載新着記事一覧へ >>
|