【论文总结】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 修…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...