狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

基于MBR逆向分析工程實驗報告

| 瀏覽次數:

  電子科技大學

 信息與軟件工程學院 逆向工程

  實

 驗

 報

 告

 姓

 名:XXX

  學

 號:201852090710

  指導教師:何興高

 一、題目 基于 MBR 的 Bootkit 的逆向分析 二、題目梗概

  利用逆向工程技術,從可運行的程序系統出發,運用解密、反匯編、系統分析、程序理解等多種計算機技術,對軟件的結構、流程、算法、代碼等進行逆向拆解和分析,推導出軟件產品的源代碼、設計原理、結構、算法、處理過程、運行方法及相關文檔等。隨著用戶需求的復雜度越來越高,軟件開發難度不斷上升,快速高效地軟件開發已成為項目成敗的關鍵之一。

  Bootkit 是一種比較舊的技術,這個概念最早是在 2005 年由 eEye Digital安全公司在他們的“BootRoot"項目中提及的。Rootkit 是一種特殊的惡意軟件,它的功能是在安裝目標上隱藏自身及指定的文件、進程和網絡鏈接等信息,比較多見到的是 Rootkit 一般都和木馬、后門等其他惡意程序結合使用。Rootkit 通過加載特殊的驅動,修改系統內核,進而達到隱藏信息的目的。rootkit 并不一定是用作獲得系統 root 訪問權限的工具。實際上,rootkit 是攻擊者用來隱藏自己的蹤跡和保留 root 訪問權限的工具。通常,攻擊者通過遠程攻擊獲得 root訪問權限,或者首先密碼猜測或者密碼強制破譯的方式獲得系統的訪問權限。進入系統后,如果他還沒有獲得 root 權限,再通過某些安全漏洞獲得系統的 root權限。接著,攻擊者會在侵入的主機中安裝 rootkit,然后他將經常通過 rootkit的后門檢查系統是否有其他的用戶登錄,如果只有自己,攻擊者就開始著手清理日志中的有關信息。通過 rootkit 的嗅探器獲得其它系統的用戶和密碼之后,攻擊者就會利用這些信息侵入其它的系統。所有在開機時比 Windows 內核更早加載,實現內核劫持的技術,都可以稱之為 Bootkit。Bootkit 主要是利用其內核準入和開機過程的隱身技術,在功能上無異于 Rootkit。傳統的 Rootkit 利用系統啟動時提升權限,而 Bootkit 主要被安置在外設的主引導扇區(也有放于 Ntldr 文件、BIOS 中的 Bootkit)并駐留在整個系統的啟動過程。Bootkit 屬于 Rootkit的一種,但它卻是更加高級的 Rootkit,因為其存放于主引導扇區、啟動文件之類地方,在操作系統啟動之前駐留內存并內核運行之前劫持內核。

  MBR 即主引導扇區(Master Boot Record)是裝有 Linux 系統的硬盤的第一個扇區,即 C/H/S 地址的 0 柱面 0 磁頭 1 扇區。這個扇區是系統開啟時必須訪問

 的扇區,記錄本磁盤相關信息以及硬盤各個分區的大小和信息。

  本實驗旨在對基于MBR的BootKit的啟動模塊代碼,也就是感染MBR后第1、第 61、62 扇區的模塊進行逆向分析。

 三、涉及知識點 在本項目中,逆向涉及到的知識點有以下幾個,分別是:

 ? 保護模式下 的 匯編語言 ? 實模式下的匯編語言 ? S BIOS 中斷服務 ? 多級 K HOOK 技術 ? 計算機系統內核原理 ? NTLDR (系統加載程序 ,用于裝載 Windows

 xp

 3 2003 等版本 )

 四、涉及工具 在本項目中,涉及到的工具有以下幾個,分別是:

 ? IDA (主要靜態分析 Bootkit )、

 ? Windbg

 ? Bochs (主要是用于動態調試這個 Bootkit )

 ? x Winhex 工具

 五、源程序 見附件 六、過程及分析

  首先介紹一下這個樣本黑盒后的癥狀:感染 MBR(感染的具體形式為:真正的 MBR 被挪到了第 63 個扇區,Bootkit 啟動模塊的代碼在第 1、61、62 個扇區。)直接在硬盤上寫入了一個驅動(這種寫入不是普通的在磁盤上釋放一個文件,在系統的文件系統里面是看不見這個驅動的,在實驗的虛擬機上是寫入了未分區的空間中,通過 Winhex 工具可以查看到);生成一個 DLL 并運行然后 10 分鐘后自動關機。第 1、61、62 個扇區的代碼中,第 1 個扇區的代碼是實模式下的匯編語言,第 61、62 個扇區是保護模式下的匯編語言,所以在用 IDA 分析的時候要進行選擇,至于這三個扇區的代碼直接用 Winhex 截取出來然后進行逆向分析。

 這個 Bootkit 的啟動代碼主要用了三級 HOOK,分別為 HOOK INT13h、HOOK NTLDR 的特征碼,HOOK 內核的特征碼。下面將主要分析這三級 HOOK 的行為。

 1 1 、第一級 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 上面的代碼實現了 HOOK INT13h ,即 HOOK 了 BIOS 的磁盤中斷服務。

 下面為 HOOK INT13h 后的主要代碼,其中主要是搜索了 NTLDR 文件的特征碼,特征碼為:

 SignatureCode is :

  8B F0

 mov esi,eax

 85 F6

 test esi,esi

 74 21

 jz $+23h

 80.............. 這段代碼運行后內核和 BootDriver 已經加載到內存中,當找到這段代碼以后就對這段特征碼進行 HOOK,HOOK 的過程用到了 CALL NEAR[offset32],即相對的尋址方式。這個 HOOK 利用了 eEye BootRoot 里面的技術。上面的主要代碼是在第一個扇區中的代碼實現的,是實模式下執行的代碼。

 2 2 、第二級 HO OK (R HOOK NTLDR 的特征碼)

  這里主要為 HOOK 了 NLTDR 以后代碼執行的過程,第二個 HOOK 的代碼主要是在第 61 個扇區中實現的。

 首先第二個 HOOK 會去搜索 NTLDR 中的特征碼,搜索這個特征碼是為了定位到BlLoaderBlock 這個變量,這個變量中包括了很多有用的信息,如內核和BootDriver 等等。搜索過程為下圖:

  圖 1 當搜索到以后就可以定位到 BlLoaderBlock,然后[[BlLoaderBlock]+0]就正好為模塊鏈表的指針。這個指針所指向的結構的一些主要成員為:

 +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 的結構定位到了內核的基址。

 圖 2 當定位到內核以后,Bootkit 將搜索內核的特征代碼,然后對內核進行 HOOK。

 搜索的內核代碼為:

 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

 當搜索到了上面的內核特征碼后,就對內核的 call IoInitSystem(x)進行了HOOK,這個搜索特征碼的過程如下圖所示:

 圖 3 當搜索到特征碼后接下就會對Kernel的特征碼進行HOOK,HOOK的特征碼為:

 call

 IoInitSystem(x)

 E8 53 E6 FF FF 修改的地方為后面四個字節的偏移量。通過這個 HOOK Bootkit 就能在內核運行的時候再次獲得執行的機會。

 下面的代碼便是對內核進行 HOOK 的操作:

 圖 4

  從上圖的代碼看出,在這個過程中 Bootkit 會將 HOOK 內核的代碼挪到內存中內核映像文件的末尾位置,大小正好為 200 個字節。

 上面便是 Bootkit 的第二個 HOOK 所完成的工作。

 3 3 、第三級 HOOK (l HOOK Kernel 的特征碼)

  當 HOOK Kernel 后的代碼運行時,主要的代碼是在第 62 個扇區中。其中的代碼有些復雜,這里只介紹主要的執行流程。這個 HOOK 代碼主要的功能實現了加載并運行一個驅動程序。

 第三級 HOOK 中首先是通過內核的輸出表定位到 ExAllocatePool 函數,搜索這個內核的函數是通過 Hash 的比較。當找到這個函數的地址以后就調用這個函數分配一片內存池,然后把下面的代碼拷貝到這份內存中并在內存池中執行Bootkit 后面的代碼。上面這個過程具體實現如下入所示:

  圖 5 接下來 Bootkit 會把調用之前被 HOOK 的 IoInitSystem(x)函數,即去 Call 這個函數,讓 IO 去初始化系統。當執行完這步操作以后,則會在內核中搜索和多函數,如 NtReadFile、NtOpenFile、NtClose 等函數,調用這些函數主要是為了能夠把驅動直接從磁盤上讀出來,然后運行。

 具體過程為如下。

 首先調用 NtOpenFile 打開磁盤,并定位那個驅動的位置。過程為:

 圖 6

  接下來調用 NtReadFile 函數,把驅動從磁盤上讀到內存中,過程為下圖所

 示:

 圖 7 當把驅動讀入到內存以后 Bootkit 還有一個將驅動進行內存對齊的操作。

 具體過程為下圖所示:

 圖 8 當對驅動進行內存對齊以后,就開始根據偏移定位到驅動的入口地址,然后運行驅動程序,具體過程下圖所示為:

  圖 9 當驅動執行完畢后,則把控制權交還給 Bootkit 的啟動代碼,Bootkit 最后做的善后處理為:把正在運行的內存池里面的代碼清零,然后把控制權交給操作系統的內核,讓內核繼續進行計算機的啟動過程。

 以上便是這個 Bootkit 樣本的啟動模塊代碼執行流程。

  最后附上一個圖,下圖為 HOOK Kernel 處留下的痕跡。

 圖 10 Call IoInitSystem(x)被替換成了 Call 806cee00,而 806cee00 地址處的代碼是 Bootkit 第三個 HOOK 的代碼。

 七、心得

  逆向工程是一個實踐性很強的學科,通過在線課程的學習以及親手上機實驗使得我在本次課程中收獲很大,通過對程序的逆向工程的分析,本人對計算機技術有了更加深刻的認識。

  感謝何興高老師在課堂上的諄諄教誨,更感謝何老師在休息時間對我們的耐心講解。

