版权归原作者所有,如有侵权,请联系我们

[科普中国]-MBR欺骗代码

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

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

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

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

Trojan.Bootlock是赛门铁克安全响应中心检测到的一个木马病毒。它会感染用户计算机的主引导记录(Master Boot Record,以下简称MBR)以阻止用户计算机正常启动,设下骗局以达到勒索受害用户的目的。

运行时,Trojan.Bootlock首先会备份当前的MBR,随后用一段恶意代码覆盖原来的MBR。感染后的MBR被检测为Boot.Bootlock。这样,当用户启动计算机时,该恶意代码就会欺骗用户,声称用户硬盘已被加密;同时提供一个服务网站,引导用户登录该网站购买付费解密信息;并警告用户,如果采用除此之外的其他任何方法来试图还原硬盘信息都会导致数据丢失,以此手段来对用户进行勒索。MBR欺骗代码就是在木马病毒攻击MBR时的恶意代码。

发展历史第一代典型:“鬼影”病毒特点:只支持XP 系统,基于国外的开源版本修改。

从MBR里,挂实模式磁盘读写中断13H,驻留高端内存,挂 NTLDR 加载,对NTOS的函数进行HOOK,在NTOS初始化过程中,加载病毒驱动,从而进行一系列操作,加载病毒驱动,注入浏览器,刷流量,篡改系统图标等。

所有病毒代码都在 MBR区域里,位于操作系统之外,格式化硬盘,重装系统均无法解决。

弱点:只支持XP系统,对自己的保护不足,很容易检测和修复,后续的变种增加了对磁盘类驱动和端口驱动的挂钩,来保护自己 。

“鬼影”系列最经典的样本是2011年的“鬼影3”。

第二代典型:TDL4系列在欧美流行,国内比较少见,技术水平高于鬼影。

支持所有的WINDOWS操作系统。甚至是64位WIN7 ,并且在 64位WIN7上支持绕过PATCHGUARD及驱动加载签名验证,如果这种技术一旦流行开来,对64位Windows系统的安全打击将是致命的。

其技术细节是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.

第三代典型:BMW病毒BMW病毒是连环感染BIOS、MBR、Windows的BIOS Rootkit。

BIOS是“Basic Input/Output System”的缩写,中文译名为“基本输入输出系统”。

BIOS是一组固化到计算机主板上ROM芯片上的程序(这里指主板BIOS),其保存有计算机启动需要的基本输入输出的程序、系统设置信息、开机上电自检程序和系统启动自举程序。可以说,BIOS是一个软硬件的结合体。它为主板部件和主要外围设备服务。从结构上说,BIOS是连在南桥芯片组上的内存芯片,保存所有的微程序和部分配置信息。剩余的信息则保存在由电池供电的CMOS芯片上1。

BIOS Rootkit具有极强威胁,包括:

能够第一时间获取系统主动权。由于固化于BIOS芯片中的程序在计算机启动时是最先执行的,因此嵌入BIOS芯片中的BIOS Rootkit自然能够第一时间获得系统主动权。

不在硬盘上留下痕迹。BIOS Rootkit主要存在于BIOS芯片中,因此传统的基于硬盘的安全检测程序将会失去作用。

能够重复感染已有操作系统或新装系统。由于BIOS Rootkit存在于BIOS芯片中,因此重装新系统对其毫无作用。

能够对抗几乎所有现有的HIPS、杀毒、审计等安全软件。现有的所有HIPS、杀毒、审计等安全软件几乎都是基于操作系统的,对于存在于硬件中的BIOS Rootkit也毫无作用。

难以检测。BIOS Rootkit一般作为BIOS设计规范中的标准ISA或PCI模块存在,因此难于判断相应模块是否为BIOS Rootkit。

难以清除。即使发现并判断出某个ISA/PCI模块为BIOS Rootkit,也只有通过硬件编程写入的方式才能清除。而硬件编程器并不是每个人都有并能熟练掌握的。

BIOS Rootkit也有着自身的弱点:

程序编写较为困难。BIOS Rootkit主要依靠汇编程序来进行编写,并且汇编只能调用特定的BIOS中断调用。比如int 19h系统引导中断可以正常调用,而int 13h磁盘中断就无法正常使用,原因是BIOS引导计算机时,磁盘设备还没有准备好。

BIOS类型较为繁杂,很难做到通用性很好的BIOS Rootkit。BIOS芯片类型以及其主板类型甚至是主板编号都对BIOS Rootkit有较大限制。加上Award、AMI、Phoenix类型的BIOS各自对硬件调用规范也不尽相同,因此通用性较好的BIOS Rootkit难于实现。

BIOS相关技术资料奇缺。BIOS相关资料一直是各大BIOS厂商严格保守的机密,因此BIOS Rootkit编写需要的许多相关电器特性、调用参数等资料都无法找到2。

涉及操作系统实/保护模式转换、系统引导等复杂问题。保护模式下的编程,特别就未开源的Windows操作系统来说,BIOS Rootkit对于操作系统流程控制的相关实现较为困难。

BIOS空间限制。BIOS芯片空间较为宝贵,一般为512K大小。除了厂家初始加入的固定程序外,可用的剩余空间往往不够放下BIOS Rootkit。

本词条内容贡献者为:

王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所