RootkitRevealer v 1.71

依 Mark Russinovich

發行日期:2006年11月1日

下載下載 ROOTKITREVEALER (231 KB)
立即Sysinternals Live執行。

簡介

RootkitRevealer 是 advanced rootkit 偵測公用程式。 它會在 Windows XP (32 位) 和 Windows Server 2003 (32 位) 上執行,而且其輸出會列出登錄和檔案系統 API 的差異,這可能表示使用者模式或核心模式 rootkit 是否存在。 RootkitRevealer 成功偵測到許多持續性 rootkit,包括 AFX、Vanquish 和 HackerDefender (注意: RootkitRevealer 並非用來偵測 rootkit (例如 Fu),) 不會嘗試隱藏其檔案或登錄機碼。 如果您使用它來識別 rootkit 是否存在,請讓我們知道!

不再有命令列版本的原因是,惡意程式碼作者已使用其可執行檔名稱開始瞄準 RootkitRevealer 的掃描。 因此,我們已更新 RootkitRevealer,以從做為 Windows 服務執行的隨機命名複本來執行掃描。 這種類型的執行不會採用遭利用至命令列介面。 請注意,您可以使用命令列選項來執行自動掃描,並將結果記錄到檔案中,這相當於命令列版本的行為。

什麼是 Rootkit?

Rootkit 是用來描述惡意軟體(包括病毒、間諜軟體和特洛伊程式)嘗試從間諜軟體封鎖器、防毒軟體和系統管理公用程式隱藏其存在的機制和技巧。 有幾個 rootkit 分類取決於惡意程式碼是否繼續生存重新開機,以及它是在使用者模式或核心模式中執行。

持續 Rootkit
持續性 rootkit 是一種與惡意程式碼相關聯的軟體,會在每次系統開機時啟動。 由於這類惡意程式碼包含必須在每個系統啟動時自動執行的程式碼,或是當使用者登入時,他們必須將程式碼儲存在持續性存放區中,例如登錄或檔案系統,並設定程式碼在不需要使用者介入的情況下執行的方法。

以記憶體為基礎的 Rootkit
記憶體型 rootkit 是沒有持續性程式碼,因此不會在重新開機後存活的惡意程式碼。

使用者模式 Rootkit
Rootkit 嘗試規避偵測的方法有很多種。 例如,使用者模式 rootkit 可能會攔截所有對 Windows FindFirstFile/FindNextFile api 的呼叫,這些 api 是由檔案系統探索公用程式(包括 Explorer 和命令提示字元)用來列舉檔案系統目錄的內容。 當應用程式執行目錄清單,而該目錄清單傳回的結果會包含識別與 rootkit 相關聯之檔案的專案時,rootkit 會攔截並修改輸出以移除專案。

Windows 原生 api 可作為使用者模式用戶端和核心模式服務之間的介面,以及更精密的使用者模式 rootkit 攔截檔案系統、登錄,以及原生 API 的進程列舉函數。 這可防止掃描器偵測 Windows API 列舉的結果與原生 API 列舉所傳回的結果比較。

核心模式 Rootkit
核心模式 rootkit 可能更強大,因為它們不僅能以核心模式攔截原生 API,還可以直接操作核心模式資料結構。 隱藏惡意程式碼程式存在的常見技術,就是從核心的使用中進程清單中移除該程式。 因為流程管理 Api 依賴清單的內容,所以惡意程式碼程式不會顯示在進程管理工具中,例如工作管理員或 Process Explorer。

RootkitRevealer 的運作方式

由於持續性 rootkit 的運作方式是藉由變更 API 結果,讓使用 Api 的系統檢視與儲存體中的實際觀點不同,因此 RootkitRevealer 會將系統掃描的結果與最低層級的最高層級進行比較。 最高層級是 Windows 的 API,而最低層級是檔案系統磁片區或登錄 hive 的原始內容 (hive 檔案是登錄的磁片上格式) 。 因此,從目錄清單中操作 Windows API 或原生 API 來移除其存在情況的 rootkit (無論是使用者模式或核心模式),RootkitRevealer 會被視為 Windows API 所傳回的資訊,以及在 FAT 或 NTFS 磁片區檔案系統結構的原始掃描中看到的差異。

