一种针对云计算系统虚拟设备的模糊测试方法及系统技术方案

技术编号:22330529 阅读:81 留言:0更新日期:2019-10-19 12:21
本发明专利技术涉及一种针对云计算系统虚拟设备的模糊测试方法及系统。该方法包括:对目标虚拟设备的代码进行感知,自动生成测试用例;插桩目标虚拟设备的QEMU的Qtest执行引擎,获取PCI总线的初始化序列,实现在不启动操作系统或系统快照的情况下,有效且快速实现设备状态的初始化;构造模糊测试执行引擎,直接读取测试数据,实现测试用例的自动重放,提高模糊测试的效率;监控QEMU进程,如果产生异常则通过测试用例最小化进程缩减测试用例,并自动生成POC程序代码来验证发现的异常。本发明专利技术能够有效地对基于KVM/QEMU开发的云平台进行安全漏洞的检测,从而帮助服务提供者及时防御或消除潜在的威胁,避免或降低不必要的损失。

【技术实现步骤摘要】
一种针对云计算系统虚拟设备的模糊测试方法及系统
本专利技术涉及计算机系统安全领域,用于检测云计算系统虚拟设备中存在的安全漏洞,更具体地,是一种针对云计算系统虚拟设备的模糊测试方法及系统。
技术介绍
随着全球云计算市场份额的持续增长,作为云计算的基础,虚拟化技术得到了广泛的应用,同时,不可避免带来了很多安全问题,利用虚拟化平台漏洞进行攻击的恶意行为层出不穷。虚拟设备作为虚拟化平台的一个重要组成部分,是虚拟化平台安全威胁的主要来源之一。利用虚拟设备的漏洞可以在目标云计算系统中发起逃逸攻击或拒绝服务攻击,从而影响云计算系统的正常安全运行。虚拟设备主要运行在用户层,虚拟设备代码相比客户机系统,其执行权限更高,更接近于虚拟机管理程序。相比从客户层的客户机系统里测试虚拟机管理程序,利用虚拟设备的漏洞,从用户层渗透测试虚拟机管理程序更加直接。虚拟设备由很多开发者共同开发和维护,而且虚拟设备种类很多,虚拟设备代码体量庞大,每年都在增长,虚拟设备存在漏洞的概率很大。随着OpenStack成为众多行业构建云基础架构的首选,而OpenStack的重要组成部分—KVM计算资源虚拟化技术也随着OpenStack的普及而应用得越来越广泛。而且由于KVM和Xen的超级管理程序都使用QEMU来实现硬件设备的功能模拟,所以我们选取QEMU虚拟设备作为测试目标。测试虚拟设备存在困难和挑战,这与虚拟设备的特点相关。第一,虚拟设备是多状态的。在测试虚拟设备之前,虚拟设备需要先达到已知的设备初始化状态。虚拟设备与虚拟机管理程序交互,在不同的输入条件下呈现不同的设备状态。虚拟设备的异常往往需要在特定的设备状态下才能成功触发。大部分的测试工具可以直接针对用户层的程序输入接口进行测试,但是它们不能直接用来测试虚拟设备,必须要考虑到设备状态。第二,虚拟设备种类多,接口多。虚拟设备包括网卡、显卡、声卡、输入设备、存储设备等,不同的设备寄存器地址范围不同、设备读写类型不同。测试用例的生成需要考虑不同设备的输入结构和输入约束范围。目前,测试虚拟设备的思路在设备的初始化、设备的测试、测试用例生成方面存在许多问题。首先,在一个完整的操作系统中,PCI总线的初始化和设备的初始化通常是在BIOS系统自启动和引导过程中来完成的。另外,通过利用虚拟机快照的方式也是实现设备的初始化的一个解决方案。但是无论是通过BIOS系统引导的方式还是通过虚拟机快照的方式,设备的初始化过程都相当耗时,并不能有效地实现大规模测试。其次,基于现有的虚拟设备的测试方法,我们发现大部分虚拟设备测试方法都是通过测试客户端向测试服务器发送I/O序列来实现测试的。测试客户端和测试服务器之间交互通过进程间的通信或串口通信来实现的。使用进程间的通信,数据解析和传输都需要时间,测试速度相对直接测试来说较慢,而且一旦目标程序挂起,测试驱动会进入等待状态,无法立即检测设备的挂起状态。最后,大部分模糊测试工具对代码格式没有感知,采取一种盲目变异的方式。它们主要依靠产生大量的变异输入来发现新的基本块。这种盲目的变异策略导致测试速度很慢,而且深入发现执行路径具有偶然性。
技术实现思路
为解决上述问题,本专利技术提供一种针对云计算系统虚拟设备的模糊测试方法及系统,解决现有的测试方法在设备初始化、设备测试用例生成、测试用例的重放三个方面的不足,提出了一种有效的,大规模的,目标可感知的模糊测试方案,能够很大程度上提升测试的效率,缓解当前针对云平台进行渗透测试存在的门槛高、测试效率低的问题。为达到上述目的,本专利技术采用具体技术方案是:一种针对云计算系统虚拟设备的模糊测试方法,包括以下步骤:(1)遍历目标虚拟设备的系统函数列表,正则匹配目标虚拟设备的回调函数接口。(2)静态分析回调函数接口,提取地址偏移参数的约束取值范围。(3)依据地址偏移参数的约束取值范围和目标虚拟设备的测试用例输入数据结构,生成测试用例。(4)插桩目标虚拟设备的QEMU的Qtest执行引擎,驱动PCI总线初始化,获取PCI总线的初始化序列。(5)插桩目标虚拟设备的回调函数接口,指定目标虚拟设备模型并启动客户机,获取启动客户机系统时指定的目标虚拟设备的内存寄存器的初始化序列。(6)以步骤(3)生成的测试用例为种子数据,对目标虚拟设备的QEMU进程进行测试,QEMU进程重放步骤(4)和步骤(5)获取的初始化序列,使设备达到初始化状态,然后重放测试用例。系统获得被选择性插桩的目标虚拟设备代码分支的覆盖信息,并基于覆盖信息的反馈变异种子数据生成新的测试用例。系统启动新的QEMU进程,重放新的测试用例。(7)测试进程监控QEMU进程,一旦QEMU进程产生异常,记录产生异常的测试用例,然后测试用例最小化进程缩减导致崩溃的测试用例,并自动生成POC(proofofconcept,为观点提供证据)程序代码来验证系统发现的异常。一种针对云计算系统虚拟设备的模糊测试系统,包括:虚拟设备测试用例生成模块;虚拟设备初始化模块;虚拟设备测试模块;测试用例最小化模块;测试覆盖信息实时显示模块。1、虚拟设备测试用例生成模块,用于自动生成目标虚拟设备的测试用例。该模块通过对目标虚拟设备的代码进行感知,获取目标虚拟设备的回调函数接口信息,并依据目标虚拟设备的测试用例输入数据结构自动生成测试用例。2、虚拟设备初始化模块,用于初始化目标虚拟设备状态。设备的初始化序列,实质上是一系列MMIO/PMIO操作,该模块首先插桩获取PCI总线的初始化序列和内存寄存器的初始化序列,并通过重放初始化序列实现在不启动操作系统和快照情况下,有效且快速实现虚拟设备状态的初始化。3、虚拟设备测试模块,用于对目标虚拟设备进行模糊测试。当种子数据传递给虚拟设备测试模块后,系统重放设备初始化序列,然后执行种子数据。系统获得被选择性插桩的目标虚拟设备代码分支的覆盖信息,并基于覆盖信息的反馈变异种子数据生成新的测试用例。系统启动新的QEMU进程,重放新的测试用例,并对QEMU进程进行监控。如果QEMU进程挂起或者产生崩溃,则将造成QEMU进程异常的测试用例保存,最小化测试用例,并生成可用的POC程序代码来验证系统发现的异常4、测试用例最小化模块,用于实现测试用例的最小化,自动生成POC代码。一旦系统检测出虚拟设备的异常,就会将造成目标异常的测试用例保存下来。保存的测试用例中包含很多元数据,但是大部分元数据对于重现漏洞异常没有帮助。为了能够简化对异常的分析,同时也为了能够自动生成POC代码,需要对测试用例进行最小化。。5、测试覆盖信息实时显示模块,用于实时显示测试覆盖信息,给系统的测试效果直观有效的监测。该模块显示代码分支的代码覆盖率,使测试样本队列中的代码覆盖信息在网页上高亮显示。主要的功能包括:显示函数、代码分支、代码覆盖率;区分显示测试目标的代码覆盖情况;显示代码分支的执行次数;显示未被覆盖的函数接口。与现有的云计算系统虚拟设备的测试技术相比较,本专利技术具有以下几点优势:1、无论是通过启动BIOS系统或者实现快照的方式,设备的初始化过程都比较耗时。本专利技术可以在不启动BIOS系统或者快照的情况下,有效且快速实现PCI设备的初始化。2、大部分测试工具对代码无感知,盲目变异。本专利技术可感知设备输入接口,自动生成测试用例,覆盖更多本文档来自技高网
...

