【论文总结】V-Shuttle:可扩展和语义感知的 Hypervisor 虚拟设备模糊测试
介绍
这是来自2021 CCS的一篇论文,作者有GaoningPan, Xingwei Lin, Xuhong Zhang, Yongkang Jia, Shouling Ji, Chunming Wu, Xinlei Ying, Jiashui Wang, Yanjun Wu。该论文提出V-shuttle的新框架来执行管控程序的模糊测试,该框架执行可扩展和语义感知的管理程序模糊测试。
该论文的贡献:
1.因为由DMA传输的数据结构是根据协议规范以嵌套的形式构建的。如果不能理解虚拟设备的协议,就会使模糊过程停留在初始模糊阶段,导致模糊效率低下,因此应对这种挑战,作者提出了新的框架V-Shuttle。
2.对世界上两个流行的管理程序平台QEMU和VirtualBox评估,发现35个bug并分配了17个CVE。
前置知识
1.云计算的核心是虚拟机管理程序,也称为虚拟机监视器(VMM),对虚拟机监视器的攻击可能导致虚拟机越权或权限提升。云计算中的Hypervisor(虚拟化管理程序)是一种软件或固件层,它允许在物理计算机上运行多个虚拟机实例。
Hypervisor使得多个虚拟机之间可以相互隔离,以便它们可以独立运行,就像它们运行在物理计算机上一样。云计算中的Hypervisor通常分为两种类型:类型1和类型2。类型1 Hypervisor(也称为“裸金属” Hypervisor)直接安装在物理计算机上,而类型2 Hypervisor则在操作系统之上运行。Hypervisor在云计算中起着至关重要的作用,因为它允许将计算资源动态分配给多个虚拟机实例,以便满足不断变化的计算需求。同时,它还提供了额外的安全性,通过在虚拟机之间建立隔离层来防止恶意软件和攻击。
2.MMIO(Memory-Mapped I/O)是一种在计算机系统中用于实现输入/输出(I/O)的机制。它使用计算机的内存地址空间来寻址和访问I/O设备,使得I/O设备的数据可以像内存一样被处理和操作。
MMIO通常通过将I/O设备的寄存器映射到计算机的物理内存空间来实现。当程序需要读取或写入I/O设备的数据时,它可以像读取或写入内存一样访问相应的内存地址。此时,MMIO机制会将访问请求转换为对相应I/O设备寄存器的读取或写入操作。MMIO相比于另一种常见的I/O机制DMA(Direct Memory Access)具有更低的延迟和更高的灵活性,因为它不需要额外的硬件支持,且能够提供更好的隔离性和安全性。但是,MMIO也可能会对系统性能产生一定的影响,因为它需要与其他系统资源共享内存带宽和处理器时间。
3.QEMU 是一个快捷的跨平台开源计算机模拟器,可以模拟许多硬件体系结构。 QEMU 可让您在现有系统(VM 主机服务器)之上运行未经修改的完整操作系统(VM Guest)。
4.常规虚拟设备传输:
从总体上说,虚拟设备向客户机开放了3个重要的交互接口:内存映射I/O(MMIO)、端口I/O(PIO)和直接存储器存取(DMA)。大多数设备遵循通用操作模式,首先通过MMIO对设备进行初始化,然后通过DMA完成复杂数据传输。通常直观的方法就是使用模糊测试技术将随机数据写入这些接口,但通过DMA传输的数据是高度嵌套的,这严重阻碍了传统的模糊测试扩展其代码覆盖率。
具体来说,设备规范中定义的数据结构通常采用树状结构,其中每个节点包含指向下一个节点的链接指针。某些DMA操作会从客户机的空间获取大量输入,并在输入结构中使用嵌套结构,即一个结构中的字段成员指向另一个结构。从随机模糊测试的角度来看,这种嵌套结构是很难构建的,因为它必须正确推测整个组织(层次嵌套模式)的语义和每个节点(即指向另一个节点的指针字段)的内部语义。
虚拟机一般工作流:在设备执行的初始阶段,客户机驱动程序通常会将数据写入MMIO或PIO区域,让设备完成一些初始化工作,例如设置设备状态和初始化针对客户机中预分配缓冲区的地址寄存器。初始化阶段完成后,设备将进入准备处理数据的状态。设备开始完成一些特定的工作(如传输USB数据和发送网络包)。上述数据处理阶段的主要交互机制是DMA,它支持设备向客户机传输大型和复杂的数据。由于数据处理部分是设备的主要功能,包含大多数代码路径,因此它比其他部分更有可能引入安全风险。

驱动程序与设备交互
作者首先证明了DMA在虚拟机管理器设备的广泛使用,对QEMU设备统计分析。证明DMA在虚拟机管理器中被广泛使用。

