RootkitRevealer v1.71

作者:Mark Russinovich

發佈日期︰2006 年 11 月 1 日

Download下載 RootkitRevealer(231 KB)
Sysinternals Live立即執行

簡介

RootkitRevealer 是進階的 rootkit 偵測公用程式。 這套程式能在 Windows XP (32 位元) 和 Windows Server 2003 (32 位元) 上執行,其輸出會列出登錄和檔案系統 API 差異,指出使用者模式或核心模式 rootkit 是否存在。 RootkitRevealer 能成功偵測許多持續性 rootkit,包括 AFX、Vanquish 和 HackerDefender。請注意:RootkitRevealer 並非用來偵測 Fu 這類未嘗試隱藏檔案或登錄機碼的 rootkit。 如果您用這項程式偵測 rootkit 的存在,請告訴我們!

我們之所以移除命令列版本,是因為惡意程式碼作者開始使用可執行檔名稱鎖定 RootkitRevealer 掃描。 因此我們已更新 RootkitRevealer,使其從以 Windows 服務身分執行的隨機命名複本執行掃描。 這類執行對命令列介面並無助益。 請注意,您可以使用命令列選項執行自動掃描,並將結果記錄至檔案;這與命令列版本的行為相同。

什麼是 Rootkit?

Rootkit 一詞係用以描述病毒、間諜軟體和特洛伊木馬等惡意程式碼的機制和技術,這些程式碼會嘗試躲避間諜軟體封鎖程式、防毒軟體和系統管理公用程式的追蹤。 目前 rootkit 依據惡意程式碼是否能在重新開機後持續存在,及其是否於使用者模式或核心模式中執行分成數類。

持續性 Rootkit
持續性 rootkit 是指每次系統開機時就會啟動的惡意程式碼。 由於這類惡意程式碼包含的內容必須在每次系統啟動或使用者登入時自動執行,因此必須儲存在持續性存放區 (例如登錄或檔案系統),並設定為可在無須使用者操作的情況下自行執行。

以記憶體為基礎的 Rootkit
以記憶體為基礎的 rootkit 是不具備持續性程式碼的惡意程式碼,只要重新開機就會消失。

使用者模式 Rootkit
Rootkit 會用各種方法試圖逃避偵測。 例如,使用者模式 rootkit 可能攔截對 Windows FindFirstFile/FindNextFile API 的所有呼叫;這些呼叫係為檔案系統用於探索公用程式 (包括檔案總管和命令提示字元),以便列舉檔案系統目錄的內容。 應用程式執行目錄清單時,本應傳回包含可識別與 rootkit 相關聯檔案之項目的結果,但 rootkit 會攔截並修改輸出來移除內容。

Windows 原生 API 可充當使用者模式用戶端與核心模式服務之間的介面,但更複雜的使用者模式 rootkit 會攔截原生 API 的檔案系統、登錄和程序列舉功能。 這麼做會妨礙掃描程式的偵測過程,使之無法將 Windows API 列舉的結果與原生 API 列舉傳回的結果互相比較。

核心模式 Rootkit
核心模式 rootkit 的禍害可能更為嚴重,因為這類 rootkit 不僅能在核心模式中攔截原生 API,還能直接操作核心模式資料結構。 隱藏惡意程式碼程序存在的常見手法,在於從核心的作用中程序清單中移除程序。 由於程序管理 API 仰賴該份清單的內容,因此惡意程式碼程序不會顯示在工作管理員或 Process Explorer 等程序管理工具中。

RootkitRevealer 的運作方式

持續性 rootkit 的手法在於變更 API 結果,讓使用 API 的系統檢視與儲存體中的實際檢視產生差異。有鑑於此,RootkitRevealer 會將最高層級的系統掃描結果與最低層級的結果進行比較。 最高層級是 Windows API,最低層級是檔案系統磁碟區或登錄 Hive 的原始內容 (Hive 檔案是登錄的磁碟上儲存格式)。 如此一來,無論是使用者模式還是核心模式,只要是操作 Windows API 或原生 API 以從目錄清單之類的地方移除己身存在的 rootkit,RootkitRevealer 都會視為由 Windows API 傳回的資訊,與 FAT 或 NTFS 磁碟區內檔案系統結構中原始掃描內容之間的差異。

