今回の攻撃は、主にメールに添付された、不正に改造されたPowerPoint文書を開いてしまうと、文書内のEXEファイルが出力された上で実行され、バックドアが仕掛けられるというもの。実際にこれを使った攻撃が行われたもので、小野寺氏は攻撃が実行される様子を動画で示しつつ説明した。
さて、今回の攻撃はPowerPointの脆弱性を利用したものだ。「PowerPointが文書の要素の解析でいろいろ間違っていて、バイナリを実行するスキがあった」(小野寺氏)という脆弱性だが、そもそもこの脆弱性の背景には、PowerPoint(というよりもOffice)のフォーマットに問題があった。
Office 2003以前に使われていた.doc、.xls、.pptなどといったバイナリ形式のフォーマットは、「ほぼ(ファイルシステムの)FAT」(同)であるOLE構造化記憶を基本とし、ファイルのヘッダにそれぞれのデータがどこにあるか記録され、それを元にデータブロックを探す、という仕組みで、FATテーブル、セクター、ストリームで構成された複雑なフォーマットだった。
問題は、テキストデータであろうとバイナリであろうと、ストリームの中にあらゆるものを入れることができた点で、不正なEXEファイルをPowerPoint文書の中に挿入する、といったことが可能だった。とはいえ、本来はPowerPoint文書からEXEファイルを実行することはできないのだが、脆弱性によってストリームを呼び出して実行できてしまった、というのが今回の問題だ。
これをふまえた上で、実際の攻撃はどのようにして行われたのだろうか。Windows XP SP2+Office 2003 SP2(脆弱性あり)の環境で、攻撃に使われたPowerPointファイルをダブルクリックで開いてみると、一瞬PowerPointの画面が立ち上がってすぐに消え、その後、改めてPowerPointファイルが開かれる、という不思議な動作をする。最終的には正常なPowerPoint文書が表示されるため気づきにくいが、このときすでに攻撃が成功してしまっているのだ。
実際には、最初のPowerPoint文書が開かれた時点でcmd.exeが起動され、ファイル内部に挿入されていたupdate.exeがデスクトップに出力されていた。update.exeは.logという拡張子に偽装したEXEファイルをtempフォルダに作成、実行する。.logに偽装したEXEファイルは、2つのバイナリをsystem32フォルダに出力、さらにローカルマシンのレジストリ(HKLM)を変更する。作成されたバイナリはシステムプロセスのWinlogon.exeの子プロセスに挿入される。最終的にupdate.exeは自身を消去する――というのが一連の動作となる。悪意のあるバイナリがWinlogon.exeとして動作するため、通常では発見しにくくなっているというわけだ。
こうした攻撃に対して、マイクロソフトはどう対処したのか。