SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

実例で学ぶ脆弱性対策コーディング

WindowsのDLLだけが危ないのか?
DLL hijacking vulnerability概説(後編)


  • X ポスト
  • このエントリーをはてなブックマークに追加

オープンソースプログラムの修正事例

 Windows版のオープンソースソフトウェアであるVLCでは、本脆弱性の修正が以下のように行われています(VideoLAN-SA-1005)。以下にそのパッチを引用します。

diff --git a/bin/winvlc.c b/bin/winvlc.c
index 2d09cba..ac9b97c 100644 (file)
--- a/bin/winvlc.c
+++ b/bin/winvlc.c
@@ -131,12 +131,19 @@ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
     if(h_Kernel32)
     {
         BOOL (WINAPI * mySetProcessDEPPolicy)( DWORD dwFlags);
+        BOOL (WINAPI * mySetDllDirectoryA)(const char* lpPathName);
 # define PROCESS_DEP_ENABLE 1

         mySetProcessDEPPolicy = (BOOL WINAPI (*)(DWORD))
                             GetProcAddress(h_Kernel32, "SetProcessDEPPolicy");
         if(mySetProcessDEPPolicy)
             mySetProcessDEPPolicy(PROCESS_DEP_ENABLE);
+
+        /* Do NOT load any library from cwd. */
+        mySetDllDirectoryA = (BOOL WINAPI (*)(const char*)) GetProcAddress(h_Kernel32, "SetDllDirectoryA");
+        if(mySetDllDirectoryA)
+            mySetDllDirectoryA(""); +
         FreeLibrary(h_Kernel32);
     }

 パッチで追加された行(+文字ではじまる行)からも分かるように、SetDllDirectoryA()を空文字列("")を引数に与えて呼び出すことで、DLLのサーチパスからカレントディレクトリを取り除く処理を追加していることが分かります。

終わりに

 後編では、Microsoftが提供している開発者向けガイダンスにもとづいて、Windowsアプリケーション開発で心得ておくべき事項を説明しました。

 皆さんも、まずは自分が書いたコードがDLL hijacking攻撃の影響を受けるかどうか、チェックするところから始めてみてください。

参考情報

  1. マイクロソフト セキュリティ アドバイザリ(2269637) 安全でないライブラリのロードにより、リモートでコードが実行される
  2. More information about the DLL Preloading remote attack vector
  3. Secure loading of libraries to prevent DLL preloading attacks(docxファイル)
  4. ライブラリを安全にロードして DLL のプリロード攻撃を防ぐ(docxファイル/上記の日本語訳)
  5. Mozilla Foundation セキュリティアドバイザリ 2010-52 Windows XP における DLL 読み込み脆弱性
  6. VideoLAN Project VideoLAN-SA-1005: DLL preloading vulnerability

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
実例で学ぶ脆弱性対策コーディング連載記事一覧

もっと読む

この記事の著者

久保 正樹(JPCERT コーディネーションセンター)(クボ マサキ(JPCERT コーディネーションセンター))

脆弱性アナリストJPCERTコーディネーションセンター慶応義塾大学環境情報学部卒。ソニーでデスクトップPCのソフトウェア開発に携わったのち、米国ダートマス大学にてオーディオ信号処理、電子音響音楽の研究を行い、電子音響音楽修士を取得。2005年4月よりJPCERTコーディネーションセンターにて、脆弱性...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

戸田 洋三(JPCERT コーディネーションセンター)(トダ ヨウゾウ(JPCERT コーディネーションセンター))

リードアナリストJPCERTコーディネーションセンター東京工業大学情報理工学研究科修士課程修了。学生時代は、型理論および証明からのプログラム抽出を研究。その後、千葉大学総合情報処理センターのスタッフとして、学内ネットワークの運営、地域ネットワーク、IPマルチキャストの実験ネットワークであるJP-MB...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5442 2012/09/19 11:15

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング