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