RootkitRevealer v1.71

作成者: Mark Russinovich

公開日: 2006 年 11 月 1 日

DownloadRootkitRevealer をダウンロード(231 KB)
Sysinternals Live から今すぐ実行します。

はじめに

RootkitRevealer は、高度なルートキット検出ユーティリティです。 Windows XP (32 ビット) と Windows Server 2003 (32 ビット) で実行され、その出力には、レジストリとファイル システム API の不一致が一覧表示されます。これは、ユーザー モードまたはカーネル モードのルートキットの存在を示している可能性があります。 RootkitRevealer は、AFX、Vanquish、HackerDefender を含む多くの永続的なルートキットを検出します (注: RootkitRevealer は、ファイルやレジストリ キーを隠そうとしない Fu のようなルートキットの検出を目的としたものではありません)。 ルートキットの存在を特定するために使用する場合は、お知らせください。

コマンド ライン バージョンがなくなった理由は、マルウェア作成者が RootkitRevealer のスキャンを、その実行可能ファイル名を使用してターゲットにし始めたためです。 そのため、RootkitRevealer を更新し、ランダムに名前が付けられたそのコピーから、スキャンが実行されるようにしました。これは、Windows サービスとして実行されます。 この種の実行は、コマンド ライン インターフェイスには適していません。 コマンド ライン オプションを使用すると、自動スキャンを実行して結果をファイルに記録できます。これは、コマンド ライン バージョンの動作に相当するものです。

ルートキットとは

ルートキットという用語は、ウイルス、スパイウェア、トロイの木馬などのマルウェアがスパイウェア ブロッカー、ウイルス対策、システム管理ユーティリティからその存在を隠そうとするメカニズムと手法を表すために使用されます。 マルウェアが再起動後も存続するかどうか、およびユーザー モードとカーネル モードのどちらで実行されているかに応じて、ルートキットの分類がいくつかあります。

永続的なルートキット
永続的なルートキットは、システムが起動するたびにアクティブ化されるマルウェアに関連するものです。 このようなマルウェアには、システムの起動時またはユーザーがログインするたびに自動で必ず実行されるコードが含まれているため、レジストリやファイル システムなどの永続的なストアにコードを格納し、ユーザーの介入なしにコードを実行するメソッドを構成する必要があります。

メモリベースのルートキット
メモリベースのルートキットは、永続的なコードがないマルウェアであり、再起動後は存続しません。

ユーザー モードのルートキット
ルートキットが検出を回避しようとする方法が多数あります。 たとえば、ユーザー モードのルートキットは、Windows FindFirstFile/FindNextFile API (エクスプローラーやコマンド プロンプトを含むファイル システム探索ユーティリティによって使用され、ファイル システム ディレクトリの内容を列挙する) のすべての呼び出しをインターセプトする可能性があります。 ルートキットに関連付けられているファイルを識別するエントリを含む結果を返すディレクトリ リストをアプリケーションが実行すると、ルートキットがインターセプトし、出力を変更してエントリを削除します。

Windows ネイティブ API はユーザー モード クライアントとカーネル モード サービスの間のインターフェイスとして機能しますが、より巧妙なユーザー モード ルートキットはネイティブ API のファイル システム、レジストリ、およびプロセス列挙関数をインターセプトします。 これにより、Windows API 列挙の結果とネイティブ API 列挙によって返された結果を比較するスキャナーによる検出が阻害されます。

カーネル モードのルートキット
カーネル モードのルートキットは、カーネル モードでネイティブ API をインターセプトできるだけでなく、カーネル モードのデータ構造を直接操作できるため、さらに威力が上がる可能性があります。 マルウェア プロセスの存在を隠す際の一般的な手法は、カーネルのアクティブなプロセスの一覧からそのプロセスを削除することです。 プロセス管理 API はこの一覧の内容に依存するため、マルウェア プロセスはタスク マネージャーやプロセス エクスプローラーなどのプロセス管理ツールには表示されません。

