RootkitRevealerは2つのオンライン状態のスキャン結果を比較して検出
さらに,Sysinternals社が「RootkitRevealer」というルートキット検出ユーティリティをSysinternals社のWebサイトにおいて無料で提供している。
△ 図をクリックすると拡大されます |
図6●Hacker Defenderが動作中のシステムをスキャンしたときのRootkitRevealerの出力結果 |
システムでRootkitRevealerを走らせたとき,ルートキットと無関係の矛盾が報告される場合もある。ファイルやレジストリ値の生成/削除/変更などが,高レベル・スキャンと低レベル・スキャンのちょうど間に行われたら,RootkitRevealerがそれを矛盾として報告することがある。例えば,SQL Serverのサービスは定期的に,レジストリに保存するタイム・スタンプを更新しており,RootktRevealerによって報告される可能性がある。
もう1つのよく見られる矛盾は,文字列終端文字(0の値を持つ文字)が名前に組み込まれているレジストリ・キーが原因である。このような名前はWindows APIから完全に見えているわけではない。こういったキーはregeditといったレジストリ編集ツールではアクセスできない。ネイティブAPIを使えば,このようなキーの名前が見えるので,それを利用して,ライセンス情報やその他の保護が必要なデータを隠しているアプリケーションがある。このようにルートキットは最小単位のデータで,マルウエアを隠ぺいできるため,RootkitRevealerは矛盾点をフィルタしないようにしている。
RootkitRevealerからルートキット自体やマルウエアのプロセスを隠すには,プロセスの存在を臭わすファイル・システムやレジストリ・データ構造に,ルートキットが細工を施す必要がある。多くのデータ構造はあまり知られておらず,RootkitRevealerによってその矛盾点を検出されないように構造を操作するには,細心の注意が必要だ。筆者の知る限り,どのルートキットもそこまでは洗練されていない。
しかし,ルートキットがRootkitRevealerを攻撃する方法はある。実際にMicrosoftのカスタマ・サポート・サービスでは,少なくとも1件の攻撃を発見している。Hacker Defenderが侵入したある顧客のシステムだという。この例では,マルウエア作成者はHacker Defenderの設定ファイルの「ルート・プロセス」セクションに,RootkitRevealerを追加していた。こうしておくと,Hacker Defenderが,RootkitRevealerに対してはプロセスのオブジェクトを隠さなくなる。その結果,RootkitRevealerによるシステムの高レベル・スキャン結果は低レベル・スキャン結果と一致してしまい,Hacker Defenderに関する矛盾を報告しなかった。この攻撃の対策として,Sysinternals社はRootkitRevealerのアップデート・バージョンをリリースした。このバージョンのRootkitRevealerは,無作為に生成した名前のプロセスからスキャンを実行する。
この動きに対応して,ルートキット開発者がRootkitRevealerによるスキャンや隠ぺい解除を無効にする別の方法を発見するのは時間の問題だろう。そうなれば,Sysinternals社はその攻撃を克服するようにアップデートで対応することになる。すべてのルートキット検知ソフトは同じタイプの目標を絞った攻撃に対してぜい弱である。検知ソフトが有名になるにつれ,ルートキット開発者はその弱点を利用する方法に焦点を合わせることになる。皮肉にもルートキット検知ソフトは,ルートキットから標的にされることから身を隠すために,進化したルートキットの仕組みを採用していくことになるだろう。