RootkitRevealer v1.71

作者:Bryce Cogswell 和 Mark Russinovich

發佈日期: 2006 年 11 月 1 日


介紹

RootkitRevealer 是進階的 Rootkit 偵測公用程式。它可在 Windows NT 4 及較新的版本上執行,而且其輸出會列出登錄值與檔案系統 API 的差異,這樣就可以指出是否有使用者模式或核心模式的 Rootkit。RootkitRevealer 可以成功地偵測到在 www.rootkit.com 中發佈的所有持續性 Rootkit,包括 AFX、Vanquish 和 HackerDefender (請注意:RootkitRevealer 並不是用以偵測像 Fu 這一類不會嘗試隱藏其檔案或登錄機碼的 Rootkit)。如果您使用它來識別 Rootkit 的存在,請讓我們知道!

不再有命令列版本的原因是因為惡意程式碼作者已開始使用 RootkitRevealer 的可執行檔名稱,以其掃描為攻擊目標。因此我們更新了 RootkitRevealer,以 Windows 服務的方式執行隨機命名的複本來執行其掃描。這種類型的執行無益於命令列介面。請注意,您可以使用命令列選項來執行會將結果記錄到檔案的自動掃描,這等同於命令列版本的行為。

回到頁首

Rootkit 是什麼

Rootkit 一詞是用以描述惡意程式碼 (包括病毒、間諜軟體以及木馬程式) 嘗試隱藏其蹤跡,不讓間諜軟體封鎖程式、防毒軟體和系統管理公用程式發現所使用的機制與技術。視惡意程式碼是否能在重新開機後仍然存在以及它是在使用者模式或核心模式執行而定,有數種 Rootkit 分類。

持續性 Rootkit
持續性 Rootkit 是一種與惡意程式碼關聯的 Rootkit,它會在系統每次開機時啟動。因為這樣的惡意程式碼包含必須在每次系統啟動或使用者登入時自動執行的程式碼,它們必須將程式碼存放在持續的存放區,例如登錄或檔案系統,並設定一個方法,讓程式碼在執行時不需要使用者操作。

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

使用者模式 Rootkit
Rootkit 有許多嘗試躲避偵測的方法。例如,使用者模式 Rootkit 可能會攔截所有對 Windows FindFirstFile/FindNextFile API 的呼叫,這些 API 是由檔案系統探索公用程式所使用,包括「檔案總管」及命令提示,以列舉檔案系統目錄的內容。當應用程式執行目錄清單時,本來會傳回包含一些可識別與 Rootkit 關聯的檔案的項目之結果,不過 Rootkit 會攔截和修改輸出以移除這些項目。

Windows 原生 API 可做為使用者模式用戶端與核心模式服務之間的介面,而且更複雜的使用者模式 Rootkit 會攔截檔案系統、登錄並處理原生 API 的列舉功能。這將可防止掃描程式偵測到它們,因為這些掃描程式會比較 Windows API 列舉的結果以及原生 API 列舉所傳回的結果。

核心模式 Rootkit
核心模式 Rootkit 甚至可以更強大,因為它們不只可以在核心模式攔截原生 API,而且它們也可以直接操作核心模式的資料結構。隱藏惡意程式碼處理程序的存在最常用的技術,就是從核心的使用中處理程序清單移除其處理程序。因為處理程序管理 API 會依賴清單的內容,所以惡意程式碼處理程序將不會顯示在像是「工作管理員」或是「處理程序總管」這樣的處理程序管理工具中。

回到頁首

RootkitRevealer 如何運作

由於持續性 Rootkit 透過變更 API 結果的方式來運作,好讓使用 API 的系統檢視與儲存的實際檢視不同,所以 RootkitRevealer 會比較最高層級與最低層級的系統掃描結果。最高層級是 Windows API,而最低層級則是檔案系統磁碟區或是登錄 Hive 的原始內容 (Hive 檔案是登錄在磁碟上的儲存格式)。因此,無論是使用者模式或是核心模式的 Rootkit,透過操作 Windows API 或原生 API 以便從目錄清單移除其存在,都會被 RootkitRevealer 視為在以下兩者之間的差異:Windows API 傳回的資訊以及對 FAT 或 NTFS 磁碟區的檔案系統結構所執行的原始掃描中所看到的資訊。

Rootkit 是否可以躲避 RootkitRevealer
理論上 Rootkit 有可能隱藏自己讓 RootkitRevealer 無法偵測。要這樣做將需要攔截 RootkitRevealer 對登錄 Hive 資料或是檔案系統資料的讀取,並變更資料的內容,好讓Rootkit 的登錄資料或檔案不存在。不過,這將需要超高的智慧才能做得到,目前的 Rootkit 尚無法做到。對資料的變更將需要對 NTFS、FAT 和登錄 Hive 格式非常熟悉,而且還需要能夠變更資料結構,好讓他們隱藏 Rootkit,但是不會造成讓 RootkitRevealer 標示為差異、無效的結構或是副作用的差異。