RootkitRevealer のしくみ

永続的なルートキットのしくみは、API を使用するシステム ビューがストレージ内の実際のビューと異なるように API の結果を変更することであるため、RootkitRevealer は、最上位レベルのシステム スキャンの結果を最下位レベルのものと比較します。 最上位レベルは Windows API で、最下位レベルはファイル システム ボリュームまたはレジストリ ハイブの生コンテンツです (Hive ファイルはレジストリのディスク上ストレージ形式です)。 したがって、ユーザー モードとカーネル モードのどちらであっても、Windows API またはネイティブ API を操作してディレクトリの一覧からその存在を消すルートキットは、Windows API によって返される情報と FAT または NTFS ボリュームのファイル システム構造の生スキャンに見られるものの間の不一致と RootkitRevealer によって認識されます。

ルートキットは RootkitRevealer から隠れることができるか
理論的には、ルートキットは RootkitRevealer から隠れることができます。 これを行うには、RootkitRevealer によるレジストリ ハイブ データまたはファイル システム データの読み取りをインターセプトし、このデータの内容を、ルートキットのレジストリ データまたはファイルが存在しないかのように変更する必要があります。 ただし、そのためには、これまでのルートキットに見られないレベルの巧妙さが必要です。 このデータを変更するには、NTFS、FAT、レジストリ ハイブ形式に関する詳しい知識と、ルートキットを隠すようにデータ構造を変更しながら、RootkitRevealer によってフラグが設定されるような矛盾や無効な構造、副次的影響の不一致を生じさせない能力の両方が必要です。

ルートキットの存在を知るための確実な方法はありますか
一般に、実行中のシステム内からはありません。 カーネル モードのルートキットは、システムの動作のあらゆる側面を制御できるため、RootkitRevealer によって実行されるレジストリ ハイブや ファイル システムの生データの読み取りなど、どの API から返される情報も侵害される可能性があります。 システムのオンライン スキャンと、CD ベースのオペレーティング システム インストールのブートなどのセキュリティで保護された環境からのオフライン スキャンを比較すると、より信頼性が高くなりますが、ルートキットはそのようなツールをターゲットにして、検出を回避することもできます。

要するに、万能なルートキット スキャナーが生まれることはないでしょうが、最も強力なスキャナーは、ウイルス対策と統合されたオンライン/オフライン比較スキャナーでしょう。

RootkitRevealer の使用

RootkitRevealer を実行するアカウントには、ファイルとディレクトリのバックアップ、ドライバーの読み込み、ボリューム メンテナンス タスクの実行 (Windows XP 以降) の特権が割り当てられている必要があります。 Administrators グループには、既定でこれらの特権が割り当てられています。 誤検知を最小限に抑えるために、RootkitRevealer の実行はアイドル状態のシステムで行います。

最適な結果を得るには、すべてのアプリケーションを終了し、RootkitRevealer スキャン プロセス中はシステムをアイドル状態のままにします。

ご質問や問題がある場合は、Sysinternals RootkitRevealer フォーラムをご覧ください。

手動スキャン

システムをスキャンするには、システム上で起動し、[Scan] (スキャン) ボタンを押します。 RootkitRevealer がシステムをスキャンし、ウィンドウの下部にあるステータス領域でそのアクションが報告され、出力リストに不一致が示されます。 構成できるオプションは次のとおりです。

  • Hide NTFS Metadata Files (NTFS メタデータ ファイルを非表示にする): このオプションは既定でオンであり、標準の NTFS メタデータ ファイルは表示されず、Windows API から隠されています。
  • Scan Registry (レジストリのスキャン): このオプションは既定でオンになっています。 選択を解除すると、レジストリのスキャンが実行されません。

自動スキャンの起動

RootkitRevealer では、システムの自動スキャンのためのオプションがいくつかサポートされています。

