首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

解读论文:无需提权就能检测硬件虚拟化环境

虚拟化作为云计算系统中的一种基础技术,近年来,它不仅广泛应用于云服务器,也广泛应用于个人桌面。那么,究竟虚拟化技术是什么,为什么它有这么重要的作用?

想象有两个场景:

  1. 空旷的厂房,整个楼层没有固定的墙壁,从事各式工种的工人和机器设备扎堆聚集,无法形成流水化的高效作业。
  2. 开放的冷藏库里,面包、龙虾和榴莲裸露的存储在一起,没有任何封装和隔离。长久下去,面包有了龙虾味儿,龙虾有了榴莲味。

从上面两个例子里,我们不难看出,在空间资源一定的条件下,需要根据不同的需求进行重新规划,从而充分发挥最大的利用效率。在计算机领域,就存在一种技术可以解决上面的问题,那就是"虚拟化技术"。

虚拟化(Virtualization)技术最早出现在 20 世纪 60 年代的 IBM 大型机系统,在 70 年代的 System 370 系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机(Virtual Machine),通俗说就是“把一台电脑虚拟成N台电脑”。

同样,虚拟化在云计算的应用也是如此。云计算本身就是把一个巨大无比的服务资源划分成很多小空间来使用,所以这也就解释了为什么虚拟化是云计算最基础的软件设施。

虚拟化环境下的恶意程序分析

在计算机安全方面,虚拟化技术也有很广泛的应用,比如,安全人员能够利用虚拟化环境进行安全分析测试。虚拟化技术的出现弥补了安全动态分析测试服务器资源不足、系统不纯净以及环境搭建周期长等问题,同时又不会“中伤”到本地操作系统,它可以起到隔离作用,还能够严格控制运行在其中的程序行为,可谓“一举多得”。

有了虚拟化技术,安全人员便能够在一个孤立的环境中进行不同类型的安全动态分析。通常可以在虚拟环境中运行样本,利用监控模块提取样本的进程、内存、文件、注册表、网络等行为数据, 通过对这些行为数据的汇总分析来推断样本的功能和恶意性。

这种测试听起来合乎常理,没有什么大问题,然而有没有可能上演这样的一幕:

在电影《楚门的世界》里,楚门从一出生,他的生活就被全球 24 小时直播,身边所有的人都是演员,生活的城市就是一个巨大的摄影棚,连太阳、月亮甚至大海都是人造机器所操控的。 但是,“人造的世界”开始出现异常,莫名其妙天上掉下个录影棚灯,去世的父亲变成乞丐重新回来,初恋女友莫名其妙地消失不见…… 随着越来越多的异常出现,楚门开始主动检测那个世界的异常,并且证明这就是一个“虚拟化环境”,最终躲开镜头,扬帆出海,获得自由…

没错,恶意程序的作者也和楚门一样,意识到了虚拟化环境中的异常,为有效地逃避虚拟化分析测试、攻击本地系统,他们掌握一种可以反虚拟化环境的技术,利用这项技术可以检测虚拟运行环境的存在,并隐藏他们的恶意行为,从而逃避安全研究员的分析。

也就是说,安全人员在虚拟化环境下分析恶意软件时,按照我们前面介绍的虚拟化技术原理下,恶意软件就会以为自己在一台“真的机器”里,但现在存在一些检测方法,可以让软件识破自己其实是在虚拟机里,拥有了“上帝视角”的恶意软件,有的“装傻卖乖”不再搞破坏,企图混过安全人员的分析,又或者是直接选择自毁,总之不管采用哪种办法,最终目的只有一个,就是“让安全研究员没办法研究我”恶意软件如是说。

因此,为了对抗恶意程序的反虚拟化问题,需要安全研究人员掌握更高效便捷的虚拟化环境检测技术,从而构建起更难以被检测、更透明的分析系统。

在本篇论文中,百度安全研究员对此做出深入探索,并研究出了最新硬件虚拟化检测技术,无须提权就能实现对硬件虚拟化环境的检测。

传统硬件辅助虚拟化检测技术存在缺陷

首先,我们来看看,目前恶意软件使用了哪些虚拟化检测方法。总结来说,他们广泛使用了两种虚拟化检测方法。

  • 第一种方法是查找虚拟机监视器或虚拟机本身留下的特定痕迹;
  • 另一种则是对硬件引起的计时差异进行分析,以用来标记。

然而,第一种方法存在很大的局限性,这种方法的原理主要依靠查找虚拟机监视器或虚拟机本身留下的特定痕迹,通常仅用于识别传统的基于软件的虚拟化。为了给用户操作虚拟机提供方便,一些虚拟机监视器将主机插入 Guest OS 中,但这些痕迹可以轻易被恶意软件发现。常见的痕迹包括 Guest OS 中运行的进行和服务、文件或注册表键值等,像 CryptoWall、shi 和 Kronos 这样流行的恶意软件都能够通过利用这些痕迹来检测虚拟化的存在。

而目前,随着 X86 处理器性能的提高和应用的普及,市面上主流的虚拟化更多依托的是硬件辅助虚拟化,论文中百度安全研究员重点对已知的硬件辅助虚拟化检测技术做了实验分析,结果可见表 1。

硬件辅助虚拟化检测技术效果对比

从表 1 可见,目前已知的硬件辅助虚拟化检测技术均存在可被移除、需要特权账户或触发大量可疑的 VM 退出事件等缺陷。针对这些问题,百度安全研究员推出了全新的虚拟化硬件检测技术,能实现在非特权状态下,不引发大量可疑事件,极具隐藏性的全新检测技术。

百度安全提出新型硬件辅助虚拟化检测技术

