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」を公開。関連:セキュリティホールmemoCVE-2000-0854BID 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月 MicrosoftMS09-014MS09-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を行うことが日常的に少ないと感じる」ことから、リモートでも悪用される場合は限定されると思います。NimdaStuxnet といった不正プログラムに悪用された実績があり、多くのソフトウェアが 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

*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 メモリのファイルを開く、インターネット越しでファイル共有を使用する、まったく知らない第三者からのメールに添付された圧縮ファイルを開く等を想定しています