2010年4月25日 星期日

[病毒]Anti-rootkit工具介紹

Anti-rootkit工具介紹
文/圖吳俊達.責任編輯/陳啟川

本篇為Rootkit文章的最後一篇,在探討過user mode與kernel mode的rootkit技術後,本次將介紹一些Anti-rootkit的工具,最後再以實例說明的方式,讓讀者在了解rootkit的技術原理後,更能進而加以防範。


在說明了這麼多rootkit技巧之後,您是否也心驚膽跳,懷疑自己的電腦上是否已被人神不知鬼不覺的種入rootkit了?沒關係,現下就為讀者們介紹各個Anti-rootkit的工具。
RootkitBuster
http://www.trendmicro.com/download/rbuster.asp
Trend Micro於2006年底便在官方網站上免費提供給廣大的電腦用戶使用,它具有偵測隱藏檔案、登錄檔、執行程式及驅動程式的能力,並在2.2版中新增偵測隱藏開機磁區的功能。因為在2008年年初,開機磁區 (MBR) rootkit大為肆虐,Trend Micro發現到此一現象,隨即開發新版RookitBuster以解決電腦用戶的困擾。它可偵測到user mode及kernel mode的rootkit,並用Cross-View比較的模式明白告訴使用者,那些資料是隱藏,方便使用者清除的動作。


RookitBuster的使用者介面。


RootkitBuster也提供清除能力。當它掃描到隱藏元件時,將顯示在Scan Results中,使用者從中選擇隱藏的檔案或是登入檔,並按下「Delete Selected Items」的按鍵時,它將自動刪除所選的元件。


將Scan Results中的項目反白選取再按下Delete Selected Items即可刪除。



IceSword
http://pjf.blogcn.com/index.shtml
IceSword是一套來自中國,功能相當齊全的系統監測工具,目前已經最新的版本是1.22版,我們將著重其Anti-rookit的功能來做介紹。在functions中可檢視到隱藏的資料,例如Process、Port及Service,它將以紅色標示做為隱藏資料的標記。


IceSword的UI,紅色代表為隱藏的Process。


從中可看到此執行程式的檔案位址,首先先選到此程式,並按右鍵,便可看到可對此程式做的操作,選擇終止此程式的執行。


選取後按右鍵即可中止該隱藏Process。



Gmer
http://www.gmer.net/index.php
GMER也是一套系統監測工具,除了rootkit偵測功能外,它還有顯示自動啟動的程式、內建CMD及登入檔編輯器。剛啟動GMER時它會先快速掃描系統上是否有隱藏資料,如果有任何可疑程式,它會要求完整掃描。


GMER的UI和IceSword很像,但更為簡潔。


然後在掃描結果上選取process或file即做清除的動作。


一樣按隱藏項目上按右鍵即可刪除或中止。


但是否使用以上rootkit偵測刪除軟體就可免除其威脅呢?其實不盡然,因為rootkit所隱藏的資料不一定是它的本體,只清除那些資料,並不能保證已經除去源頭,所以必須搭配上其他防毒技術,找出真正元凶加以清除,以防其又捲土重來。

由前文可知rootkit的目的在於隱藏資料,避免使用者的發現,更避開防毒軟體的偵測,當使用者或是防毒軟體想要去操作這些資料時,rootkit便回報此資料不存在或是操作失敗;一般沒有Anti-rootkit技術的防毒軟體就會被欺騙,導致找不到已存在的病毒檔。所以目前大多數防毒軟體都具備Anti-rootkit的技術,以突破rootkit的保護層不受其欺騙,直接對被rootkit保護的程式、檔案及登入檔進行操作,清除有害程式對系統造成的傷害,達到全面性的防護。


真實世界的案例Ⅰ-FuTo
看完了上述所介紹rootkit在kernel、user mode用到的各種技巧,接下來讓我們看一個實際的例子─FuTo。許多rootkit因為執行在系統核心,所以常被惡意軟體用來隱藏自己不被防毒軟體偵測到。FuTo是個相當有名的rootkit,它使用了出色的技術來達到隱藏Process、Driver以及修改Process的執行權限。下圖是FuTo執行的功能選項。可以注意到其中的msdirectx.sys即是FuTo的Driver,許多rootkit會將Driver檔案名稱取成類似正常的Driver名稱。


