做网站我们更专业,服务我们更用心----厦门优艾网络工作室
建站热线:135~1596~4500

基于MBR的BOOTKIT分析及安全防护措施

11/14/2012 1:37:12 AM 来源:未知 作者:admin 浏览热度( 次) 字号:T|T
分享到:

作者:wowocock(360系统急救箱工程师)

传统木马病毒普遍是基于文件形式存在于机器上,尽管它们会通过各种加壳免杀技术逃避杀软检测,但随着云安全和主动防御技术的发展,恶意程序想驻留系统已经变得越来越难。在这种情况下,基于MBR的BOOTKIT在最近两年开始兴起。

基于MBR的BOOTKIT特点是无文件、无进程、无模块,可以只存在于运行的内存和位于操作系统之外的磁盘扇区空间里,即使重装系统、甚至格式化硬盘也无法清理干净。

什么是MBR呢?MBR是Master Boot Record的简写,又称为主引导扇区,位于硬盘的第一个扇区。开机BIOS自检后,所被加载的第一个扇区。

系统启动过程主要由以下几步组成(以硬盘启动为例):

  1. 开机 :-)
  2. BIOS加电自检 ( Power On Self Test – POST ) ,内存地址为 0ffff:0000;
  3. 将硬盘第一个扇区 (0头0道1扇区, 也就是MBR) 读入内存地址 0000:7c00 处;
  4. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则转去尝试其他启动介质, 如果没有其他启动介质则显示”No ROM BASIC” 然后死机;
  5. 跳转到 0000:7c00 处执行 MBR 中的程序;
  6. MBR 首先将自己复制到 0000:0600 处, 然后继续执行;
  7. 在主分区表中搜索标志为活动的分区. 如果发现没有活动分区或有不止一个活动分区,则转停止;
  8. 将活动分区的第一个扇区读入内存地址 0000:7c00 处;
  9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则显示 ”Missing Operating System” 然后停止, 或尝试软盘或其他介质启动;
  10. 跳转到 0000:7c00 处继续执行特定系统的启动程序;
  11. 启动系统。

以上步骤中,2、3、4、5是由 BIOS 的引导程序完成;6、7、8、9、10由MBR中的引导程序完成.。

基于MBR的bootkit就是将系统原始的MBR替换为自己的代码,从而达到一启动加载自身的目的。

基于MBR的BOOTKIT第一代典型:“鬼影”病毒

  • 特点:只支持XP 系统,基于国外的开源版本修改。
  • 从MBR里,挂实模式磁盘读写中断13H,驻留高端内存,挂 NTLDR 加载,对NTOS的函数进行HOOK,在NTOS初始化过程中,加载病毒驱动,从而进行一系列操作,加载病毒驱动,注入浏览器,刷流量,篡改系统图标等。
  • 所有病毒代码都在 MBR区域里,位于操作系统之外,格式化硬盘,重装系统均无法解决。
  • 弱点:只支持XP系统,对自己的保护不足,很容易检测和修复,后续的变种增加了对磁盘类驱动和端口驱动的挂钩,来保护自己 。

“鬼影”系列最经典的样本是2011年的“鬼影3”,360反病毒工程师对其技术分析如下:

  1.  首先VirusMBR复制自身到内存当中,然后跳过去复制的内存当中执行。
  2. 通过int 13h的扩展读功能把病毒写在硬盘当中的内容复制到内存里,主要复制的是加密部分,包括保护模式代码,Hello_tt.sys和加密的系统原MBR。
  3. 接下来对内存当中的加密内容进行解密,这样系统原Mbr也解密出来了。
  4. 对int 13h中断进行hook,之后把系统原Mbr加载到内存0x7c00处,返回执行系统原Mbr指令。
  5. 由于hook了int 13h中断,对于2h和42h子功能进行过滤,当系统加载ntldr文件的时候,对OsLoader.exe进行hook。
  6. 通过查找指定序列签名Hook OsLoader.exe,主要挂钩的地方是_BlLoadBootDriver@12处的下一句代码,之后OsLoader.exe执行的时候病毒会再次获得控制权。
  7. 当病毒再次获取到控制权,此时系统已近通过Startup.com切换到保护模式下了,病毒搜索OsLoader.exe的代码空间,获取_BlLoaderBlock地址,如下图(红框圈起来是搜索代码的表示,最终获取的是地址0×415921处的 A1后的4个字节,即_BlLoaderBlock地址。)
  8. 获取了_BlLoaderBlock之后,通过该结构得到ntoskrnl.exe的加载基址,从而查找到其内部的导出函数IoGetCurrentProcess,对该函数进行Inline Hook,修改函数头部5字节,之后返回OsLoader.exe继续执行。
  9. 当系统内核初始化的时候调用IoGetCurrentPorcess,这时候病毒重新获得控制权,此时病毒把自身复制到内核共享用户数据区当中(FFDF0800h处开始),然后跳转过去继续执行。
  10. 病毒对IoGetCurrentProcess的Inline Hook进行恢复,之后通过创建一个系统线程,将隐藏在操作系统之外扇区中的木马驱动对系统的beep.sys进行替换工作.这样就能保证木马驱动在操作系统完全加载之前获得执行权限了。

