Bootkit病毒技术简介

来源:互联网 发布:龙虎榜数据分析软件2.3 编辑:程序博客网 时间:2024/04/30 09:28
摘要:Bootkit病毒是指寄存于磁盘主引导区,通过系统启动来进行提权的病毒(本文称其为引导区病毒)。磁盘的主引导区(英文缩写MBR,下文以MBR代指引导区),是指计算机的被设为启动磁盘的第一个扇区。

Bootkit病毒是指寄存于磁盘主引导区,通过系统启动来进行提权的病毒(本文称其为引导区病毒)。磁盘的主引导区(英文缩写MBR,下文以MBR代指引导区),是指计算机的被设为启动磁盘的第一个扇区,其中存放着由BIOS(标准输入输出服务,完成基本的系统硬件的初始化,并为操作系统提供基本硬件访问接口)初始化后的将要被加载到内存的代码和硬盘的分区信息,通常这段代码运行后会在存贮在硬盘,系统才开始启动起来。而中了感染引导区病毒的电脑不会因更新操作系统而消失,反而新安装的系统会再次被重新感染。故有些杀毒软件厂商戏称这些病毒为“鬼影”及“魔影”病毒,借此以视众人——中了此种病毒的电脑就像“有鬼上身”。引导区病毒真的有这么神秘吗?本文将采用通俗易懂的方式,从Bootkit病毒的由来开始讲述,逐步探究它们的机理,以及未来它们的发展趋势。

技术由来

感染引导区的病毒在病毒发展史上,特别是在DOS时代,是病毒常见的手法,但是随着Windows NT系统普及,感染引导区的病毒仿佛遇到了麻烦。从MBR内的代码到操作系统的启动要经历三个阶段:实模式、保护模式和内存分页模式。当Windows NT系统启动后,根据程序的功能和权限,又分为应用程序运行在的用户模式(通称为ring3,系统资源访问权限受限,代码容错能力强)和操作系统内核和系统驱动跑在内核模式(通称为ring0,所有的系统资源都可以访问,但是代码的容错能力差,如果内核程序出现错误,可能会导致系统崩溃,通常的现象是系统蓝屏)。

图1:x86处理器在保护模式下的权限级别

以上所说是操作系统启动的大体流程,而一个存在于引导区的病毒代码,如果要在操作系统完全启动后发挥效果,就需要有伴随操作系统的启动,在从最初实模式的16位代码的执行到第一个Win32程序的启动的整个过程中的获取到最高系统权限的能力。这个过程本身就非常复杂,并且微软公司提供的官方文档对于Windows系统启动过程描述的细节上通常都是避而不谈。所以对于能开发一个有效感染引导区病毒的作者的素质要求非常高,作者最少需要三个方面的能力:精通实模式程序开发,精通Windows下的应用层和内核层程序开发以及有着足够强的二进制程序逆向分析能力,能够从逆向工程的角度理解Windows启动相关模块的运行机理。设想未来制作感染引导区病毒的作者,看到本文必然会因自己的能力而感到“欣慰”。

根据我们对目前流行的感染引导区病毒样本的流程逻辑的分析,发现这种从MBR就能对Windows NT系统权限发挥作用的方法,其实源于一家名为“eEye” 的国外安全厂商的一段名为“BootRoot”公开代码。这段代码的作者是这家公司的两位研究员Derek Soeder 和Ryan Permeh,并早在2005年就已公开展示,这种方法可以称作为Bootkit(引导工具)。除此之外,2007年底有MR团队还发现了其更新版本——Stealth MBR Rootkit(即可以隐藏MBR的提权工具)。

病毒作者就是利用了这样一种安全界中使用的技术去制作并散布恶意的病毒程序。就近几年收集到病毒样本来说,比较有影响力的感染引导区的病毒,主要是早先的“鬼影”病毒和目前流行的“魔影”(卡巴斯基命名为TDL)病毒,而它们所利用的技术也是源于“eEye”公司的代码。

机理介绍

