《逆向工程实验报告》由会员分享,可在线阅读,更多相关《逆向工程实验报告(10页珍藏版)》请在金锄头文库上搜索。
1、电子科技大学信息与软件工程学院逆向工程实验报告姓 名:XXX学 号:0710指导教师:何兴高、题目基于MBR的Bootkit的逆向分析二、题目梗概利用逆向工程技术,从可运行的程序系统出发,运用解密、反汇编、系统分 析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向 拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运 行方法及相关文档等。随着用户需求的复杂度越来越高,软件开发难度不断上升, 快速高效地软件开发已成为项目成败的关键之一。Bootkit是一种比较旧的技术,这个概念最早是在2005年由eEye Digital 安全公司在他们的“BootRoot项
2、目中提及的。Rootkit是一种特殊的恶意软件, 它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较 多见到的是Rootkit 一般都和木马、后门等其他恶意程序结合使用。Rootkit通 过加载特殊的驱动,修改系统内核,进而达到隐藏信息的目的rootkit并不一 定是用作获得系统root访问权限的工具。实际上,rootkit是攻击者用来隐藏 自己的踪迹和保留root访问权限的工具。通常,攻击者通过远程攻击获得root 访问权限,或者首先密码猜测或者密码强制破译的方式获得系统的访问权限。进 入系统后,如果他还没有获得root权限,再通过某些安全漏洞获得系统的root 权限。接
3、着,攻击者会在侵入的主机中安装rootkit,然后他将经常通过rootkit 的后门检查系统是否有其他的用户登录,如果只有自己,攻击者就开始着手清理 日志中的有关信息。通过rootkit的嗅探器获得其它系统的用户和密码之后,攻 击者就会利用这些信息侵入其它的系统。所有在开机时比 Windows 内核更早加 载,实现内核劫持的技术,都可以称之为Bootkit。Bootkit主要是利用其内核 准入和开机过程的隐身技术,在功能上无异于Rootkit。传统的Rootkit利用系 统启动时提升权限,而Bootkit主要被安置在外设的主引导扇区(也有放于Ntldr 文件、BIOS中的Bootkit)并驻留
4、在整个系统的启动过程。Bootkit属于Rootkit 的一种,但它却是更加高级的Rootkit,因为其存放于主引导扇区、启动文件之 类地方,在操作系统启动之前驻留内存并内核运行之前劫持内核。MBR即主引导扇区(Master Boot Record)是装有Linux系统的硬盘的第一个扇区,即C/H/S地址的0柱面0磁头1扇区。这个扇区是系统开启时必须访问的扇区,记录本磁盘相关信息以及硬盘各个分区的大小和信息。本实验旨在对基于MBR的BootKit的启动模块代码,也就是感染MBR后第1、 第61、62扇区的模块进行逆向分析。在本项目中,逆向涉及到的知识点有以下几个,分别是:保护模式下的汇编语言实
5、模式下的汇编语言BIOS中断服务多级HOOK技术计算机系统内核原理NTLDR (系统加载程序,用于装载Windows xp 2003等版本)四、涉及工具在本项目中,涉及到的工具有以下几个,分别是:IDA (主要静态分析Bootkit)、WindbgBochs (主要是用于动态调试这个Bootkit)Winhex工具五、源程序见附件六、过程及分析首先介绍一下这个样本黑盒后的症状:感染MBR (感染的具体形式为:真正 的MBR被挪到了第63个扇区,Bootkit启动模块的代码在第1、61、62个扇区。) 直接在硬盘上写入了一个驱动(这种写入不是普通的在磁盘上释放一个文件,在 系统的文件系统里面是看
6、不见这个驱动的,在实验的虚拟机上是写入了未分区的 空间中,通过Winhex工具可以查看到);生成一个DLL并运行然后10分钟后自 动关机。第1、61、62个扇区的代码中,第1个扇区的代码是实模式下的汇编语 言,第61、62个扇区是保护模式下的汇编语言,所以在用IDA分析的时候要进 行选择,至于这三个扇区的代码直接用Winhex截取出来然后进行逆向分析。这个Bootkit的启动代码主要用了三级HOOK,分别为HOOK INT13h、HOOKNTLDR的特征码,HOOK内核的特征码。下面将主要分析这三级HOOK的行为。1、第一级 HOOK(HOOK INT13h)seg000:7C35HOOK_I
7、NT13H:seg000:7C35xorbx, bxseg000:7C37moveax, bx+4Chseg000:7C3Bmoves:73h, eaxseg000:7C40movword ptr bx+4Ch, 66h ; fseg000:7C45movword ptr bx+4Eh, esseg000:7C48pushesseg000:7C49push4Dh ; Mseg000:7C4Cretf上面的代码实现了 HOOK INT13h,即HOOK 了 BIOS的磁盘中断服务。下面为HOOK INT13h后的主要代码,其中主要是搜索了 NTLDR文件的特征码,特 征码为:SignatureC
8、ode is :8B F0mov esi,eax85 F6test esi,esi74 21jz $+23h80这段代码运行后内核和BootDriver已经加载到内存中,当找到这段代码以后就 对这段特征码进行HOOK,HOOK的过程用到了 CALL NEARoffset32,即相对的 寻址方式。这个HOOK利用了 eEye BootRoot里面的技术。上面的主要代码是在 第一个扇区中的代码实现的,是实模式下执行的代码。2、第二级HOOK(HOOK NTLDR的特征码)这里主要为HOOK 了 NLTDR以后代码执行的过程,第二个HOOK的代码主要是 在第61个扇区中实现的。首先第二个HOOK会去
9、搜索NTLDR中的特征码,搜索这个特征码是为了定位到 BlLoaderBlock 这个变量,这个变量中包括了很多有用的信息,如内核和 BootDriver等等。搜索过程为下图:BSearcliKerneHnaqe:puslia cldHUandmu;CODE HREF: seg00D:0D09F405tpdi, psp* Jiih ; edi, 0FFFD00D01ali K7li ; ? ; 8SearchJLoaderElDCh_Lo)p1:; CODE 胡FF; 5Eg00D;0D0?F41B|_; seg0D0:D009Fi|23j5ca5bjnz sliort Search BI L
10、oaderSloDk Looplcup dwrd ptr ediP 4腮B3W6I)jnz sliort Search DI LoaderQlocIi Looplmu alp Mill : ? ; suspicious ; Code 售:C7 耶曲 AS 骗開朋 HOU DIMRD PTH 匡凶Ui, *;suspicious;A1 xx xx xk mxHOU EAU, BlLDadErBlock;(suspicious!SSearcI) LDop2:; CODE 训EF: SEg00D:0D05F428j图1当搜索到以后就可以定位到BlLoaderBlock,然后BlLoaderBlock
11、+0就正好为模块链表的指针。这个指针所指向的结构的一些主要成员为:+00hLIST_ENTRYmodule list links+08h10h不太了解+18hPTRimage base address+1ChPTRmodule entry point+20hDWORDsize of loaded module in memory+24hUNICODE_STRINGfull module path and file name+2ChUNICODE_STRINGmodule file name下图的代码就是利用上面介绍BlLoaderBlock的结构定位到了内核的基址。segm:00(NFnseg
12、000:00(NFCseg000:00(nFE segOOO:aaWF0 spgm:00(NFi| segm:00(NF3mu iwv iwu iwu inuEsi, ediE5i, esiE5i, esiBbK, esi+18hEbp, ebKESI*1Bh is the Kernel Inags Base Address图2当定位到内核以后,Bootkit将搜索内核的特征代码,然后对内核进行HOOK。搜索的内核代码为:6Ah 4Bhpush 4Bhpush19h6Ah 19hcallInbvSetProgressBarSubset(x,x)E8 E8 DD E6 FFpushebp+var
13、_470FF B5 90 FB FF FFcallIoInitSystem(x)E8 53 E6 FF FF当搜索到了上面的内核特征码后,就对内核的call IolnitSystem(x)进行了HOOK,这个搜索特征码的过程如下图所示:0:00ffiF4350:M09Fll36U:UUQ9F43CU:U019F43C0:0009F43E0;0009FWO:OO09FW0:0009F0:0009FO:OO09FWO:OO09FW0:00WFW OzOOWFW O:OOWFl|liB naoNFn O:MinFli5l3 Q:IOfl9F45B O:IOfl9F452 0:00WF2 0:00WF
14、2 0:00WF3 0:00WF3 0:00WF5 0:00WF5 0:00WF5 0:00WF5 0:00WF5incebxcnpduordptr ebx, 1YhRU師RDjnzshortloc_yF35cnp bpte ptr ebx+4, s?li ; ?; Jnzshortloc_9F47addebx,心;loc 9FW: ; ; CODE XRCF : scg 000:000JF Wt jcnp bjfte ptr ebx-4, DEBh ; ?; jnzshort loc_9F35leaedi, ehx+9iwujI, BFBh ; ?;iji;pici ouq);SiiwriCii*1dc_9F452: CODE HREF: seg0OO:000?F453|jEcasbjnz short loc_9F52cnp word ptr edi+4,肌0抽h ; the Kernels codE is:push 4Bhpush 19hcallInbuSetProipushebp+uar 4图3当搜索到特征码后接下就会对Kernel的特征码进行HOOK,