Rootkit 能躲過 RootkitRevealer 的偵測嗎?
理論上而言,rootkit 確實有可能躲過 RootkitRevealer 的偵測。 Rootkit 只需要攔截 RootkitRevealer,使其無法讀取登錄 Hive 資料或檔案系統資料,並接著變更資料內容,就能使 rootkit 的登錄資料或檔案消失。 不過,目前還沒有 rootkit 具備這種程度的複雜技術。 要變更資料,需要同時對 NTFS、FAT 和登錄 Hive 格式具備深入了解且能變更資料結構,好在隱藏 rootkit 的同時不致出現會被 RootkitRevealer 察覺的不一致、無效結構或副作用差異。

有沒有得知 rootkit 存在的穩當方法?
一般而言,從正在執行的系統中無法得知。 核心模式 rootkit 可以控制系統行為的任何層面,因此任何 API 傳回的資訊,包括 RootkitRevealer 所執行之登錄 Hive 的原始讀取和檔案系統資料,都可能遭到入侵。 雖然比較系統的在線掃描,以及從安全環境進行離線掃描,例如開機到CD型作業系統安裝更可靠,但rootkit可以針對這類工具,甚至透過它們逃避偵測。

總之,雖然不會有通用的 rootkit 掃描程式,但與防毒軟體整合的線上/離線比較掃描程式也已足夠強大。

使用 RootkitRevealer

RootkitRevealer 要求其執行所在的帳戶已獲派在 Windows XP 和更新版本上的備份檔案和目錄、載入驅動程式和執行磁碟區維護工作權限。 系統管理員群組預設會獲派這些權限。 為了盡可能降低誤判的機率,請在閒置系統上執行 RootkitRevealer。

為了獲得最佳結果,請結束所有應用程式,盡可能在 RootkitRevealer 掃描期間讓系統保持閒置。

如果您有疑問或問題,請造訪 Sysinternals RootkitRevealer 論壇 (英文)

手動掃描

若要掃瞄系統,請在系統上開啟程式,然後按下 [掃描] 按鈕。 RootkitRevealer 會掃描系統,在視窗底部的狀態區域中報告其動作,並偵測輸出清單中的差異。 您可以設定的選項如下:

  • 隱藏 NTFS 中繼資料檔案:此選項預設開啟,因此 RootkitRevealer 不會顯示 Windows API 中隱藏的標準 NTFS 中繼資料檔案。
  • 掃描登錄:此選項預設開啟, 取消選取會使 RootkitRevealer 不執行登錄掃描。

啟動自動掃描

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

解譯輸出

以下為 RootkitRevealer 偵測到常見 HackerDefender rootkit 存在的螢幕擷取畫面。 登錄機碼不一致的狀況,指出儲存 HackerDefender 裝置驅動程式和服務設定的登錄機碼雖未顯示於 Windows API,卻存在於登錄 Hive 資料的原始掃描中。 同理,HackerDefender 相關檔案雖未顯示於 Windows API 目錄掃描,卻存在於原始檔案系統資料的掃描中。

Rootkit Revealer

建議您仔細檢查所有差異,判斷其代表 rootkit 存在的可能性。 可惜我們無法根據輸出準確判斷 rootkit 是否存在,但您仍應檢查所有回報的差異,確定這些差異其來有自。 如果您判斷系統中安裝了 rootkit,請上網搜尋移除方法。 如果您不確定該如何移除 rootkit,則應重新格式化系統硬碟並重新安裝 Windows。

除了下列與可能 RootkitRevealer 差異有關的資訊,Sysinternals 的 RootkitRevealer 論壇也會討論偵測到的 rootkit 和特定誤判。

躲避 Windows API

多數 rootkit 都會表現出上述差異,但假使您尚未檢查「隱藏 NTFS」中繼資料檔案,則應該會在任意 NTFS 磁碟區上看到諸多類似項目,因為 NTFS 會在 Windows API 上隱藏 $MFT 和 $Secure 之類的中繼資料檔案。 NTFS 磁碟區上的中繼資料檔案會因 NTFS 版本和磁碟區上已啟用的 NTFS 功能而有所不同。 有些防毒產品 (例如卡巴斯基防毒軟體) 也會用 rootkit 技術隱藏儲存在 NTFS 替代資料流中的資料。 執行這類病毒掃描程式時,您會在每個 NTFS 檔案上看到替代資料流的「躲避 Windows API」差異。 RootkitRevealer 無法篩選輸出內容,因為任何篩選內容都可能淪為 rootkit 的目標。 最後,如果檔案在掃描期間遭到刪除,可能也會出現這項差異。