是否有方法能夠確保知道 Rootkit 的存在
一般而言,不是從執行中的系統。核心模式 Rootkit 可以控制系統行為的任何層面,因此任何 API 傳回的資訊 (包括 RootkitRevealer 執行的登錄 Hive 之原始讀取以及檔案系統資料) 都可能遭到竄改。在比較系統的線上掃描以及從安全環境執行的離線掃描 (例如開機成以 CD 為基礎的作業系統安裝比較可靠) 時,Rootkit 可以鎖定這類的工具,將它們撫平以躲避偵測。

最重要的是永遠都不會有萬能的 Rootkit 掃描程式,但是最強大的掃描程式將會是與防毒軟體整合在一起的線上/離線比較掃描程式。

回到頁首

使用 RootkitRevealer

RootkitRevealer 需要已經指派這些執行權限的帳戶:備份檔案和目錄、載入驅動程式並執行磁碟區維護工作 (在 Windows XP 及更新的版本上)。 Administrators 群組預設已經指派這些權限。以便能最小化誤判在閒置系統上執行 RootkitRevealer。

為了獲最佳結果,請在 RootkitRevealer 掃描程序期間,結束所有的應用程式,並使系統保持在閒置的狀態。

如果您有任何問題,請造訪 Sysinternals RootkitRevealer 論壇。

回到頁首

手動掃描

若要掃描系統,請在系統上啟動它並按 [掃描] 按鈕。RootkitRevealer 會掃描系統以便在其視窗底部的狀態區域中報告其動作,並在輸出清單中標示差異。您可以設定的選項有:

  • 隱藏 NTFS 中繼資料檔案: 這個選項預設是開啟的,並且使 RootkitRevealer 不會顯示標準 NTFS 中繼資料檔案,這些檔案將會對 Windows API 隱藏。

  • 掃描登錄: 這個選項預設是開啟的。取消選取它將會使 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 資料的的原始掃描中。同樣地,Windows API 目錄掃描看不到與 HackerDefender 關聯的檔案,但是會出現在原始檔案系統資料的掃描中。



您應該檢查所有的差異並判斷它們指出 Rootkit 存在的可能性。不幸的是,沒有明確的方法可以根據輸出來判斷 Rootkit 是否存在,但是您應該檢查所有報告的差異以確定它們是可解釋的。如果您判斷已安裝 Rootkit,請搜尋網站以取得移除指示。如果您不確定如何移除 Rootkit,您應該重新格式化系統的硬碟並重新安裝 Windows。

除了以下可能的 RootkitRevealer 差異之資訊之外,在 Sysinternals 的 RootkitRevealer 論壇中討論了偵測到的 Rootkit 與特定的誤判。

回到頁首

對 Windows API 隱藏

這些差異是大部分 Rootkit 顯示的差異,不過,如果您尚未檢查「隱藏 NTFS」的中繼資料檔案,則應該會在任何 NTFS 磁碟區上看到許多這類的項目,因為 NTFS 會對 Windows API 隱藏其中繼資料檔案,例如 $MFT 和 $Secure。顯示在 NTFS 上的中繼資料檔案,會因 NTFS 的版本以及已經在該磁碟區上啟用的 NTFS 功能而異。也有防毒軟體產品 (例如 Kaspersky Antivirus) 使用 Rootkit 技術以隱藏它們儲存在 NTFS 替用資料串流中的資料。如果您正在執行這類的病毒掃描程式,將會看到對 Windows API 隱藏每個 NTFS 檔案的替用資料串流差異。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 bytes
顯示在 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 這一類的登錄工具才可以部分看得見。在 Sysinternal 的 Reghide 範例示範了惡意程式碼與 Rootkit 隱藏登錄資料的這個技術。使用 Sysinternals Regdellnull 公用程式以刪除具有內嵌 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 bytes

回到頁首

Rootkit 資源

下列是有關 rootkits 的網站及書籍資源:

Understanding Malware: Viruses, Spyware and Rootkits
Mark 的 Microsoft TechEd 2005 網路研討會包含病毒、間諜軟體和 Rootkit。

Sony、Rootkit 和數位版權管理太過份了
在 Mark 的部落格中,閱讀一篇針對他其中一台電腦上的 Sony Rootkit 之發現與分析。

Unearthing Rootkits
Mark's June Windows IT Pro Magazine article provides an overview of rootkit technologies and how RootkitRevealer works.

Rootkit:破壞 Windows 核心
This book by Greg Hoglund and Jamie Butler is the most comprehensive treatment of rootkits available.

www.phrack.org
This site stores the archive of Phrack, a cracker-oriented magazine where developers discuss flaws in security-related products, rootkit techniques, and other malware tricks.

research.microsoft.com/rootkit/
This is the Microsoft Research rootkit home page where Microsoft publishes papers and information on its efforts to combat rootkits.

The Art of Computer Virus Research and Defense, by Peter Szor

Malware: Fighting Malicious Code, by Ed Skoudis and Lenny Zeltser

Windows Internals, 4th Edition, by Mark Russinovich and Dave Solomon (the book doesn't talk about rootkits, but understanding the Windows architecture is helpful to understanding rootkits).

下載 RootkitRevealer (231 KB)

回到頁首