推薦訪問: 逆向 實驗 報告

【基于MBR逆向分析工程實驗報告】相關推薦

工作總結最新推薦

NEW
  • 同志們:今天這個大會,是市委全面落實黨要管黨、從嚴治黨要求的一項重大舉措,也是對縣市區委書記履行基層黨建工作第一責任人情況的一次集中檢閱,同時是對全市基層黨建工作的一次再部署、再落實的會議。前面,**

  • ***年,我認真履行領班子、帶隊伍、抓黨員、保穩定的基層黨建工作思路,以學習貫徹習近平新時代中國特色社會主義思想和黨的十九大歷次全會精神為主線,以市局基層黨建工作考核細則為落腳點,落實全面從嚴治黨主體

  • 根據會議安排,現將2022年履行抓基層黨建工作職責情況報告如下:一、履職工作特色和亮點1 突出政治建設,著力在思想認識上提高。牢固樹立抓黨建就是抓政績的理念,以“黨建工作抓引領、社區治理求突破,為民服

  • 2022年以來,在**黨委的正確領導下,堅持以習近平新時代中國特色社會主義思想為指導,深入學習宣傳貫徹黨的二十大精神,以黨建工作為統領,扎實開展夯實“三個基本”活動,以“四化四力”行動為抓手,聚力創建

  • 各位領導,同志們:根據會議安排,現就2022年度抓基層黨建工作情況匯報如下:一、主要做法及成效(一)強化政治引領。一是不斷強化理論武裝。堅持通過黨組會、中心組學習會和“三會一課”,第一時間、第一議題學

  • 2022年度抓基層黨建工作述職報告按照黨委工作部署,現將本人2022年度抓基層黨建工作情況報告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發展首要位置,積極開展

  • 2022年,是我在數計系黨總支書記這個新崗位上度過的第一個完整的工作年度。回首一年來在校黨委的正確領導下,與數計系領導班子和全體師生共同走過的日子,艱辛歷歷在目,收獲溫潤心田。作為黨總支書記,我始終牢

  • 按照考核要求,現將本人一年來,作為統戰部長履行職責、廉潔自律等方面情況報告如下:一、著眼增強政治素質,不斷深化理論學習堅持把旗幟鮮明講政治作為履職從政的第一位要求,帶領統戰系統干部堅決擁護“兩個確立”

  • **年,緊緊圍繞黨工委、管委會的決策部署,全體人員團結協作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開拓進取,認真履職盡責,圓滿完成各項工作任務。一、個人思想政治狀況檸檬文苑www bgzjy

  • 按照縣委關于開展抓基層黨建述職評議會議的有關要求,經請示縣委組織部同意,今天,我們在此召開2022年度基層黨組織書記抓基層黨建述職評議會議。1 首先,請**黨委書記,**同志述職。**黨委能夠主動研究