電子科技大學(xué)
信息與軟件工程學(xué)院 逆向工程
實(shí)
驗(yàn)
報(bào)
告
姓
名:XXX
學(xué)
號(hào):201852090710
指導(dǎo)教師:何興高
一、題目 基于 MBR 的 Bootkit 的逆向分析 二、題目梗概
利用逆向工程技術(shù),從可運(yùn)行的程序系統(tǒng)出發(fā),運(yùn)用解密、反匯編、系統(tǒng)分析、程序理解等多種計(jì)算機(jī)技術(shù),對(duì)軟件的結(jié)構(gòu)、流程、算法、代碼等進(jìn)行逆向拆解和分析,推導(dǎo)出軟件產(chǎn)品的源代碼、設(shè)計(jì)原理、結(jié)構(gòu)、算法、處理過(guò)程、運(yùn)行方法及相關(guān)文檔等。隨著用戶(hù)需求的復(fù)雜度越來(lái)越高,軟件開(kāi)發(fā)難度不斷上升,快速高效地軟件開(kāi)發(fā)已成為項(xiàng)目成敗的關(guān)鍵之一。
Bootkit 是一種比較舊的技術(shù),這個(gè)概念最早是在 2005 年由 eEye Digital安全公司在他們的“BootRoot"項(xiàng)目中提及的。Rootkit 是一種特殊的惡意軟件,它的功能是在安裝目標(biāo)上隱藏自身及指定的文件、進(jìn)程和網(wǎng)絡(luò)鏈接等信息,比較多見(jiàn)到的是 Rootkit 一般都和木馬、后門(mén)等其他惡意程序結(jié)合使用。Rootkit 通過(guò)加載特殊的驅(qū)動(dòng),修改系統(tǒng)內(nèi)核,進(jìn)而達(dá)到隱藏信息的目的。rootkit 并不一定是用作獲得系統(tǒng) root 訪問(wèn)權(quán)限的工具。實(shí)際上,rootkit 是攻擊者用來(lái)隱藏自己的蹤跡和保留 root 訪問(wèn)權(quán)限的工具。通常,攻擊者通過(guò)遠(yuǎn)程攻擊獲得 root訪問(wèn)權(quán)限,或者首先密碼猜測(cè)或者密碼強(qiáng)制破譯的方式獲得系統(tǒng)的訪問(wèn)權(quán)限。進(jìn)入系統(tǒng)后,如果他還沒(méi)有獲得 root 權(quán)限,再通過(guò)某些安全漏洞獲得系統(tǒng)的 root權(quán)限。接著,攻擊者會(huì)在侵入的主機(jī)中安裝 rootkit,然后他將經(jīng)常通過(guò) rootkit的后門(mén)檢查系統(tǒng)是否有其他的用戶(hù)登錄,如果只有自己,攻擊者就開(kāi)始著手清理日志中的有關(guān)信息。通過(guò) rootkit 的嗅探器獲得其它系統(tǒng)的用戶(hù)和密碼之后,攻擊者就會(huì)利用這些信息侵入其它的系統(tǒng)。所有在開(kāi)機(jī)時(shí)比 Windows 內(nèi)核更早加載,實(shí)現(xiàn)內(nèi)核劫持的技術(shù),都可以稱(chēng)之為 Bootkit。Bootkit 主要是利用其內(nèi)核準(zhǔn)入和開(kāi)機(jī)過(guò)程的隱身技術(shù),在功能上無(wú)異于 Rootkit。傳統(tǒng)的 Rootkit 利用系統(tǒng)啟動(dòng)時(shí)提升權(quán)限,而 Bootkit 主要被安置在外設(shè)的主引導(dǎo)扇區(qū)(也有放于 Ntldr 文件、BIOS 中的 Bootkit)并駐留在整個(gè)系統(tǒng)的啟動(dòng)過(guò)程。Bootkit 屬于 Rootkit的一種,但它卻是更加高級(jí)的 Rootkit,因?yàn)槠浯娣庞谥饕龑?dǎo)扇區(qū)、啟動(dòng)文件之類(lèi)地方,在操作系統(tǒng)啟動(dòng)之前駐留內(nèi)存并內(nèi)核運(yùn)行之前劫持內(nèi)核。
MBR 即主引導(dǎo)扇區(qū)(Master Boot Record)是裝有 Linux 系統(tǒng)的硬盤(pán)的第一個(gè)扇區(qū),即 C/H/S 地址的 0 柱面 0 磁頭 1 扇區(qū)。這個(gè)扇區(qū)是系統(tǒng)開(kāi)啟時(shí)必須訪問(wèn)
的扇區(qū),記錄本磁盤(pán)相關(guān)信息以及硬盤(pán)各個(gè)分區(qū)的大小和信息。
本實(shí)驗(yàn)旨在對(duì)基于MBR的BootKit的啟動(dòng)模塊代碼,也就是感染MBR后第1、第 61、62 扇區(qū)的模塊進(jìn)行逆向分析。
三、涉及知識(shí)點(diǎn) 在本項(xiàng)目中,逆向涉及到的知識(shí)點(diǎn)有以下幾個(gè),分別是:
? 保護(hù)模式下 的 匯編語(yǔ)言 ? 實(shí)模式下的匯編語(yǔ)言 ? S BIOS 中斷服務(wù) ? 多級(jí) K HOOK 技術(shù) ? 計(jì)算機(jī)系統(tǒng)內(nèi)核原理 ? NTLDR (系統(tǒng)加載程序 ,用于裝載 Windows
xp
3 2003 等版本 )
四、涉及工具 在本項(xiàng)目中,涉及到的工具有以下幾個(gè),分別是:
? IDA (主要靜態(tài)分析 Bootkit )、
? Windbg
? Bochs (主要是用于動(dòng)態(tài)調(diào)試這個(gè) Bootkit )
? x Winhex 工具
五、源程序 見(jiàn)附件 六、過(guò)程及分析
首先介紹一下這個(gè)樣本黑盒后的癥狀:感染 MBR(感染的具體形式為:真正的 MBR 被挪到了第 63 個(gè)扇區(qū),Bootkit 啟動(dòng)模塊的代碼在第 1、61、62 個(gè)扇區(qū)。)直接在硬盤(pán)上寫(xiě)入了一個(gè)驅(qū)動(dòng)(這種寫(xiě)入不是普通的在磁盤(pán)上釋放一個(gè)文件,在系統(tǒng)的文件系統(tǒng)里面是看不見(jiàn)這個(gè)驅(qū)動(dòng)的,在實(shí)驗(yàn)的虛擬機(jī)上是寫(xiě)入了未分區(qū)的空間中,通過(guò) Winhex 工具可以查看到);生成一個(gè) DLL 并運(yùn)行然后 10 分鐘后自動(dòng)關(guān)機(jī)。第 1、61、62 個(gè)扇區(qū)的代碼中,第 1 個(gè)扇區(qū)的代碼是實(shí)模式下的匯編語(yǔ)言,第 61、62 個(gè)扇區(qū)是保護(hù)模式下的匯編語(yǔ)言,所以在用 IDA 分析的時(shí)候要進(jìn)行選擇,至于這三個(gè)扇區(qū)的代碼直接用 Winhex 截取出來(lái)然后進(jìn)行逆向分析。
這個(gè) Bootkit 的啟動(dòng)代碼主要用了三級(jí) HOOK,分別為 HOOK INT13h、HOOK NTLDR 的特征碼,HOOK 內(nèi)核的特征碼。下面將主要分析這三級(jí) HOOK 的行為。
1 1 、第一級(jí) HOOK ( HOOK INT13h)
seg000:7C35
@HOOK_INT13H: seg000:7C35
xor
bx, bx seg000:7C37
mov
eax, [bx+4Ch] seg000:7C3B
mov
es:73h, eax seg000:7C40
mov
word ptr [bx+4Ch], 66h ; "f" seg000:7C45
mov
word ptr [bx+4Eh], es seg000:7C48
push
es seg000:7C49
push
4Dh ; "M" seg000:7C4C
retf 上面的代碼實(shí)現(xiàn)了 HOOK INT13h ,即 HOOK 了 BIOS 的磁盤(pán)中斷服務(wù)。
下面為 HOOK INT13h 后的主要代碼,其中主要是搜索了 NTLDR 文件的特征碼,特征碼為:
SignatureCode is :
8B F0
mov esi,eax
85 F6
test esi,esi
74 21
jz $+23h
80.............. 這段代碼運(yùn)行后內(nèi)核和 BootDriver 已經(jīng)加載到內(nèi)存中,當(dāng)找到這段代碼以后就對(duì)這段特征碼進(jìn)行 HOOK,HOOK 的過(guò)程用到了 CALL NEAR[offset32],即相對(duì)的尋址方式。這個(gè) HOOK 利用了 eEye BootRoot 里面的技術(shù)。上面的主要代碼是在第一個(gè)扇區(qū)中的代碼實(shí)現(xiàn)的,是實(shí)模式下執(zhí)行的代碼。
2 2 、第二級(jí) HO OK (R HOOK NTLDR 的特征碼)
這里主要為 HOOK 了 NLTDR 以后代碼執(zhí)行的過(guò)程,第二個(gè) HOOK 的代碼主要是在第 61 個(gè)扇區(qū)中實(shí)現(xiàn)的。
首先第二個(gè) HOOK 會(huì)去搜索 NTLDR 中的特征碼,搜索這個(gè)特征碼是為了定位到BlLoaderBlock 這個(gè)變量,這個(gè)變量中包括了很多有用的信息,如內(nèi)核和BootDriver 等等。搜索過(guò)程為下圖:
圖 1 當(dāng)搜索到以后就可以定位到 BlLoaderBlock,然后[[BlLoaderBlock]+0]就正好為模塊鏈表的指針。這個(gè)指針?biāo)赶虻慕Y(jié)構(gòu)的一些主要成員為:
+00h
LIST_ENTRY
module list links +08h
[10h]
不太了解 +18h
PTR
image base address +1Ch
PTR
module entry point +20h
DWORD
size of loaded module in memory +24h
UNICODE_STRING
full module path and file name +2Ch
UNICODE_STRING
module file name 下圖的代碼就是利用上面介紹 BlLoaderBlock 的結(jié)構(gòu)定位到了內(nèi)核的基址。
圖 2 當(dāng)定位到內(nèi)核以后,Bootkit 將搜索內(nèi)核的特征代碼,然后對(duì)內(nèi)核進(jìn)行 HOOK。
搜索的內(nèi)核代碼為:
push
4Bh
6Ah 4Bh
push
19h
6Ah 19h
call
InbvSetProgressBarSubset(x,x)
E8 E8 DD E6 FF
push
[ebp+var_470]
FF B5 90 FB FF FF call
IoInitSystem(x)
E8 53 E6 FF FF
當(dāng)搜索到了上面的內(nèi)核特征碼后,就對(duì)內(nèi)核的 call IoInitSystem(x)進(jìn)行了HOOK,這個(gè)搜索特征碼的過(guò)程如下圖所示:
圖 3 當(dāng)搜索到特征碼后接下就會(huì)對(duì)Kernel的特征碼進(jìn)行HOOK,HOOK的特征碼為:
call
IoInitSystem(x)
E8 53 E6 FF FF 修改的地方為后面四個(gè)字節(jié)的偏移量。通過(guò)這個(gè) HOOK Bootkit 就能在內(nèi)核運(yùn)行的時(shí)候再次獲得執(zhí)行的機(jī)會(huì)。
下面的代碼便是對(duì)內(nèi)核進(jìn)行 HOOK 的操作:
圖 4
從上圖的代碼看出,在這個(gè)過(guò)程中 Bootkit 會(huì)將 HOOK 內(nèi)核的代碼挪到內(nèi)存中內(nèi)核映像文件的末尾位置,大小正好為 200 個(gè)字節(jié)。
上面便是 Bootkit 的第二個(gè) HOOK 所完成的工作。
3 3 、第三級(jí) HOOK (l HOOK Kernel 的特征碼)
當(dāng) HOOK Kernel 后的代碼運(yùn)行時(shí),主要的代碼是在第 62 個(gè)扇區(qū)中。其中的代碼有些復(fù)雜,這里只介紹主要的執(zhí)行流程。這個(gè) HOOK 代碼主要的功能實(shí)現(xiàn)了加載并運(yùn)行一個(gè)驅(qū)動(dòng)程序。
第三級(jí) HOOK 中首先是通過(guò)內(nèi)核的輸出表定位到 ExAllocatePool 函數(shù),搜索這個(gè)內(nèi)核的函數(shù)是通過(guò) Hash 的比較。當(dāng)找到這個(gè)函數(shù)的地址以后就調(diào)用這個(gè)函數(shù)分配一片內(nèi)存池,然后把下面的代碼拷貝到這份內(nèi)存中并在內(nèi)存池中執(zhí)行Bootkit 后面的代碼。上面這個(gè)過(guò)程具體實(shí)現(xiàn)如下入所示:
圖 5 接下來(lái) Bootkit 會(huì)把調(diào)用之前被 HOOK 的 IoInitSystem(x)函數(shù),即去 Call 這個(gè)函數(shù),讓 IO 去初始化系統(tǒng)。當(dāng)執(zhí)行完這步操作以后,則會(huì)在內(nèi)核中搜索和多函數(shù),如 NtReadFile、NtOpenFile、NtClose 等函數(shù),調(diào)用這些函數(shù)主要是為了能夠把驅(qū)動(dòng)直接從磁盤(pán)上讀出來(lái),然后運(yùn)行。
具體過(guò)程為如下。
首先調(diào)用 NtOpenFile 打開(kāi)磁盤(pán),并定位那個(gè)驅(qū)動(dòng)的位置。過(guò)程為:
圖 6
接下來(lái)調(diào)用 NtReadFile 函數(shù),把驅(qū)動(dòng)從磁盤(pán)上讀到內(nèi)存中,過(guò)程為下圖所
示:
圖 7 當(dāng)把驅(qū)動(dòng)讀入到內(nèi)存以后 Bootkit 還有一個(gè)將驅(qū)動(dòng)進(jìn)行內(nèi)存對(duì)齊的操作。
具體過(guò)程為下圖所示:
圖 8 當(dāng)對(duì)驅(qū)動(dòng)進(jìn)行內(nèi)存對(duì)齊以后,就開(kāi)始根據(jù)偏移定位到驅(qū)動(dòng)的入口地址,然后運(yùn)行驅(qū)動(dòng)程序,具體過(guò)程下圖所示為:
圖 9 當(dāng)驅(qū)動(dòng)執(zhí)行完畢后,則把控制權(quán)交還給 Bootkit 的啟動(dòng)代碼,Bootkit 最后做的善后處理為:把正在運(yùn)行的內(nèi)存池里面的代碼清零,然后把控制權(quán)交給操作系統(tǒng)的內(nèi)核,讓內(nèi)核繼續(xù)進(jìn)行計(jì)算機(jī)的啟動(dòng)過(guò)程。
以上便是這個(gè) Bootkit 樣本的啟動(dòng)模塊代碼執(zhí)行流程。
最后附上一個(gè)圖,下圖為 HOOK Kernel 處留下的痕跡。
圖 10 Call IoInitSystem(x)被替換成了 Call 806cee00,而 806cee00 地址處的代碼是 Bootkit 第三個(gè) HOOK 的代碼。
七、心得
逆向工程是一個(gè)實(shí)踐性很強(qiáng)的學(xué)科,通過(guò)在線(xiàn)課程的學(xué)習(xí)以及親手上機(jī)實(shí)驗(yàn)使得我在本次課程中收獲很大,通過(guò)對(duì)程序的逆向工程的分析,本人對(duì)計(jì)算機(jī)技術(shù)有了更加深刻的認(rèn)識(shí)。
感謝何興高老師在課堂上的諄諄教誨,更感謝何老師在休息時(shí)間對(duì)我們的耐心講解。
推薦訪問(wèn): 逆向 實(shí)驗(yàn) 報(bào)告同志們:今天這個(gè)大會(huì),是市委全面落實(shí)黨要管黨、從嚴(yán)治黨要求的一項(xiàng)重大舉措,也是對(duì)縣市區(qū)委書(shū)記履行基層黨建工作第一責(zé)任人情況的一次集中檢閱,同時(shí)是對(duì)全市基層黨建工作的一次再部署、再落實(shí)的會(huì)議。前面,**
***年,我認(rèn)真履行領(lǐng)班子、帶隊(duì)伍、抓黨員、保穩(wěn)定的基層黨建工作思路,以學(xué)習(xí)貫徹習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想和黨的十九大歷次全會(huì)精神為主線(xiàn),以市局基層黨建工作考核細(xì)則為落腳點(diǎn),落實(shí)全面從嚴(yán)治黨主體
根據(jù)會(huì)議安排,現(xiàn)將2022年履行抓基層黨建工作職責(zé)情況報(bào)告如下:一、履職工作特色和亮點(diǎn)1 突出政治建設(shè),著力在思想認(rèn)識(shí)上提高。牢固樹(shù)立抓黨建就是抓政績(jī)的理念,以“黨建工作抓引領(lǐng)、社區(qū)治理求突破,為民服
2022年以來(lái),在**黨委的正確領(lǐng)導(dǎo)下,堅(jiān)持以習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想為指導(dǎo),深入學(xué)習(xí)宣傳貫徹黨的二十大精神,以黨建工作為統(tǒng)領(lǐng),扎實(shí)開(kāi)展夯實(shí)“三個(gè)基本”活動(dòng),以“四化四力”行動(dòng)為抓手,聚力創(chuàng)建
各位領(lǐng)導(dǎo),同志們:根據(jù)會(huì)議安排,現(xiàn)就2022年度抓基層黨建工作情況匯報(bào)如下:一、主要做法及成效(一)強(qiáng)化政治引領(lǐng)。一是不斷強(qiáng)化理論武裝。堅(jiān)持通過(guò)黨組會(huì)、中心組學(xué)習(xí)會(huì)和“三會(huì)一課”,第一時(shí)間、第一議題學(xué)
2022年度抓基層黨建工作述職報(bào)告按照黨委工作部署,現(xiàn)將本人2022年度抓基層黨建工作情況報(bào)告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發(fā)展首要位置,積極開(kāi)展
2022年,是我在數(shù)計(jì)系黨總支書(shū)記這個(gè)新崗位上度過(guò)的第一個(gè)完整的工作年度。回首一年來(lái)在校黨委的正確領(lǐng)導(dǎo)下,與數(shù)計(jì)系領(lǐng)導(dǎo)班子和全體師生共同走過(guò)的日子,艱辛歷歷在目,收獲溫潤(rùn)心田。作為黨總支書(shū)記,我始終牢
按照考核要求,現(xiàn)將本人一年來(lái),作為統(tǒng)戰(zhàn)部長(zhǎng)履行職責(zé)、廉潔自律等方面情況報(bào)告如下:一、著眼增強(qiáng)政治素質(zhì),不斷深化理論學(xué)習(xí)堅(jiān)持把旗幟鮮明講政治作為履職從政的第一位要求,帶領(lǐng)統(tǒng)戰(zhàn)系統(tǒng)干部堅(jiān)決擁護(hù)“兩個(gè)確立”
**年,緊緊圍繞黨工委、管委會(huì)的決策部署,全體人員團(tuán)結(jié)協(xié)作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開(kāi)拓進(jìn)取,認(rèn)真履職盡責(zé),圓滿(mǎn)完成各項(xiàng)工作任務(wù)。一、個(gè)人思想政治狀況檸檬文苑www bgzjy
按照縣委關(guān)于開(kāi)展抓基層黨建述職評(píng)議會(huì)議的有關(guān)要求,經(jīng)請(qǐng)示縣委組織部同意,今天,我們?cè)诖苏匍_(kāi)2022年度基層黨組織書(shū)記抓基層黨建述職評(píng)議會(huì)議。1 首先,請(qǐng)**黨委書(shū)記,**同志述職。**黨委能夠主動(dòng)研究