启用虚拟化,解决蓝丸风险?

信息安全 恶意软件 虚拟化
2021-08-25 06:32:33

这个问题的背景是我对虚拟化的矛盾心理。同样要清楚地开始:术语bluepill在这里应该是一个占位符,表示“使用虚拟化来隐藏和固定自身在受攻击系统上的恶意软件”。

我的问题是在我的计算机上启用虚拟化,我应该如何应对蓝丸的风险?更具体地说,如果有一种方法可以启用硬件支持的虚拟化 Intels x86/i64 CPU 的功能,可以保护我免受 bluepill 攻击?为了应对/解决可能没有 100% 明确答案的风险,我认为这是向前迈出的一大步(也是一个公认的分析者)枚举一组基于事实的“最佳实践规则,以启用和防止蓝药类型恶意软件”vt-xvt-x

这可能包括即建议一种检查蓝丸感染的方法?(即在关机/重新启动期间使用它,bluepill 需要存储/保存自身,并且在硬盘上变得可检测)

这个问题的动机是:在我的系统上,英特尔 iCore 处理器的vt-xcpu 功能可以在内核中启用和禁用

  • 禁用:bluepill 攻击不可行,但没有基于虚拟化的安全优势
  • 启用:可以进行蓝丸攻击,但启用了基于虚拟化的安全优势。

我已经经历了“虚拟机到底有多安全?虚假的安全感? ”这还没有考虑到蓝丸方面因此我认为这个问题可以丰富虚拟化安全的话题。

1个回答

bluepill 有两个方面:感染是如何发生的,以及一旦发生,您是否可以检测到它。

第一个方面实际上与所有恶意软件相同。bluepill 的新颖之处在于“它无法检测到”的说法。

对此进行了广泛的研究,并设计了几种检测方法。

您应该注意到,到目前为止,还没有在野外看到蓝丸威胁。

检测操作系统是否在虚拟机内运行

最早发表的检测方法涉及计时。来自对 Anthony Liguori 的采访

硬件虚拟化需要一种称为“陷阱和仿真”的技术。这个想法是硬件捕获某些指令,VMM 模拟这些指令,使软件相信它在虚拟机中运行。

软件仿真意味着这些指令在 VMM 下执行要比在普通硬件上花费更长的时间来完成。这个事实可以用来检测 VMM 的存在。

我就这个问题联系了 Rutkowska,她试图在她的原型中解决这个问题,方法是在每个出口调整一个处理器时钟。然而,对于外部时间源,她没有任何责任,她在她的博客上承认了这一点。

她将此称为她系统中的一个理论上的弱点,但我向您保证,利用它是非常实际的。

bluepill 概念的原作者 (Joanna Rutkowska) 还发表了另一篇论文 (RedPill),可用于检测 BluePill rootkit。

我找不到这篇论文,但找到了这个出色的摘要

 int swallow_redpill () {
   unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3";
   *((unsigned*)&rpill[3]) = (unsigned)m;
   ((void(*)())&rpill)();
   return (m[5]>0xd0) ? 1 : 0;
 }

这段代码的核心其实是SIDT指令(编码为0F010D[addr]),它在目的操作数中存储了中断描述符表寄存器(ID​​TR)的内容,目的操作数其实是一个内存位置。SIDT 指令的特殊和有趣之处在于,它可以在非特权模式(ring3)下执行,但它返回敏感寄存器的内容,供操作系统内部使用。

因为IDTR寄存器只有一个,但至少有两个OS同时运行(即host和guest OS),VMM需要把guest的IDTR重新定位到一个安全的地方,这样才不会和host的冲突。不幸的是,VMM 无法知道来宾操作系统中运行的进程是否(以及何时)执行 SIDT 指令,因为它没有特权(并且不会产生异常)。这样进程就得到了IDT表的重定位地址。据观察,在 VMWare 上,IDT 的重定位地址为地址 0xffXXXXXX,而在 Virtual PC 上为 0xe8XXXXXX。这在 VMWare Workstation 4 和 Virtual PC 2004 上进行了测试,两者都在 Windows XP 主机操作系统上运行。

本文回顾的另一种方法是从 2008 年开始的:

这个想法是通过另一个管理程序来拦截管理程序的启动(让我们将后者称为虚拟入侵防御系统,或 VIPS)。当任何管理程序(恶意或合法)启动时,它会打开 VM 根模式。这个事件很容易被 VIPS 拦截。下一个是什么?有两种方法可以处理此事件:完全阻止虚拟机管理程序,或允许它通过仿真工作。

第一种方法是在 BIOS 中模拟具有禁用 HVT 功能的 PC。这将阻止 HVT rootkit 工作。

第二种方式是允许管理程序通过模拟硬件虚拟化(或嵌套)工作。对于合法的虚拟化软件,应该这样做。

在这两种情况下(阻塞或模拟),VIPS 在它试图启动的那一刻拦截一个管理程序。VIPS 可以读取管理程序的主体并对其进行分析。可以显示通知消息。

这真的是威胁吗

然后是攻击的实际方面需要考虑。

bluepill rootkit 需要实现 xen 或类似复杂的东西,这是一项巨大的努力。由于确实无法保证无论如何都不会被检测到或阻止,因此攻击者将选择一条更简单的路径,即经典的 rootkit。

我相信这就是为什么 bluepill rootkit 还没有出现在野外的部分原因。