Download.Jectに関連するInternet Explorer脆弱性Cyber Security Management 2004年8月号
今年の6月、Download.Jectと呼ばれるトロイの木馬が報告された。今回はこのDownload.Jectが利用したInternet Explorer(IE)の脆弱性について解説する。 Download.Jectが利用したIE脆弱性Download.Ject[1]とは、Windowsの標準WebサービスであるIIS(Internet Information Services)が稼動するWebサーバに不正に設置される、トロイの木馬型の不正ソフトウェアである。 Download.Jectは、今年の4月に公開された「Microsoft Windows のセキュリティ修正プログラム(MS04-011)」で修正された脆弱性(セキュリティホール)を利用し、パッチが適用されていないIISに埋め込まれる。Download.Jectが埋め込まれたIISのサイトに、IEでアクセスしたユーザは、攻撃者の不正Webサーバに強制的にアクセス(リダイレクト)させられ、その結果、IEの脆弱性を利用してクライアントマシン自体が攻撃される。 Download.JectのIEに対する攻撃は、次のような手順で行われている[2]。
2) モーダルダイアログ表示中に、フレームのコンテンツはHTTPリダイレクトを用いてローカルファイルをフレーム上に表示させる。 3) モーダルダイアログが自動的にクローズすると同時に、ダイアログ表示の際に指定したスクリプトがマイコンピュータゾーンのセキュリティ設定で実行される。 4) スクリプトにて、ADODB.Streamオブジェクトを用いて不正プログラムをダウンロード、実行させる。
Download.Jectはこれらの二つの点に関して、今回新たに明らかとなった以下のIEに関する脆弱性を利用している。
HTTPリダイレクトによるローカルファイルの表示この脆弱性は、HTTPリダイレクトを利用することにより、ローカルのリソース(HTMLファイル等)にアクセスすることができるというものだ。 HTTPリダイレクトとは、通常、アクセスしようとしたコンテンツのリンク先が変更になった場合などに、Webサーバが変更先のURLをWebブラウザに通知する目的で使用されるHTTP応答のことをいう。 WebサーバはHTTPリダイレクトの応答を行う場合、 HTTP/1.1 302 Object moved Location: 変更先のURLといったようなレスポンスをWebブラウザに返す。 このレスポンスを受け取ったWebブラウザは、Locationヘッダに指定されている「変更先のURL」に対して自動的にアクセスする。これが一般的なHTTPリダイレクトの仕組みである(図1)。
通常はHTTPリダイレクトでローカルのファイルにアクセスすることはできない。ところがこのLocationヘッダに、 図2は、HTTPリダイレクトを利用してフレーム内に「Internet Explorer入門」のページを表示させた様子を表している。
ブラウザ上のフレーム内にローカルファイルを表示させた場合、フレームの外側はアクセス先ドメインのゾーン、つまり一般的にはインターネットゾーンに属しているが、フレーム内はローカルファイルのゾーンすなわちマイコンピュータゾーンに属することになる。 モーダルダイアログを利用したクロスドメインセキュリティの回避本連載の第一回「Internet Explorerのセキュリティホールと使用のポイント」でも述べたとおり、IEは異なるドメインのウィンドウ同士が情報を共有したり、干渉したりすることができない仕様になっている。これはクロスドメインセキュリティと呼ばれ、IEが稼動するコンピュータを不正なWebコンテンツから保護する、重要なセキュリティ機能の一つとして実装されている。 だが過去においてしばしば、このIEのクロスドメインセキュリティを回避し、IEが表示する他のドメインのウィンドウやフレーム上でJavascript等のスクリプトを実行させることができるような脆弱性が報告されてきた。 今回のこの脆弱性は、IEのモーダルダイアログ機能を巧妙に利用することで、クロスドメインセキュリティ機能を回避できるというものである。 モーダルダイアログとはIEが表示するウィンドウの一種で、通常、ユーザに操作の確認を行う際に使用される。そのダイアログ・ウィンドウが表示されている間は、IE上の他のウィンドウをアクティブにできないという特徴を持つ。 Download.Jectでは、まず初めにWebページ内にフレームを作成するのだが、その際に前述のHTTPリダイレクト脆弱性を利用してそのフレームにローカルファイルを表示させるようなコンテンツを指定している。ただしここが重要なのだが、フレーム中にローカルファイルを表示させるタイミングを少し遅らせることを行っている。つまり、フレームは最初はインターネットゾーンとして表示されるが、リダイレクトされた後にマイコンピュータゾーンとなるわけである(図3の①)。 次にこのフレームに対してモーダルダイアログを表示させる。モーダルダイアログが表示された当初は、当該フレームはインターネットゾーンとなっている。モーダルダイアログの中のコンテンツには、フレームがリダイレクトされた直後にモーダルダイアログを閉じるようなスクリプトが記述されているため、HTTPリダイレクトでフレームにローカルファイルが表示された(つまりマイコンピュータゾーンに変更された)直後にダイアログは自動的に終了する(図3の②)。 モーダルダイアログを表示させる際に、ダイアログ終了後にフレーム内で実行するスクリプトを記述しておく。このスクリプトはダイアログ終了時のフレームのセキュリティゾーン、つまりマイコンピュータゾーンで実行することになる(図3の③)。
この脆弱性を利用するためには、フレームの内容をリダイレクトさせるタイミングが重要となる。リダイレクトのタイミングが早すぎると、スクリプトエラーとなってモーダルダイアログは表示されない。 不正プログラムのダウンロードと起動IEの脆弱性を利用してマイコンピュータゾーンでスクリプトの実行ができた場合、IEに対する攻撃の次なるステップは、多くの場合、不正プログラムのダウンロードと起動である。 Download.Jectにおいては、ADODB.Streamオブジェクトを利用することで不正プログラムをダウンロードし、ローカルハードディスクのメディアプレーヤーの実行ファイル(wmplayer.exe)としてコピーした後、メディアプレーヤーを起動させる特別なURL(mms://)にアクセスすることでその不正プログラムを実行させている。 ADODB.Streamオブジェクトは、Webコンテンツのスクリプトで用いることにより、IEにローカルハードディスク上のファイルを読んだり書いたりする機能を提供する。通常はローカル上のWebコンテンツで使用されることが想定されているが、前述のようなIEの脆弱性により、インターネット上のWebコンテンツからマイコンピュータゾーンで実行させられることで、任意のファイルをインターネット上の任意のサイトからダウンロードさせられてしまう。 このADODB.Streamによるファイルダウンロードの危険性については、昨年の8月から指摘されていた。この機能自体は「仕様」であり「脆弱性」ではないが、今回のように他の脆弱性を利用してマイコンピュータゾーンでのスクリプト実行が可能になった場合、このような機能はIEのユーザにとって大きな脅威となる。 マイクロソフトは「Internet ExplorerでADODB.Streamオブジェクトを無効にする方法」という文書およびツールを公開し、ADODB.Streamオブジェクトを無効化する手段を提供している[3]。 だが注意しなければならないのは、マイコンピュータゾーンでスクリプトの実行が可能な場合、不正プログラムのダウンロードや起動を実現する方法はADODB.Streamを用いる以外にも複数存在することだ[4]。つまりADODB.Streamオブジェクトの無効化では、根本的な問題の解決にはならないのである。 マイコンピュータゾーンのセキュリティ設定を強化するマイコンピュータゾーンでスクリプト実行ができた場合、さまざまなセキュリティ侵害の危険性が生じるのは、前述のとおりマイコンピュータゾーンのセキュリティ設定が緩いからである。 そのため、マイコンピュータゾーンの以下のセキュリティ設定を強化する方法が、マイクロソフトのWebサイトで提供されている[5]。
またマイコンピュータゾーンのセキュリティ設定を強化した場合、Windowsの標準的な機能を含む各種の機能が制限されてしまう可能性がある。 マイコンピュータゾーンのセキュリティ設定強化については、マイクロソフトも「最終手段」という表現を使っているように、利便性とリスクとを秤にかけた上で慎重に行う必要があるだろう。 本連載第一回「Internet Explorerのセキュリティホールと使用のポイント」で既に述べたため、改めて詳しくは書かないが、IEを安全に使用するためには次の対策が有効であると考える。
[1] Download.Ject http://securityresponse.symantec.com/avcenter/venc/data/download.ject.html [2] An analysis of the Ilookup Trojan http://62.131.86.111/analysis.htm [3] Internet ExplorerでADODB.Stream オブジェクトを無効にする方法 http://www.microsoft.com/japan/security/incident/adostream.mspx [4] Unpatched Internet Explorer Bugs http://www.safecenter.net/UMBRELLAWEBV4/ie_unpatched/index.html [5] Internet Explorerのマイコンピュータゾーンのセキュリティ設定を強化する方法 hhttp://support.microsoft.com/?kbid=833633
2004年6月執筆 |