可從 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 不會顯示標準的 NTFS 中繼資料檔案,這些檔案會在 Windows API 中隱藏。
  • 掃描登錄: 此選項預設為開啟。 將它取消選擇,RootkitRevealer 不會執行登錄掃描。

啟動自動掃描

RootkitRevealer 支援數個自動掃描系統的選項:

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

參數 Description
-a 完成時自動掃描並結束。
-c 將輸出格式化為 CSV。
-m 顯示 NTFS 中繼資料檔案。
-r 請勿掃描登錄。

請注意,檔案輸出位置必須在本機磁片區上。

如果您指定-c 選項,就不會報告進度,而且會以 CSV 格式列印差異,以便輕鬆地匯入資料庫中。 您可以使用類似下列命令列的命令列,以 Sysinternals PsExec 公用程式執行遠端系統掃描:

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

解讀輸出

這是 RootkitRevealer 偵測熱門 HackerDefender rootkit 是否存在的螢幕擷取畫面。 登錄機碼差異顯示 Windows API 無法看到儲存 HackerDefender 之設備磁碟機和服務設定的登錄機碼,但會出現在登錄 hive 資料的原始掃描中。 同樣地,Windows 的 API 目錄掃描看不到 HackerDefender 相關聯的檔案,但會出現在掃描源檔案系統資料的情況下。

Rootkit Revealer

您應該檢查所有不一致的情況,並判斷它們表示 rootkit 是否存在的可能性。 可惜的是,如果有 rootkit,並沒有任何明確的方法可以判斷是否有 rootkit,但您應該檢查所有回報的差異,以確保解釋。 如果您確定已安裝 rootkit,請在網路上搜尋移除指示。 如果您不確定如何移除 rootkit,您應該將系統的硬碟重新格式化,然後重新安裝 Windows。

除了以下有關可能 RootkitRevealer 差異的資訊之外,位於 Sysinternals 的 RootkitRevealer 論壇還討論偵測到的 rootkit 和特定的誤報。

Windows API 中隱藏

這些差異是大部分 rootkit 所表現的差異;但是,如果您未檢查隱藏 ntfs 中繼資料檔案,您應該會看到任何 ntfs 磁片區上有許多這類專案,因為 ntfs 會從 Windows API 中隱藏其中繼資料檔,例如 $MFT 和 $Secure。 NTFS 磁片區上的中繼資料檔案會因 NTFS 版本和磁片區上已啟用的 NTFS 功能而有所不同。 也有防毒軟體(例如 Kaspersky 防毒軟體)使用 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 值; 如果它在資料的開頭儲存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 的詳細資訊來源:

索尼、Rootkit 和數位 Rights Management 已經太遠
閱讀 Mark 的 blog 專案,在他的電腦上探索和分析索尼 rootkit。

Unearthing Rootkit
Mark's 六月Windows IT Pro 雜誌文章提供 rootkit 技術的總覽,以及 RootkitRevealer 的運作方式。

rootkit:破壞 Windows 核心
Greg Hoglund 和曉明 Butler 這本書是最全面的 rootkit 處理方式。

www.phrack.org
此網站儲存了 Phrack的封存,這是一份破解者導向的雜誌,其中的開發人員會討論安全性相關產品的瑕疵、rootkit 技巧和其他惡意程式碼訣竅。

電腦病毒研究與防禦的藝術,Peter Szor

惡意程式碼:透過 Ed Skoudis 和 Lenny It 專家 zeltser 對抗惡意程式碼

Windows 內部、第4版、Mark Russinovich 和 Dave 索羅門群島 (本書不會討論 rootkit,但瞭解 Windows 架構有助於瞭解 rootkit) 。

下載下載 ROOTKITREVEALER (231 KB)

立即Sysinternals Live執行。