OutlookおよびOutlook Expressのバッファオーバーフロー問題


Windows 2000 World 2000年10月号
月刊セキュリティレポート No.9


本文書は、Windows 2000 World誌に寄稿した記事の原稿を、IDGジャパン編集部殿の許可を得た上で掲載したものです。




OutlookおよびOutlook Expressにおけるバッファオーバーフロー問題が、今年の7月に公開された。マイクロソフトはこの問題に対し、詳細なセキュリティ情報(英語版[1]および日本語版[2])の中で対策方法を提示している。




電子メールヘッダにおけるバッファオーバーフロー


今回のバッファオーバーフロー問題は、USSR(図1)[3]およびAaron Drew氏によってほぼ同時期に発見された。この問題の存在をマイクロソフトのセキュリティ情報に先立って一般公開したのはAaron Drew氏だが、氏によるとこれは単に氏が誤ってBugtraqメーリングリストに投稿してしまったとのことである。


図1 OutlookおよびOutlook Expressのバッファオーバーフロー問題を報告するUSSRのWebページ。


さてこの問題は、OutlookおよびOutlook Expressで電子メールを受け取った際に、メールヘッダの日付フィールド(Date:)を解析するモジュール(inetcomm.dll)の不具合によりバッファオーバーフローが発生するというものだ。この問題を利用することにより悪意を持った人間は、ターゲットユーザに対して不正な電子メールを送りつけ、ターゲットのコンピュータ上で任意のプログラムを実行させることが可能になる。

バッファオーバーフロー(あるいはバッファオーバーラン)とは、プログラムのメモリ中に確保された一時的な作業領域(バッファ)があふれる(オーバーフロー)ことを指す。適切にコーディングされたプログラムではこのような現象は発生しないが、コーディングのミスによりバッファに格納するデータの長さをチェックしておらず、それがバッファの大きさを上回った場合、オーバーフローが生じる。オーバーフローが発生すると一般的にプログラムは異常終了するが、巧妙に細工したデータによってバッファオーバーフローを引き起こすことにより任意のプログラムコードを実行させることが可能な場合もある。今回のケースは後者に相当する。

今回のバッファオーバーフロー自体は、次のようなDateフィールドを持つメールを作成することにより確認することができる。
    Date: Fri, 13 July 2000 14:16:06 +1000xxxxx(50個程度以上の繰り返し)xxxxx
通常のメールクライアントソフトはDateフィールドを自動的に挿入するため、上記のようなDateフィールドを持つメールメッセージ作成することはできない。telnet等で直接SMTPサーバに接続して打ち込むのが手っ取り早いだろう。

このようなメールをOutlookまたはOutlook Expressで受信した場合、プログラムが異常終了する。すなわちDateフィールドを処理するプログラムモジュール内でバッファに取り込む文字列の長さをチェックしていないため、バッファオーバーフローが発生するのである。上記の例のxxxxx...の部分を巧妙に細工することにより、メールを読み込んだコンピュータ上で任意のプログラムを実行させることが可能となる。先に紹介したUSSRのWebサイトではデモ用のメールメッセージを発生させるプログラムを公開している。ただし筆者が試した限りでは、日本語版のWindows環境では単にOutlookやOutlook Expressが異常終了するだけであった。これはWindowsのバージョンの違いに起因すると考えられるが、日本語版Windows向けの攻撃コードを作成することはさほど困難ではないと思われるので安心はできない。

今回の問題でやっかいなのは、OutlookやOutlook ExpressはDateフィールドの処理をメールを受け取った時点で行なうということである。つまりメールを開いたり、プレビューする必要はなく、メールを受け取るだけで問題が発生する。またメール受信の最中でプログラムが終了するため、そのメールはメールサーバに残ったままとなり、再びOutlook等でメールサーバにアクセスするとまた同じメールを受信してしまうことになる。そのため、問題のあるメールメッセージを別のメーラーで読み込むか、あるいは直接POPサーバにtelnet等で接続して手動でそのメールを削除する(POP3のDELEコマンド)必要がある。

念のために手動でメールを削除する方法を以下に示す。
    1) telnetでPOP3サーバに接続する
      telnet POP3サーバ 110
    2) ユーザIDとパスワードを入力
      user ユーザID
      pass パスワード
    3) スプールされているメールの一覧表示
      list
    4) メール内容の表示
      retr メール番号
    5) メールの削除
      dele メール番号
    6) POP3アクセスの終了
      quit
なお言うまでもないことであるが、この問題を利用したメールを当人の承諾なしに他人宛てに送信してはならない。動作の確認を行なう場合は、あくまでも自分宛てに送信すべきである。




影響を受けるプロダクト


この問題の影響を受けるプロダクトは、以下の通りである。
    ・Microsoft Outlook Express 4.0
    ・Microsoft Outlook Express 4.01
    ・Microsoft Outlook Express 5.0
    ・Microsoft Outlook Express 5.01
    ・Microsoft Outlook 98
    ・Microsoft Outlook 2000
Outlook 97はこの問題の影響を受けない。またこの問題が発生するのはOutlookやOutlook ExpressでPOP3またはIMAP4プロトコルを利用している場合のみである。例えばOutlookで標準的にExchangeサーバにアクセスしているようなケースでは、この問題は発生しない。だがマイクロソフトは使用プロトコルに関わらず後述する対策を施すことを推奨している。




