吉首大学信息科学与工程学院 陈颂颂 李必云
基于Windows启动过程的Rootkit作为目前最前沿的Rootkit技术,把存放地由传统的操作系统磁盘文件扩展到了硬盘主引导扇区等位置,同时将自身的启动提前到了Windows系统内核启动相同的级别,甚至还要更早的阶段。这样基于Windows启动过程的Rootkit就能较早的取得对计算机的控制权,从而实现较强的隐藏和控制功能[1]。基于MBR的Rootkit技术是通过感染MBR实现的,这种Rootkit会在操作系统还没运行的时候先获得控制权,这种技术在磁盘中会留下感染痕迹,通常安全软件也是利用这个弱点,首先检测MBR是否被篡改了,如果是则修复这个被篡改的MBR,当修复成功后,下次计算机重启过程中Rootkit失去作用。
MBR(Master Boot Record),即主引导记录,它是由FDISK等磁盘分区命令写在硬盘绝对0扇区的一段数据,它由主引导程序、硬盘分区表及扇区结束标志字(55AA)这3个部分组成。位于整个硬盘的0柱面0磁道1扇区,共占用63个扇区,但实际只使用1个扇区(512字节)。在总共512字节的主引导记录中,引导代码占用446字节,分区表占用64字节,结束标志55AA占用两个字节。引导代码的作用是让硬盘具备可以引导的功能,如果引导代码丢失,分区表还在,那么这个硬盘作为从盘所有分区数据都还在,只是这个硬盘自己不能够用来启动进系统。如果要恢复引导代码,可用DOS下命令:FDISK/MBR;这个命令只是用来恢复引导代码,不会引起分区改变丢失数据[2]。此外,可用工具软件如DISKGEN、WINHEX等。但分区表如果丢失,后果就是整个硬盘一个分区没有,就好象刚买来一个新硬盘没有分过区一样。是很多病毒喜欢破坏的区域。因为主引导记录MBR最多只能描述4个分区项,如果想要在一个硬盘上分多于4个区,就要采用扩展MBR的办法EBR(Extended MBR)。MBR、EBR是分区产生的。比如MBR和EBR各都占用63个扇区,C盘占用143532个扇区等,则硬盘分区结构如表1所示:
表1 硬盘分区结构示例
例主引导记录(部分数据)”80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00”,“80”是一个分区的激活标志,表示系统可引导;“01 01 00”表示分区开始的磁头号为01,开始的扇区号为01,开始的柱面号为00;“0B”表示分区的系统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS);“FE BF FC”表示分区结束的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764;“3F 00 00 00”表示首扇区的相对扇区号为63;“7E 86 BB 00”表示总扇区数为12289622。
Windows操作系统启动过程是一个复杂的过程,可简单的分为预启动、NTLDR引导、内核装载和初始化以及用户登录五个阶段。预启动首先是通电自检,由BIOS(即基本输入输出系统)完成基本硬件配置,然后读取MBR(主引导记录)检查硬盘分区表以确定引导分区,并将引导分区上的操作系统引导扇区调入内存中执行,此处即执行NTLDR(操作系统加载器)文件。Windows2000/XP支持多重启动,在安装时会首先将已存在的其它操作系统引导扇区保存为BOOTSECT.DOS文件,并修改系统引导扇区,以便系统启动时加载NTLDR文件,从而达到多重启动的目的。NTLDR引导过程中NTLDR把CPU从实模式转换为32位保护模式,并读取BOOT.INI文件,它的作用是使系统在启动过程中出现选择菜单,由用户选择要启动system。如果选择Windows2000/XP,NTLDR会继续引导进行以下过程;如果选择为非Windows2000/XP,NTLDR则会读取BOTSECT.DOS转入启动相应系统。内核装载和初始化由OSloader模块装载位于System32文件夹中Windows2000/XP的内核NTOSKRNL.EXE。随后,HAL(硬件抽象层)被加载,启动会话管理器Smss.exe创建系统环境变量和虚拟内存页面文件。启动过程的最后一个阶段是开始登录进程。由WIN32子系统启动Winlogon.exe,并由它启动LSASS.EXE(LOCAL SECURITY AUTHORITY)显示登录对话框。
Rootkit的定义是能够持久地、可靠地、并且无法检测地存在于计算机系统上的一组程序和代码,其强大的无法检测的隐藏特性,己成为研究热点,并且发展迅速。Rootkit源于UNIX系统中的超级用户账号,UNIX系统是Rootkit工具最初的攻击目标。现在,Rootkit可用于多种操作系统,包括UNIX、Linux和Windows。Rootkit常常被恶意代码作者用于隐藏他们的代码而不被发现,它通过监听系统功能,用合法的数值代替返回的数据,从而达到隐藏目的[3]。
MBR-Rootkit技术通过感染MBR的方式把Rootkit的代码放在原来MBR的位置,然后在MBR加载到内存的时候获得控制权,然后采用运行时补丁技术修改windows启动过程的NTLDR和NDIS文件,通过逻辑修改函数的执行,把原函数的执行转向Rootkit自己的代码中,实现对该函数的劫持修改,最后在操作系统的启动过程中得以顺利加载并运行。成功绕过Windows操作系统安全防御,最后在NDIS驱动中留下后门。由于WinXP系统的限制,一般手法改写MBR会被系统判定为非法,这种绕过Winxp的安全限制,直接改写MBR的技术一般称之为MBR-Rootkit[4]。
MBR-Rootkit的技术特点有:1)在操作系统启动之前完全控制机器引导过程中代码的执行;2)Rootkit不需要文件,代码能存在于磁盘的某些扇区中,不会被当作普通文件删除;3)Rootkit不需要注册表入口,因为它是由MBR加载的;4)Rootkit只要控制很少的一些扇区就能隐藏自己。
典型MBR-Rootkit包括:安装程序、MBR加载程序、内核修改程序、驱动加载程序、扇区隐藏/保护程序和内核驱动程序。
安装程序:rootkit的安装程序把恶意内核驱动程序(244 736字节)的内容写到磁盘的最后几个扇区(offset:2 142 830 592),然后修改扇区0,扇区60,扇区61和扇区62。所隐藏扇区的内容:0扇区,MBR rootkit加载程序;61扇区,加载程序的内核部分;62扇区,原始MBR的副本。
MBR加载程序:Rootkit重写原始MBR代码,并把原始MBR的副本保存在62扇区。Rootkit的作者大多数使用eEye研究者开发的MBR加载程序,只不过修改了源代码使Rootkit用来修改windows内核,而不是NDIS驱动程序。
内核修改程序:MBR rootkit加载程序勾住了13号中断用来控制NTLDR所加载的扇区。它修改了内核的两处区域:第一个是NT!IoInitSystem函数调用,第二个是内核映像的最后一页。在开始的时候Rootkit调用原始nt!IoInitSystem函数并且加载它自己的驱动程序。
内核驱动加载程序:Rootkit加载程序的主要部分打开”??PhysicalDrive0”设备,把恶意驱动程序的内容从磁盘里读取出来,Rootkit用它自己的代码把映像加载到内存里,最后加载程序转到入口点执行。
扇区隐藏/保护程序:为了隐藏MBR和其他扇区的真实内容,Rootkit Hook”DriverDisk”的IRP_MJ_READ请求。通常情况下,当API读取0扇区(也就是MBR)时,Rootkit修改磁盘IRP_MJ_READ调用并返回62扇区的原始MBR副本。第二个钩子(IRP_MJ_WRITE)保护自身不被删除或覆盖。
内核驱动程序:Rootkit的内核驱动程序在引导过程的最后一步被加载。驱动程序是rootkit的主要部分,主要负责网络通讯和隐藏被感染扇区的真实内容。
2010年3月15日,金山安全实验室捕获一种被命名为“鬼影”的电脑病毒,该病毒寄生在MBR,病毒释放的驱动程序,能够破坏大多数安全工具和系统辅助工具。当系统再次重启时,该病毒会早于操作系统内核先行加载。而当病毒成功运行后,在进程中、系统启动加载项里找不到任何异常。即使格式化重装系统,也无法将该病毒清除。2011年9月2日,捕获鬼影病毒最新变种,该变种会改写特定型号的主板BIOS芯片。若改写成功,鬼影病毒破坏的MBR(硬盘主引导记录)就被保护,杀毒软件修复受损MBR的操作会失败。该病毒只针对WinXP系统,尚不能破坏Vista和Win7系统。
鬼影病毒的主要代码是寄生在硬盘MBR,即使受害者格式化硬盘重装系统,鬼影病毒也无法清除。鬼影病毒是中国内地首个引导区下载者病毒,它具备“三无”特征——无文件、无系统启动项、无进程模块,而且即使用户重格式硬盘和重装系统也依然无效。
病毒作者将存放在磁盘第5扇区的病毒的主要代码插入NTLDR文件中,这样就解决了自身代码在WINDOWS下的加载问题,这一思路也为真正的BIOS病毒提供了一个非常好的实现方法。
鬼影病毒具体行为有以下几点:
1)该病毒伪装为某共享软件,欺骗用户下载安装。病毒文件中包含3部分文件:A、原正常的共享软件。B、“鬼影”病毒,修改系统引导区(mbr),结束杀软,下载AV终结者病毒。C、捆绑IE首页篡改器,修改用户浏览器首页,桌面添加多余的快捷方式。
2)“鬼影”病毒运行后,会释放2个驱动到用户电脑中,并加载。
3)驱动会修改系统的引导区(mbr),并将b驱动写入磁盘,保证病毒是优先于系统启动,且病毒文件保存在系统之外。这样进入系统后,病毒加载入内存,但找不到任何启动项、找不到病毒文件、在进程中找不到任何进程模块。
4)病毒母体自删除。
5)重启系统后,存在在引导区中的恶意代码会对windows系统的整个启动过程进行监控,发现系统加载ntldr文件时,插入恶意代码,使其加载写入引导区第五个扇区的b驱动。
6)b驱动加载起来后,会监视系统中的所有进程模块,若存在安全软件的进程,直接结束。
7)b驱动会下载av终结者到电脑中,并运行。
8)av终结者会修改系统文件,对安全软件进程添加大量的映像劫持,下载大量的盗号木马病毒。进一步盗取用户的虚拟财产。
基于MBR的Rootkit技术是通过感染MBR实现的,这种Bootkit会在操作系统还没运行的时候先获得控制权,但这种技术的弱点则是在磁盘中留下了感染的痕迹,通常安全软件也是利用了这个弱点,首先去检测MBR是否被篡改,如果是则会修复这个被篡改的MBR,当修复成功以后,在下次计算机重启的过程中MBR-Rootkit就失去作用。
检测的方法基于MBR扇区的比较。用户模式用Windows API函数读取一份假的MBR内容:
hFile=CreateFile("\
PHYSICALDRIVE0",GENERIC_READ,.
ReadFile(hFile,Buffer,512,..
扫描程序的内核部分可以用“DriverDisk”设备的原始指针
MajorFunction[IRP_MJ_READ]=CLASSPNP!ClassReadWrite读取真实MBR的内容。
如果两份MBR的内容不一样,机器就是被感染了。
1)使用各大电脑安全厂商推出的相应的鬼影病毒专杀工具;
2)MBR有做过备份的,直接还原MBR备份即可;
3)MBR没做过备份的,用XP系统安装盘进入故障恢复控制台,在命令提示符下输入Fixmbr,然后系统提示是否更新MBR主引导记录,选择是,并且再输入Fixboot,修复boot区引导即可;
4)DOS引导盘启动,运行磁盘分区命令fdisk/mbr重建MBR代码;
注意:有些病毒可能会使得分区表和指针出现偏移,此时使用fdisk/mbr命令,指向分区表的指针会丢失,这样的结果是,引导能力丢失,无法启动系统。
5)DEBUG下运行以下代码和命令,将MRB清零,再重新分区。
A /MOV AX,0301 /MOV BX,1000 /MOV CX,1/MOV DX,80 /INT 13 /INT 3 /F 1000 FFFF 0/G /Q
修复MBR后,还必须进行杀毒。目前,金山毒霸可查杀传播“鬼影”病毒的母体文件,金山网盾也已将传播该病毒的恶意URL加入阻止访问的列表。
Windows 操作系统存在很多的漏洞,Windows Rootkit正是利用了这些漏洞进入操作系统或计算机硬件部位,所以对操作系统未知漏洞的发掘和对已知漏洞的保护工作值得研究。从Windows操作系统的引导与启动过程可以看出,不仅BIOS、MBR、NTLDR、boot.ini这些位置可以被修改以达到Bootkit的目的,还有很多诸如BootSector,Ntoskrnl.exe,Bootvid.dll,Hal.dll,Ntdetect.com等,都可以加以利用,如何有效的保护这些关键位置;对于Windows Bootkit检测及防御的研究具有重大意义。
[1]侯春明,刘林.基于文件系统过滤驱动的内核Rootkit隐藏技术[J].吉首大学学报(自然科学版),2010,31(3):44-46.
[2]胡和君,范明钰,王光卫.基于MBR的Windows bootkit隐藏技术[J].计算机应用,2009,29(6):83-85.
[3]梁冰.Windows Rootkit实现及其检测技术分析[J].电子世界,2013,9:13-15.
[4]高勇.Windows下Bootkit检测及防御技术研究[D].成都:电子科技大学,2010.