Beep.sys的木马驱动为隐藏在磁盘最后扇区中的木马驱动,其除了会释放出木马程序alg.exe外,还会挂钩磁盘端口驱动的startio 例程,后者为XP下所有磁盘读写操作的必经之路,在木马驱动中禁止了任何对MBR的写操作,从而使其成为当时最难修复的鬼影病毒。

基于MBR 的BOOTKIT第二代典型:TDL4系列

  • 在欧美流行,国内比较少见,技术水平高于鬼影。
  • 支持所有的WINDOWS操作系统。甚至是64位WIN7 ,并且在 64位WIN7上支持绕过PATCHGUARD及驱动加载签名验证,如果这种技术一旦流行开来,对64位Windows系统的安全打击将是致命的。
  • Mbr-ldr16-ldr32(ldr64)-drv32(drv64)

360反病毒工程师分析其技术细节如下:

MBR部分的主要功能是搜索ROOTKIT加密分区中的 LDR16模块,并将其加载进内存,将控制权交给它;

LDR16

加载运行后会HOOK int 13h挂钩硬盘的读写操作,然后会加载磁盘最后加密扇区中的原始备份MBR到内存中,并将控制权交给原始MBR去执行。而后者会加载操作系统引导模块。而系统引导模块则通过INT 13H来读取加载系统启动的文件。而每次读取操作都要经过TLD4的 钩子处理。

在钩子程序中判断是否是读取特定的文件,是则进行处理,否则直接下传。

其中要进行处理的一个文件是kdcom.dll,这个DLL和系统调试相关。Ldr16会在挂钩程序中对这个文件的特征进行判断,是否符合,是则进行处理。包括了同时针对32位和64位程序的处理。

当发现加载该文件时候,LDR16会搜索加密分区中的LDR32,或LDR64组件,根据所处的不同系统,然后加载代替内存中的kdcom.dll。从而完成了内存中的劫持。除此之外LDR16还要做的一件事就是改变内存中的 BCD 信息。后者是 WINDOWS在VISTA以后引入用来代替BOOT.INI的注册表hive文件.

TDL4会修改BCD中的BcdLibraryBoolean_EmsEnabled键,默认的标志是“16000020”,将其替换为“26000022”  BcdOsLoaderBoolean_WinPEMode键。从而启动系统的 WINPE系统模式。而在WINPE模式下,将不会进行代码完整性验证,从而让系统不会验证kdcom.dll的数字签名。而这种模式只需要挺过验证期后,即可通过将/MININT参数设置为一个无效的值而禁止该模式。

LDR32/LDR64

为了确保系统初始化的成功,LDR32/LDR64必须支持kdcom.dll的功能函数

对于32位和64位系统来说,导出函数都是一样的。但对于TDL4的LDR32/LDR64来说只需要在KdDebuggerInitialize1进行进行处理即可,对其他的函数则直接返回成功即可。通过这种简单的方法,使TDL既能在系统启动早期就进行初始化,又达到了禁止系统调试器的效果,真可谓一石二鸟的效果。

在系统初始化的早期阶段Phase1Initialization 会调用KdDebuggerInitialize1,而后会进行TDL的初始化。

而对于LDR32/LDR64的代码基本相同,因为采用同样的C代码编译的。

当调用KdDebuggerInitialize1后 ,LDR32/LDR64会进行一系列的初始化。

调用未公开的函数IoCreateDriver来为LDR32/LDR64创建一个驱动对象,因为kdcom.dll本身不作为一个驱动程序被加载。同时将初始化函数作为参数传递给IoCreateDriver。

通过调用IoRegisterPlugPlayNotification,注册一个即插即用的回调。

而当该即插即用回调被调用的时候,将会搜索TDL4加密分区中的主ROOTKIT驱动DRV32/DRV64,是32位还是64位取决于当前是哪个操作系统。而后将该主ROOTKIT驱动(DRV32/DRV64)加载进内存并进行必要的配置后,调用其驱动程序的入口点

DRV32/DRV64

一旦LDR32/LDR64被成功初始化后,ROOTKIT主功能模块将被加载,其主要功能就是隐藏自身,防止被安全软件发现。当安全软件试图访问ROOTKIT关键部分的扇区的时候返回给虚假的结果,比如访问MBR,磁盘最后区域的时候,返回的都是虚假的正常信息。