虚拟机管理器可用于客户机内存之间的传输数据,通过DMA和特定API,达到设备和驱动程序通信。比如在QEMU中有pci_dma_read和pci_dma_write,前者将数据块从客户机的内存复制到主机缓冲区中,后者将主机缓冲区的数据块写入客户机。
由于DMA机制传输的数据对象通常构造为嵌套结构(即结构A包含一个指向结构B的指针),这种特性对虚拟机管理器的模糊测试产生了影响。

虚拟机管理器处理嵌套结构的方式如下
1.从根节点开始,虚拟机管理器首先会获取一个指向数据结构A的指针
2.虚拟机管理器通过动态分配缓冲区来存储A的副本
3.虚拟机管理器使用pci_dma_read将A从客户机内存复制到已分配的缓冲区
4.根据A中的指针字段,即子节点B,虚拟机管理器分配另一个缓冲区来存储B的副本;虚拟机管理器再次执行pci_dma_read将B从客户机内存复制到已分配的缓冲区
5.根据B中的指针,虚拟机管理器再次执行pci_dma_read来复制下一个结构C
综上所述,虚拟机管理器以递归的方式遍历树状结构并向下移动,直至抵达终止节点,并在每个节点处储存了用户提供结构的副本。由于复杂的结构嵌套形式,传统的模糊测试方法就无法正确地对整个数据结构进行处理。
威胁模型
假设攻击者是一个对虚拟机之内的内存拥有完全访问权限的客户机用户,因此可向其设备发送任意数据。这种假设是合理的,因为在公有云场景中,每个用户对自己的虚拟机都享有root权限。如果虚拟机管理器不小心处理来自客户机用户的不可信数据,就会出现拒绝服务(DoS)、信息泄露或权限提升等安全问题。一旦攻击者利用虚拟机管理器中的漏洞进行虚拟机逃逸,就可以接管同一主机上的其他虚拟机,从而进一步访问存储在被利用虚拟机以外的敏感数据。
V-shuttle设计
从总体上说,V-SHUTTLE旨在将由覆盖率引导的模糊测试和静态分析技术相结合,形成一个可规模化、语义感知和轻量级的虚拟机管理器模糊测试框架。此外,为了应对模糊测试中与虚拟机管理器有关的特殊挑战,V-SHUTTLE设计了两种不同的方案。重定向与DMA相关的函数和通过种子池执行语义感知模糊测试。
利用集成到虚拟机管理器中的模糊测试代理将随机输入反馈送到虚拟设备(即模糊测试目标)中。模糊测试代理在虚拟机管理器中运行,持续向被测试的虚拟设备发送读/写请求。
作者首先重定向DMA数据的传输,将指针索引的DMA内存访问拦截并定位到我们可控的Fuzzing输入中,从而消除hypervisor对数据结构的寻址,以确保每个DMA请求都能获取到Fuzzing输入。然后,作者通过将不同DMA对象类型的结构组织到不同的类别中,并使用seedpool来维护这些不同类别的种子队列,从而执行细粒度语义感知Fuzzing。该方法能够为每个DMA请求都能提供语义有效的Fuzzing种子,这进一步提高了模糊化的效率。

实验结果
作者在16个QEMU设备上验证了V-SHUTTLE的可扩展性。实验结果表明V-SHUTTLE确实能有效提高代码覆盖率,具有规模化的优势,能够自动化探索hypervisor的深层代码,避免了根据文档构建测试用例的繁琐工作,覆盖率相较于state-of-the-art的Fuzzing工具有着明显提升。

此外,V-SHUTTLE也优于纯随机的Dumb Fuzzing以及结构化感知Fuzzing。

