Bootkit是更高级的Rootkit,该概念最早于2005年被eEye Digital公司在他们的“BootRoot"项目中提及,该项目通过感染MBR(磁盘主引记录)的方式,实现绕过内核检查和启动隐身。可以认为,所有在开机时比Windows内核更早加载,实现内核劫持的技术,都可以称之为Bootkit,例如后来的BIOS Rootkit , VBootkit,SMM Rootkit等。
以上摘自MJ0011《高级Bootkit——tophet》
至于杀毒软件能不能对付,我想应该分为两部分,一是能不能防御,即系统已有杀毒软件的情况下,能不能避免病毒成功写入Bootkit,二是能不能查杀,即Bootkit成功写入并执行之后,再装杀毒软件的话,杀毒软件能不能查到这个Bootkit并清除。
下面以卡巴斯基在
Bootkit: the challenge of 2008中提到的这个MBR Rootkit为例,来简要说明这两方面的问题:
一、防御
(1)可以看到,这个MBR Rootkit的进入途径,与一般的网页挂马并没有本质区别:
1. 病毒作者通过黑客技术入侵某些网站,将网站中正常的超链接改为指向恶意网页,通过诱使用户点击链接的方式,激活恶意网页。
2. 恶意网页利用某些已公开或未公开的系统或软件漏洞,使其中的恶意代码得到远程执行机会,自动使得用户的浏览器(或其他应用程序)将病毒原始文件下载到本机并执行。
因此,我们通过网页防挂马保护措施,可以从源头上堵死这条路,从而使得病毒难以进入本地系统。类似的还有U盘病毒防御等等。
(2)这个病毒释放文件、连接网络并感染MBR的方式,也并不新颖:
3. 病毒原始程序通过联网下载或直接从自身资源中释放出可感染MBR的文件。
如果病毒是通过联网下载程序来实现进一步破坏的,那么防火墙在这个阶段可以拦截其操作。
4. 病毒通过Ring3下调用CreateFile得到盘符的驱动对象句柄,调用WriteFile等方法写入磁盘扇区的MBR(这一部分卡巴斯基没有说明得很清楚,但是从它给出的CreateFile调用代码来看,应该是这个思路),实现Bootkit植入。
这个思路早已是公开的了,现在具有主动防御的杀毒软件,大多有拦截和监视这个操作,即报警“底层磁盘读写”,在这里我们可以拦截并拒绝,使其写入不成功。
注意这里是最关键的一步,如果写入MBR不成功,意味着Bootkit植入不成功,那也不存在Bootkit级的危害了。
5. 以上动作成功后,病毒重启系统(相信调用的是ExitWindowsEx或直接NtShutdownSystem)。
这里同样一般有主动防御的杀毒软件在技术上都可以拦截关机和重启操作。当然,一般情况下杀毒软件拦截并阻止的几率并不高。
注意这里是阻止Bootkit被执行的最后一个屏障,如果重启成功,则Bootkit将会比整个操作系统更早被执行(系统上电后被BIOS程序调用)。
二、查杀
如果以上步骤都没有被成功拦截,则病毒Bootkit将被执行。在这之后,仍然可能可以查杀,但相对来说,困难就大多了,因为杀毒软件将面对可能被Bootkit预先修改了的系统。
6. 重启后,系统上电,BIOS程序读取MBR将控制权交予主引导程序。该Bootkit从而获得执行机会。这样该Bootkit可以完成一些操作(如HOOK BIOS中断,也就是一些还原软件的做法),然后自己调用磁盘扇区引导程序,接着是Ntldr,Ntldr启动ntoskrnl.exe和其他Boot方式启动的驱动程序。注意这个过程中Bootkit可以对Ntldr等的代码进行HOOK,以获得后续继续执行的机会。
注意这里才是一个Bootkit的技术中最底层的环节,是其之所以成为Bootkit的关键。
以上这一步,杀毒软件无能为力。因为杀毒软件的最底层组件是其驱动,这些驱动以Boot方式加载,它们将和ntoskrnl.exe一道被Ntldr中的OS Loader所加载。因此在Bootkit加载的时候,杀毒软件驱动未加载,此时不能对其行为进行干预(当然如果有朝一日杀毒软件也搞Bootkit了,那另当别论)。
另外,在杀毒软件的Boot驱动加载过程中,Bootkit通过HOOK掉Ntldr及ntoskrnl.exe的函数,可以对这个过程进行干预。包括直接废掉杀毒软件的驱动。这样可以将杀毒软件连根拔起。这个部分就是杀毒软件与Bootkit对抗过程中,杀毒软件最“任人宰割”的一环。如果杀毒软件在这个时候被干掉,那么以后的部分杀毒软件就不会再出现了。
7. 杀毒软件的Boot驱动加载了,这个系统的其他部分也正常加载了,正常进入了系统,用户可以使用了。
到了这一步,杀毒软件如何检测和清除Bootkit?
这个要看各种情况分析了。
对于这个MBR Bootkit,首要的检测手段是扫描MBR,确认MBR是否被修改。另外是扫描ntoskrnl.exe即系统内核,检测内核文件是否被HOOK。以及检测其他的驱动对象,比如网络协议、文件系统等有关的驱动,其函数有没有被HOOK。
到了这个层面,是所谓Ring0对抗,那就是endless war了。是否能检测并清除Bootkit,取决于Bootkit做得多强大,以及杀毒软件的检测手段做得多底层。但不管怎么样,这时Bootkit至少已处在和杀毒软件同等的权限地位,因此杀毒软件在技术上不具有绝对的优势。
从以上的过程可以看到,当一个具有Bootkit组件的病毒尚未真正植入Bootkit成功时,杀毒软件是有不少机会可以拦截的。而当Bootkit真正被植入并执行,那么杀毒软件则难以保证百分之百地胜出。
Bootkit来说,后面获得被加载机会之后怎么操作,是考验底层技术的部分。但是这部分其实只要有相应扎实的基础知识,是可以“一通百通”的。当然,越底层,越受到兼容性的限制。比如BIOS Rootkit据说就必须考虑不同品牌和版本的主板BIOS等等。
然而前面怎么获得加载机会,则是与杀毒软件斗智斗勇的关键。因为那个时候你还没有Bootkit的权限,在Ring3的情况下必须绕过杀毒软件的监控来实现写入Bootkit。这一段就是各种未公开的“内部技术”的战场了。这样的技术五花八门,比如利用系统的权限提升漏洞、利用未公开的函数和调用方法等等。具体的如无驱动读写内核内存、Ring3下绕过杀毒软件的监控写磁盘穿还原、Ring3下直接I/O操作端口等等。简单的来说,就是杀毒软件厂商和系统底层工作者没有想到的,奇异的实现方式,如果病毒作者首先想到了,那么他们就得到了先机。如果杀毒软件和微软未雨绸缪,或者亡羊补牢,补上相应的漏洞或加入相应的监控,那么这种方法就又失效了。因此,这一部分就是那些0day技术的天下。
综上,对于Bootkit,首先它一旦获得执行机会,的确会比操作系统更早被加载,从而对杀毒软件后续的有效查杀造成很大的挑战,有时这种挑战甚至是强弱悬殊的。然而,如果把Bootkit加载的完整流程进行综合考虑,则在其获得执行机会之前,杀毒软件仍然有不少的机会将其扼杀于摇篮之中,这是建立在一个前提,即杀毒软件永远比病毒先被安装到系统里。因此,要对付Bootkit,不应该单纯从Bootkit被执行后的行为着眼,而应该以全局的观念,从源头到结果各个环节综合把关,也就是提高安全软件的全程综合监控能力,一旦在这个过程中Bootkit程序(或安装Bootkit的原始病毒体)的行为被病毒软件有效拦截,那么杀毒软件仍然可以与之一战。