Bootkit病毒是指寄存于磁盤主引導(dǎo)區(qū),通過系統(tǒng)啟動來進(jìn)行提權(quán)的病毒(本文稱其為引導(dǎo)區(qū)病毒)。磁盤的主引導(dǎo)區(qū)(英文縮寫MBR,下文以MBR代指引導(dǎo)區(qū)),是指計算機(jī)的被設(shè)為啟動磁盤的第一個扇區(qū),其中存放著由BIOS(標(biāo)準(zhǔn)輸入輸出服務(wù),完成基本的系統(tǒng)硬件的初始化,并為操作系統(tǒng)提供基本硬件訪問接口)初始化后的將要被加載到內(nèi)存的代碼和硬盤的分區(qū)信息,通常這段代碼運行后會在存貯在硬盤,系統(tǒng)才開始啟動起來。而中了感染引導(dǎo)區(qū)病毒的電腦不會因更新操作系統(tǒng)而消失,反而新安裝的系統(tǒng)會再次被重新感染。故有些殺毒軟件廠商戲稱這些病毒為“鬼影”及“魔影”病毒,借此以視眾人——中了此種病毒的電腦就像“有鬼上身”。引導(dǎo)區(qū)病毒真的有這么神秘嗎?本文將采用通俗易懂的方式,從Bootkit病毒的由來開始講述,逐步探究它們的機(jī)理,以及未來它們的發(fā)展趨勢。
技術(shù)由來
感染引導(dǎo)區(qū)的病毒在病毒發(fā)展史上,特別是在DOS時代,是病毒常見的手法,但是隨著Windows NT系統(tǒng)普及,感染引導(dǎo)區(qū)的病毒仿佛遇到了麻煩。從MBR內(nèi)的代碼到操作系統(tǒng)的啟動要經(jīng)歷三個階段:實模式、保護(hù)模式和內(nèi)存分頁模式。當(dāng)Windows NT系統(tǒng)啟動后,根據(jù)程序的功能和權(quán)限,又分為應(yīng)用程序運行在的用戶模式(通稱為ring3,系統(tǒng)資源訪問權(quán)限受限,代碼容錯能力強(qiáng))和操作系統(tǒng)內(nèi)核和系統(tǒng)驅(qū)動跑在內(nèi)核模式(通稱為ring0,所有的系統(tǒng)資源都可以訪問,但是代碼的容錯能力差,如果內(nèi)核程序出現(xiàn)錯誤,可能會導(dǎo)致系統(tǒng)崩潰,通常的現(xiàn)象是系統(tǒng)藍(lán)屏)。
圖1:x86處理器在保護(hù)模式下的權(quán)限級別
以上所說是操作系統(tǒng)啟動的大體流程,而一個存在于引導(dǎo)區(qū)的病毒代碼,如果要在操作系統(tǒng)完全啟動后發(fā)揮效果,就需要有伴隨操作系統(tǒng)的啟動,在從最初實模式的16位代碼的執(zhí)行到第一個Win32程序的啟動的整個過程中的獲取到最高系統(tǒng)權(quán)限的能力。這個過程本身就非常復(fù)雜,并且微軟公司提供的官方文檔對于Windows系統(tǒng)啟動過程描述的細(xì)節(jié)上通常都是避而不談。所以對于能開發(fā)一個有效感染引導(dǎo)區(qū)病毒的作者的素質(zhì)要求非常高,作者最少需要三個方面的能力:精通實模式程序開發(fā),精通Windows下的應(yīng)用層和內(nèi)核層程序開發(fā)以及有著足夠強(qiáng)的二進(jìn)制程序逆向分析能力,能夠從逆向工程的角度理解Windows啟動相關(guān)模塊的運行機(jī)理。設(shè)想未來制作感染引導(dǎo)區(qū)病毒的作者,看到本文必然會因自己的能力而感到“欣慰”。
根據(jù)我們對目前流行的感染引導(dǎo)區(qū)病毒樣本的流程邏輯的分析,發(fā)現(xiàn)這種從MBR就能對Windows NT系統(tǒng)權(quán)限發(fā)揮作用的方法,其實源于一家名為“eEye” 的國外安全廠商的一段名為“BootRoot”公開代碼。這段代碼的作者是這家公司的兩位研究員Derek Soeder 和Ryan Permeh,并早在2005年就已公開展示,這種方法可以稱作為Bootkit(引導(dǎo)工具)。除此之外,2007年底有MR團(tuán)隊還發(fā)現(xiàn)了其更新版本——Stealth MBR Rootkit(即可以隱藏MBR的提權(quán)工具)。
病毒作者就是利用了這樣一種安全界中使用的技術(shù)去制作并散布惡意的病毒程序。就近幾年收集到病毒樣本來說,比較有影響力的感染引導(dǎo)區(qū)的病毒,主要是早先的“鬼影”病毒和目前流行的“魔影”(卡巴斯基命名為TDL)病毒,而它們所利用的技術(shù)也是源于“eEye”公司的代碼。
機(jī)理介紹
雖然“鬼影”和“魔影”出現(xiàn)的時間不同,實現(xiàn)方式也多有差異,但它們在獲取執(zhí)行權(quán)限上的方式都是采用了傳統(tǒng)的掛鉤子的手法,其差別就是在掛鉤子的位置有所差異,過濾的內(nèi)容也有所不同。關(guān)鍵方法就是通過在MBR中的代碼,在實模式下掛接BIOS磁盤讀寫中斷(INT 13h)函數(shù)。
圖2:引導(dǎo)區(qū)病毒通過INT13h鉤子函數(shù)對磁盤讀寫數(shù)據(jù)的修改
在INT 13h的處理函數(shù)中,對磁盤讀到的內(nèi)容加以過濾,利用字節(jié)模式匹配想要加載的文件的指定代碼內(nèi)容,當(dāng)匹配上后,即修改返回的緩沖區(qū)內(nèi)容,使其跳轉(zhuǎn)到病毒體的保護(hù)模式代碼,這樣便使病毒從實模式的執(zhí)行權(quán)限轉(zhuǎn)向到了保護(hù)模式的執(zhí)行權(quán)限。隨著這個子鉤掛的位置的不同,病毒就能夠控制病毒代碼在操作系統(tǒng)啟動的不同時期是否得到執(zhí)行。操作系統(tǒng)在啟動過程中,如果需要這個系統(tǒng)模塊,則操作系統(tǒng)就會通過磁盤將文件讀出并加載到內(nèi)存。在沒有感染引導(dǎo)區(qū)病毒的電腦上,系統(tǒng)加載到內(nèi)存中的文件內(nèi)容就是硬盤的文件內(nèi)容,但I(xiàn)NT13被病毒掛接后,操作系統(tǒng)所加載的執(zhí)行流程將會被病毒所修改,當(dāng)操作系統(tǒng)執(zhí)行到被病毒修改的代碼時,病毒將再次得以執(zhí)行。
圖3:引導(dǎo)區(qū)病毒在INT13h中修改系統(tǒng)加載流程
在具體實現(xiàn)上,“鬼影”病毒和“魔影”病毒思路相似,都是在實模式下掛接INT 13h鉤子后,對讀取出的保護(hù)模式的程序安裝鉤子,獲取保護(hù)模式下的執(zhí)行權(quán)利。但“魔影”病毒隨后的操作與“鬼影”病毒以及“eEye”公司提供的代碼的思路則不同。準(zhǔn)確的說,“魔影”病毒是對引導(dǎo)區(qū)病毒的進(jìn)一步的優(yōu)化,并簡化了流程。與安全軟件不同,病毒通常是需要通過反調(diào)試的手段來保護(hù)自己不被察覺和分析。所以“魔影”病毒在INT 13h的處理函數(shù)中,并沒有采取“鬼影”病毒等采取的進(jìn)一步掛鉤的方式來進(jìn)一步的伴隨Windows啟動,而是將系統(tǒng)中提供的COM口調(diào)試驅(qū)動kdom.dll在內(nèi)存中給替換為病毒自己的驅(qū)動,此種方法對于病毒來說可謂一石二鳥,這種做法不僅通過病毒的內(nèi)核態(tài)的驅(qū)動獲取到了系統(tǒng)最高權(quán)限,而且使系統(tǒng)的聯(lián)機(jī)調(diào)試端口失效,在一定程度上阻止了他人對其工作原理的分析。
圖4:“魔影”病毒在系統(tǒng)啟動過程中替換系統(tǒng)模塊
當(dāng)病毒再次得以執(zhí)行時,通常系統(tǒng)已經(jīng)完成了所有基本運行環(huán)境的初始化工作,此時病毒就可以利用操作系統(tǒng)所提供的資源進(jìn)行下一步各種操作。前面所描述的Windows NT系統(tǒng)將程序訪問的權(quán)限分成兩個級別——內(nèi)核級(ring0)和應(yīng)用級(ring3),而常見的病毒與用戶程序多跑在應(yīng)用級。但是病毒為了能夠得到對系統(tǒng)的完全控制,通常會為操作系統(tǒng)安裝運行于內(nèi)核級的驅(qū)動程序。一旦病毒程序得到操作系統(tǒng)內(nèi)核級的運行權(quán),此時的病毒控制能力就等同于操作系統(tǒng)和殺毒軟件,任何以軟件形式的安全軟件都將完全失效,所以內(nèi)核級的系統(tǒng)安全就成為病毒與安全軟件的必爭之地。對于二進(jìn)制的程序而言,誰先獲得對系統(tǒng)內(nèi)核的控制,誰就能將對手排擠出這個系統(tǒng),并獲得對系統(tǒng)的完全的控制。對于感染引導(dǎo)區(qū)的病毒,由于能夠選擇自己的代碼在系統(tǒng)加載的具體哪個階段得以運行,自然會選擇一個殺毒軟件還未加載,且系統(tǒng)已經(jīng)基本初始化完成的時候為系統(tǒng)安裝一個運行于系統(tǒng)內(nèi)核級的后門,借此得到對系統(tǒng)的完全控制。
而對于磁盤還原卡和磁盤引導(dǎo)區(qū)監(jiān)控和備份工具而言,這些看似有效的防御引導(dǎo)區(qū)病毒的專業(yè)磁盤工具對于有些感染引導(dǎo)區(qū)的病毒也是沒有任何效果的。例如“魔影”病毒就是通過直接對磁盤發(fā)送SCSI指令的方法對磁盤進(jìn)行讀寫,這種非常底層且直接的方法最早出現(xiàn)在“機(jī)器狗”病毒中,并證明了這種方法可以繞開任何磁盤還原卡的攔截。除此之外,“魔影”病毒還采納了Stealth MBR Rootkit中所提到的為磁盤設(shè)備(\Driver\Disk)掛鉤子的方法來隱藏和保護(hù)儲存在MBR和磁盤末尾的病毒文件。在鉤子函數(shù)中,病毒會預(yù)先判斷上層系統(tǒng)所要讀的位置是否在病毒體所在扇區(qū),如果存在的話,返回的數(shù)據(jù)將是偽造的數(shù)據(jù),而如果系統(tǒng)要求的寫入位置在病毒所在扇區(qū),那么將會使調(diào)用失敗。使用WinHex打開物理磁盤的方法來查看引導(dǎo)區(qū)是否被修改,對于已經(jīng)中了“魔影”病毒的機(jī)器是無效的,因為“魔影”病毒在覆蓋引導(dǎo)區(qū)的數(shù)據(jù)之前,保存了一份引導(dǎo)區(qū)鏡像,當(dāng)系統(tǒng)完全啟動之后,用戶讀取的引導(dǎo)區(qū)的內(nèi)容完全是病毒備份的引導(dǎo)區(qū)的鏡像內(nèi)容,而非真實的數(shù)據(jù)。
圖5:“魔影”病毒對磁盤的訪問控制
主引導(dǎo)區(qū)存在于磁盤的第一個扇區(qū),而一個扇區(qū)的大小是512個字節(jié)。但就目前病毒的體積而言,小則1~2千字節(jié),大則數(shù)十個千字節(jié)。一個扇區(qū)的內(nèi)容不足以容納整個病毒,所以通常引導(dǎo)區(qū)病毒一般分成兩個部分,分別儲存在MBR的引導(dǎo)部分和磁盤其他扇區(qū)的主體部分。以“鬼影”病毒為例,病毒的主體部分存放于引導(dǎo)區(qū)之后,系統(tǒng)未使用的0x228個扇區(qū),其內(nèi)容是經(jīng)過加密的。而“魔影”病毒則在用戶的磁盤末尾建立了一塊獨立的分區(qū),分區(qū)所使用的文件系統(tǒng)也是自定義的文件系統(tǒng)。這個分區(qū)從磁盤分區(qū)表中是查詢不到的,換句話來說,這個分區(qū)對于用戶和系統(tǒng)而言都是隱藏的,并且其內(nèi)容是經(jīng)過CR4加密過的,只有病毒才能夠正確解析并讀取到其中保存的文件內(nèi)容。由于病毒所利用的磁盤空間是與現(xiàn)有的文件系統(tǒng)重疊,雖然其處于磁盤的末尾的幾個扇區(qū),但是其內(nèi)容是可以增長的,這可能會導(dǎo)致病毒會覆蓋到用戶文件系統(tǒng)的文件上,導(dǎo)致用戶正常文件損壞。
圖6:“魔影”病毒的文件系統(tǒng)結(jié)構(gòu)
對于引導(dǎo)區(qū)病毒,無論是“鬼影”還是“魔影”,感染引導(dǎo)區(qū)都僅僅是為了能夠?qū)⒆陨黼[蔽地保存起來,以期在系統(tǒng)啟動的過程中獲取到系統(tǒng)最高權(quán)限。而其最終目的不僅如此,有效的隱藏和有力的權(quán)限都為其負(fù)載任務(wù)的執(zhí)行搭建好了一個良好的平臺。例如“魔影”病毒就是一個精心設(shè)計的平臺,各個模塊的功能都十分明確,它們的最終目的是將指定的功能模塊(cmd.dll)注入到指定的進(jìn)程之中,并在其中發(fā)揮作用。
圖7:“魔影”病毒的功能劃分
這個功能模塊實際上就是一個exe文件,儲存在病毒的文件系統(tǒng)中,其名稱可以由病毒任意指定。在病毒文件系統(tǒng)中,還有一個文件名為cfg.ini的文件,通過這個文件可以控制將病毒文件系統(tǒng)中的哪個文件注入到哪個進(jìn)程之中。如下圖8所示,“*”的位置表示要注入的進(jìn)程名稱,“=”號后面所跟的就是要注入的、存儲在病毒文件系統(tǒng)上的文件名。如果為“*”表示注入所有進(jìn)程,那么病毒文件將會注入所有進(jìn)程,那么此時可以寫一個針對此病毒專殺程序,修改一下cfg.ini,通過此平臺將其注入到所有進(jìn)程中,再將這些病毒模塊一一卸載。
圖8:“魔影”病毒的配置文件cfg.ini文件
趨勢展望
引導(dǎo)區(qū)病毒使用的通過磁盤訪問方式進(jìn)行掛內(nèi)存鉤子關(guān)鍵手法是長期有效的。通過對“魔影”病毒的分析,可以得知“魔影”病毒不僅可以運行在x86系統(tǒng)之上,還可以運行在x64系統(tǒng)之上。經(jīng)不完全測試,其影響的系統(tǒng)有Windows XP及其以后到目前為止的所有操作系統(tǒng),所以引導(dǎo)區(qū)病毒的兼容性是較高的。而且,由于引導(dǎo)區(qū)病毒采用了伴隨操作系統(tǒng)啟動的工作原理,擁有易獲取到系統(tǒng)的最高權(quán)限且不被殺毒軟件察覺的能力,使得引導(dǎo)區(qū)病毒的破化能力十分巨大。以上所描述的引導(dǎo)區(qū)病毒的特點說明了目前在Windows系統(tǒng)上出現(xiàn)的引導(dǎo)區(qū)病毒僅僅是開始,未來的引導(dǎo)區(qū)病毒發(fā)展將擁有廣闊的空間,所造成的破壞也將變得更為巨大,更為隱蔽。