MS Office製品のセキュリティ問題

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

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








Scriptlet.TypeLib問題を利用したワームの出現


 本連載の前回記事でIE5.0のScriptlet.TypeLib問題を取り上げ、HTML形式の電子メールやニュース記事による攻撃の危険性について触れたが、実際にこの問題を利用した電子メールベースのワーム(自己増殖型の不正プログラム)が出現した。
図1 BubbleBoyワームを警告するIPAのWebページ
図1 BubbleBoyワームを警告するIPAのWebページ


「BubbleBoy」という名のこのワームはHTML形式の電子メールに埋め込まれており、このメールをOutlookやOutlookExpressで開いた際にScriptlet.TypeLib問題を利用してスタートアップフォルダにHTMLアプリケーションファイル(UPDATE.HTA)が作成される。その後のWindows再起動時にこのUPDATE.HTAが自動実行されることで、様々な不正行為(レジストリ変更、他のメールアドレスへのBubbleBoy送信等)が行なわれる。
 BubbleBoyの詳細についてはここでは触れないが、この機会にHTLM形式メールやニュース記事の危険性について再認識していただきたい。ちなみにBubbleBoyは英語版およびスペイン語版のWindows9xをターゲットとしてコーディングされているため、日本語版Windows9xやWindowsNTでは動作しない。しかし日本語版Windows環境向けの亜種を作成することは容易であるので警戒が必要だ。前月号の記事をご参考の上、適切な対策を施すことをお勧めする。
 なお、各Outlook製品がメールやニュース記事の中の動的コンテンツをどのタイミングで実行するかについて、NTBugtraqのRuss Cooper氏がWebページにまとめているので参照されたい。

MS Office製品の各種セキュリティ問題


 さて今回は、マイクロソフトのOffice製品に関するセキュリティ問題について解説する。以下は、本原稿執筆時点で筆者が把握しているOffice97(SR-1)以降の製品に関するセキュリティ問題一覧である。
脅威の種別 タイトル 影響を受ける製品 修正モジュール
英語版 日本語版
プログラム起動 Excel97 CALL Excel97
Office ODBCドライバ Office97/2000他
マクロ警告回避 Word97プリント Word97 × ×
Word97テンプレート Word97/98
Excel97 XLSTART Excel97 × ×
Excel97パスワード Excel97
Excel SYLK Excel97/2000 ×
その他 Forms2.0コントロール Office97他
ダウンロード自動オープン Office97
Access97パスワード Access97 × ×
Outlook98 BoF Outlook98他

表1 マイクロソフトOffice製品のセキュリティ問題一覧

(注: Office97 SR-1以降、本原稿執筆時点)

表1 では各セキュリティ問題をその脅威の種別によって大きく三つに分類している。
プログラム起動
マクロ機能を使用せずにExcelワークシート等からプログラムを起動するタイプのセキュリティ問題
マクロ警告回避
ExcelやWordの「マクロ警告機能」を回避するタイプのセキュリティ問題
その他
Webアクセス等によって内部情報が漏洩する、あるいはWebからOfficeファイルをダウンロードする際に自動的にオープンしてしまうなど


「プログラム起動」の種別に分類される「Excel97 CALL問題」および「Office ODBCドライバ問題」を悪用すると、ドキュメントを開いた際に任意のプログラムが起動してしまうようなExcelワークシートをマクロを使用せずに作成することが可能となる。これらの不正ワークシートは基本的にExcelのマクロ警告機能やウィルススキャナソフトによるウィルスチェックで検出されないため、非常に危険度が高いと考えられる。

Excel97 CALL問題


 Excel97 CALL問題は、Excelの関数の一つである「CALL関数」を使用することにより、Excelワークシートを開いた際にローカルマシン上で任意のプログラムを実行させることができてしまうものである。
 ExcelやWordには、ドキュメントを開く際にマクロが存在するかどうかをチェックしてユーザに警告する「マクロ警告機能」が装備されており、デフォルトでそれらは「有効」になっている。そのため、ユーザには開こうとしているドキュメント中にマクロがあるかどうかを知り、必要に応じてマクロを無効にするもしくはそのドキュメントを開かないといった判断をするチャンスが与えられている。この機能は、ドキュメント中のマクロが不正な振る舞いをするかどうかを検査するわけではないものの、ユーザが不用意にドキュメントを開いて不正なマクロが実行してしまうことを避けるための、一つの手助けとして重要な意味を持っている。
 ExcelのCALL関数はユーザのマシン上で任意のプログラムを起動させることが潜在的に可能であるにも関わらず、CALL関数自体は単なるワークシート関数でありマクロではないため、Excelのマクロ警告機能によってワークシートを開く際に警告が出ることはない。ユーザは、CALL関数を利用した不正なワークシートを電子メール等で受け取った場合、その中の不正コードの存在を事前に知るすべがないのである。
 そもそもCALL関数はDLLまたはコードリソースに含まれるプロシジャを呼び出し、その結果をワークシートに取り込む機能を持つ。例えば、