通过对ATAPI.SYS的设备对象劫持,而该种方式的挂钩将不会引发PTACH GUARD的保护机制。

除此之外,该ROOTKIT还创建了监视线程,检测其的 对象HOOK,及MBR是否被恢复,如果发现被恢复,则重新感染MBR.

基于MBR的BOOTKIT第三代典型:BMW病毒

  • BMW病毒是连环感染BIOS、MBR、Windows的BIOS Rootkit。
  • BIOS是“Basic Input/Output System”的缩写,中文译名为“基本输入输出系统”。BIOS是一组固化到计算机主板上ROM芯片上的程序(这里指主板BIOS),其保存有计算机启动需要的基本输入输出的程序、系统设置信息、开机上电自检程序和系统启动自举程序。可以说,BIOS是一个软硬件的结合体。它为主板部件和主要外围设备服务。从结构上说,BIOS是连在南桥芯片组上的内存芯片,保存所有的微程序和部分配置信息。剩余的信息则保存在由电池供电的CMOS芯片上。
  • BIOS Rootkit具有极强威胁,包括:
  1. 能够第一时间获取系统主动权。由于固化于BIOS芯片中的程序在计算机启动时是最先执行的,因此嵌入BIOS芯片中的BIOS Rootkit自然能够第一时间获得系统主动权。
  2. 不在硬盘上留下痕迹。BIOS Rootkit主要存在于BIOS芯片中,因此传统的基于硬盘的安全检测程序将会失去作用。
  3. 能够重复感染已有操作系统或新装系统。由于BIOS Rootkit存在于BIOS芯片中,因此重装新系统对其毫无作用。
  4. 能够对抗几乎所有现有的HIPS、杀毒、审计等安全软件。现有的所有HIPS、杀毒、审计等安全软件几乎都是基于操作系统的,对于存在于硬件中的BIOS Rootkit也毫无作用。
  5. 难以检测。BIOS Rootkit一般作为BIOS设计规范中的标准ISA或PCI模块存在,因此难于判断相应模块是否为BIOS Rootkit。
  6. 难以清除。即使发现并判断出某个ISA/PCI模块为BIOS Rootkit,也只有通过硬件编程写入的方式才能清除。而硬件编程器并不是每个人都有并能熟练掌握的。

而BIOS Rootkit也有着自身的弱点:

  1. 程序编写较为困难。BIOS Rootkit主要依靠汇编程序来进行编写,并且汇编只能调用特定的BIOS中断调用。比如int 19h系统引导中断可以正常调用,而int 13h磁盘中断就无法正常使用,原因是BIOS引导计算机时,磁盘设备还没有准备好。
  2. BIOS类型较为繁杂,很难做到通用性很好的BIOS Rootkit。BIOS芯片类型以及其主板类型甚至是主板编号都对BIOS Rootkit有较大限制。加上Award、AMI、Phoenix类型的BIOS各自对硬件调用规范也不尽相同,因此通用性较好的BIOS Rootkit难于实现。
  3. BIOS相关技术资料奇缺。BIOS相关资料一直是各大BIOS厂商严格保守的机密,因此BIOS Rootkit编写需要的许多相关电器特性、调用参数等资料都无法找到。
  4. 涉及操作系统实/保护模式转换、系统引导等复杂问题。保护模式下的编程,特别就未开源的Windows操作系统来说,BIOS Rootkit对于操作系统流程控制的相关实现较为困难。
  5. BIOS空间限制。BIOS芯片空间较为宝贵,一般为512K大小。除了厂家初始加入的固定程序外,可用的剩余空间往往不够放下BIOS Rootkit。

由于BIOS Rootkit种种特殊性导致其能够流行的病毒非常少见,BMW病毒也是目前唯一曝光的BIOS Rootkit了。

之所以称为“BMW”,除了病毒代码里有bmw字眼外,其病毒模块涉及了BIOS、MBR和Windows系统文件,使受害电脑无论重装系统、格式化硬盘,还是换掉硬盘都无法彻底清除病毒。该病毒也以其难以恢复而被评为2011年毒王。

360反病毒工程师对BMW病毒技术分析如下:

BMW病毒主体分为BIOS、MBR和Windows三个部分,攻击流程如下图:

一、BMW病毒BIOS部分

增加了ISA模块BIOS部分,名为HOOK.ROM,作用主要是通过检测MBR部分是否被恢复。如果发现MBR部分已被修复,就将BIOS内的病毒代码约 14个扇区写入MBR中,导致用户反复格式化、高格低格,或重新分区都无效。

Bios内的检测代码如下:

检测MBR偏移0X92处4个字节是否为int1来判断MBR是否被还原了,如果不是这个数值,则直接从BIOS里重写MBR其他部分的病毒代码到磁盘开始扇区。

二、BMW病毒MBR部分