虽然“鬼影”和“魔影”出现的时间不同,实现方式也多有差异,但它们在获取执行权限上的方式都是采用了传统的挂钩子的手法,其差别就是在挂钩子的位置有所差异,过滤的内容也有所不同。关键方法就是通过在MBR中的代码,在实模式下挂接BIOS磁盘读写中断(INT 13h)函数。

图2:引导区病毒通过INT13h钩子函数对磁盘读写数据的修改

在INT 13h的处理函数中,对磁盘读到的内容加以过滤,利用字节模式匹配想要加载的文件的指定代码内容,当匹配上后,即修改返回的缓冲区内容,使其跳转到病毒体的保护模式代码,这样便使病毒从实模式的执行权限转向到了保护模式的执行权限。随着这个子钩挂的位置的不同,病毒就能够控制病毒代码在操作系统启动的不同时期是否得到执行。操作系统在启动过程中,如果需要这个系统模块,则操作系统就会通过磁盘将文件读出并加载到内存。在没有感染引导区病毒的电脑上,系统加载到内存中的文件内容就是硬盘的文件内容,但INT13被病毒挂接后,操作系统所加载的执行流程将会被病毒所修改,当操作系统执行到被病毒修改的代码时,病毒将再次得以执行。

图3:引导区病毒在INT13h中修改系统加载流程

在具体实现上,“鬼影”病毒和“魔影”病毒思路相似,都是在实模式下挂接INT 13h钩子后,对读取出的保护模式的程序安装钩子,获取保护模式下的执行权利。但“魔影”病毒随后的操作与“鬼影”病毒以及“eEye”公司提供的代码的思路则不同。准确的说,“魔影”病毒是对引导区病毒的进一步的优化,并简化了流程。与安全软件不同,病毒通常是需要通过反调试的手段来保护自己不被察觉和分析。所以“魔影”病毒在INT 13h的处理函数中,并没有采取“鬼影”病毒等采取的进一步挂钩的方式来进一步的伴随Windows启动,而是将系统中提供的COM口调试驱动kdom.dll在内存中给替换为病毒自己的驱动,此种方法对于病毒来说可谓一石二鸟,这种做法不仅通过病毒的内核态的驱动获取到了系统最高权限,而且使系统的联机调试端口失效,在一定程度上阻止了他人对其工作原理的分析。

图4:“魔影”病毒在系统启动过程中替换系统模块

当病毒再次得以执行时,通常系统已经完成了所有基本运行环境的初始化工作,此时病毒就可以利用操作系统所提供的资源进行下一步各种操作。前面所描述的Windows NT系统将程序访问的权限分成两个级别——内核级(ring0)和应用级(ring3),而常见的病毒与用户程序多跑在应用级。但是病毒为了能够得到对系统的完全控制,通常会为操作系统安装运行于内核级的驱动程序。一旦病毒程序得到操作系统内核级的运行权,此时的病毒控制能力就等同于操作系统和杀毒软件,任何以软件形式的安全软件都将完全失效,所以内核级的系统安全就成为病毒与安全软件的必争之地。对于二进制的程序而言,谁先获得对系统内核的控制,谁就能将对手排挤出这个系统,并获得对系统的完全的控制。对于感染引导区的病毒,由于能够选择自己的代码在系统加载的具体哪个阶段得以运行,自然会选择一个杀毒软件还未加载,且系统已经基本初始化完成的时候为系统安装一个运行于系统内核级的后门,借此得到对系统的完全控制。