CALL("Kernel32","GetTickCount","J!")


を実行することで、Kernel32.dllのGetTickCountプロシジャを呼び出し、システム起動時からの実経過時間(ミリ秒)を取得することができる。

図2 CALL関数の使用例。Kernel32.dllのGetTickCountプロシジャを呼び出す。
図2 CALL関数の使用例。Kernel32.dllのGetTickCountプロシジャを呼び出す。

この機能を利用すれば、Kernel32.dll(あるいは他のDLL)の中にあるプログラム起動プロシジャを呼び出して任意のプログラムを起動することができてしまう。
 マイクロソフトはこのExcel CALL問題に関するセキュリティ情報を提供するとともに、修正モジュールを作成、配布している。修正モジュールを適用することにより、Excel97のワークシート上からCALL関数を使用することができなくなる(マクロからは引き続き使用可能)。

Office ODBCドライバ問題


 Office ODBCドライバ問題は、当初「Excel97 ODBCドライバ問題」と呼ばれていたものである。マイクロソフトが提供しているこの問題のFAQ によると、この問題はODBCとは直接関係があるわけではない。が、もともと報告された際に使用した名称をそのまま継続して使用し、この問題の総称を「Office ODBCドライバ問題」と呼んでいる。
 この問題はMicrosoft Jetデータベースエンジンに存在する脆弱性に起因するため、Jetデータベースエンジンを利用するすべてのアプリケーションプログラムに影響する。Jetとはデータベースに対してデータの操作を行なうための基本機能がパッケージ化されたデータベースエンジンで、Excel、Access等のOffice製品以外にも多くのサードパーティ製品で利用されている。今回明らかになったのは、Jetに含まれる次の二つの問題点である。

  1. VBA Shell問題
     VBA Shell問題は、データベースクエリ(検索)の際にOSのコマンドを指定することで、クエリ実行時に任意のプログラムを起動することができるというもの。例えばSQL文に次のような記述を行なうことが可能である。

    SELECT Shell("cmd.exe") FROM テーブル名

     この機能自体は仕様であり使い方によっては非常に便利であるものの、Officeドキュメント中で不正に悪用された場合、ユーザのマシン上で破壊的な行為を行なうことも可能となってしまう。前述のCALL問題同様、これはマクロではないためOffice製品のマクロ警告機能で事前に検知することはできない。またこの問題を利用したデモンストレーションExcelファイルがインターネットで公開されている ため、それをベースにして攻撃的なExcelワークシートが今後電子メール等でばら撒かれる危険性もある。

    図3 VBA Shell問題のデモ実行例。Excelワークシートオープン時にFTP接続を自動実行するとともに、regeditを起動
    図3 VBA Shell問題のデモ実行例。
    Excelワークシートオープン時にFTP接続を自動実行するとともに、regeditを起動


  2. Text I-ISAM問題
     Text I-ISAM問題は、クエリ実行時に既存のファイルに書き込みができてしまうというもの。この機能は通常、他のアプリケーションとテキストファイルを経由してデータ交換を行なったりする目的で使用されるが、システムファイルを含む全てのテキストファイルに対して書き込める(もちろんそのユーザのアクセス権に依存)ため、今回問題となった。
     これらのOffice ODBC問題(正確にはJetの問題)について、マイクロソフトは詳細なセキュリティ情報とともに修正モジュールを提供している。修正モジュールは1999年8月に一度リリースされたが、10月にアップデート版が再リリースされているので、古い修正モジュールしか適用していない場合は新しいものを再適用した方が良い。修正モジュールの適用により、VBA Shell問題については安全でないVBA関数を使用したクエリが発行できなくなり、Text I-ISAM問題については.batや.cmdといった拡張子を持つテキストファイルに書き込むことができなくなる。

マクロ警告機能の回避に関する問題


前述の通り、ExcelやWordといったOffice製品には、ドキュメントを開く際にマクロが存在した場合、ユーザに警告する「マクロ警告機能」が備わっている。