MBR部分病毒代码执行后,会从第2个扇区开始读6个扇区的病毒代码到0X7C00处,然后跳至该处执行,然后读取第7个扇区中的备份 MBR到内存中,验证扇区的有效性;

通过验证后,读取分区表中的引导扇区所在的扇区到 0X7C00处,验证引导分区的有效性;

通过验证后,判断引导分区的类型,目前该病毒支持NTFS和 FAT32,根据不同的分区类型进行不同的处理,再经过解析文件系统找到文件所在扇区,找到相应的Windows系统文件读取PE信息判断其是否被感染过。(XP/2003系统为Winlogon.exe,Win7/Vista系统为Wininit.exe)

如果Windows系统文件已被感染,则在屏幕上显示”Find it OK!”,然后调入原始MBR,跳到原始MBR处执行;如果Windows系统文件没有被感染,则进行PE感染写扇区,之后在屏幕上显示”Find it OK!”,然后调入原始MBR,跳到原始MBR处执行。

三、BMW病毒Windows部分(Winlogon和Wininit文件执行感染)

以Winlogon.exe为例进行说明:

由于病毒修改了该文件入口点,当文件执行时首先执行加密过的病毒代码,运行时动态解码。

病毒代码解密后加载指定文件,创建病毒调用CreateThread创建线程,同时跳回原始入口点执行。

在病毒线程里先Sleep10秒,然后调用URLDownloadToFileA从黑客服务器下载一个Downloader到本地,验证文件下载成功后,调用WinExec执行,从而下载运行多种恶意程序;该病毒还会下载驱动,命名为c:\my.sys,由之前的病毒代码通过一系列服务函数来创建加载驱动,完成后该病毒线程进入无限Sleep状态,my.sys为一个磁盘类驱动disk.sys的HOOK 驱动,通过HOOK了磁盘的读写操作等,让所有对MBR的读取和写入都达不到真正的效果。

安全软件针对基于MBR的BOOTKIT防御和查杀

一般而言,具备“主动防御”功能的安全软件通过拦截RING3应用层对MBR区域的写操作,并阻止恶意驱动的加载,均可防御MBR BOOTKIT。用户在开启安全软件防御的前提下,基本不会感染BMW、鬼影等MBR BOOTKIT。

糟糕的是,MBR BOOTKIT总是和社会工程攻击手段结伴出现。比如你想用一个热门游戏外挂获得快速升级和精良装备,又或者想弄一个收费软件的“注册机”,它们经常会提醒你先关闭安全软件,MBR BOOTKIT就在此时趁虚而入,请神容易送神难。

最早期的鬼影系列,当时杀软对这种基于MBR 的BOOTKIT缺乏针对性措施,从而在进行病毒扫描的时候,没有去扫描MBR区域,所以病毒也没有对该区域做任何保护,基本上直接读取MBR,就可以获得真实的数据,然后根据内部定义的特征码,恢复成原始的MBR。

但从鬼影3以后,随着各个杀软增加对MBR区域的检测,MBR木马也进行了相应的保护,比如鬼影3的挂钩磁盘端口驱动的startio地址来拦截所有对MBR的修复,导致所有修复操作,在中毒状态下完全无效。又比如TDL4等,也进行了HOOK处理,让杀软读不到真正的MBR。当任何程序对MBR区域读取的时候,木马会返回一个虚假的MBR给杀软,欺骗其认为是正常的MBR。除此之外,该ROOTKIT还创建了监视线程,检测其对象HOOK,及MBR是否被恢复,如果发现被恢复,则重新感染MBR.

BMW木马则更进一步,加入了BIOS中的修复操作,即使在WINPE模式或DOS模式下恢复MBR,在系统重启的时候还是被隐藏于BIOS 中的木马代码所恢复,修复难度相当高。

对于已经感染MBR BOOTKIT的电脑,360系统急救箱提供了MBR检测修复工具(顽固引导木马专杀),专门用来检测和修复被感染的MBR。

这个修复操作相比清除普通顽固木马更复杂些,需要配合360系统急救箱的强力模式使用,可以查杀BMW、TDL4、鬼影系列等目前已知的MBR BOOTKIT并修复系统。

360急救箱包括32位版和原生64位版本,全面支持WINXP,VISTA WIN7,WIN8,及WIN7 64位,WIN8 64位。还支持WINPE,可以到以下地址下载相应的版本。

http://www.360.cn/jijiuxiang/index.html

对于BMW的BIOS修复,可以使用专门的BMW BIOS修复工具,修复BIOS后,再用急救箱扫描修复MBR和WINDOWS系统文件即可。

可以在这里下载BMW BIOS 的修复工具。

http://bbs.360safe.com/thread-22137-1-1.html

360系统急救箱处理BMW病毒的操作截图如下:

返回】 【关闭