使用法: rootkitrevealer [-a [-c] [-m] [-r] outputfile]

パラメーター 説明
-a 自動的にスキャンし、完了したら終了します。
-c 出力を CSV 形式にします。
-m NTFS メタデータ ファイルを表示します。
-r レジストリをスキャンしません。

ファイルの出力場所は、ローカル ボリューム上である必要があることに注意してください。

-c オプションを指定した場合、進行状況は報告されず、不一致はデータベースに簡単にインポートできる CSV 形式で出力されます。 次のようなコマンド ラインを使うと、Sysinternals PsExec ユーティリティを使用してリモート システムのスキャンを実行できます。

psexec \\remote -c rootkitrevealer.exe -a c:\windows\system32\rootkit.log

出力の解釈

これは、よく知られている HackerDefender ルートキットの存在を検出している RootkitRevealer のスクリーンショットです。 レジストリ キーの不一致は、HackerDefender のデバイス ドライバーとサービス設定を格納しているレジストリ キーが Windows API には見えないが、レジストリ ハイブ データの生スキャンには存在することを示しています。 同様に、HackerDefender に関連付けられたファイルは、Windows API ディレクトリ スキャンには見えませんが、生ファイル システム データのスキャンに存在します。

Rootkit Revealer

すべての不一致を調べ、ルートキットの存在を示す可能性を判断する必要があります。 残念ながら、ルートキットが存在するかどうかを出力に基づいて判断する決定的な方法はありませんが、報告されたすべての不一致を調べて、それらが説明可能であることを確認してください。 ルートキットがインストールされていると判断した場合は、Web で削除手順を検索してください。 ルートキットを削除する方法がわからない場合は、システムのハード ディスクを再フォーマットし、Windows を再インストールすることをお勧めします。

考えられる RootkitRevealer の不一致に関する以下の情報に加えて、Sysinternals の RootkitRevealer フォーラムでは、検出されたルートキットと特定の誤検知についてのディスカッションが行われています。

Windows API から隠されている

これらの不一致は、ほとんどのルートキットに見られるものです。ただし、[Hide NTFS Metadata Files] (NTFS メタデータ ファイルを非表示にする) をオンにしていない場合は、NTFS ボリュームにこのようなエントリが多数あることが予想されます。NTFS では、$MFTや$Secure などのメタデータ ファイルが Windows API から隠されるためです。 NTFS ボリュームに存在するメタデータ ファイルは、NTFS のバージョンと、ボリュームで有効になっている NTFS 機能によって異なります。 また、ルートキットの手法を使用して NTFS 代替データ ストリームに格納されているデータを隠す Kaspersky Antivirus などのウイルス対策製品もあります。 このようなウイルス スキャナーを実行している場合は、すべての NTFS ファイルの代替データ ストリームで Hidden from Windows API (Windows API から隠されている) という不一致が表示されます。 RootkitRevealer は出力フィルターをサポートしていません。ルートキットはフィルター処理を利用できるためです。 最後に、スキャン中にファイルが削除された場合も、この不一致が表示されることがあります。

こちらは、Windows Server 2003 の時点で定義されている NTFS メタデータ ファイルの一覧です。

  • $AttrDef
  • $BadClus
  • $BadClus:$Bad
  • $BitMap
  • $Boot
  • $LogFile
  • $Mft
  • $MftMirr
  • $Secure
  • $UpCase
  • $Volume
  • $Extend
  • $Extend\$Reparse
  • $Extend\$ObjId
  • $Extend\$UsnJrnl
  • $Extend\$UsnJrnl:$Max
  • $Extend\$Quota

Access is Denied.
RootkitRevealer はシステム上のファイル、ディレクトリ、またはレジストリ キーにアクセスできるメカニズムを使用するため、この不一致が報告されることはありません。

Visible in Windows API, directory index, but not in MFT.
Visible in Windows API, but not in MFT or directory index.
Visible in Windows API, MFT, but not in directory index.
Visible in directory index, but not Windows API or MFT.