FuTo的Driver名稱容易讓人誤會為正常的Driver。



FuTo的行為分析

FuTo以DKOM技術來隱藏Process以及Driver,也就是說藉由修改Windows核心的資料架構隱藏資料。在隱藏Process這部分,FuTo主要修改了三個地方:Active Process List、Csrss.exe以及PspCidTable。

Windows核心使用Active Process List(可將其想像成一個將系統上所有Process串起來的linked-list)來儲存系統中的Process資訊(少數系統Process不在其中)。FuTo依序追蹤此List,如果找到要隱藏的Process,便將前後兩個鄰近的Entry修改略過要隱藏的Process。Win32 API提供的Process列舉便是追蹤此List,所以修改Active Process List即可讓Win32 API列舉不到被隱藏的Process。

Csrss.exe(Windows上一個極為重要的Process,在此不多行描述,有興趣的讀者請自行參閱MSDN)內含一個表格,儲存幾乎所有系統內的Process資訊,FuTo會試著找到此表格並且將要隱藏的Process從此表格移除,以達到隱藏的目的。

PspCidTable是Windows核心裡的一個表格,它儲存著幾乎所有Process和Thread的指標。FuTo會移除掉在此表格裡面跟要隱藏的Process資料。

FuTo在隱藏Driver的方法是修改Windows核心中的Module Loaded List,這個List跟Active Process List是同一種類的List。FuTo利用修改Active Process List的方法修改此List,以達到隱藏Driver的目的。


FuTo的行為分析

現下我們利用FuTo試著來隱藏指定的Process,看看是否真能讓該Process消失在工作管理員的Process清單


被FuTo隱藏起來的Notepad.exe,PID為1964。


一般Malware不會有GUI,但為了方便展示,我們使用Notepad.exe來展示FuTo隱藏Process的功能。上圖是利用FuTo隱藏Notepad.exe之後的結果,可發現下工作管理員已經看不到PID為1964的Notepad.exe。


RootkitBuster掃描到有隱藏Porcess,注意PID被FuTo改為0。


接下來使用TrendMicro的Antirootkit工具RootkitBuster來偵測,如圖9,可得知該Process已被RootkitBuster偵測到,這裡可以注意到該Process的PID已經被FuTo改成0了。


利用FuTo隱藏它自己的driver。


接下來利用FuTo將msdirectx.sys隱藏,如圖10。接著再使用RootkitBuster偵測隱藏的Driver,在圖11中可發現被隱藏的Driver。


RootkitBuster依然能找到被隱藏的driver。



Cross-View比對偵側

RootkitBuster如何能偵測到被隱藏的Process或Driver呢,不是都被FuTo給抹掉痕跡了嗎?事實上,作業系統裡這種記載系統上所有Process、Driver的資料架構有許多個,FuTo只改掉了其中的一部份。因此,只要拿FuTo更改部份所得到的Process或Driver清單,和從其它系統核心得到的Process或Driver清單兩相比較,若有出入,必然是因為系統上有rootkit在搞鬼,而這種方法被稱之為Cross-View。


真實世界的案例Ⅱ-MBR rootkit
在2005年有兩位資安研究員Derek Soeder和Ryan Permeh發現了一個嚴重的安全漏洞-Windows並沒有保護好MBR(Master Boot Record,硬碟上第一個磁區,其內包含了電腦在開機過程中會執行到的程式碼,是一個十分重要的地方),以致惡意程式可以在user mode對MBR任意進行修改。事實上修改MBR這個技巧在早期的DOS時代就已常被利用,但這次兩位研究者的發現則是第一次正式公開證實Windows NT(包含Vista)環境下依然有此漏洞。


MBR在開機程序中的運作。

在進一步了解MBR rootkit之前,我們得先對MBR以及它在開機過程中的角色有個基礎認知。一般正常系統開機的流程如下所述︰

1. 按下電源,電腦開機,BIOS進行開機自我測試(Power-on self test)。
2. BIOS依據開機裝置順序,讀入該裝置位在MBR內的程式碼(Bootloader),將控制權交給它。
3. Bootloader將開機分割區 (例如C槽) 的第一個磁區讀入記憶體,將控制權交給它(kernel loader)。
4. Kernel loader讀入作業系統的核心(kernel),並將控制權交給它來完成開機。



