「IE7/6ゼロデイ脆弱性」セキュリティアドバイザリを確認する


IEの新たな脆弱性情報が公表され、マイクロソフトはセキュリティアドバイザリ(977981)を公開した

 マイクロソフトは24日、Internet Explorer(IE)のリモート実行可能な脆弱性の情報がインターネット上で公開されたとして、利用者に注意を促すセキュリティアドバイザリ(977981)を公開した。

・マイクロソフト セキュリティアドバイザリ(977981)
http://www.microsoft.com/japan/technet/security/advisory/977981.mspx

 この脆弱性は、Internet Explorer 7/6(IE8は対象外)のMicrosoft HTML Viewer(mshtml.dll)に存在する、JavaScriptの解釈部分の実装ミスに起因するものだ。エラーを引き起こすことで、PCの利用者が想定しないプログラムを実行するような脆弱性の存在を証明するHTMLソースコード(Exploitコード)が、Webサイトやメーリングリストで公開されている。

 セキュリティアドバイザリの内容を確認しておき、IE7/IE6を使っている場合は、回避策をとるようにしておくべきだろう。

 なお、この脆弱性とは別件で、11月24日から「Microsoft XMLコアサービス」に関する修正ファイルがリリースされ、Microsoft Updateによる自動更新も行われているようだ。この修正ファイルは、内容的にはドキュメント型定義(DTD)ファイルをW3Cのサーバーから取得しようとすると、ブロックされるケースがあり、XHTMLの解釈に失敗するという問題を修正するもので、今回発見されたIEの脆弱性とは無関係だ。

JavaScriptの解釈に問題、攻撃はIEコンポーネントを使う他プログラムにも

 今回発見されたIEの脆弱性は、IE7/6が利用している「Microsoft HTML Viewer(mshtml.dll)」にある。IEや、IEコンポーネントがHTMLを表示し、JavaScriptの「document.getElementsByTagName()」でいくつかのCSS/STYLEスタイルオブジェクトを検索する際に、ダングリングポインタが発生するパターンがあるというものだ。

 ダングリングポインタとは、別名「ぶらさがりポインタ」ともいわれ、システムがすでに解放してしまった領域をポインタで指し示し、利用してしまおうとする現象のことで、CやC++でプログラム開発する際にありがちなコーディングミスだ。この現象が起きた場合、CPUはプログラム作成者が想定しない領域のデータをプログラムとして実行しはじめる、いわゆる「暴走」とよばれる状態になる。そして、一般的には例外を発生したり、特権モードで実行されていた場合はOSごとサービス拒否状態になったりする。

 メーリングリストに公開されたExploitコードを見てみると、内容は非常にシンプルなJavaScriptを含む35行ほどのHTMLとなっている。

 このコードを使った想定される悪意の攻撃としては、たとえば、このコードを含むHTMLファイルをWebサイトに用意し、標的ユーザーにこのページを表示させることで、標的PC上で悪意のプログラムを走らせる、あるいはこのコードを含むHTMLメールを標的PCのユーザ宛に送りつけるといった方法が考えられるだろう。

 なお、mshtml.dllは、IE本体だけでなく、IEコンポーネントを使ったHTMLの表示、たとえばOutlook ExpressのHTMLメールの表示や、IEコンポーネントを使ったタブブラウザのHTML表示でも使われる。

 ブラウザとしてIEを普段は使っていなくても、PC内にIE7/IE6がインストールされている場合は対策が必要だ。

 投稿されたExploitのソースを見てみると、あらかじめCPUの暴走が起こりそうな個所に、シェルコードの動作部分をできる限り大量にメモリ内にコピーしておき、暴走が起きたら悪意のプログラムに誘導するようにする、いわゆる「ヒープスプレー」という技法が使われている。

 Exploitコードを実際に実行してみると、ヒープスプレーによってメモリ中に大量のコピーを作るのに時間がかかり、しかも、シェルコードがうまく動いてくれる確率はあまり高くないようだ。

 このExploitの発見者は、mshtml.dllのgetElementsByTagNameの挙動におかしな点を見つけたものの、確実にシェルコードに導く手段は見つけられなかった、ということなのかもしれない(あるいは、脆弱性自体が安定したコードを作りにくいものなのかもしれない)。

 ただ、現在公開されているExploitコードは、実際に悪用コードとして使うにはまだまだ実用性に欠けるものではあるが、脆弱性が見つかった以上、これをさらに解析して、いずれ確実に迅速に悪意のプログラムを実行できるようになるきっかけとなる可能性は否定できない。最終的に「安定性のあるコードを作ることが難しい脆弱性」と判定される可能性も高いが、確実にこの脆弱性を使った攻撃に対する回避策をとっておくべきだろう。

回避策は、IE8を使うかJavaScriptをオフにする、ウイルス対策ソフトも

 この脆弱性を使った攻撃の回避策として、最も簡単な手段は、IEのバージョンを8に上げてしまうことだろう。今回の脆弱性は、IE7とIE6にしか存在せず、IE8にはこの脆弱性はない。Windows XPなど、IE8が提供されている環境では、バージョンアップしてしまうのが最も確実で簡単だ。

 ただ、業務用アプリの互換性が検証されていないなど、古いバージョンのIEを使わざるを得ない場合は、他の回避策を取る必要が出てくる。

 セキュリティアドバイザリでは、こうした場合の対策として、

  • インターネットおよびローカルイントラネットゾーンの設定を「高」にし、これらのゾーンでActiveXコントロールおよびアクティブスクリプトを実行する前に、ダイアログを表示する
  • インターネットおよびイントラネットゾーンで、アクティブスクリプトの実行前にダイアログを表示するようにInternet Explorerを構成する、またはアクティブスクリプトを無効にするよう構成する
  • Internet Explorer 6またはInternet Explorer 7でDEPを有効にする

のいずれかのアクションを取ることを推奨している。

 3つの回避策のうち最初の2つは、要するに危険なJavaスクリプトの実行を停止しようというものだ。

 1つめの対策をとった場合、JavaScriptを実行するごとにしてよいかどうかダイアログが表示されるので、ユーザはそれを見てJavaScriptを止めることができる。2つめは、同じくダイアログを表示するか、そもそもJavaScriptの実行を全面的に止めてしまうという方法だ。

 また、今回のExploitコードを流用した悪用があった場合には、セキュリティ対策ソフトも有効だ。

 今回のExploitコードでは、シェルコードを起動するきっかけをヒープスプレーという手段でメモリ上にばら撒いてから、メモリ破壊を起こすというJavaScriptコードが書かれている。この手法は悪用コードによく取られる手段のため、ウイルスと確定していなくても怪しいコードを実行させないようにする「ヒューリスティックスキャン」などでは、最も早い段階でその可能性がないかチェックされるパターンなのだ。

 つまり、ウイルスのパターンファイルに登録されていなくても、今回のようなExploitコードは、「危険なファイル」としてチェックされる可能性が高いのだ。

 実際、米Symantecなどはブログで、このExploitコードが、法人向けに提供している侵入防止(IPS)ソリューションでは、特にパターンファイルを更新しなくても「悪意のJavaScriptヒープスプレー」として検知すると明言している。

 また、このExploitコード自体の特徴も、主要なウイルス対策ソフトではウイルスパターンとしてすでに登録されており、表示させようとした場合、危険なファイルとして検疫されるようになっているようだ。

 こうした対策を多層的に使ってあらかじめ防御しておくことは、今回の脆弱性に限らず、同様なゼロデイ攻撃にも有効だ。悪意の攻撃への備えとして、セキュリティ対策ソフトを有効活用することを筆者としてはお勧めしたい。


関連情報

(大和 哲)

2009/11/26 13:01