McAfee Avert Labs Blog
「A new root’Kid’ on the block」より
May 4,2007 Posted by Aditya Kapoor, Rachit Mathur

 McAfee Avert Labsでは,新たに登場した寄生型ワーム「W32/Almanahe.a」の活動を4月中旬からから観察している。このワームは寄生型という特徴以外にも,存在を隠ぺいする目的でルートキットの手法を採用している点が特に興味深い。

 “ルートキットの手法”は,単純な「ユーザー・モード」から複雑な「カーネル・モード」まで実に多様である。大抵の手法では,正常な関数コールやAPIの実行パスに一種のフックを設ける。手法の詳細については,最新ホワイトペーパー(PDF形式)で説明している。


図1 一般的なSSDTフック手法。Rootkit.sysがNtoskrnl.exeのアドレス範囲外にある点に注目
[画像のクリックで拡大表示]

 ホワイトペーパーの解説にある通り,広く使われているカーネル・モードのフック手法は,システム用サービスのアドレスが格納してあるテーブル「System Service Descriptor Table」(SSDT)にパッチを当てるものだ。この手法の概念を図1に示した。こうしたルートキットの活動を検出するためには,従来のウイルス検査ツールのほか,さまざまな無料ツールが使える。ルートキットの活動を簡単に検出する方法は,SSDT内にある関数が指しているアドレスの範囲をざっと調べるというものだ。仮に調査対象アドレスが図1にあるNtoskrnl.exeのアドレス範囲外だと,そのSSDTにフックが仕込まれていたことになる。例えば図1では,Rootkit.sysがNtoskrnl.exeのアドレス範囲外にある。SSDTのフックされたNtDeleteKeyが指すアドレスを調べると,「Rootkit.sysのアドレス範囲内にある」という警告を出せる。

W32/Almanaheの感染したシステムにおける各種コード/フック解析ツールの動作

 このアドレス範囲チェックという検出方法には,効率のよい簡単な回避手段がある。Ntoskrnl.exeのアドレス範囲内に迂回路の入り口を設けておくのだ。図2を使って説明しよう。


図2 W32/Almanahe.sysの仕掛けたSSDTフック。解析ツールの裏をかくため,Ntoskrnl.exe内に設けた迂回路
[画像のクリックで拡大表示]

図3 Ntoskrnl.exeのセクション境界間にある空き領域(Windbgによる表示)
[画像のクリックで拡大表示]

図4 W32/Almanaheにパッチを当てられた空き領域
[画像のクリックで拡大表示]

 SSDT内のNtDeleteKeyエントリが指すアドレスは,Ntoskrnl.exeの範囲内に納まっている。SSDT関数の指すアドレスが所定の範囲内にあるかどうかだけを確認するツールだと,こうしたルートキットの活動は検出できない。

 W32/Almanaheはこの手法を使って,Ntoskrnl.exe内を起点とする迂回路を作る。Ntoskrnl.exeのセクション境界間にある空き領域を探し,迂回用のコードを仕込むのである。まず,正常なWindows XP(SP1)システムから取得したNtoskrnl.exeのメモリー・マップを図3に例示する。次に,W32/Almanaheに感染したシステムから取得したNtoskrnl.exeのメモリー・マップを図4に示した。両者を比べると,感染したデバイス・ドライバは,まんまと空き領域にパッチを当てられたことが分かる。

 無料ルートキット解析ツールをいくつか使って簡単なテストを実施し,各ツールのコード/フック解析コンポーネントに絞って動作を調べてみた。テストしたツールのコード/フック解析コンポーネントはSSDTしか調べないため,目障りなルートキット・ファイルの特定に失敗した様子がはっきり現れた(図5図7)。


図5 アドレス範囲チェックだけでは表面化しないSSDTのフック
[画像のクリックで拡大表示]

図6 SSDTのフックは見えるが,このフック・エントリはNtoskrnl.exeとして表示されている
[画像のクリックで拡大表示]

図7 SSDTのフックは見えるが,このフック・エントリはNtoskrnl.exeとして表示されている
[画像のクリックで拡大表示]

 図5はアドレス範囲チェックを採用したツールのスナップショットである。このツールは,SSDTがフックされていることの検出に失敗している。ユーザーが多いIceSwordやGMERといったルートキット解析ツールは,SSDTがフックされていることを検出できる点でやや優秀だ。それでも,SSDTのテーブル不整合を生み出した張本人であるデバイス・ドライバの特定には失敗し,フック・モジュールをNtoskrnl.exeそのものとして表示した。

 ルートキット解析ツールの多くは,さまざまなルートキット検出手法を導入しているので,怪しい活動をユーザーに警告できる可能性がある点は覚えておこう。

 W32/Almanaheの採用した迂回路を使う手法は,画期的でも奇抜でもないありふれたアイデアだが,McAfee Avert Labsが初めて実在を確認した。世間に出回っているルートキットが,悪質なコードを隠し,カーネルの奥深くに潜伏するための新たな手法を導入しているという事実の証拠でもある。SSDTフックを仕掛けているデバイス・ドライバをきちんと見つけ出すには,ルートキット解析ツールが迂回路の制御の流れを追跡し,より深い階層までコード解析を行う必要がある。そうすれば,マルウエア開発者の余計な手間をかけさせられる。