在漏洞挖掘方面,V-SHUTTLE在QEMU和VirtualBox中共找到了35个未知漏洞,其中17个授予了CVE编号。
相关文章:
【论文总结】V-Shuttle:可扩展和语义感知的 Hypervisor 虚拟设备模糊测试
介绍 这是来自2021 CCS的一篇论文,作者有GaoningPan, Xingwei Lin, Xuhong Zhang, Yongkang Jia, Shouling Ji, Chunming Wu, Xinlei Ying, Jiashui Wang, Yanjun Wu。该论文提出V-shuttle的新框架来执行管控程序的模糊测试,该框架执行可扩展和语义感知…...
一篇文章让你搞懂TypeScript中的typeof()、keyof()是什么意思
TypeScript中的typeof()、keyof()是什么意思? 知识回调(不懂就看这儿!)场景复现核心干货👇👇👇举例引入字面量类型(literal types&…...
【机会约束、鲁棒优化】机会约束和鲁棒优化研究优化【ccDCOPF】研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
4月想跳槽的同学,没有更好的选择,可以去美团
在美团干了半年,说一下自己的感受,美团是一家福利中等,工资待遇中上,高层管理团队强大,加班强度一般,技术不错,办公环境一般,工作氛围中上,部门差距之间工作体验差距巨大…...
从输入url到页面展现(一)从浏览器解析url开始
前端面试有一道很考验人的问题,那就是:请你说一下从用户从输入url到页面展现的过程是怎样的?在接下来的一段时间呢,狗哥会从这一问题出发,开始剖析这个过程,希望可以让更多的小伙伴掌握到这个过程ÿ…...
购物 · 礼物
标题 前言必学场景词汇及用法书店花店玩具店讨价还价情境常用单词书店花店玩具店前言 加油 必学场景词汇及用法 书店 1.book store / book shop 书店 I browsed through the book store, but I didn’t find the book I was looking for. 我把书店里的书浏览了一番,但是没…...
可视化图表API格式要求有哪些?Sugar BI详细代码示例(2)
Sugar BI中的每个图表可以对应一个数据 API,用户浏览报表时,选定一定的过滤条件,点击「查询」按钮将会通过 API 拉取相应的数据;前面说过,为了确保用户数据的安全性,Sugar BI上的所有数据请求都在Sugar BI的…...
153. 寻找旋转排序数组中的最小值
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2] 若旋转 7 次࿰…...
Linux 文件描述符
Linux 文件描述符 Linux 中一切皆文件,比如 C 源文件、视频文件、Shell脚本、可执行文件等,就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Linux 会给每个…...
第17章_反射机制
第17章_反射机制 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. 反射(Reflection)的概念 1.1 反射的出现背景 Java程序中,所有的对象都有两种类型:编…...
使用VBA小程序提高资产清查效率
资产清查是一件相当烦人的工作,去年使用LayUIPHPMS SQL Server 2014写了一个资产清查的程序,可惜写完了,LayUI已经停止更新了,就没有再完善下去,数据也没有更新,等于就废了。 今年又要进行资产清查…...
JavaSE学习进阶day07_02 异常
第三章 异常 3.1 异常概念 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的非正常的情况࿰…...
操作系统学习笔记
文章目录 操作系统虚拟内存锁缓存机制CPU性能指标进程、线程文件管理系统 操作系统 操作系统是控制应用程序的执行,并充当应用程序和计算机硬件之间的接口。在计算机系统中,处于最外层的是(应用软件) 。 面向用户的就是外层的&am…...
【Spring Boot】SpringBoot设计了哪些可拓展的机制?
文章目录 前言SpringBoot核心源码拓展Initializer拓展监听器ApplicationListenerBeanFactory的后置处理器 & Bean的后置处理器AOP其他的拓展点 前言 当我们引入注册中心的依赖,比如nacos的时候,当我们启动springboot,这个服务就会根据配置…...
《程序员面试金典(第6版)》面试题 10.10. 数字流的秩
题目描述 假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说: 实现 track(int x) 方法,每读入一个数字都会调用该方法; 实现 g…...
智能洗地机好用吗?值得入手的洗地机推荐
洗地机是一款高效的地面清洁设备,不仅可以很好清理地面不同形态的干湿垃圾,还减少了人工和水资源的浪费,是我们日常生活中必不可少的清洁工具。作为以一位评测博主,很多朋友咨询我在选购洗地机时应该注意哪些要点,有哪…...
Spring Security实战(一)——基于内存和数据库模型的认证与授权
目录 简介 一、初识Spring Security(入门案例) (1)新建project (2)选择依赖 (3)编写一个 HelloController (4)启动项目,访问localhost:8080…...
轻松掌握FFmpeg编程:从架构到实践
轻松掌握FFmpeg编程:从架构到实践 (Master FFmpeg Programming with Ease: From Architecture to Practice 引言 (Introduction)FFmpeg简介与应用场景 (Brief Introduction and Application Scenarios of FFmpeg)为什么选择FFmpeg进行音视频处理 (Why Choose FFmpeg…...
桌面应用程序开发攻略(初步了解)
什么是桌面应用程序? 桌面应用开发是指为桌面计算机或其他类似设备(如服务器)开发软件应用程序的过程。桌面应用通常是独立于浏览器运行的,并且可以在操作系统的桌面或应用程序菜单中找到。桌面应用可以使用各种编程语言开发&…...
【李老师云计算】HBase+Zookeeper部署及Maven访问(HBase集群实验)
索引 前言1. Zookeeper1.1 主机下载Zookeeper安装包1.2 主机解压Zookeeper1.3 ★解决解压后文件缺失1.4 主机配置Zookeeper文件1.4.1 配置zoo_sample.cfg文件1.4.2 配置/data/myid文件 1.5 主机传输Zookeeper文件到从机1.6 从机修改Zookeeper文件1.6.1 修改zoo.cfg文件1.6.2 修…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