而对于磁盘还原卡和磁盘引导区监控和备份工具而言,这些看似有效的防御引导区病毒的专业磁盘工具对于有些感染引导区的病毒也是没有任何效果的。例如“魔影”病毒就是通过直接对磁盘发送SCSI指令的方法对磁盘进行读写,这种非常底层且直接的方法最早出现在“机器狗”病毒中,并证明了这种方法可以绕开任何磁盘还原卡的拦截。除此之外,“魔影”病毒还采纳了Stealth MBR Rootkit中所提到的为磁盘设备(\Driver\Disk)挂钩子的方法来隐藏和保护储存在MBR和磁盘末尾的病毒文件。在钩子函数中,病毒会预先判断上层系统所要读的位置是否在病毒体所在扇区,如果存在的话,返回的数据将是伪造的数据,而如果系统要求的写入位置在病毒所在扇区,那么将会使调用失败。使用WinHex打开物理磁盘的方法来查看引导区是否被修改,对于已经中了“魔影”病毒的机器是无效的,因为“魔影”病毒在覆盖引导区的数据之前,保存了一份引导区镜像,当系统完全启动之后,用户读取的引导区的内容完全是病毒备份的引导区的镜像内容,而非真实的数据。

图5:“魔影”病毒对磁盘的访问控制

主引导区存在于磁盘的第一个扇区,而一个扇区的大小是512个字节。但就目前病毒的体积而言,小则1~2千字节,大则数十个千字节。一个扇区的内容不足以容纳整个病毒,所以通常引导区病毒一般分成两个部分,分别储存在MBR的引导部分和磁盘其他扇区的主体部分。以“鬼影”病毒为例,病毒的主体部分存放于引导区之后,系统未使用的0x228个扇区,其内容是经过加密的。而“魔影”病毒则在用户的磁盘末尾建立了一块独立的分区,分区所使用的文件系统也是自定义的文件系统。这个分区从磁盘分区表中是查询不到的,换句话来说,这个分区对于用户和系统而言都是隐藏的,并且其内容是经过CR4加密过的,只有病毒才能够正确解析并读取到其中保存的文件内容。由于病毒所利用的磁盘空间是与现有的文件系统重叠,虽然其处于磁盘的末尾的几个扇区,但是其内容是可以增长的,这可能会导致病毒会覆盖到用户文件系统的文件上,导致用户正常文件损坏。

图6:“魔影”病毒的文件系统结构

对于引导区病毒,无论是“鬼影”还是“魔影”,感染引导区都仅仅是为了能够将自身隐蔽地保存起来,以期在系统启动的过程中获取到系统最高权限。而其最终目的不仅如此,有效的隐藏和有力的权限都为其负载任务的执行搭建好了一个良好的平台。例如“魔影”病毒就是一个精心设计的平台,各个模块的功能都十分明确,它们的最终目的是将指定的功能模块(cmd.dll)注入到指定的进程之中,并在其中发挥作用。

图7:“魔影”病毒的功能划分

这个功能模块实际上就是一个exe文件,储存在病毒的文件系统中,其名称可以由病毒任意指定。在病毒文件系统中,还有一个文件名为cfg.ini的文件,通过这个文件可以控制将病毒文件系统中的哪个文件注入到哪个进程之中。如下图8所示,“*”的位置表示要注入的进程名称,“=”号后面所跟的就是要注入的、存储在病毒文件系统上的文件名。如果为“*”表示注入所有进程,那么病毒文件将会注入所有进程,那么此时可以写一个针对此病毒专杀程序,修改一下cfg.ini,通过此平台将其注入到所有进程中,再将这些病毒模块一一卸载。

图8:“魔影”病毒的配置文件cfg.ini文件

趋势展望

引导区病毒使用的通过磁盘访问方式进行挂内存钩子关键手法是长期有效的。通过对“魔影”病毒的分析,可以得知“魔影”病毒不仅可以运行在x86系统之上,还可以运行在x64系统之上。经不完全测试,其影响的系统有Windows XP及其以后到目前为止的所有操作系统,所以引导区病毒的兼容性是较高的。而且,由于引导区病毒采用了伴随操作系统启动的工作原理,拥有易获取到系统的最高权限且不被杀毒软件察觉的能力,使得引导区病毒的破化能力十分巨大。以上所描述的引导区病毒的特点说明了目前在Windows系统上出现的引导区病毒仅仅是开始,未来的引导区病毒发展将拥有广阔的空间,所造成的破坏也将变得更为巨大,更为隐蔽。

原文链接:http://www.rising.com.cn/newsletter/news/2011-07-21/9593.html

原创粉丝点击