正常的開機程式。


由以上?述我們可以得知,MBR是開機流程中最早被執行的(甚至比OS更早)。因此,只要惡意程式篡改了MBR中的code,便可以對系統得到最大的控制權。


MBR rootkit行為分析

接下來,我們以MBR rootkit的sample實際感染一台系統,來觀察MBR rootkit到底有些什麼侵害系統的行為。以下將MBR rootkit分幾個構成來分析:


MBR rootkit installer

當使用者在不小心執行了包含了MBR rootkit的惡意程式之後,該程式就會修改MBR的內容,讓電腦在重開機後能自動讀入MBR rootkit,由圖13可以清楚看到惡意程式正對MBR內容做篡改。


透過監視installer的行為發現到它對MBR的更動 (Offset 0)。



被修改的MBR

模式,更改BIOS中斷0x13(對於硬碟存取的相關功能)處理常式,藉此來影響Windows NT家族的kernel loader-NTLDR,控制它讀取剛剛installer預先寫在系統硬碟上的幾個磁區(裡面放的是一些惡意程式碼),並對Windows的核心做inline patching,載入負責後門程式部份的核心驅動程式。一旦成功執行後,MBR的內容就不再是原本單純bootloader。被修改的MBR會以前面所述IDT hooking


MBR rootkit的自我保護

除了更改Windows核心,IDT hooking等等,MBR rootkit更用了其它的模式來保護自己不被發現。誠如上面所述,MBR rootkit的第一步就是修改受害者電腦上的MBR,因此,勢必要想辦法隱瞞防毒軟體的偵測,就是不能讓防毒軟體知道自己修改過MBR。它所使用的方法就是dispatch routine hook。藉由將最底層的disk.sys(直接負責所有對硬碟的存取)驅動程式「讀」與「寫」的routine給替換掉,便可確保自己不會被發現。當防毒軟體試著要讀取MBR時,便傳回MBR修改前的內容(installer會事先藏在硬碟上的某幾個磁區);而掉包的「寫入」routine,則可以保護MBR不再被其他人更改。


Disk.sys的dispatch routine已被MBR rootkit更改。



MBR rootkit的偵測

經過前面的描述之後,我們可以知道MBR rootkit將它的魔手深入了Windows的核心,因此一般防毒軟體無法偵測到它,任何對MBR的存取都會經過它的修改。但這不代表MBR rootkit就可以高枕無憂。透過其它Windows核心驅動程式的能力(例如: classpnp.sys),我們便可以直接讀取MBR的內容,並將它與直接讀取時的內容做個比較;若兩者不同,便可得知其中必定是有MBR rootkit在作祟。


MBR rootkit的偵測流程



MBR rootkit小結

對於MBR rootkit的技巧手法與偵測方法,至此我們已有個大致了解。事實上IBM PC第一支被正式記載的病毒名叫Brain,亦是採用hook IDT 0x13的方法感染MBR做破壞,而MBR之所以那麼吸引病毒作者,就是因為它具備了下列優點:

1. MBR code對系統具有完全的控制,它比任何一款防毒軟體都還早被載入RAM,甚至比作業系統更早,因為它是開機流程的一部份。
2. MBR rootkit不需要檔案系統,它直接對硬碟的磁區做存取,減少被偵測到的機率。
3. MBR rootkit不需要更改系統的機碼(Registry)來達到自動重啟(Survive after reboot)的效果,因為它是直接被BIOS載入RAM。


rootkit的發展趨勢
隨著技術的發展,rootkit具有如下一些發展趨勢︰
1. 利用硬體來隱藏rootkit︰例如已有rootkit研究者提出基於CPU本身的系統管理模式(System Management Mode, SSM)實現rootkit隱藏行為、基於顯示卡和網路卡來隱藏的rootkit程式等,以進駐到作業系統更深層次的位置或者利用現有檢測技術的盲點進行隱藏。

2. 目標型隱藏︰ rootkit將針對特定的rootkit檢測程式進行特定的處理來實現隱藏的目的。這類rootkit通常將會識別特定rootkit檢測程式,並利用檢測程式實現上的漏洞來達到隱藏目的。



【原文刊載於RUN!PC雜誌:2009年2月號】

相關文章 :

0 意見: