CN113836008A - 针对虚拟机监视器进行模糊测试的方法和系统 - Google Patents

针对虚拟机监视器进行模糊测试的方法和系统 Download PDF

Info

Publication number
CN113836008A
CN113836008A CN202111068455.3A CN202111068455A CN113836008A CN 113836008 A CN113836008 A CN 113836008A CN 202111068455 A CN202111068455 A CN 202111068455A CN 113836008 A CN113836008 A CN 113836008A
Authority
CN
China
Prior art keywords
data
seed
test
target
module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202111068455.3A
Other languages
English (en)
Other versions
CN113836008B (zh
Inventor
潘高宁
林性伟
张旭鸿
贾永康
纪守领
吴春明
应鑫磊
王嘉水
武延军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202111068455.3A priority Critical patent/CN113836008B/zh
Publication of CN113836008A publication Critical patent/CN113836008A/zh
Application granted granted Critical
Publication of CN113836008B publication Critical patent/CN113836008B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

本说明书实施例提供了对虚拟机监视器进行模糊测试的方法,以及对应的模糊测试系统。该模糊测试系统包括,代理模块和测试模块,所述测试模块维护种子数据池。在模糊测试过程中,通过代理模块,截获目标虚拟设备发出的直接内存存取DMA读请求;将所述DMA读请求重定向至存储第一数据的目标位置,其中所述第一数据是所述测试模块根据种子数据池中的种子数据生成的测试用数据。

Description

针对虚拟机监视器进行模糊测试的方法和系统
技术领域
本说明书一个或多个实施例涉及程序测试领域,尤其涉及针对虚拟机监视器进行模糊测试的方法和装置。
背景技术
随着云计算在企业实体中的大规模应用和部署,虚拟化开发者和安全领域研究者开始越来越多地关注云计算的安全性。云计算产品的核心部件是虚拟机管理程序(hypervisor),又称为虚拟机监视器(Virtual Machine Monitor,VMM)。虚拟机监视器可以在一台主机,或一个主机平台上隔离出多个虚拟机。这带来了许多便利性的同时,也带来了一定的安全风险,也就是,有可能使得攻击者在主机中注入可疑数据,执行可疑代码。因此,虚拟机管理器的安全性分析和漏洞检测对于云计算企业来说至关重要。
模糊测试(fuzzing)是检测和发掘程序漏洞的重要而常用的测试技术。然而,由于虚拟机监视器本身的特点,对虚拟机监视器进行模糊测试,存在诸多困难。已有的针对虚拟机监视器的模糊测试和漏洞检测在执行效率、可扩展性等方面,存在明显的不足。
希望能有改进的方案,更加有效地针对虚拟机监视器进行模糊测试。
发明内容
本说明书一个或多个实施例描述了一种针对虚拟机监视器进行模糊测试的方法和模糊测试系统,可以自动化、高效地针对虚拟机监视器进行模糊测试。
根据第一方面,提供了一种对虚拟机监视器进行模糊测试的方法,通过模糊测试系统执行,所述模糊测试系统包括,代理模块和测试模块,所述测试模块维护种子数据池,所述方法包括:
通过所述代理模块,截获目标虚拟设备发出的直接内存存取DMA读请求;
将所述DMA读请求重定向至存储第一数据的目标位置,其中所述第一数据是所述测试模块根据种子数据池中的种子数据生成的测试用数据。
在一个实施例中,所述代理模块集成在所述虚拟机监视器内部。
根据一个实施例,所述目标虚拟设备是可由客户端用户访问的虚拟设备。
根据一种实施方式,上述方法还包括:测试模块从所述种子数据池中读取第一种子数据,对所述第一种子数据进行变异处理,生成所述第一数据,存储至所述目标位置。
进一步的,在不同实施例中,从所述种子数据池中读取所述第一种子数据可以包括:从种子数据的队列中顺次读取种子数据作为所述第一种子数据;或者,从所述种子数据池中随机读取种子数据作为所述第一种子数据。
根据另一种实施方式,所述目标位置存储测试数据集,所述测试数据集包含若干项测试用数据,所述若干项测试用数据由所述测试模块根据所述种子数据池中的若干种子数据生成。
在一种可能的实施方式中,种子数据池包括,与数据对象的多种对象类型对应的多个种子集;相应的,上述方法还包括:所述代理模块确定所述DMA读请求所针对的DMA对象的目标对象类型;所述测试模块从所述多个种子集中确定与所述目标对象类型对应的目标种子集,从所述目标种子集中读取第一种子数据,对所述第一种子数据进行变异处理,生成所述第一数据,存储至所述目标位置。
在另一种可能的实施方式中,测试模块根据上述多个种子集分别生成有多个测试数据集;在这样的情况下,代理模块还可以确定所述DMA读请求所针对的DMA对象的目标对象类型;并且,将所述DMA读请求重新定向至存储第一数据的目标位置,具体包括:在所述多个测试数据集中确定与所述目标对象类型对应的目标测试数据集,将该目标测试数据集的存储位置确定为所述目标位置。
在一个具体例子中,所述目标虚拟设备为虚拟USB,所述多种对象类型包括,qh队列头,td传输描述符,last-td。
根据一种实施方式,上述方法还包括:截获所述目标虚拟设备发出的DMA写请求;根据所述写请求获取第二数据,将所述第二数据添加到所述种子数据池中。
进一步的,在一个实施例中,在种子数据池包括与数据对象的多种对象类型对应的多个种子集的情况下,将所述第二数据添加到所述种子数据池中,具体包括:确定所述第二数据对应的对象类型;将第二数据添加到与该对象类型对应的种子集中。
根据一种实施方式,上述方法还包括:检测所述虚拟机监视器基于所述第一数据运行的覆盖代码;在所述覆盖代码使得所述模糊测试的代码覆盖率提升的情况下,将所述第一数据添加到所述种子数据池中。
根据第二方面,提供了一种意图识别方法,。
根据第二方面,提供了一种模糊测试系统,用于对虚拟机监视器进行模糊测试,所述模糊测试系统包括,代理模块和测试模块,所述测试模块维护种子数据池;
所述代理模块配置为,截获目标虚拟设备发出的直接内存存取DMA读请求;将所述DMA读请求重定向至存储第一数据的目标位置,其中所述第一数据是所述测试模块根据种子数据池中的种子数据生成的测试用数据。
根据第三方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
在本说明书的实施例中,通过对虚拟设备DMA指令进行截获,直接将基于种子数据生成的测试用数据馈送至虚拟设备,从而对虚拟机监视器进行模糊测试。由于直接截获了虚拟设备对内存的DMA指令,无需关注虚拟机监视器对数据结构的组织,因此避免了对设备所需的复杂的数据嵌套结构的学习,自动化地实现模糊测试过程。并且,由于不依赖于对特定虚拟设备或虚拟机监视器的数据结构的学习,上述方案具有很强的扩展性,可以容易地扩展适用于模拟各种设备的各种虚拟机监视器。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出虚拟化架构示意图;
图2示出根据一个实施例的模糊测试系统的示意图;
图3示出在一个实施例中针对虚拟机监视器进行模糊测试的方法流程图;
图4示出根据一个实施例对DMA请求进行重定向的示意图;
图5示出在一个实施例中根据DMA对象类型组织的种子数据池;
图6示出在一个实施例中根据DMA对象类型馈送测试用数据的示意图;
图7示出根据一个实施例的模糊测试系统的结构示意图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
如前所述,虚拟化和云计算的流行带来便利的同时,也带来了安全方面的风险。如本领域技术人员所知,在云计算场景下,一般利用虚拟机监视器hypervisor在一个物理平台(一个主机)上隔离模拟出多个虚拟机。图1示出虚拟化架构示意图。如图所示,每个虚拟机具有虚拟设备层,客户(guest)操作系统OS和安装于其上的客户应用,如此,对于客户(guest)端用户来说,虚拟机表现地如同一个单独的物理主机一样。虚拟机中客户端用户可见可用的设备,可称为虚拟设备(virtual device),是虚拟机监视器模拟出的硬件外围设备,用于为虚拟机提供与对应物理设备一致的功能性。虚拟设备在客户虚拟机中表现地如同真实硬件设备一样,客户操作系统中的驱动器可以如同驱动真实物理设备一样驱动虚拟设备。目前的多数虚拟机监视器可以模拟几乎所有的硬件设备,例如显卡、存储设备、网卡、USB等等。
基于虚拟设备自身的作用和特点,虚拟设备会暴露许多接口给客户端用户,使其与主机通信。从攻击者的角度来说,这同时意味着,虚拟设备允许攻击者从客户系统向主机写入任意数据。因此,虚拟设备可以认为是虚拟机监视器系统架构中最为薄弱、易受攻击的部分。因此,虚拟设备也成为虚拟机监视器安全分析和漏洞检测的主要目标。
然而,基于虚拟设备对虚拟机监视器进行模糊测试仍然存在诸多困难和挑战,这主要源于,模糊测试所需的数据具有复杂的数据结构关系。
如本领域技术人员所知,虚拟机监视器被设计用于从/向客户内存传输数据用于驱动器-设备之间的通信。各种虚拟设备具有对应的数据协议规范,其中可能涉及复杂的数据嵌套关系和数据结构。
从总体组织结构来说,设备的数据结构可以表示为由嵌套的节点构成的多层级的树状结构,其中,节点是一些数据块,节点之间的链接通过指针建立。这样的树状结构有可能具有相当的深度,还可能具有递归的子结构,例如,一棵树有可能作为另一棵树中的一个节点元素,一个节点可能包含一个子树及其所有的后继节点。常规的随机模糊测试的方案,由于很难符合上述数据结构,会严重影响模糊测试的执行效率。
进一步的,在节点层级,每个节点可以认为是元数据和指针的组合。然而,节点中指针的偏移量是不确定的,根据不同的数据结构而改变。在随机模糊测试的方案中,常常会生成随机的指针,而这样的指针往往是无效指针,或者指向无法映射的页面。如果不能了解节点层级的数据语义,也难以构建有效的嵌套数据结构。因此,模糊测试器不仅需要了解数据总体组织的结构语义,还需要了解每个节点的数据语义,否则,无法构建合乎协议规范的数据结构,也就难以实现虚拟机监视器的有效测试。
此外,根据协议规范,虚拟设备一般支持多种数据类型;嵌套结构中节点数据类型的语义理解对于模糊测试也很重要。具体而言,嵌套结构中的节点可能具有不同数据类型,每个节点可以具有指向不同数据类型的一个或多个指针。不同节点之间的指向关系根据规范而定。有时候,精确的指向关系需要在运行时才能确定。这为数据结构的理解,和准确的数据结构的构建,带来了进一步的困难。
因此,一部分模糊测试器由于馈送的模糊测试数据不能满足要求,例如馈送了无效的指针等,使得虚拟机监视器的运行出现中断或异常,影响模糊测试的效果。还有一些模糊测试器,基于其开发人员对数据结构的研究,可以为虚拟机监视器提供近乎满足规范的模糊测试数据。然而,这需要开发人员耗费大量的时间、精力对各种设备的数据结构进行分析和学习,人力成本极高。并且,这样的模糊测试器只能针对已进行广泛研究的虚拟设备,难以进行扩展。
有鉴于此,本案的发明人通过对虚拟设备工作过程的研究,提出一种全新的可扩展的模糊测试系统,该系统能够避免对复杂数据结构的学习和依赖,自动化地针对虚拟机监视器进行模糊测试。
具体而言,经过研究分析,对于客户端用户,包括可能的攻击者,虚拟设备会暴露三种重要的交互接口:内存映射IO(Memory mapped I/O,MMIO),端口IO(Port I/O,PIO),以及直接内存存取(Direct Memory Access,DMA)。在设备执行的开始,客户端驱动器通常会向MMIO或PIO区域写入一些数据,使得设备执行一些初始化的工作。在初始化阶段完成之后,设备转入预备处理数据的工作状态,可以进行设备特定工作的执行。例如,虚拟USB开始传输USB数据,等等。在这个数据处理阶段,主要的交互机制是DMA,该机制允许设备与客户传输较大的复杂的数据。
基于此,在本说明书的实施例中,提出通过直接截获虚拟设备的IO指令,实施模糊测试的方案构思。图2示出根据一个实施例的模糊测试系统的示意图。如图2所示,该实施例的模糊测试系统包括,测试模块和代理模块。
测试模块,作用为模糊测试器(fuzzer),用于产生模糊测试所用的测试用数据(fuzzed data)。根据一个实施例,该测试模块可以设置于虚拟机之外。不同于常规fuzzer,该测试模块维护一个种子数据池,其中包含一定量的种子数据。在模糊测试过程中,测试模块根据种子数据,例如通过变异处理生成测试用数据,提供给代理模块。
代理模块(fuzzing agent)可以模拟真实世界场景中由攻击者控制的客户端内核驱动器,它截获来自虚拟设备的各种DMA和IO读写指令。在模糊测试过程中,一旦截获到向客户内存的DMA读指令,就对该DMA读指令进行重定向,将上述测试模块生成的测试用数据馈送给虚拟设备。在一些情况下,代理模块还可以向测试模块维持的种子数据池中补充种子数据。例如,在虚拟机监视器基于上述测试用数据的运行覆盖到新的代码时,可以将该测试用数据作为种子数据,添加到上述数据池中。此外,在模糊测试之前或过程中,代理模块还可以截获来自虚拟设备的DMA写指令,获取写指令中的数据作为种子数据,添加到上述种子数据池。
如此,在上述模糊测试系统中,代理模块和测试模块互相配合,通过代理模块对虚拟设备IO指令进行截获,直接将测试模块生成的测试用数据馈送至虚拟设备,从而对虚拟机监视器进行模糊测试。由于直接截获了虚拟设备对内存的DMA指令,无需关注虚拟机监视器对数据结构的组织,因此避免了对设备所需的复杂的数据嵌套结构的学习。
下面详细描述模糊测试的具体实施过程。
图3示出在一个实施例中针对虚拟机监视器进行模糊测试的方法流程图。该方法通过模糊测试系统执行,该模糊测试系统包括测试模块和代理模块,如图2所示。
具体地,在一个实施例中,测试模块可以设置于虚拟机和虚拟机监视器之外。测试模块可以维护一个种子数据池,其中包含一些种子数据。初始地,种子数据可以来源于以下中的一项或多项:随机产生的数据,根据预设的测试用例编写的数据,从虚拟设备截获的数据。在后续的虚拟机监视器的模糊测试过程中,还可以向种子数据池补充添加数据。
代理模块用于截获虚拟设备的IO指令。在一个实施例中,代理模块可以设置在虚拟机的客户操作系统中。在另一实施例中,代理模块可以集成到虚拟机监视器中,如此避免可能的虚拟机退出或重启导致的性能下降,提升模糊测试的运行效率。
基于以上的测试模块和代理模块,在模糊测试过程中,可以执行以下步骤流程。
在步骤31,通过代理模块,截获目标虚拟设备发出的DMA读请求。
在一个实施例中,代理模块持续监视各种DMA指令和请求,一旦检测到来自目标虚拟设备的DMA读请求,将其截获。事实上,在模糊测试过程中,代理模块并不关心也无需关心其他内部系统部件发出的DMA请求,而只需关注可被客户端用户控制的特定虚拟设备,这里称为目标虚拟设备,所发出的DMA写请求。例如,在虚拟机QEMU中,DMA读指令的形式为:pci_dma_read。
根据一种实施方式,代理模块中包括hook代码,利用hook机制来截获上述DMA读请求。
接着,在步骤32,代理模块将截获的DMA读请求,重定向至存储第一数据的目标位置,其中所述第一数据是所述测试模块根据种子数据池中的种子数据生成的测试用数据。也就是说,代理模块使得虚拟设备从目标位置读取第一数据,作为DMA读请求的响应数据。而该第一数据是由测试模块基于种子数据生成的测试用数据,即fuzzed data,由此,模糊测试系统将测试用数据直接馈送给了虚拟设备。
图4示出根据一个实施例对DMA请求进行重定向的示意图。如图所示,虚拟设备所发出的DMA读请求,其原本的目的地为客户内存;代理模块对其进行重定向后,其访问目的地变为,存储测试用数据的数据集或文件。由于直接将测试用数据馈送给虚拟设备,跳过了虚拟机监视器的数据组织逻辑和DMA寻址过程,上述数据集或文件中,可以以平坦化、无结构的方式,存储测试用数据。
上述测试用数据,例如第一数据,可以以多种方式生成并存储。
在一个实施例中,测试模块可以以类似实时的方式,生成上述第一数据。具体的,每当代理模块截获到一个DMA请求,测试模块就从种子数据池中读取种子数据,对其进行变异处理(mutation),生成第一数据,存储到预先指定的目标位置。于是,在代理模块对该DMA读请求重定向后,虚拟设备就从该目标位置读取该第一数据作为读请求的响应数据。可以理解,上述变异处理,可以是模糊测试中为丰富和扩展测试数据而对已有数据进行的各种变形、变换处理,例如,可以是基于种子数据进行的、一定范围内的随机变换,比如随机调整其数值,等等。
在另一实施例中,测试模块也可以预先基于种子数据池中的若干种子数据,对应生成若干测试用数据,形成一个数据集或文件,将该数据集或文件存储到目标位置。在代理模块对该DMA读请求重定向后,虚拟设备就从该目标位置读取该第一数据作为读请求的响应数据。具体地,可以从目标位置存储的数据集或文件中顺次读取,或随机读取数据作为上述第一数据。上述数据集或文件的生成和存储,可以在模糊测试开始之前预先进行,也可以在模糊测试过程中,定期或不定期的进行。
根据一种实施方式,种子数据池中的种子数据可以组织为队列形式,例如形成种子队列。在这样的情况下,在需要读取种子数据生成测试用数据时,可以从种子队列中依次读取种子数据,生成上述第一数据或上述包含测试用数据的数据集和文件。当然,种子数据也可以组织成其他无序形式,在需要读取种子数据时,采取随机方式从种子数据池中取出若干种子数据。
在一个具体例子中,截获的原始DMA读请求的形式例如为:pci_dma_read(dev,buffer_addr,&buf,size)。重定向之后,读请求的代码执行可以表示为:read_from_testcase(&buf,size),其中testcase可以是上述目标位置的包含测试用数据的数据集或文件,其中关于buf和size的参数大小不变。
进一步地,为了更好地体现数据语义,进一步提升模糊测试的效果,根据一种实施方式,对DMA请求涉及的DMA对象的类型进行分析和分别处理。
在一个实施例中,可以对虚拟机监视器的源代码进行静态分析,获取代码级别上每个DMA操作的DMA对象的类型信息,如此得到n个对象类型。相应的,按照该n个对象类型,将种子数据池组织为n个种子集,每个种子集对应于一种对象类型。在模糊测试时,取决于当前截获的DMA读请求所针对的DMA对象的类型,获取基于该类型的种子数据所生成的测试用数据,馈送给虚拟设备。
下面结合例子具体描述。
图5示出在一个实施例中根据DMA对象类型组织的种子数据池。在图5的例子中,通过对虚拟USB(具体为USB-UHCI)的相关源代码的静态分析,包括控制流分析和反向数据流分析,可以得到3种类型的DMA对象,即:qh(queue head)队列头,td(transfer descriptor)传输描述符,last-td。为此,测试模块维持的种子数据池中,包含3个种子集,图中具体示出为种子队列。队列1对应于qh类对象,其中的各个种子数据分别表示为qh1,qh2,等等。类似的,队列2对应于td对象,队列3对应于last-td对象。因此,测试模块可以根据DMA对象的多种对象类型,在种子数据池中维持多个种子集。
对应的,在模糊测试时,代理模块可以在截获DMA读请求的基础上,进一步确定该DMA读请求所针对的DMA对象的目标对象类型,例如为td对象类型。在实时生成测试用数据的情况下,测试模块可以从上述多个种子集中确定与目标对象类型对应的目标种子集,例如为队列2,从该目标种子集中读取种子数据,对其进行变异处理,生成前述第一数据,存储至重定向的目标位置。
在预先生成测试用数据集的情况下,测试模块可以根据上述多个种子集分别生成有多个测试数据集,例如,分别与前述队列1至队列3对应的数据集1至数据集3。在代理模块确定出当前截获的DMA读请求所针对的DMA对象的目标对象类型(例如td对象类型)之后,它可以在前述多个测试数据集1到3中确定与目标对象类型对应的目标测试数据集,例如为数据集2,将该目标测试数据集的存储位置确定为目标位置,从而将DMA读请求重定向至该目标位置。
图6示出在一个实施例中根据DMA对象类型馈送测试用数据的示意图。图6与图4类似,均包含将DMA读请求进行重定向的步骤示意。不同的是,在图6中,根据DMA对象的不同对象类型,重定向至不同类型的测试用数据,该不同类型的测试用数据基于对应的对象类型的种子数据而生成。如此,在重定向过程中,添加了类型限制,使得馈送至虚拟设备的测试用数据更好地符合数据的类型要求,进而更好地满足数据语义要求,从而提升模糊测试的效果。
以上描述了,在模糊测试过程中,通过对DMA读请求的截获和重定向,将基于种子数据池生成的测试用数据馈送至虚拟设备的过程。实践中,种子数据池可以是动态维护,不断更新的。
一般而言,种子数据池中的初始种子可以是在模糊测试开始之前生成的。如前所述,初始种子可以来源于,随机产生的数据,和/或,根据预设的测试用例编写的数据,和/或从虚拟设备截获的数据。其中从虚拟设备截获的数据可以是,利用前述代理模块截获来自目标虚拟设备的DMA写请求中的目标数据,例如,pci_dma_write指令所针对的数据。截获的原理和方式与前述截获DMA读指令类似。DMA写请求是请求将目标数据写入到客户内存中的请求,其中的目标数据一般是虚拟设备自身产生的真实数据,因此将这样的数据作为种子数据,可以得到与目标虚拟设备实际数据非常接近的测试用数据。
在一个实施例中,在模糊测试过程中,也可以继续截获来自目标虚拟设备的DMA写请求,从该写请求中获取目标数据,将其添加到种子数据池中。
根据一种实施方式,在通过以上步骤32将第一数据馈送至目标虚拟设备之后,可以检测虚拟机监视器基于该第一数据运行的代码覆盖情况。这可以通过在虚拟机监视器的源代码中插入探针(instrument)来实现。如果该第一数据使得虚拟机监视器运行中覆盖到了新的代码段或代码分支,或者说,基于第一数据运行的覆盖代码使得模糊测试的代码覆盖率有所提升,那么则将上述第一数据作为种子数据,添加到种子数据池中。
在以上添加种子数据时,在种子数据池根据DMA对象类型组织为多个种子集的情况下,还需确定待添加的数据对应的对象类型,从而将其添加到该对象类型对应的种子集中。对于上述第一数据,由于它是基于原始种子进行变异处理生成的,其对象类型与原始种子相同,可以直接将其添加到其原始种子所属的种子集中。
通过以上方式,动态地维护种子数据池,从而使得生成的测试用数据更加丰富,也更加趋于虚拟机监视器及虚拟设备的实际所需数据,有助于提升模糊测试的运行效能和代码覆盖率。
回顾以上过程,根据本说明书的实施例,通过对虚拟设备DMA指令进行截获,直接将基于种子数据生成的测试用数据馈送至虚拟设备,从而对虚拟机监视器进行模糊测试。由于直接截获了虚拟设备对内存的DMA指令,无需关注虚拟机监视器对数据结构的组织,因此避免了对设备所需的复杂的数据嵌套结构的学习,自动化地实现模糊测试过程。并且,由于不依赖于对特定虚拟设备或虚拟机监视器的数据结构的学习,上述方案具有很强的扩展性,可以容易地扩展适用于模拟各种设备的各种虚拟机监视器。进一步的,上述方案还可以通过对DMA对象类型的区分,进一步引入对数据语义的利用,进一步提升模糊测试效率。
根据另一方面的实施例,还提供了一种模糊测试系统,用于对虚拟机监视器进行模糊测试。图7示出根据一个实施例的模糊测试系统的结构示意图,该系统可以部署在任何具有数据存储、计算、处理能力的设备、平台中,对其中的虚拟机监视器进行模糊测试。如图7所示,该模糊测试系统700包括:代理模块710和测试模块720,所述测试模块720维护种子数据池730;
所述代理模块710配置为,截获目标虚拟设备发出的直接内存存取DMA读请求;将所述DMA读请求重定向至存储第一数据的目标位置,其中所述第一数据是所述测试模块720根据种子数据池730中的种子数据生成的测试用数据。
在一个实施例中,所述代理模块集成在所述虚拟机监视器内部。
根据一个实施例,所述目标虚拟设备是可由客户端用户访问的虚拟设备。
根据一种实施方式,所述测试模块720还配置为:从所述种子数据池中读取第一种子数据,对所述第一种子数据进行变异处理,生成所述第一数据,存储至所述目标位置。
进一步的,在不同实施例中,所述测试模块720具体配置为,通过以下方式从所述种子数据池中读取所述第一种子数据:
从种子数据的队列中顺次读取种子数据作为所述第一种子数据;或者,
从所述种子数据池中随机读取种子数据作为所述第一种子数据。
根据另一种实施方式,所述目标位置存储测试数据集,所述测试数据集包含若干项测试用数据,所述若干项测试用数据由所述测试模块根据所述种子数据池中的若干种子数据生成。
在一种可能的实施方式中,所述种子数据池730包括,与数据对象的多种对象类型对应的多个种子集;
所述代理模块710还配置为,确定所述DMA读请求所针对的DMA对象的目标对象类型;
所述测试模块720还配置为,从所述多个种子集中确定与所述目标对象类型对应的目标种子集,从所述目标种子集中读取第一种子数据,对所述第一种子数据进行变异处理,生成所述第一数据,存储至所述目标位置。
在另一种可能的实施方式中,所述种子数据池730包括,与数据对象的多种对象类型对应的多个种子集;所述测试模块720根据所述多个种子集分别生成有多个测试数据集;
所述代理模块710还配置为:确定所述DMA读请求所针对的DMA对象的目标对象类型;在所述多个测试数据集中确定与所述目标对象类型对应的目标测试数据集,将该目标测试数据集的存储位置确定为所述目标位置。
在一个具体例子中,所述目标虚拟设备为虚拟USB,所述多种对象类型包括,qh队列头,td传输描述符,last-td。
根据一种实施方式,所述代理模块710还配置为:截获所述目标虚拟设备发出的DMA写请求;根据所述写请求获取第二数据,将所述第二数据添加到所述种子数据池730中。
进一步的,在一个实施例中,在种子数据池包括与数据对象的多种对象类型对应的多个种子集的情况下,代理模块710还配置为:确定所述第二数据对应的对象类型;将第二数据添加到与该对象类型对应的种子集中。
根据一种实施方式,模糊测试系统700还包括(未示出)检测模块,配置为检测所述虚拟机监视器基于所述第一数据运行的覆盖代码;在所述覆盖代码使得所述模糊测试的代码覆盖率提升的情况下,将所述第一数据添加到所述种子数据池中。
通过以上模糊测试系统,对虚拟设备DMA指令进行截获,直接将基于种子数据生成的测试用数据馈送至虚拟设备,从而自动化地对虚拟机监视器进行模糊测试。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图3所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图3所述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

Claims (25)

1.一种对虚拟机监视器进行模糊测试的方法,通过模糊测试系统执行,所述模糊测试系统包括,代理模块和测试模块,所述测试模块维护种子数据池,所述方法包括:
通过所述代理模块,截获目标虚拟设备发出的直接内存存取DMA读请求;
将所述DMA读请求重定向至存储第一数据的目标位置,其中所述第一数据是所述测试模块根据种子数据池中的种子数据生成的测试用数据。
2.根据权利要求1所述的方法,其中,所述代理模块集成在所述虚拟机监视器内部。
3.根据权利要求1所述的方法,其中,所述目标虚拟设备是可由客户端用户访问的虚拟设备。
4.根据权利要求1所述的方法,还包括:
所述测试模块从所述种子数据池中读取第一种子数据,对所述第一种子数据进行变异处理,生成所述第一数据,存储至所述目标位置。
5.根据权利要求4所述的方法,其中,从所述种子数据池中读取所述第一种子数据包括:
从种子数据的队列中顺次读取种子数据作为所述第一种子数据;或者,
从所述种子数据池中随机读取种子数据作为所述第一种子数据。
6.根据权利要求1所述的方法,其中,所述目标位置存储测试数据集,所述测试数据集包含若干项测试用数据,所述若干项测试用数据由所述测试模块根据所述种子数据池中的若干种子数据生成。
7.根据权利要求1所述的方法,其中,所述种子数据池包括,与数据对象的多种对象类型对应的多个种子集;
所述方法还包括:
所述代理模块确定所述DMA读请求所针对的DMA对象的目标对象类型;
所述测试模块从所述多个种子集中确定与所述目标对象类型对应的目标种子集,从所述目标种子集中读取第一种子数据,对所述第一种子数据进行变异处理,生成所述第一数据,存储至所述目标位置。
8.根据权利要求1所述的方法,其中,所述种子数据池包括,与数据对象的多种对象类型对应的多个种子集;所述测试模块根据所述多个种子集分别生成有多个测试数据集;
所述方法还包括,确定所述DMA读请求所针对的DMA对象的目标对象类型;
将所述DMA读请求重新定向至存储第一数据的目标位置,包括:
在所述多个测试数据集中确定与所述目标对象类型对应的目标测试数据集,将该目标测试数据集的存储位置确定为所述目标位置。
9.根据权利要求7或8所述的方法,其中,所述目标虚拟设备为虚拟USB,所述多种对象类型包括,qh队列头,td传输描述符,last-td。
10.根据权利要求1所述的方法,还包括:
截获所述目标虚拟设备发出的DMA写请求;
根据所述写请求获取第二数据,将所述第二数据添加到所述种子数据池中。
11.根据权利要求10所述的方法,其中,所述种子数据池包括,与数据对象的多种对象类型对应的多个种子集;
将所述第二数据添加到所述种子数据池中,包括:
确定所述第二数据对应的对象类型;将第二数据添加到与该对象类型对应的种子集中。
12.根据权利要求1所述的方法,还包括:
检测所述虚拟机监视器基于所述第一数据运行的覆盖代码;
在所述覆盖代码使得所述模糊测试的代码覆盖率提升的情况下,将所述第一数据添加到所述种子数据池中。
13.一种模糊测试系统,用于对虚拟机监视器进行模糊测试,所述模糊测试系统包括,代理模块和测试模块,所述测试模块维护种子数据池;
所述代理模块配置为,截获目标虚拟设备发出的直接内存存取DMA读请求;将所述DMA读请求重定向至存储第一数据的目标位置,其中所述第一数据是所述测试模块根据种子数据池中的种子数据生成的测试用数据。
14.根据权利要求13所述的模糊测试系统,其中,所述代理模块集成在所述虚拟机监视器内部。
15.根据权利要求13所述的模糊测试系统,其中,所述目标虚拟设备是可由客户端用户访问的虚拟设备。
16.根据权利要求13所述的模糊测试系统,所述测试模块还配置为:
从所述种子数据池中读取第一种子数据,对所述第一种子数据进行变异处理,生成所述第一数据,存储至所述目标位置。
17.根据权利要求16所述的模糊测试系统,其中,所述测试模块具体配置为,通过以下方式从所述种子数据池中读取所述第一种子数据:
从种子数据的队列中顺次读取种子数据作为所述第一种子数据;或者,
从所述种子数据池中随机读取种子数据作为所述第一种子数据。
18.根据权利要求13所述的模糊测试系统,其中,所述目标位置存储测试数据集,所述测试数据集包含若干项测试用数据,所述若干项测试用数据由所述测试模块根据所述种子数据池中的若干种子数据生成。
19.根据权利要求13所述的模糊测试系统,其中,所述种子数据池包括,与数据对象的多种对象类型对应的多个种子集;
所述代理模块还配置为,确定所述DMA读请求所针对的DMA对象的目标对象类型;
所述测试模块还配置为,从所述多个种子集中确定与所述目标对象类型对应的目标种子集,从所述目标种子集中读取第一种子数据,对所述第一种子数据进行变异处理,生成所述第一数据,存储至所述目标位置。
20.根据权利要求13所述的模糊测试系统,其中,所述种子数据池包括,与数据对象的多种对象类型对应的多个种子集;所述测试模块根据所述多个种子集分别生成有多个测试数据集;
所述代理模块还配置为:确定所述DMA读请求所针对的DMA对象的目标对象类型;
在所述多个测试数据集中确定与所述目标对象类型对应的目标测试数据集,将该目标测试数据集的存储位置确定为所述目标位置。
21.根据权利要求19或20所述的模糊测试系统,其中,所述目标虚拟设备为虚拟USB,所述多种对象类型包括,qh队列头,td传输描述符,last-td。
22.根据权利要求13所述的模糊测试系统,所述代理模块还配置为:
截获所述目标虚拟设备发出的DMA写请求;
根据所述写请求获取第二数据,将所述第二数据添加到所述种子数据池中。
23.根据权利要求22所述的方法,其中,所述种子数据池包括,与数据对象的多种对象类型对应的多个种子集;
所述代理模块还配置为:确定所述第二数据对应的对象类型;将第二数据添加到与该对象类型对应的种子集中。
24.根据权利要求13所述的模糊测试系统,还包括:
检测模块,配置为检测所述虚拟机监视器基于所述第一数据运行的覆盖代码;在所述覆盖代码使得所述模糊测试的代码覆盖率提升的情况下,将所述第一数据添加到所述种子数据池中。
25.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-12中任一项所述的方法。
CN202111068455.3A 2021-09-13 2021-09-13 针对虚拟机监视器进行模糊测试的方法和系统 Active CN113836008B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111068455.3A CN113836008B (zh) 2021-09-13 2021-09-13 针对虚拟机监视器进行模糊测试的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111068455.3A CN113836008B (zh) 2021-09-13 2021-09-13 针对虚拟机监视器进行模糊测试的方法和系统

Publications (2)

Publication Number Publication Date
CN113836008A true CN113836008A (zh) 2021-12-24
CN113836008B CN113836008B (zh) 2023-10-27

Family

ID=78958957

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111068455.3A Active CN113836008B (zh) 2021-09-13 2021-09-13 针对虚拟机监视器进行模糊测试的方法和系统

Country Status (1)

Country Link
CN (1) CN113836008B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101923678A (zh) * 2010-07-30 2010-12-22 武汉天喻信息产业股份有限公司 一种企业管理软件的数据安全保护方法
US9239840B1 (en) * 2009-04-24 2016-01-19 Swish Data Corporation Backup media conversion via intelligent virtual appliance adapter
CN110348216A (zh) * 2019-05-24 2019-10-18 中国科学院信息工程研究所 一种针对云计算系统虚拟设备的模糊测试方法及系统
CN110727588A (zh) * 2019-09-29 2020-01-24 浙江大搜车软件技术有限公司 网络应用的测试方法、系统、计算机设备和可读存储介质
CN111124926A (zh) * 2019-12-25 2020-05-08 支付宝(杭州)信息技术有限公司 模糊测试方法、装置、电子设备及存储介质
CN112035303A (zh) * 2020-09-01 2020-12-04 腾讯科技(深圳)有限公司 一种数据测试方法、装置、计算机及可读存储介质
CN112181833A (zh) * 2020-09-28 2021-01-05 全球能源互联网研究院有限公司 一种智能化模糊测试方法、装置及系统
US20210026758A1 (en) * 2019-07-26 2021-01-28 Vmware, Inc. Efficient fuzz testing of low-level virtual devices
WO2021135532A1 (zh) * 2020-07-21 2021-07-08 平安科技(深圳)有限公司 云网络漏洞挖掘方法、装置、电子设备及介质
CN113162892A (zh) * 2020-01-23 2021-07-23 北京华顺信安科技有限公司 一种poc验证环境快速生成方法、可读介质及设备

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9239840B1 (en) * 2009-04-24 2016-01-19 Swish Data Corporation Backup media conversion via intelligent virtual appliance adapter
CN101923678A (zh) * 2010-07-30 2010-12-22 武汉天喻信息产业股份有限公司 一种企业管理软件的数据安全保护方法
CN110348216A (zh) * 2019-05-24 2019-10-18 中国科学院信息工程研究所 一种针对云计算系统虚拟设备的模糊测试方法及系统
US20210026758A1 (en) * 2019-07-26 2021-01-28 Vmware, Inc. Efficient fuzz testing of low-level virtual devices
CN110727588A (zh) * 2019-09-29 2020-01-24 浙江大搜车软件技术有限公司 网络应用的测试方法、系统、计算机设备和可读存储介质
CN111124926A (zh) * 2019-12-25 2020-05-08 支付宝(杭州)信息技术有限公司 模糊测试方法、装置、电子设备及存储介质
CN113162892A (zh) * 2020-01-23 2021-07-23 北京华顺信安科技有限公司 一种poc验证环境快速生成方法、可读介质及设备
WO2021135532A1 (zh) * 2020-07-21 2021-07-08 平安科技(深圳)有限公司 云网络漏洞挖掘方法、装置、电子设备及介质
CN112035303A (zh) * 2020-09-01 2020-12-04 腾讯科技(深圳)有限公司 一种数据测试方法、装置、计算机及可读存储介质
CN112181833A (zh) * 2020-09-28 2021-01-05 全球能源互联网研究院有限公司 一种智能化模糊测试方法、装置及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
P.CHEN 等: "Angora:Efficient fuzzing by prin cipled search", IEEE SYMPOSIUM ON SECURITY AND PRIVACY(S&P) *
沙乐天;肖甫;杨红柯;喻辉;王汝传;: "基于自适应模糊测试的IaaS层漏洞挖掘方法", 软件学报, no. 05 *
舒红宇, 岑伊万: "基于多线程技术的虚拟测控平台设计", 测控技术, no. 10 *

Also Published As

Publication number Publication date
CN113836008B (zh) 2023-10-27

Similar Documents

Publication Publication Date Title
US10417065B2 (en) Method and system for automated agent injection in container environments
KR102255767B1 (ko) 가상 머신 감사를 위한 시스템 및 방법들
US6826746B2 (en) Debugger probe for object oriented programming
US12013939B2 (en) Analysis system, analysis method, analysis device, and storage medium for analyzing operation of a program executed in an analysis environment
RU2679175C1 (ru) Способ поведенческого обнаружения вредоносных программ с использованием виртуальной машины-интерпретатора
US9658941B2 (en) Methods and systems of function-specific tracing
US8572604B2 (en) Method and apparatus to support virtualization with code patches
EP3035191B1 (en) Identifying source code used to build executable files
US6584487B1 (en) Method, system, and apparatus for managing tasks
US11669334B2 (en) Just-in-time containers
US10372908B2 (en) System and method for detecting malware in a stream of bytes
CN102207896A (zh) 虚拟机崩溃文件生成技术
US9516094B2 (en) Event-responsive download of portions of streamed applications
US11886302B1 (en) System and method for execution of applications in a container
US11556458B2 (en) Efficient fuzz testing of low-level virtual devices
EP3171275A1 (en) Transparent process interception
US20160139917A1 (en) Incremental source code analysis
CN105678160B (zh) 用于提供对引导驱动程序的原始例程的访问的系统和方法
US8904346B1 (en) Method and system for automated load testing of web applications
US20170060571A1 (en) System and method for masking complexity in a heterogeneous development environment
CN113836008A (zh) 针对虚拟机监视器进行模糊测试的方法和系统
Baird et al. Automated Dynamic Detection of Self-Hiding Behavior
Zhu et al. Toward automatically deducing key device states for the live migration of virtual machines
Mendonça et al. Intercept: Profiling Windows Network Device Drivers
Mukhtar et al. FLoW-Linux: Virtualization distribution scheme for fault tolerant and system enhancement

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant