DLL Hijacking に関連する昔の出来事を調べてみる
2010 年 10 月にはいり、JVN(Japan Vulnerability Notes) で DLL Hijacking*1に関する脆弱性情報が相次いで公開されていました。また、これらの発見者である塩月 誠人氏がアドバイザリ を公開して注意喚起を促していました。このアドバイザリにおいて、以下の記述があります。
(略)...バイナリ・プランティングは決して新しい攻撃手法ではなく、古くからその問題点は指摘されてきたのですが、...(略)
複数のアーカイブソフトにおけるバイナリ・プランティング問題
「古くからその問題点は指摘されてきた」とありますが、僕はこの点をきちんと知らないのです:( そこでこの日記では DLL Hijakcing に関する昔の出来事を調べてみました。なお、調べる出来事の対象は Windows における DLL Hijacking に限定しています。
DLL Hijacking に関する昔の出来事
時系列(要約)
2000年9月に Georgi Guninski 氏が DLL Hijacking のコンセプトを発表し、2001 年 9 月にはワーム Nimda に Georgi Guninski 氏のコンセプトが悪用されていました。その後 Microsoft は DLL Hijacking が攻撃手法の一つであると認識し、Windows XP 以降の Windows にカレントディレクトリの探索順序を変更する safe DLL search mode を実装しています。しばらく時が流れて、2008 年 Safari + Ineternet Explorer 7 の脆弱性を組み合わせることで、DLL Hijacking をリモートから悪用する手法のコンセプトが公開されました。実際にコンセプトが悪用されたことはなかったようですが、Microsoft, Apple はそれぞれ脆弱性を修正しています。そして、2010 年に Taeho Kwon 氏、Zhendong Su 氏が論文"Automatic Detection of Vulnerable Dynamic Component Loadings" を発表しました。2010 年に入ってからの動きは、参考情報の記事等がよくまとめているため、割愛しました。
時系列(詳細)
年月 | 内容 |
---|---|
2000年9月 | Georgi Guninski 氏がアドバイザリ「Double clicking on MS Office documents from Windows Explorer may execute arbitrary programs in some cases」を公開。関連:セキュリティホールmemo、CVE-2000-0854、BID 1699 |
2001年9月 | ワーム Nimda(F-Secure社の情報) が Georgi Guninski 氏の公表した手法を悪用*2。関連:せきゅメモML Article 1421(要 Basic 認証) |
2001年12月 | "safe DLL search mode" に対応した Windows XP が日本で販売される*3。初期設定で有効になるのは、Windows XP SP1 以降。Microsoft の Web ページの中に「この "safe DLL search mode" はウイルス等に悪用されることを防ぐため」(意訳)と言及しているところ*4あり |
2006年12月 | Aviv Raff 氏が Internet Explorer 7 の DLL Hijacking の問題をブログ「Aviv Raff On .NET」(こことここ)で公開。ブログによると、Microsoft には通知したが「悪用するにはシステムへのアクセスが必要であるため、将来のバージョンで修正する」(意訳)とのことだった |
2008年5月 | Microsoft がセキュリティ アドバイザリ (953818) を公開。このアドバイザリでは、論文"Automatic Detection of Vulnerable Dynamic Component Loadings" で「Blended threat combined with the “Carpet Bomb”」と呼んでいる複合的な脅威を説明している。関連:Aviv Raff 氏のブログ記事、CVE-2008-2540、セキュリティホールmemo |
2008年6月 | Intruders Tiger Team Security がアドバイザリ "ADVISORY/1907 - Citrix MetaFrame Privilege Escalation"(BugTraqアーカイブ)を公開。実行ファイルにおける Binary Planting である模様。関連:CVE-2008-3485 |
2009年4月 | Microsoft が MS09-014、MS09-015を公開。Aviv Raff 氏のブログ記事によると、2年半かかって Internet Explorer 7 の DLL Hijacking の問題が修正された |
2010年 | カリフォルニア大学 Taeho Kwon 氏、Zhendong Su 氏が論文"Automatic Detection of Vulnerable Dynamic Component Loadings" を発表 |
昔の出来事をまとめて思ったこと
攻撃条件がローカル*5からリモートに拡大したことで、DLL Hijacking の危険性が再認識されるようになったと思いました。危険性が再認識されたとはいえ、Web Exploit Kit 等で悪用される Adobe Reader, Adobe Flash Player, Java Runtime Environment(JRE) 等の脆弱性と比べると、「攻撃のキッカケとなる操作*6を行うことが日常的に少ないと感じる」ことから、リモートでも悪用される場合は限定されると思います。Nimda や Stuxnet といった不正プログラムに悪用された実績があり、多くのソフトウェアが DLL Hijacking の問題をかかえていることから、この問題が広く知られ、問題があった場合きちんと修正してほしいですね。
おまけ:UNIX ベースの OS と DOS ベースの OS の探索パスの違い
昔の出来事を調べていたときに読んだブログ記事からの引用です。Windows が探索パスにカレント・ディレクトリを含む理由として、合点がいったので、メモがてら引用しました。実際にこの理由が正しいのか、裏付けは取っていません。あしからず。
A difference between UNIX-ish systems and systems based on DOS is that the current directory "." is not on the search path for UNIX-ish systems, and it is for DOS systems, which didn't have different users, so there was no need to worry about some of these things.
DLL Preloading Attacks – David LeBlanc's Web Log
参考情報
- WindowsのDLLだけが危ないのか? DLL hijacking vulnerability概説(前編) (1/2):CodeZine(コードジン)
- 「DLL hijacking vulnerabilityに関するイベント」が参考になる
- ◆コラム◆安全でないライブラリーのロード(DLLのプリロード)問題 | 日経 xTECH(クロステック)
- 「図1」の対応経緯が参考になる
- JVNTR-2010-23
- Rapid7 Blog
- CWE - CWE-426: Untrusted Search Path (3.2)
- 「Observed Examples」が参考になる
- CWE - CWE-427: Uncontrolled Search Path Element (3.2)
- 「Observed Examples」が参考になる
*1:他にも DLL Preloading、Binary Planting といった呼称があります。この日記では DLL Hijacking に統一します
*2:ブログ「Secdev - Thierry Zoller」の記事におけるコメントから知りました
*3:「「Microsoft(R) Windows(R) XP」日本語版を発表」を参照
*4:Development Impacts of Security Changes in Windows Server 2003 | Microsoft Docs の "DLL Search Order Has Changed" を参照
*5:CVSS の Base Metrics における AV(Access Vector)がローカルとなる場合ですね
*6:第三者の USB メモリのファイルを開く、インターネット越しでファイル共有を使用する、まったく知らない第三者からのメールに添付された圧縮ファイルを開く等を想定しています