はじめに
前編では、DLL hijackingと呼ばれるプログラムのDLL読み込みに関する脆弱性の概要および、関連するイベントを紹介しました。
Microsoftはセキュリティアドバイザリ2269637を公開するとともに、Security Research & Defenseブログに「More information about the DLL Preloading remote attack vector」というエントリを追加し、より詳細な技術情報を説明しています。このエントリのなかで、アプリケーション開発者向けのガイダンスとして作成された word 文書「Secure loading of libraries to prevent DLL preloading attacks」が提供されました。現在は、この文書の日本語抄訳「ライブラリを安全にロードして DLL のプリロード攻撃を防ぐ」も提供されています。
ガイダンス文書の構成は、以下のようになっています。
-
DLLのプリロード攻撃の詳細
- LoadLibraryベースの攻撃
- SearchPathベースの攻撃
- ShellExecuteおよびCreateProcess
-
ソフトウェア開発者向けの推奨されるステップ
-
開発者が行うべき4項目の作業
- 安全でないライブラリロードを行っていないかチェック
- 完全修飾パスを使ってライブラリロードするように修正
- 既定のDLLの検索順序からカレントディレクトリを削除
- SetSearchPathModeを使って安全なプロセス検索モードを有効化
-
安全でないライブラリロードの特定に関するガイダンス
ライブラリをロードするコード例として、攻撃に悪用される可能性のあるコード例と安全なコード例を示しています。
-
開発者が行うべき4項目の作業
-
Process Monitorを用いて、安全でないロードを動的に検出する
アプリケーションの実行時に安全でないロードを行っているかどうかを、Process Monitorを使って観察する方法について簡単に説明しています。 -
追加のリソース
関連するブログ記事やMSDNの情報がリストされています。
今回はこの文書に基づいて、Windowsアプリケーション開発における対策方法をご紹介します。