那么,百度安全提出的新型硬件辅助虚拟化检测技术是如何实现的呢?接下来,我们就一起跟随论文中的阐述具体来看。

整个工作分为两个阶段:(1)offline 阶段和(2)online 阶段(例如图 1)。Offline 阶段主要是采集特征属性在虚拟化环境(virtualized)和非虚拟化环境(native)的不同。这些数据可以保存起来,用于 online 阶段的检测。在 online 检测阶段,针对不同属性的划分,可以很容易的判断当前运行环境是否跑在了虚拟化缓解。

虚拟化检测的两个阶段

为了验证方法的有效性,百度安全研究员进行了实验研究,通过三台本地机器验证三种检测技术以及三家主流云供应商,结果详见表 2。

每个主流云提供程序上的三个本地机器和三个虚拟机的系统配置

接下来,我们将采用三个特征属性来给大家展示如何检测虚拟化环境。

1. 利用 TLB 的延迟来检测

为最大程度地减少两层的内存占用地址转换,现代处理器在虚拟环境中有两种类型的 TLB,即 hPT-TLB 和组合的 TLB。如图 2 所示,hPT-TLB 用于将地址从 GPA 加速到 HPA。组合式 TLB 存储 GVA 之间的映射和 HPA,类似于本机环境中的 TLB,并且缓存从 VA 到 PA 的地址转换。

直观地讲,一种可能的方法是测量内存访问(仅导致 TLB 丢失)并确定阈值,虚拟化可以在阈值之上被检测到。阈值可以通过比较确定本机和虚拟系统上的时间延迟。如果延迟被测得高于阈值,然后人们认为环境是虚拟的;否则它是本地的。但是,这种方法存在着误差,即内存访问所花费的时间因每个微体系结构而异。

因此,很难确定合理的绝对阈值。相反,我们使用导致 TLB 的 miss 和 hit 直接的差值来确定这个相对阈值。我们还因此设计了一个 Prime+probe 的算法完成此事(详细算法参加发表的文章)。

TLB miss 在地址转化过程中的流程

在 Amazon EC2,Microsoft Azure 以及 Google Cloud 上面的检测结果。我们很容易看到虚拟化和本地系统在 TLB miss 方面的巨大差异。

2. 利用 LLC Miss Penalty 来判断

在现代操作系统中,访问 GVA 时硬件会走页面表进行地址转换。对于每个 Guest 页表遍历,硬件也遍历 host 页表确定相应的 HPA。为方便访问,不仅相关的地址转换将被缓存到 TLB 中,而且访问的四级页表条目(PTE)将存储到 CPU 缓存中。

如图 2 所示,虚拟化环境将使用缓存以总共存储 16 个主机 PTE 和 4 个 Guest PTE,而本机环境仅需要 4 个 PTE。如果再次发生相同的访问,将首先查找 TLB。如果发生 TLB 缺失(即没有 TLB 条目均不包含地址翻译层),则将进行页表遍历。由于最近的 PTE 在 CPU cache 中,因此硬件将查找 cache 以检查其存在。如果不是在 cache 中,然后硬件从主设备获取它们内存。在这种情况下,两页的页表清晰可见与在本机环境。类似于基于 TLB 的测量,我们使用导致 TLB 和 PTE 引起的访问延迟

LLC miss 减去 hit 的等待时间,并把结果存储作为阈值。如果其他减去结果明显超出阈值,那么可以得出结论,环境是虚拟化。

在 Amazon EC2,Microsoft Azure 以及 Google Cloud 上面的检测结果。我们很容易看到虚拟化和本地系统在 LLC miss 方面的巨大差异。

3. 利用 L1D 缓存的不稳定性进行检测

在本机环境中,进程调度允许进程竞争一个物理 CPU。 在虚拟化在环境中,CPU 虚拟化允许物理 CPU 在多个虚拟 CPU 之间共享。 它允许多个在一台计算机上运行的不同操作系统。 在同时,不仅进程竞争虚拟 CPU,而且虚拟 CPU 竞争共享的物理 CPU,从而加剧了竞争,导致 L1D 缓存的不稳定性加剧。

此外,虚拟 CPU 是通常会迁移到不同的物理核心以优化负载平衡。 考虑到 L1D 缓存是物理设备专用的 CPU,并且 L1D 缓存的大小非常有限,攻击者可以预计多少个 entry 被 evict 出 L1D。这个数字在有虚拟化的环境下,将会大大提高。

在 Amazon EC2,Microsoft Azure 以及 Google Cloud 上面的检测结果。我们很容易看到虚拟化和本地系统在 L1D 不稳定性方面的巨大差异。

总结来说,实验结果充分验证了三种方法的有效性,我们所提出的检测技术不会触发任何可疑系统,并独立于操作系统。这一技术研究并不单单只是为了缓解恶意程序对于虚拟化环境的检测,而是致力于在深入研究相关检测技术的基础之上,有针对性的防范恶意程序入侵对虚拟化安全的威胁,为制定合理有效的对抗思路提供未来方向,甚至是让虚拟化环境变得更加“真实”,对于这一领域的前沿研究的推动和发展具有积极的指导作用。

针对以上的情况,云厂商可以做以下的一些缓解方案:

(1)采用 performance counter 进行监控,发现异常的 TLB、L1D 以及 LLC 的活动,进行及时报警。但是这个方法噪音很大,具有很高的误报率。

(2)进行二进制代码扫描,寻找可疑的代码片段。最后云厂商还可以采用定制机器的方式,对机器的 TLB 以及 cache 进行深度改造,从根本上消除这些方面的影响。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/zZeurrEXT59PMYDCbdC9
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券