导读:近日百度安全发表的论文《Detecting Hardware-assisted Virtualization with Inconspicuous Features》入选国际TOP期刊IEEE TIFS,论文深度剖析了虚拟化检测技术,并创新性提出一种最新硬件虚拟化检测技术,无须提权就能实现对硬件虚拟化环境的检测,本文将对这篇论文进行详细的解读。
虚拟化作为云计算系统中的一种基础技术,近年来,虚拟化技术不仅广泛应用于云服务器,也广泛应用于个人桌面。那么究竟虚拟化技术是什么,又为什么起到这么重要的作用呢?
想象两个场景:
空旷的厂房,整个楼层没有固定的墙壁,从事各式工种的工人和机器设备扎堆聚集,无法形成流水化的高效作业。开放的冷藏库里,面包、龙虾和榴莲裸露的存储在一起,没有任何封装和隔离,长久下去面包有了龙虾味儿,龙虾有了榴莲味。
从这两个例子里,我们不难看出,在空间资源一定的条件下,需要根据不同的需求进行重新规划,已充分发挥最大的利用效率。在计算机领域,就存在一种技术可以解决上面的问题,那就是"虚拟化技术"。
虚拟化(Virtualization)技术最早出现在 20 世纪 60 年代的 IBM 大型机系统,在 70 年代的System 370 系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机(Virtual Machine),再通俗点就是“把一台电脑虚拟成N台电脑”。
同样的,虚拟化在云计算的应用也是如此,云计算本身就是把一个巨大无比的服务资源划分成很多小空间来使用,所以这也就解释了,为什么虚拟化是云计算最基础的软件设施。
虚拟化环境下的恶意程序分析
在计算机安全方面,虚拟化技术也有很广泛的应用,比如安全人员能够利用虚拟化环境进行安全分析测试。虚拟化技术的出现弥补了安全动态分析测试服务器资源不足,系统不纯净以及环境搭建周期长等问题,同时又不会“中伤”到本地操作系统,起到隔离作用,还能够严格控制运行在其中的程序行为,可谓一举多得。
有了虚拟化技术,安全人员便能够在一个孤立的环境中进行不同类型的安全动态分析。通常可以在虚拟环境中运行样本, 利用监控模块提取样本的进程、内存、文件、注册表、网络等行为数据, 通过对这些行为数据的汇总分析来推断样本的功能和恶意性。
这种测试听起来合乎常理,没有什么大问题,然而有没有可能上演这样的一幕:
在电影《楚门的世界》里,楚门从一出生,他的生活就被全球24小时直播,身边所有的人都是演员,生活的城市就是一个巨大的摄影棚,连太阳月亮甚至大海都是人造机器所操控的。但是,“人造的世界”开始出现异常,莫名其妙天上掉下个录影棚灯,去世的父亲变成乞丐重新回来,初恋女友莫名其妙消失不见……
随着越来越多的异常出现,楚门开始主动检测那个世界的异常,并且证明这就是一个“虚拟化环境”,最终躲开镜头,扬帆出海,获得自由···
没错,恶意程序的作者也和楚门一样,意识到了虚拟化环境中的异常,为了有效地逃避虚拟化分析测试、攻击本地系统,他们掌握一种可以反虚拟化环境的技术,利用这项技术可以检测虚拟运行环境的存在,并隐藏他们的恶意行为,从而逃避安全研究员的分析。
也就是说,安全人员在虚拟化环境下分析恶意程序时,按照我们前面介绍的虚拟化技术原理下,恶意程序就会以为自己在一台“真的机器”里。但现在存在一些检测方法,可以让软件识破自己其实是在虚拟机里,拥有了“上帝视角”的恶意程序,有的“装傻卖乖”不再搞破坏,企图混过安全人员的分析,又或者是直接选择自毁,总之不管采用哪种办法,最终目的只有一个,就是“让安全研究员没办法研究我”恶意程序如是说。
因此,为了对抗恶意程序的反虚拟化问题,需要安全研究人员掌握更高效便捷的虚拟化环境检测技术,从而构建起更难以被检测,更透明的分析系统,在本篇论文中百度安全研究员就对此做出了深入探索,并研究出了最新硬件虚拟化检测技术,能够无须提权就能实现对硬件虚拟化环境的检测。
传统硬件辅助虚拟化检测技术存在缺陷
首先,我们先来看看,目前恶意程序使用了哪些虚拟化检测方法。总结来说,他们广泛使用了两种虚拟化检测方法。第一种方法是查找虚拟机监视器或虚拟机本身留下的特定痕迹。另一种则是对硬件引起的计时差异进行分析,以用来标记。
然而第一种方法存在很大的局限性,这种方法的原理主要依靠查找虚拟机监视器或虚拟机本身留下的特定痕迹,通常仅用于识别传统的基于软件的虚拟化。为了给用户操作虚拟机提供方便,一些虚拟机监视器将主机插入Guest OS中,但这些痕迹可以轻易被恶意软件发现。常见的痕迹包括,Guest OS中运行的进行和服务、文件或注册表键值等,像CryptoWall、shi和Kronos这样流行的恶意软件都能够通过利用这些痕迹来检测虚拟化的存在。
而目前,随着X86处理器性能的提高和应用的普及,市面上主流的虚拟化更多依托的是硬件辅助虚拟化,论文中百度安全研究员重点对已知的硬件辅助虚拟化检测技术做了实验分析,结果可见表一。
表一:硬件辅助虚拟化检测技术效果对比
从表1可见,目前已知的硬件辅助虚拟化检测技术均存在可被移除、需要特权账户或触发大量可疑的VM退出事件等缺陷。针对这些问题,百度安全研究员推出了全新的虚拟化硬件检测技术,能够实现在非特权状态下,不引发大量可疑事件,极具隐藏性的全新检测技术。
百度安全首创新型硬件辅助虚拟化检测技术
那么,究竟百度安全所提出的新型硬件辅助虚拟化检测技术是如何实现的呢?接下来,我们就一起跟随论文中的阐述具体来看。
整个工作分为两个阶段:(1)offline阶段和(2)online阶段(例如图1)。Offline阶段主要是采集特征属性在虚拟化环境(virtualized)和非虚拟化环境(native)的不同。这些数据可以保存起来,用于online阶段的检测。在online检测阶段,针对不同属性的划分,可以很容易的判断当前运行环境是否跑在了虚拟化缓解。
图一: 虚拟化检测的两个阶段
为了验证方法的有效性,百度安全研究员进行了实验研究,通过三台本地机器验证三种检测技术以及三家主流云供应商,结果详见表二。
表二:每个主流云提供程序上的三个本地机器和三个虚拟机的系统配置
接下来,我们将采用三个特征属性来给大家展示如何检测虚拟化环境。
1、利用TLB的延迟来检测
为了最大程度地减少两层的内存占用地址转换,现代处理器在虚拟环境中有两种类型的TLB,即hPT-TLB和组合的TLB。如图2所示,hPT-TLB用于将地址从GPA加速到HPA。组合式TLB存储GVA之间的映射和HPA,类似于本机环境中的TLB,并且缓存从VA到PA的地址转换。
直观地讲,一种可能的方法是测量内存访问(仅导致TLB丢失)并确定阈值,虚拟化可以在阈值之上被检测到。阈值可以通过比较确定本机和虚拟系统上的时间延迟。如果延迟被测得高于阈值,然后人们认为环境是虚拟的;否则它是本地的。但是,这种方法存在着误差,即内存访问所花费的时间因每个微体系结构而异。
因此,很难确定合理的绝对阈值。相反,我们使用导致TLB的miss和hit直接的差值来确定这个相对阈值。我们还因此设计了一个Prime+probe的算法完成此事(详细算法参见发表的论文https://ieeexplore.ieee.org/abstract/document/9122497/)。
图二:TLB的在地址转化过程中的流程
图三:在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进行深度改造,从根本上消除这些方面的影响。
此次论文入选IEEE TIFS,再次展现了百度在前沿安全研究的技术沉淀和国际水准。截止2020年上半年,百度安全已经有14篇论文发表在包括Usenix、ASPLOS,、IEEE TDSC,、IEEE TIFS、 MICRO、ICSE等在内的国际顶级会议和期刊。未来,百度安全也将继续深度投入智能安全、云安全、工业互联网、车联网安全各个细分领域的前瞻性安全研究,产研结合推动技术创新,用实打实的“成绩单”起舞于国际安全舞台。