Blue pill

这几篇都是之前看过的波兰女黑客Joanna Rutkowska的几篇博客的一点整理,翻译可能比较生硬。(她的博客地址http://blog.invisiblethings.org/

Blue pill是Joanna所在Invisible Things Lab开发的一个非常轻量级的VMM软件,也是一个基于硬件虚拟化的rootkit。名字包含了黑客帝国里蓝色药丸的含义,生活在一个虚拟的世界里而不自知。

Rootkits检测

Rootkits一般基于某个原理,如果知道了这个原理,就能检测到指定的rootkit。如:

  • FU基于从内核活跃进程列表中解除EPROCESS拦截链接;
  • Shadow Walker基于钩住页面异常处理程序,并标记某些页面为无效;
  • deppdoor基于改变NDIS数据结构的一些域。

然而,尽管Blue pill原理公开了,依然不能被检测出来(这里的不能检测指的是100%不可探测,后来作者更新了Blue pill的检测方法。)。Blue pill背后的思路:操作系统“吞下”Blue pill,在Blue pill控制的空间里(原文用的是Matrix,嘿嘿)被唤醒。这个过程是即时的(不需要重启),没有性能损失,所有设备完全可以访问操作系统(实际在虚拟机中运行的)。所用到的技术基础:AMD SVM/Pacifica虚拟化技术。

和SubVirt rootkit的比较

  1. Subvirt是永久的rootkit(重启仍有效),其安装需要在原始操作系统启动之前获取控制权(Blue pill随时都可以,on-the-fly),而且必须引入一些硬盘修改,因此可以进行离线检测。
  2. Subvirt在x86上实现,不能达到100%虚拟化,有一些非特权的敏感指令(SIDT/SGDT/SLDT),可以进行虚拟模式的常规检测。Blue pill依赖于AMD SVM技术,避开了这个问题。
  3. Subvirt基于一款商用VMM(Virtual PC and/or VMWare),这些应用创建操作系统使用的虚拟设备,这和真实的底层硬件不一样,可以进行虚拟机的简单检测。

此外,Blue pill并不依赖于任何操作系统的漏洞。

Blue pill的检测

和其他基于硬件的VMM一样,Blue pill需要拦截一些事件和指令。这里需要注意 RDMSR EFER(SVM)指令,因为EFER寄存器的第12位指示着处理器是否工作在SVM模式,这个没必要欺骗用户。

所以,我们可以考虑通过测量给定的指令执行时所花的处理器滴答数来检测Blue pill。方法很简单,使用RDTSC指令,返回处理器时间戳计数。作者做了测量,结果为RDMSR执行一般需要90个滴答,而Blue pill系统需要2100个滴答,你可能会说这个差别也太大了吧!

但是,SVM(和Intel VT-x)在VMCB中提供了一个特殊变量TSC_OFFSET,这个可以用来对用户隐瞒多余的滴答数。在返回给guest前将这个变量设为-2010。guest通过RDTSC指令无法知道RDMSR指令执行了多少多余的滴答数。这里假设某个检测程序的测试案例是这样:调用RDMSR几百万次,然后使用外部时钟观察时差,假设正常时运行1分钟。(VMM可以更改内部时钟结果)

那么这种检测存在几个问题:
(1)如何产生一个刚好执行一分钟(或者别的时间)的测试代码,考虑不同的处理器模型,和不同的速度。假设通过某些不能被拦截的指令来测试处理器速度,但是由于RDTSC指令本身能被拦截,这些指令执行的滴答数还是可以伪造的。不过在极端情况下,你可以在感染Blue pill前和感染后进行测试,但这不是最实际的情形。(这种检测目前没有绕过的方法)

这样就面临一个可能误判和漏判的问题,假设测试花了五分钟,那这是因为机器执行了一个太大的测试代码,处理器真的跑了5分钟,还是这意味着感染了Blue pill呢?(- it’s just that on a new processor model maybe the RDMSR interception slowdown would be of a factor of 5 instead of 20 as it’s with the processor I have right now. And if it was 15 minutes?)

(2)目前来看这不是一个大问题,因为市场上支持SVM的AMD处理器只有两种模式,两种模式时钟速度没有什么差别。所以,可以将测试代码硬编码到检测程序中(因为延时太大了),但是几年之后这种情形会变化,因为将会有很多处理器支持硬件虚拟化,我们将有一个处理器模型的数据库,对每种类型进行测试将有多少测试代码(检测程序怎么检测运行在那种处理器上?CPUID指令本身可以被拦截)。对用户来说,这种测试比较麻烦,因为需要某种外部时间测量工具。

我们所需的是可靠的测试程序,能根据当前是否处在VM之中返回确定的0或1(而目前没有发现这样一个通用的程序)。

考虑到完备性,作者提到了另一种检测方法,这在她的演讲中有提到,这种攻击很可靠,而且可以被实现为一个单独的程序,但是若系统被Blue pill感染,它只允许系统crash掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值