リスト1●ActiveXコントロールを呼び出すスクリプトの例
これらのスクリプトが含まれているHTMLファイルをInternet Explorerで読み込むと,ローカルのActiveXコントロールが呼び出されて,ファイルを実行させられたり削除させられたりする可能性がある。
図3●スクリプトとActiveXコントロールの連携機能を安全に使うためにMicrosoftが用意した対策
逆に,これらのいずれかが守られない場合には,WebページやHTMLメールから“危険な”ActiveXコントロールを呼び出せる。
写真●「BubbleBoy」ウイルスが仕込まれたHTMLメールを表示した画面
Windowsにセキュリティ・ホールがある場合には,この画面を表示させた時点で感染する。メールの本文を見ただけで感染する初めてのウイルス。
リスト2●「Redlof」ウイルスのソースコード
HTMLとスクリプトから構成される。セキュリティ・ホールを突く部分を読み込むと,セキュリティ・ホールがあるInternet Explorerは,設定を無視して危険なActiveXコントロールを呼び出すようになる。スクリプト部分には,危険なActiveXコントロールを使って,Redlof自身をパソコン内のHTMLファイルなどに追加するスクリプトが記述されている。
リスト3●「Klez」ウイルスを添付したHTMLメールの例
メールは二つのMIMEパートで構成される。HTMLのパートから実行形式ファイルのパートを呼び出す場合,通常Internet Explorer(IE)はユーザーに警告を表示する。しかし,セキュリティ・ホールがあるIEは,「Content-Type」が「audio/x-wav(音声ファイル)」などに設定されていると,呼ぶ出すパートが実行形式ファイルであっても,警告無しに実行してしまう。

万全ではないMSの対策

 Windowsには,スクリプトとActiveXコントロールの連携機能が用意されている。Windowsの標準ブラウザであるInternet Explorer(IE)は,スクリプトのインタプリタ機能を備え,HTMLファイル中に記述されたスクリプトを解釈して実行する。スクリプトでは実現できない操作は,その操作を担当しているActiveXコントロールを呼び出して,スクリプトから依頼できる。これが,スクリプトとActiveXコントロールの連携機能である。

 例えば,スクリプトだけでは,パソコン中のプログラムを実行したり,ファイルを操作したりすることはできない。だが連携機能を使って,プログラムを実行できる「WScript.Shell」や,ファイルを操作できる「Scripting.FileSystemObject」を呼び出せば可能となる。便利な半面,リスト1[拡大表示]のようなWebページを閲覧すると,勝手にプログラムを実行されたり,削除されたりする可能性がある。そのような可能性はMicrosoftも考慮しており,不正な利用を防ぐための手立ては用意されている(図3[拡大表示])。

 まず,(1)WScript.ShellやScripting.FileSystemObjectのように,“危険な”ActiveXコントロールには,「安全マーク(Safe for Scripting)」と呼ばれる印(レジストリ値)を付けていない*5。そして,(2)IEの初期設定では,WebページやHTMLメール中のスクリプトからは,安全マークが付いているActiveXコントールしか呼び出せないようにしている。

 さらに,これは当然ではあるが,(3)設定通りに振舞うように実装している。これらの対策が守られている限り,リスト1のようなスクリプトがWebページ中に含まれていても,勝手にファイルを実行されたり,削除されたりすることはない。

 逆に,(1)~(3)のいずれかが守られていないと,スクリプトとActiveXコントロールの連携機能はウイルスの格好のターゲットとなる。実際,(1)および(3)に関するセキュリティ・ホールが見つかったために,この連携機能を利用するウイルスが出現した。

 第1弾が,1999年11月に出現した「BubbleBoy」ウイルスである(写真[拡大表示])*6。メール本文を開くだけで感染するBubbleBoyは,1999年8月に公開されたセキュリティ・ホール「『Scriptlet.typelib/Eyedog』の脆弱性に対する対策」を突く。Windowsに含まれているActiveXコントロールの一つであるScriptlet.TypeLibは,パソコン中のファイルを操作できるので危険である。にもかかわらず,安全マークが付いていた。このセキュリティ・ホールによって,(1)の前提が崩された。WebページやHTMLメールにScriptlet.TypeLibを呼び出すスクリプトを記述しておけば,任意のファイルをパソコン中に作られてしまう*7

 BubbleBoyはHTMLメールで感染を広げる。HTMLメール中には,Scriptlet.TypeLibを呼び出して,スタートアップ・フォルダに「update.hta」というファイルを作成するスクリプトが書かれている。このスクリプトがBubbleBoyの本体である。このメールをWindowsユーザーが開くと,スクリプトが解釈されてupdate.htaが作成される。

 update.htaには,OutlookやOutlook Expressを使って,アドレス帳に登録されているユーザーすべてに,BubbleBoyを含むメールを送信するスクリプトが記述されている。そのユーザーがWindowsを次回起動すると,BubbleBoyメールが一斉に送信される*8

 BubbleBoy以降,同じセキュリティ・ホールを利用してHTMLメールで感染を広げるウイルスは複数出現している*9

