导读:近日百度安全发表的论文《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便。

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

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

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

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

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

图1:虚拟化检测的两个阶段

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

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

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

1、利用TLB的延迟来检测

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

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

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

图2 TLB的在地址转化过程中的流程

图3:在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的等待时间,并把结果存储作为阈值。如果其他减去结果明显超出阈值,那么可以得出结论,环境是虚拟化。

图4:在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。这个数字在有虚拟化的环境下,将会大大提高。

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

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

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

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

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

截止2020年上半年,百度安全已经有14篇论文发表在包括Usenix、ASPLOS,、IEEE TDSC,、IEEE TIFS、 MICRO、ICSE等在内的国际顶级会议和期刊。未来,百度安全也将继续深度投入智能安全、云安全、工业互联网、车联网安全各个细分领域的前瞻性安全研究,产研结合推动技术创新。

更多精彩推荐
☞30名工程师,历时1300天打造,又一“国产”AI框架开源了
☞钢铁侠马斯克的野望:实现载人航天,开源特斯拉自动驾驶
☞科技股疯狂造富的背后,“泡沫”离我们到底有多远?
☞AI不止能美颜,美妆迁移这样做 | 赠书
☞程序员必备基础:Git 命令全方位学习
☞公链还能这样玩?二次元、出圈与社区自治
点分享点点赞点在看

对抗恶意程序的反虚拟化,百度安全提最新检测技术,具备三大特性相关推荐

  1. 恶意代码检测技术的演化

    from:http://www.4ucode.com/Study/Topic/1407760 在本文中我们讨论了识别恶意代码的各种方法,它们彼此间在功能上(以及时间上)的联系,它们的技术以及特点.从一 ...

  2. 恶意代码可视化检测技术研究综述

    摘要 随着反检测技术的不断发展,产生了大量形态多样的恶意代码变种,传统检测技术已无法准确检测出该种未知恶意代码.由于数据可视化方法能将恶意代码的核心表现在图像特征中,因此可视化恶意代码检测方法受到越来 ...

  3. 计算机专业的会网盘扩容吗,网盘扩容是什么原理?百度云最新扩容技术解析!...

    因为他们的网络磁盘已扩展. 网络磁盘扩展的原理是什么? 原理很简单:我们将大量"鬼文件"(也称为占位符文件)存储到您的磁盘中.这些文件中的每个文件大小均为300G,通常不会占用联机 ...

  4. 脚本类恶意程序分析技巧汇总

    文章目录 前言 python样本分析 打包一个hello world 关于python文件 什么是pyc文件 什么是pyo文件 什么是pyd文件 为什么需要pyc文件 关于打包的exe位数 pytho ...

  5. 病毒木马查杀实战第026篇:“白加黑”恶意程序研究(上)

    前言 众所周知,传统的恶意程序都是由单一文件构成的.从而实现某一种或者几种恶意功能. 而这类的恶意程序为了避免被发现以及被查杀,往往会採用五花八门的自我隐藏技术以及免杀技术,病毒程序的作者非常多时候也 ...

  6. 腾讯市值1个月蒸发1700亿美元;微软发布Windows 11 首个Beta版本; 恶意程序开发者转向新兴编程语言 | 架构视点...

    推荐大家关注一个公众号 点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 It doesn't matter how ...

  7. 12月第1周业务风控关注 | 工信部将开展移动恶意程序专项治理工作

    易盾业务风控周报每周呈报值得关注的安全技术和事件,包括但不限于内容安全.移动安全.业务安全和网络安全,帮助企业提高警惕,规避这些似小实大.影响业务健康发展的安全风险. 1 苹果终向印度政府妥协,同意上 ...

  8. 恶意程序威胁程度“五芒星”评估法

    一种新的恶意程序检查分类策略及检测方法. 需求 传统的恶意程序分析报告重在依照程序级行为进行归类,真是"事无巨细".这样的表述导致三个后果: 淡化了反病毒工程师的作用.无法将工程师 ...

  9. 利用MLAI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定...

    利用ML&AI判定未知恶意程序 导语:0x01.前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势.那么 ...

最新文章

  1. 【Smobiler企业APP开发之一】开发环境部署
  2. SAP WM Storage Location Reference在项目实践中的使用
  3. FILE文件流的中fopen、fread、fseek、fclose的使用
  4. 基于redis的分布式任务管理
  5. ButtonRenderer
  6. Python常见问题解决记录1-Non-ASCII character ‘\xe7‘错误
  7. Axure 设置条件的操作
  8. 人工智能感知技术是机器人应用支撑技术之一
  9. 软件测试笔试面试题目完全汇总
  10. 基于Java的2048小游戏设计
  11. 球坐标系下拉普拉斯方程求解(Laplace equation)二
  12. win10用linux命令关机,Win10使用PowerShell命令让局域网电脑重启关机操作
  13. 当前有哪些流行的前端开发框架?
  14. R语言使用pROC包绘制ROC曲线并在ROC曲线上显示特异度和敏感度的置信区间(通过阴影区域以及线条显示)
  15. WinRAR是什么?------压缩工具
  16. Open vSwitch的安装与运行
  17. python识别音乐歌曲_如何轻松识别您正在听的歌曲
  18. string-array的用法
  19. 算法还是算力?一篇微博引爆深度学习的“鸡生蛋,蛋生鸡”问题
  20. idea通过Git版本控制时贮藏功能的使用

热门文章

  1. HDU 2896病毒侵袭
  2. 整理: JAVA错误处理集锦
  3. 2017.5.2AM
  4. jQuery插件(多级菜单)
  5. [转载]Java Socket实战之二 多线程通信
  6. iOS求职之OC面试题完整版---持续更新中...
  7. [C++对象模型][10]类型转化
  8. [VSCode] Ubuntu 16.04 安装/更新 vscode
  9. 广州大学数据库实验报告_广州大学学生Access数据库实验1_表的创建和操作
  10. python将数值进行关联_小疯谈python:(三)数据类型之数值类型