ファイル システム スキャンは、Windows API、NTFS マスター ファイル テーブル (MFT)、NTFS ディスク上のディレクトリ インデックス構造の 3 つのコンポーネントで構成されます。 これらの不一致は、あるファイルが、これらのスキャンの 1 つまたは 2 つにのみ表示されることを示します。 スキャン中にファイルが作成または削除されたというのが一般的な理由です。 こちらは、スキャン中に作成されたファイルに対する RootkitRevealer の不一致レポートの例です。

C:\newfile.txt
3/1/2005 5:26 PM
8 バイト
Visible in Windows API, but not in MFT or directory index.

Windows API length not consistent with raw hive data.
ルートキットは、自分自身を隠すように試みることができます。この場合、レジストリ値のサイズを偽って、その内容が Windows API に見えないようにします。 このような不一致がある場合、スキャン中にレジストリ値が変更された結果として現れることもありますが、調べてください。

Type mismatch between Windows API and raw hive data.
レジストリ値には DWORD やREG_SZ などの型があります。この不一致は、Windows API を通じて報告された値の型が生のハイブ データのものと異なっていることを示しています。 ルートキットは自身のデータをマスクできますが、その方法はたとえば、REG_BINARY 値として格納し、Windows API が REG_SZ 値と見なすように仕向けるというものです。データの開始時に 0 を格納した場合、Windows API は後続のデータにアクセスできなくなります。

Key name contains embedded nulls.
Windows API はキー名を null で終わる文字列として扱うのに対し、カーネルはカウントされた文字列として扱います。 したがって、オペレーティング システムには見えるが、Regedit などのレジストリ ツールには部分的にしか表示されないレジストリ キーを作成することができます。 Sysinternals の Reghide サンプル コードはこの手法を示していますが、これはレジストリ データを隠すためにマルウェアとルートキットの両方で使用されています。 null が埋め込まれたキーを削除するには、Sysinternals の RegDelNull ユーティリティを使用します。

Data mismatch between Windows API and raw hive data.
この不一致は、レジストリ スキャンの進行中にレジストリ値が更新された場合に発生します。 頻繁に変更される値としては、Microsoft SQL Server アップタイム値 (以下に示す) やウイルス スキャナーの "最終スキャン" 値などのタイムスタンプがあります。 報告された値を調査して、有効なアプリケーションまたはシステム レジストリ値であることを確認してください。

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\RECOVERYMANAGER\MSSQLServer\uptime_time_utc
3/1/2005 4:33 PM
8 バイト

ルートキットのリソース

次の Web サイトと書籍は、ルートキットに関する詳細情報のソースです。

ソニー、ルートキットとデジタル著作権管理が行き過ぎている
Mark のコンピューターでのソニーのルートキットの発見と分析に関するブログ記事をお読みください。

ルートキットの解明
Mark の 6 月のWindows IT Pro Magazine の記事では、ルートキットの技術と RootkitRevealer のしくみの概要について説明しています。

Rootkits: Subverting the Windows Kernel
Greg Hoglund と Jamie Butler によるこの書籍は、ルートキットに利用できる最も包括的な治療法です。

www.phrack.org
このサイトには、セキュリティ関連製品の欠陥、ルートキットの手法、およびその他のマルウェアのテクニックについて開発者が議論しているクラッカー向けの雑誌 Phrack のアーカイブが保存されています。

The Art of Computer Virus Research and Defense (Peter Szor 著)

Malware: Fighting Malicious Code (Ed Skoudis および Lenny Zeltser 共著)

Windows Internals, 4th Edition (Mark Russinovich および Dave Solomon 共著。この本はルートキットについて説明しているものではありませんが、Windows アーキテクチャを理解することはルートキットを理解するのに役立ちます)。

DownloadRootkitRevealer をダウンロード(231 KB)

Sysinternals Live から今すぐ実行します。