吉首大學(xué)信息科學(xué)與工程學(xué)院 陳頌頌 李必云
基于Windows啟動(dòng)過程的Rootkit作為目前最前沿的Rootkit技術(shù),把存放地由傳統(tǒng)的操作系統(tǒng)磁盤文件擴(kuò)展到了硬盤主引導(dǎo)扇區(qū)等位置,同時(shí)將自身的啟動(dòng)提前到了Windows系統(tǒng)內(nèi)核啟動(dòng)相同的級(jí)別,甚至還要更早的階段。這樣基于Windows啟動(dòng)過程的Rootkit就能較早的取得對計(jì)算機(jī)的控制權(quán),從而實(shí)現(xiàn)較強(qiáng)的隱藏和控制功能[1]?;贛BR的Rootkit技術(shù)是通過感染MBR實(shí)現(xiàn)的,這種Rootkit會(huì)在操作系統(tǒng)還沒運(yùn)行的時(shí)候先獲得控制權(quán),這種技術(shù)在磁盤中會(huì)留下感染痕跡,通常安全軟件也是利用這個(gè)弱點(diǎn),首先檢測MBR是否被篡改了,如果是則修復(fù)這個(gè)被篡改的MBR,當(dāng)修復(fù)成功后,下次計(jì)算機(jī)重啟過程中Rootkit失去作用。
MBR(Master Boot Record),即主引導(dǎo)記錄,它是由FDISK等磁盤分區(qū)命令寫在硬盤絕對0扇區(qū)的一段數(shù)據(jù),它由主引導(dǎo)程序、硬盤分區(qū)表及扇區(qū)結(jié)束標(biāo)志字(55AA)這3個(gè)部分組成。位于整個(gè)硬盤的0柱面0磁道1扇區(qū),共占用63個(gè)扇區(qū),但實(shí)際只使用1個(gè)扇區(qū)(512字節(jié))。在總共512字節(jié)的主引導(dǎo)記錄中,引導(dǎo)代碼占用446字節(jié),分區(qū)表占用64字節(jié),結(jié)束標(biāo)志55AA占用兩個(gè)字節(jié)。引導(dǎo)代碼的作用是讓硬盤具備可以引導(dǎo)的功能,如果引導(dǎo)代碼丟失,分區(qū)表還在,那么這個(gè)硬盤作為從盤所有分區(qū)數(shù)據(jù)都還在,只是這個(gè)硬盤自己不能夠用來啟動(dòng)進(jìn)系統(tǒng)。如果要恢復(fù)引導(dǎo)代碼,可用DOS下命令:FDISK/MBR;這個(gè)命令只是用來恢復(fù)引導(dǎo)代碼,不會(huì)引起分區(qū)改變丟失數(shù)據(jù)[2]。此外,可用工具軟件如DISKGEN、WINHEX等。但分區(qū)表如果丟失,后果就是整個(gè)硬盤一個(gè)分區(qū)沒有,就好象剛買來一個(gè)新硬盤沒有分過區(qū)一樣。是很多病毒喜歡破壞的區(qū)域。因?yàn)橹饕龑?dǎo)記錄MBR最多只能描述4個(gè)分區(qū)項(xiàng),如果想要在一個(gè)硬盤上分多于4個(gè)區(qū),就要采用擴(kuò)展MBR的辦法EBR(Extended MBR)。MBR、EBR是分區(qū)產(chǎn)生的。比如MBR和EBR各都占用63個(gè)扇區(qū),C盤占用143532個(gè)扇區(qū)等,則硬盤分區(qū)結(jié)構(gòu)如表1所示:
表1 硬盤分區(qū)結(jié)構(gòu)示例
例主引導(dǎo)記錄(部分?jǐn)?shù)據(jù))”80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00”,“80”是一個(gè)分區(qū)的激活標(biāo)志,表示系統(tǒng)可引導(dǎo);“01 01 00”表示分區(qū)開始的磁頭號(hào)為01,開始的扇區(qū)號(hào)為01,開始的柱面號(hào)為00;“0B”表示分區(qū)的系統(tǒng)類型是FAT32,其他比較常用的有04(FAT16)、07(NTFS);“FE BF FC”表示分區(qū)結(jié)束的磁頭號(hào)為254,分區(qū)結(jié)束的扇區(qū)號(hào)為63、分區(qū)結(jié)束的柱面號(hào)為764;“3F 00 00 00”表示首扇區(qū)的相對扇區(qū)號(hào)為63;“7E 86 BB 00”表示總扇區(qū)數(shù)為12289622。
Windows操作系統(tǒng)啟動(dòng)過程是一個(gè)復(fù)雜的過程,可簡單的分為預(yù)啟動(dòng)、NTLDR引導(dǎo)、內(nèi)核裝載和初始化以及用戶登錄五個(gè)階段。預(yù)啟動(dòng)首先是通電自檢,由BIOS(即基本輸入輸出系統(tǒng))完成基本硬件配置,然后讀取MBR(主引導(dǎo)記錄)檢查硬盤分區(qū)表以確定引導(dǎo)分區(qū),并將引導(dǎo)分區(qū)上的操作系統(tǒng)引導(dǎo)扇區(qū)調(diào)入內(nèi)存中執(zhí)行,此處即執(zhí)行NTLDR(操作系統(tǒng)加載器)文件。Windows2000/XP支持多重啟動(dòng),在安裝時(shí)會(huì)首先將已存在的其它操作系統(tǒng)引導(dǎo)扇區(qū)保存為BOOTSECT.DOS文件,并修改系統(tǒng)引導(dǎo)扇區(qū),以便系統(tǒng)啟動(dòng)時(shí)加載NTLDR文件,從而達(dá)到多重啟動(dòng)的目的。NTLDR引導(dǎo)過程中NTLDR把CPU從實(shí)模式轉(zhuǎn)換為32位保護(hù)模式,并讀取BOOT.INI文件,它的作用是使系統(tǒng)在啟動(dòng)過程中出現(xiàn)選擇菜單,由用戶選擇要啟動(dòng)system。如果選擇Windows2000/XP,NTLDR會(huì)繼續(xù)引導(dǎo)進(jìn)行以下過程;如果選擇為非Windows2000/XP,NTLDR則會(huì)讀取BOTSECT.DOS轉(zhuǎn)入啟動(dòng)相應(yīng)系統(tǒng)。內(nèi)核裝載和初始化由OSloader模塊裝載位于System32文件夾中Windows2000/XP的內(nèi)核NTOSKRNL.EXE。隨后,HAL(硬件抽象層)被加載,啟動(dòng)會(huì)話管理器Smss.exe創(chuàng)建系統(tǒng)環(huán)境變量和虛擬內(nèi)存頁面文件。啟動(dòng)過程的最后一個(gè)階段是開始登錄進(jìn)程。由WIN32子系統(tǒng)啟動(dòng)Winlogon.exe,并由它啟動(dòng)LSASS.EXE(LOCAL SECURITY AUTHORITY)顯示登錄對話框。
Rootkit的定義是能夠持久地、可靠地、并且無法檢測地存在于計(jì)算機(jī)系統(tǒng)上的一組程序和代碼,其強(qiáng)大的無法檢測的隱藏特性,己成為研究熱點(diǎn),并且發(fā)展迅速。Rootkit源于UNIX系統(tǒng)中的超級(jí)用戶賬號(hào),UNIX系統(tǒng)是Rootkit工具最初的攻擊目標(biāo)?,F(xiàn)在,Rootkit可用于多種操作系統(tǒng),包括UNIX、Linux和Windows。Rootkit常常被惡意代碼作者用于隱藏他們的代碼而不被發(fā)現(xiàn),它通過監(jiān)聽系統(tǒng)功能,用合法的數(shù)值代替返回的數(shù)據(jù),從而達(dá)到隱藏目的[3]。
MBR-Rootkit技術(shù)通過感染MBR的方式把Rootkit的代碼放在原來MBR的位置,然后在MBR加載到內(nèi)存的時(shí)候獲得控制權(quán),然后采用運(yùn)行時(shí)補(bǔ)丁技術(shù)修改windows啟動(dòng)過程的NTLDR和NDIS文件,通過邏輯修改函數(shù)的執(zhí)行,把原函數(shù)的執(zhí)行轉(zhuǎn)向Rootkit自己的代碼中,實(shí)現(xiàn)對該函數(shù)的劫持修改,最后在操作系統(tǒng)的啟動(dòng)過程中得以順利加載并運(yùn)行。成功繞過Windows操作系統(tǒng)安全防御,最后在NDIS驅(qū)動(dòng)中留下后門。由于WinXP系統(tǒng)的限制,一般手法改寫MBR會(huì)被系統(tǒng)判定為非法,這種繞過Winxp的安全限制,直接改寫MBR的技術(shù)一般稱之為MBR-Rootkit[4]。
MBR-Rootkit的技術(shù)特點(diǎn)有:1)在操作系統(tǒng)啟動(dòng)之前完全控制機(jī)器引導(dǎo)過程中代碼的執(zhí)行;2)Rootkit不需要文件,代碼能存在于磁盤的某些扇區(qū)中,不會(huì)被當(dāng)作普通文件刪除;3)Rootkit不需要注冊表入口,因?yàn)樗怯蒑BR加載的;4)Rootkit只要控制很少的一些扇區(qū)就能隱藏自己。
典型MBR-Rootkit包括:安裝程序、MBR加載程序、內(nèi)核修改程序、驅(qū)動(dòng)加載程序、扇區(qū)隱藏/保護(hù)程序和內(nèi)核驅(qū)動(dòng)程序。
安裝程序:rootkit的安裝程序把惡意內(nèi)核驅(qū)動(dòng)程序(244 736字節(jié))的內(nèi)容寫到磁盤的最后幾個(gè)扇區(qū)(offset:2 142 830 592),然后修改扇區(qū)0,扇區(qū)60,扇區(qū)61和扇區(qū)62。所隱藏扇區(qū)的內(nèi)容:0扇區(qū),MBR rootkit加載程序;61扇區(qū),加載程序的內(nèi)核部分;62扇區(qū),原始MBR的副本。
MBR加載程序:Rootkit重寫原始MBR代碼,并把原始MBR的副本保存在62扇區(qū)。Rootkit的作者大多數(shù)使用eEye研究者開發(fā)的MBR加載程序,只不過修改了源代碼使Rootkit用來修改windows內(nèi)核,而不是NDIS驅(qū)動(dòng)程序。
內(nèi)核修改程序:MBR rootkit加載程序勾住了13號(hào)中斷用來控制NTLDR所加載的扇區(qū)。它修改了內(nèi)核的兩處區(qū)域:第一個(gè)是NT!IoInitSystem函數(shù)調(diào)用,第二個(gè)是內(nèi)核映像的最后一頁。在開始的時(shí)候Rootkit調(diào)用原始nt!IoInitSystem函數(shù)并且加載它自己的驅(qū)動(dòng)程序。
內(nèi)核驅(qū)動(dòng)加載程序:Rootkit加載程序的主要部分打開”??PhysicalDrive0”設(shè)備,把惡意驅(qū)動(dòng)程序的內(nèi)容從磁盤里讀取出來,Rootkit用它自己的代碼把映像加載到內(nèi)存里,最后加載程序轉(zhuǎn)到入口點(diǎn)執(zhí)行。
扇區(qū)隱藏/保護(hù)程序:為了隱藏MBR和其他扇區(qū)的真實(shí)內(nèi)容,Rootkit Hook”DriverDisk”的IRP_MJ_READ請求。通常情況下,當(dāng)API讀取0扇區(qū)(也就是MBR)時(shí),Rootkit修改磁盤IRP_MJ_READ調(diào)用并返回62扇區(qū)的原始MBR副本。第二個(gè)鉤子(IRP_MJ_WRITE)保護(hù)自身不被刪除或覆蓋。
內(nèi)核驅(qū)動(dòng)程序:Rootkit的內(nèi)核驅(qū)動(dòng)程序在引導(dǎo)過程的最后一步被加載。驅(qū)動(dòng)程序是rootkit的主要部分,主要負(fù)責(zé)網(wǎng)絡(luò)通訊和隱藏被感染扇區(qū)的真實(shí)內(nèi)容。
2010年3月15日,金山安全實(shí)驗(yàn)室捕獲一種被命名為“鬼影”的電腦病毒,該病毒寄生在MBR,病毒釋放的驅(qū)動(dòng)程序,能夠破壞大多數(shù)安全工具和系統(tǒng)輔助工具。當(dāng)系統(tǒng)再次重啟時(shí),該病毒會(huì)早于操作系統(tǒng)內(nèi)核先行加載。而當(dāng)病毒成功運(yùn)行后,在進(jìn)程中、系統(tǒng)啟動(dòng)加載項(xiàng)里找不到任何異常。即使格式化重裝系統(tǒng),也無法將該病毒清除。2011年9月2日,捕獲鬼影病毒最新變種,該變種會(huì)改寫特定型號(hào)的主板BIOS芯片。若改寫成功,鬼影病毒破壞的MBR(硬盤主引導(dǎo)記錄)就被保護(hù),殺毒軟件修復(fù)受損MBR的操作會(huì)失敗。該病毒只針對WinXP系統(tǒng),尚不能破壞Vista和Win7系統(tǒng)。
鬼影病毒的主要代碼是寄生在硬盤MBR,即使受害者格式化硬盤重裝系統(tǒng),鬼影病毒也無法清除。鬼影病毒是中國內(nèi)地首個(gè)引導(dǎo)區(qū)下載者病毒,它具備“三無”特征——無文件、無系統(tǒng)啟動(dòng)項(xiàng)、無進(jìn)程模塊,而且即使用戶重格式硬盤和重裝系統(tǒng)也依然無效。
病毒作者將存放在磁盤第5扇區(qū)的病毒的主要代碼插入NTLDR文件中,這樣就解決了自身代碼在WINDOWS下的加載問題,這一思路也為真正的BIOS病毒提供了一個(gè)非常好的實(shí)現(xiàn)方法。
鬼影病毒具體行為有以下幾點(diǎn):
1)該病毒偽裝為某共享軟件,欺騙用戶下載安裝。病毒文件中包含3部分文件:A、原正常的共享軟件。B、“鬼影”病毒,修改系統(tǒng)引導(dǎo)區(qū)(mbr),結(jié)束殺軟,下載AV終結(jié)者病毒。C、捆綁IE首頁篡改器,修改用戶瀏覽器首頁,桌面添加多余的快捷方式。
2)“鬼影”病毒運(yùn)行后,會(huì)釋放2個(gè)驅(qū)動(dòng)到用戶電腦中,并加載。
3)驅(qū)動(dòng)會(huì)修改系統(tǒng)的引導(dǎo)區(qū)(mbr),并將b驅(qū)動(dòng)寫入磁盤,保證病毒是優(yōu)先于系統(tǒng)啟動(dòng),且病毒文件保存在系統(tǒng)之外。這樣進(jìn)入系統(tǒng)后,病毒加載入內(nèi)存,但找不到任何啟動(dòng)項(xiàng)、找不到病毒文件、在進(jìn)程中找不到任何進(jìn)程模塊。
4)病毒母體自刪除。
5)重啟系統(tǒng)后,存在在引導(dǎo)區(qū)中的惡意代碼會(huì)對windows系統(tǒng)的整個(gè)啟動(dòng)過程進(jìn)行監(jiān)控,發(fā)現(xiàn)系統(tǒng)加載ntldr文件時(shí),插入惡意代碼,使其加載寫入引導(dǎo)區(qū)第五個(gè)扇區(qū)的b驅(qū)動(dòng)。
6)b驅(qū)動(dòng)加載起來后,會(huì)監(jiān)視系統(tǒng)中的所有進(jìn)程模塊,若存在安全軟件的進(jìn)程,直接結(jié)束。
7)b驅(qū)動(dòng)會(huì)下載av終結(jié)者到電腦中,并運(yùn)行。
8)av終結(jié)者會(huì)修改系統(tǒng)文件,對安全軟件進(jìn)程添加大量的映像劫持,下載大量的盜號(hào)木馬病毒。進(jìn)一步盜取用戶的虛擬財(cái)產(chǎn)。
基于MBR的Rootkit技術(shù)是通過感染MBR實(shí)現(xiàn)的,這種Bootkit會(huì)在操作系統(tǒng)還沒運(yùn)行的時(shí)候先獲得控制權(quán),但這種技術(shù)的弱點(diǎn)則是在磁盤中留下了感染的痕跡,通常安全軟件也是利用了這個(gè)弱點(diǎn),首先去檢測MBR是否被篡改,如果是則會(huì)修復(fù)這個(gè)被篡改的MBR,當(dāng)修復(fù)成功以后,在下次計(jì)算機(jī)重啟的過程中MBR-Rootkit就失去作用。
檢測的方法基于MBR扇區(qū)的比較。用戶模式用Windows API函數(shù)讀取一份假的MBR內(nèi)容:
hFile=CreateFile("\
PHYSICALDRIVE0",GENERIC_READ,.
ReadFile(hFile,Buffer,512,..
掃描程序的內(nèi)核部分可以用“DriverDisk”設(shè)備的原始指針
MajorFunction[IRP_MJ_READ]=CLASSPNP!ClassReadWrite讀取真實(shí)MBR的內(nèi)容。
如果兩份MBR的內(nèi)容不一樣,機(jī)器就是被感染了。
1)使用各大電腦安全廠商推出的相應(yīng)的鬼影病毒專殺工具;
2)MBR有做過備份的,直接還原MBR備份即可;
3)MBR沒做過備份的,用XP系統(tǒng)安裝盤進(jìn)入故障恢復(fù)控制臺(tái),在命令提示符下輸入Fixmbr,然后系統(tǒng)提示是否更新MBR主引導(dǎo)記錄,選擇是,并且再輸入Fixboot,修復(fù)boot區(qū)引導(dǎo)即可;
4)DOS引導(dǎo)盤啟動(dòng),運(yùn)行磁盤分區(qū)命令fdisk/mbr重建MBR代碼;
注意:有些病毒可能會(huì)使得分區(qū)表和指針出現(xiàn)偏移,此時(shí)使用fdisk/mbr命令,指向分區(qū)表的指針會(huì)丟失,這樣的結(jié)果是,引導(dǎo)能力丟失,無法啟動(dòng)系統(tǒng)。
5)DEBUG下運(yùn)行以下代碼和命令,將MRB清零,再重新分區(qū)。
A /MOV AX,0301 /MOV BX,1000 /MOV CX,1/MOV DX,80 /INT 13 /INT 3 /F 1000 FFFF 0/G /Q
修復(fù)MBR后,還必須進(jìn)行殺毒。目前,金山毒霸可查殺傳播“鬼影”病毒的母體文件,金山網(wǎng)盾也已將傳播該病毒的惡意URL加入阻止訪問的列表。
Windows 操作系統(tǒng)存在很多的漏洞,Windows Rootkit正是利用了這些漏洞進(jìn)入操作系統(tǒng)或計(jì)算機(jī)硬件部位,所以對操作系統(tǒng)未知漏洞的發(fā)掘和對已知漏洞的保護(hù)工作值得研究。從Windows操作系統(tǒng)的引導(dǎo)與啟動(dòng)過程可以看出,不僅BIOS、MBR、NTLDR、boot.ini這些位置可以被修改以達(dá)到Bootkit的目的,還有很多諸如BootSector,Ntoskrnl.exe,Bootvid.dll,Hal.dll,Ntdetect.com等,都可以加以利用,如何有效的保護(hù)這些關(guān)鍵位置;對于Windows Bootkit檢測及防御的研究具有重大意義。
[1]侯春明,劉林.基于文件系統(tǒng)過濾驅(qū)動(dòng)的內(nèi)核Rootkit隱藏技術(shù)[J].吉首大學(xué)學(xué)報(bào)(自然科學(xué)版),2010,31(3):44-46.
[2]胡和君,范明鈺,王光衛(wèi).基于MBR的Windows bootkit隱藏技術(shù)[J].計(jì)算機(jī)應(yīng)用,2009,29(6):83-85.
[3]梁冰.Windows Rootkit實(shí)現(xiàn)及其檢測技術(shù)分析[J].電子世界,2013,9:13-15.
[4]高勇.Windows下Bootkit檢測及防御技術(shù)研究[D].成都:電子科技大學(xué),2010.