対策方法


今回のバッファオーバーフロー問題に対して、マイクロソフトは以下の三通りの対策方法を提供している。これらのいずれかを実行することにより、今回の脆弱性は修正される。
    1. Internet Explorer 5.01 Service Pack 1[4]をデフォルト設定でインストールする
    2. Internet Explorer 5.5[5]をデフォルト設定でインストールする(Windows 2000の場合を除く)
    3. セキュリティ修正モジュールを適用する(現時点では日本語版は未提供)
Internet Explorer 5.01 SP1もしくはInternet Explorer 5.5をデフォルト設定でインストールする(上記1または2)ことで、Outlook Expressは5.5にアップグレードされる。Outlook Express 5.5に含まれる新しい日付解析モジュール(inetcomm.dll)ではこの問題は発生しない。またOutlookもOutlook Expressと同じモジュールを使用するため、上記の実行によりOutlookの問題も解消される。Internet Explorerのインストール方法によってはOutlook Expressが5.5にアップグレードされない可能性もあるため、インストール後にOutlook Expressが確実に5.5にアップグレードされていることを確認した方が良い。

Windows 2000環境ではInternet Explorer 5.5をインストール(上記の2)してもOutlook Expressは5.5にアップグレードされないため注意が必要である。Windows 2000の場合は、現時点では上記1すなわちInternet Explorer 5.01 SP1のインストールによって対処するしかない。ちなみに今後提供される予定のWindows 2000 Service Pack 1をインストールすることでInternet ExpressおよびOutlook Expressいずれも5.5にアップグレードされるらしい。

Outlook Expressを5.5にアップグレードせずにこの問題を対処するためには、修正モジュール(上記の3)を適用する必要がある。ただし本原稿執筆時点では日本語版の修正モジュールはまだ提供されていない。




一時ディレクトリ問題等への対応


前述した対策方法を実施することにより、以下の問題についても解決される。 MS00-045の問題は悪意のあるHTML形式メールをOutlook Expressで表示することにより、それ以降の電子メールメッセージを不正に他人に読まれてしまう危険性があるというもの。またMS00-046は本連載の前回の記事で紹介した、Internet Explorer/Outlook Expressが一時ディレクトリ(環境変数TEMPに設定)に既知のファイル名でファイルを作成してしまう問題(.emlによるHTML Help問題やForce Feeding問題)のことを指していると思われる。

実際にWindows 2000環境にInternet Explorer 5.01 SP1をインストールした後、前回紹介したHTML Help問題(.emlを使用したもの)を試してみたが、SP1適用前には一時ディレクトリ内に作成されたHTML Helpファイル(abcde.chm)が、SP1適用後はInternet Explorerのキャッシュディレクトリ(インターネット一時ファイルのフォルダの下)に作成されるように修正されていた。この一時ディレクトリの問題は他の様々な攻撃に応用される危険性が極めて高いと考えられるため、今回の修正は非常に歓迎すべきことである。

Internet Explorer 5.01 Service Pack 1やInternet Explorer 5.5は、上記以外にも過去のセキュリティ問題の多くを修正しているので、この機会にアップグレードされることをお勧めする。なおIEの修正状況については龍谷大学の小島氏が明解にまとめておられるので、氏のWebサイト(図2)[10]を参照されたい。


図2 龍谷大学の小島氏によるIEのセキュリティ対応状況一覧。




[1]  MS00-043: Patch Available for "Malformed E-mail Header" 
     Vulnerability 
     http://www.microsoft.com/technet/security/bulletin/MS00-043.asp

[2]  「改ざんされた電子メール ヘッダ」の脆弱性に対する対策
     http://www.microsoft.com/japan/security/prekb.asp?sec_cd=MS00-043

[3]  USSR - Underground Security Systems Research
     http://www.ussrback.com/

[4]  Internet Explorer 5.01 Service Pack 1 (SP1)
     http://www.microsoft.com/windows/ie_intl/ja/download/ie501SP1.htm

[5]  Internet Explorer 5.5 とインターネット ツール
     http://www.asia.microsoft.com/windows/ie_intl/ja/download/ie55.htm

[6]  MS00-045: Patch Available for "Persistent Mail-Browser Link" 
     Vulnerability 
     http://www.microsoft.com/technet/security/bulletin/ms00-045.asp

[7]  「メールとブラウザがリンクしつづけてしまう」脆弱性に対する対策
     http://www.microsoft.com/japan/security/prekb.asp?sec_cd=MS00-045

[8]  Patch Available for "Cache Bypass" Vulnerability 
     http://www.microsoft.com/technet/security/bulletin/ms00-046.asp

[9]  「キャッシュ バイパス」の脆弱性に対する対策
     http://www.microsoft.com/japan/security/prekb.asp?sec_cd=MS00-046

[10] MSIE 4.01 SP2 / 5.01 SP1 / 5.5 セキュリティ対応状況
     http://www.st.ryukoku.ac.jp/~kjm/security/memo/ms-ie.html


2000年7月執筆
塩月 誠人
インターナショナル・ネットワーク・セキュリティ株式会社