以下是截至 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

拒絕存取。
RootkitRevealer 不應報告此差異,因為其採用的機制可使之存取系統上的任何檔案、目錄或登錄機碼。

顯示於 Windows API 和目錄索引,但不顯示於 MFT。
顯示於 Windows API,但不顯示於 MFT 或目錄索引。
顯示於 Windows API 和 MFT,但不顯示於目錄索引。
顯示於目錄索引,但不顯示於 Windows API 或 MFT。

檔案系統掃描包含三個元件:Windows API、NTFS 主要檔案資料表 (MFT) 以及 NTFS 磁碟上的目錄索引結構。 上述差異表示檔案只出現在其中一兩個掃描中。 常見的原因在於,檔案不是於掃描期間建立,就是於掃描期間遭到刪除。 以下為掃描期間所建立檔案的 RootkitRevealer 差異報告範例:

C:\newfile.txt
3/1/2005 5:26 PM
8 個位元組
顯示於 Windows API,但不顯示於 MFT 或目錄索引。

Windows API 長度與原始 Hive 資料不一致。
Rootkit 可以藉由竄改登錄值的大小試圖隱藏自己,讓 Windows API 看不到相關內容。 您應該檢查任何這類差異,不過這類差異也可能是由於掃描期間變更登錄值所產生。

Windows API 與原始 Hive 資料的類型不符。
登錄值具有類型,例如 DWORD 和 REG_SZ;這項差異表示透過 Windows API 回報的數值類型與原始 Hive 資料的類型不同。 Rootkit 可將資料儲存為 REG_BINARY 之類的值來進行偽裝,讓 Windows API 誤認其為 REG_SZ 值。假使 rootkit 在資料開頭儲存 0,則 Windows API 便無法存取後續資料。

機碼名稱包含內嵌 Null。
Windows API 會將機碼名稱視為 Null 終止字串,而核心會將機碼名稱視為已計數字串。 因此您可以建立作業系統可見,但 Regedit 之類的登錄工具僅部分可見的登錄機碼。 Sysinternals 的 Reghide (英文) 範例程式碼會示範這項技術,惡意程式碼和 rootkit 都是用這項技術隱藏登錄資料。 請用 Sysinternals RegDelNull (英文) 公用程式刪除內嵌 Null 的機碼。

Windows API 與原始 Hive 的資料不符。
在登錄掃描進行時更新登錄值,就會造成這項差異。 經常變更的值包括時間戳記,例如 Microsoft SQL Server 運行時間值 (如下所示),以及病毒掃描程式的「上次掃描」值。 您應該調查任何回報的值,以確保它是有效的應用程式或系統登錄值。

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\RECOVERYMANAGER\MSSQLServer\uptime_time_utc
3/1/2005 4:33 PM
8 個位元組

Rootkit 資源

下列網站和書籍提供更多 rootkit 相關資訊:

Sony, Rootkits and Digital Rights Management Gone Too Far (英文)
閱讀 Mark 的部落格文章,了解他在自己電腦上針對索尼 rootkit 的發現和分析事項。

Unearthing Rootkits
Mark 在 6 月號 Windows IT Pro 雜誌上發表的文章提供 rootkit 技術和 RootkitRevealer 運作方式的概觀。

《Rootkits: Subverting the Windows Kernel》
本書由 Greg Hoglund 和 Jamie Butler 合著,是市面上最全面的 rootkit 教戰手冊。

www.phrack.org (英文)
此網站儲存了 Phrack 封存檔,Phrack 是一本以破解工具為導向的雜誌,開發人員在其中探討安全性相關產品、rootkit 技術和其他惡意程式碼技巧的缺點。

《The Art of Computer Virus Research and Defense》,Peter Szor 著

《Malware: Fighting Malicious Code》,Ed Skoudis 和 Lenny Zeltser 著

《Windows Internals》第 4 版,Mark Russinovich 和 Dave Solomon 著。本書未提及 rootkit,但掌握 Windows 架構有助了解 rootkit。

Download下載 RootkitRevealer(231 KB)

Sysinternals Live立即執行