図4 Word97のマクロ警告ダイアログ。
図4 Word97のマクロ警告ダイアログ。

これによりユーザはドキュメント中のマクロの存在をオープン時に知ることができるのだが、このマクロ警告機能が正常に機能しない(ドキュメント中にマクロがあっても警告されない)各種の問題が報告されている
  1. Word97プリント問題
    エクスプローラからWord97ドキュメントファイルを選択し、右クリックで直接「印刷」を実行した場合、マクロ警告機能が回避される。この問題については、筆者の知る限り修正モジュールは提供されていない。
  2. Word97テンプレート問題
    テンプレートにマクロが含まれるようなWord97ドキュメントを開いた場合、マクロ警告機能が回避される。修正モジュール有り
  3. Excel97 XLSTART問題
    XLSTARTディレクトリ(Excelのスタートアップディレクトリ)にあるExcelファイルについては、マクロ警告機能が働かない。マイクロソフトの技術文書によると、これは仕様である。すなわちこのディレクトリの中にあるファイルは信頼できるものだという前提に立っている。
  4. Excel97パスワード問題
    パスワードで保護されたExcelファイルをパスワード入力して開いた場合、マクロ警告機能が働かない。修正モジュール有り
  5. Excel SYLK問題
    SYLK(シンボリックリンク)フォーマットで保存されたマクロを含むExcelファイルを開いた場合、マクロ警告機能が働かない。現時点では英語版のみ修正モジュール有り。この修正モジュールは、マクロを含むサードパーティの表計算ソフト(ロータス1-2-3等)文書ファイルをExcelにインポートした際に、同様にマクロ警告機能が働かない問題にも対応している。

その他のOffice製品問題


その他、Office製品に関するセキュリティ問題として以下があげられる。
  1. Forms2.0コントロール問題
    これは「クリップボード・ペースト問題」とも呼ばれている。Office製品に含まれるForms2.0コントロールを利用し、Webページ等においてユーザのコンピュータ上のクリップボードデータを不正に取得されてしまうというもの。修正モジュール有り
  2. ダウンロード自動オープン問題
    Office97をインストールした際、デフォルトの状態では多くのドキュメント種類について、「ダウンロード時に開く確認をする」ようには設定されない。そのため、Internet ExplorerでWeb上にあるOfficeドキュメントを指定した際に、警告メッセージが表示されずにOfficeアプリケーションが起動してそのファイルを読み込んでしまう。不正なマクロなどがWeb上のOfficeドキュメントに記述されている場合、このデフォルト設定は非常に危険である。どのドキュメントタイプがそのように設定されているかは、エクスプローラで「表示」メニューを選び、「オプション」の「ファイルタイプ」を指定、目的のファイルタイプを選択して「編集」ボタンをクリックすれば確認できる。

    図5 Word97のファイルタイプの設定。「ダウンロード時に開く確認をする」がOFFになっている。
    図5 Word97のファイルタイプの設定。
    「ダウンロード時に開く確認をする」がOFFになっている。


    マイクロソフトはOffice97製品のこれらのデフォルト設定を「ダウンロード時に開く確認をする」ように変更するツールを提供している。なお、このツールは前述のODBC問題の修正モジュールにも含まれている。
  3. Access97パスワード問題
    Access97はユーザがデータベースをパスワードで保護した場合、パスワードを一定の法則でエンコードしてデータベースファイル中に保存するが、このパスワードを平文に戻すプログラムがインターネット上で公開されている。そのため、パスワードで保護されたAccess97データベースは不正にアクセスされる危険性が高い。
  4. Outlook98バッファオーバーフロー問題
    この問題は、Outlook98およびOutlook Express4.0xで非常に長いファイル名のファイルが添付された電子メールやニューズ記事をダウンロードもしくは開いた際に、バッファオーバーフローによってプログラムが異常終了するというものである。場合によっては別のプログラムを起動させられてしまう危険性を併せ持つ。修正モジュール有り


以上、今回はマイクロソフトOffice製品に関するセキュリティ問題について解説した。組織内のPC上でOffice製品が使用されているケースは非常に多いと予想されるが、確実にセキュリティ修正モジュールを適用しないと思わぬセキュリティ侵害を被る危険性が大きい。ぜひこの機会に各PC上のOffice製品についてチェックすることをお勧めする。

1999年11月執筆
セントラル・コンピュータ・サービス株式会社
塩月 誠人