写点什么

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

2020 年 8 月 11 日

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

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


想象有两个场景:


  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 进行深度改造,从根本上消除这些方面的影响。


2020 年 8 月 11 日 16:381027

评论

发布
暂无评论
发现更多内容

架构师训练营第一期第十一周作业

Leo乐

极客大学架构师训练营

11 安全稳定课后作业

ABS

安全稳定

wing

极客大学架构师训练营

架构词典:逻辑

lidaobing

架构 逻辑

架构师训练营第七周作业一

韩儿

一文彻底搞懂前端监控

执鸢者

前端 前端监控

第 7 周 系统架构总结

心在那片海

架构师训练营第 1 期 week11

张建亮

极客大学架构师训练营

【第十一周】课后作业

云龙

架构师 01 期,第十一周课后作业

子文

第 11 周 怎么又翻车了???

Pyr0man1ac

架构师训练营第一期第十一周总结

Leo乐

极客大学架构师训练营

极客时间架构 1 期:第 11 周 安全稳定 - 命题作业

Null

nodejs事件和事件循环简介

程序那些事

事件驱动 nodejs 事件循环 异步编程 程序那些事

架构师第二期 第7周总结

月下独酌

极客大学架构师训练营

第十一周学习总结

Meow

架构师训练营 - 第 11 周课后作业(1 期)

阿甘

架构师训练营第十一周总结

月殇

极客大学架构师训练营

极客时间架构 1 期:第 11 周 安全稳定 - 学习总结

Null

冰河开源了全网首个完全开源的分布式全局有序序列号(分布式ID)框架!

冰河

分布式架构 雪花算法 分布式ID 全局序列号 全局唯一ID

Week7 性能优化学习总结

evildracula

学习 架构

架构师训练营第七周小结

韩儿

Week7 作业

evildracula

学习 架构

LeetCode题解:55. 跳跃游戏,贪心,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

第十一周作业

Meow

【第11周】安全稳定

云龙

架构师训练营1期 -- 第十一周作业

曾彪彪

极客大学架构师训练营

第 7 周 系统架构作业

心在那片海

架构师训练营第 7 周学习总结

菜青虫

极客大学架构师训练营

架构师训练营第2期 第7周命题作业

月下独酌

极客大学架构师训练营

架构师训练营第十一周课程笔记及心得

Airs

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