呪文一つでチェック機能が無効に

 2000年10月には,(3)の前提を崩すセキュリティ・ホールが見つかった。「『Microsoft VMによるActiveXコンポーネントの制御』の脆弱性に対する対策」である。このセキュリティ・ホールを利用すれば,安全マーク無しのActiveXコントロールをスクリプトから呼び出せる。

利用方法はいたって簡単。HTMLファイル中に

<APPLET CODE="com.ms.activeX.ActiveXComponent"></APPLET>

という“呪文”を書くだけで,IEのチェック機能が麻痺してしまう。その後は,安全マーク無しのActiveXコントロールを自由に呼び出せる*10

 このようなセキュリティ・ホールをウイルス作者が利用しないわけがない。このセキュリティ・ホールを利用するウイルスは多数出現している。なかでも,2001年8月に出現したスクリプト・ウイルス「Offensive」*11は,国内で大きな被害をもたらした。クラッカにより,ある有名なオークション・サイトのページにOffensiveが仕込まれたからだ*12

 Offensiveが記述されているWebページを閲覧すると,ローカルのWScript.Shellが呼び出され,レジストリが改変される。その結果,パソコンを正常に操作できなくなる。具体的には,すべてのプログラムが起動できなくなるとともに,デスクトップ上からすべてのアイコンが消える。また,Windowsを終了するボタンも消える。レジストリが改変されているために強制終了して再起動しても症状は変わらない。ただし,Offensiveに感染することはない。レジストリを改変されるだけである。

 2003年2月に出現した「Redlof」は,Offensiveと同じセキュリティ・ホールを利用して感染を広げる(リスト2[拡大表示])。Redlofは,WScript.Shellを呼び出してレジストリを改変するだけではなく,Scripting.FileSystemObjectなどを呼び出して,パソコン中のファイルを操作する。具体的には,パソコンの全ドライブを検索し,拡張子がhtmlやvbs,aspなどのファイルにRedlof自身を埋め込む。これらのファイルをWebで公開すれば,そのファイルを閲覧したユーザーにも感染が広がる。加えて,OutlookやOutlook Expressのテンプレート・ファイル(blank.htm)に感染し,そのテンプレート・ファイルを使用するようにレジストリを変更する。以降,そのユーザーがOutlookなどでHTMLメールを送信すれば,Redlofも一緒に送られる。

プレビューで勝手に実行される

 Outlook Expressの初期設定では有効になっているHTMLメール。HTMLメールは表現力が豊かである半面,細工を施しやすいので,ウイルスの格好の運び手となる*13。2001年3月に公開された「不適切なMIMEヘッダーが原因でInternet Explorerが電子メールの添付ファイルを実行する」のセキュリティ・ホールを利用すれば,メール本文をプレビューするだけで動き出すウイルスを容易に作れてしまう。代表例が,2001年9月に出現した「Nimda」や2002年1月に出現した「Klez」である。

 前述のBubbleBoyやRedlofもHTMLメールを利用する。これらもHTMLメールの本文を読むだけで実行されるウイルスである。ただ,作成することが比較的難しく,動作が限定されているので,危険性はそれほど大きくない。

 一方,Nimdaなどが突くセキュリティ・ホールは,HTMLメールにちょっとした細工を施すだけで利用できる。しかも,ウイルスの動作に制限はない。このセキュリティ・ホールを利用すれば,どのようなウイルスでも実行できる。具体的には,HTMLメール中のMIMEヘッダーの一つである「Content-Type」に手を加えると,ユーザーがHTMLメールをプレビューしただけで,添付されている実行形式ファイルが,勝手に実行される(リスト3[拡大表示])。Content-Typeは,そのMIMEパートのファイル種類を指定するヘッダーである。

 Outlook ExpressやOutlook(実際には,HTMLメールの表示を担当するIE)は,実行形式ファイルが添付されている場合には,そのファイルを開く前にユーザーに警告を出す。画像ファイルや音声ファイルのように,勝手に開いてもパソコンに影響を与えないファイルについては,警告を出さずに開く。

 セキュリティ・ホールがあるIEは,警告を出すべきかどうかを前述のContent-Typeだけから判断する(リスト3(2))。このため,勝手に開いても問題がないファイル種類がContent-Typeに指定されている場合には,添付されているファイルが実行形式ファイル(ウイルス)であっても,警告を出さずに実行する*14

 Nimda以降,メールで感染を広げるウイルスのほとんどが,このセキュリティ・ホールを利用している*15

 Nimdaなどが流行した原因は,IEのセキュリティ・ホールである。HTMLメールが悪いわけではない。とはいえ,Outlook ExpressでHTMLメールが初期設定で有効ではなかったら,NimdaやKlezがあれほど大きな被害をもたらすことはなかったはずだ*16

(勝村 幸博=IT Pro)