【技术保护点】
1.一种针对云计算系统虚拟设备的模糊测试方法,其特征在于,包括以下步骤:(1)遍历目标虚拟设备的系统函数列表,正则匹配目标虚拟设备的回调函数接口;(2)静态分析回调函数接口,提取地址偏移参数的约束取值范围;(3)依据地址偏移参数的约束取值范围和目标虚拟设备的测试用例输入数据结构,生成测试用例;(4)插桩目标虚拟设备的QEMU的Qtest执行引擎,驱动PCI总线初始化,获取PCI总线的初始化序列;(5)插桩目标虚拟设备的回调函数接口,获取启动客户机时指定的目标虚拟设备的内存寄存器的初始化序列。(6)以步骤(3)生成的测试用例为种子数据,对目标虚拟设备的QEMU进程进行测试,QEMU进程重放步骤(4)和步骤(5)获取的初始化序列,使设备达到初始化状态,然后重放测试用例;(7)测试进程监控QEMU进程,如果QEMU进程产生异常,则记录产生异常的测试用例,然后通过测试用例最小化进程缩减测试用例,并自动生成POC程序代码来验证发现的异常。

【技术特征摘要】
1.一种针对云计算系统虚拟设备的模糊测试方法,其特征在于,包括以下步骤:(1)遍历目标虚拟设备的系统函数列表,正则匹配目标虚拟设备的回调函数接口;(2)静态分析回调函数接口,提取地址偏移参数的约束取值范围;(3)依据地址偏移参数的约束取值范围和目标虚拟设备的测试用例输入数据结构,生成测试用例;(4)插桩目标虚拟设备的QEMU的Qtest执行引擎,驱动PCI总线初始化,获取PCI总线的初始化序列;(5)插桩目标虚拟设备的回调函数接口,获取启动客户机时指定的目标虚拟设备的内存寄存器的初始化序列。(6)以步骤(3)生成的测试用例为种子数据,对目标虚拟设备的QEMU进程进行测试,QEMU进程重放步骤(4)和步骤(5)获取的初始化序列,使设备达到初始化状态,然后重放测试用例;(7)测试进程监控QEMU进程,如果QEMU进程产生异常,则记录产生异常的测试用例,然后通过测试用例最小化进程缩减测试用例,并自动生成POC程序代码来验证发现的异常。2.根据权利要求1所述的方法,其特征在于,所述测试用例包含多个I/O元测试数据;所述I/O元测试数据的数据结构包含三个字段域:元数据头字段域、寄存器地址偏移字段域、寄存器值字段域;根据设备的类型和寄存器的类型设计三个字段域的大小。3.根据权利要求2所述的方法,其特征在于,所述元数据头字段域只有1个字节,元数据头字段域的第1个比特位是读写位,第2~4个比特位表示寄存器值的大小,第5~7个比特位表示寄存器组类型,最后1个比特位表示设备输入输出映射类型,即MMIO/PIO;所述寄存器地址偏移字段域的大小与设备的寄存器组的地址范围有关,不同设备的寄存器组的地址范围不同;所述寄存器值字段域的大小范围是1~4字节,所述寄存器值字段域当且仅当所述元数据头字段域的第1个bit位标记为写时才有效。4.根据权利要求1所述的方法,其特征在于,步骤(6)使用模糊测试工具AFL来驱动QEMU进程,实现自动化的模糊测试,包括:首先通过AFL启动QEMU进程,然后QEMU进程中的模糊测试执行引擎依次执行初始化集和种子集中的数据,分别实现设备的初始化和设备测试用例的重放,通过对目标设备的内存或I/O地址空间进行读写,来完成对目标设备代码的测试。5.根据权利要求1所述的方法,其特征在于,步骤(6)中获得被选择性插桩的目标虚拟设备代码分支的覆盖信息,并基于覆盖信息的反馈变异种子数据生成新的测试用例,然后启动新的QEMU进程,重放新的测试用例。6.根据权利要求1所述的方法,其特征在于,步骤(7)所述通过测试用例最小化进程缩减测试用例,包括:将测试用例依次等划分为序列块,第一轮按照划...

【专利技术属性】
技术研发人员:向浩刘剑霍玮朴爱花曹明昊
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1