DLL Hijacking(検索順序を利用した悪意ある DLL の読み込み)
概要
Windows のアプリケーションが DLL をファイル名だけで(絶対パスを指定せずに)読み込んでいる場合、OS は決められた順序でディレクトリを検索して該当する DLL を探す。検索順序には、アプリケーションの実行ディレクトリ、システムディレクトリ、カレントディレクトリなどが含まれる。
もしアプリケーションの実行ディレクトリなど、検索順序の早い位置に書き込み権限があれば、そこへ正規 DLL と同じ名前の悪意ある DLL を配置しておくことで、アプリケーション起動時に正規の DLL より先に攻撃者の DLL が読み込まれてしまう。アプリケーションが高い権限で動作していれば、そのまま権限昇格につながる。
DLL 自体は C/C++ で実装された一般的な動的ライブラリであり、DllMain の中に任意の処理(コマンド実行など)を書き込める。
手順
- 高い権限で動作するアプリケーション(サービスなど)が、どの DLL を、どのような検索順序で読み込んでいるか調べる(Process Monitor で
NAME NOT FOUNDの DLL 読み込み試行を追うのが定番)。 - 書き込み可能なディレクトリが検索順序の早い位置にあれば、そこに同名の悪意ある DLL を配置する。
- アプリケーションを再起動させ、悪意ある DLL が読み込まれるのを待つ。
コマンド
msfvenom -p windows/x64/exec CMD='cmd.exe /c net localgroup administrators attacker /add' -f dll -o version.dll
注意点
- Process Monitor などで「アプリケーションが存在しないパスの DLL を探している」痕跡を見つけるのが、脆弱な読み込み箇所を特定する基本的な手順になる。