(19)中华人民共和国国家知识产权局
(12)发明专利说明书 | ||
(10)申请公布号 CN 110348216 A (43)申请公布日 2019.10.18 | ||
(21)申请号 CN201910439189.7
(22)申请日 2019.05.24
(71)申请人 中国科学院信息工程研究所
地址 100093 北京市海淀区闵庄路甲89号
(72)发明人 向浩 刘剑 霍玮 朴爱花 曹明昊
(74)专利代理机构 北京君尚知识产权代理事务所(普通合伙)
代理人 邱晓锋
(51)Int.CI
权利要求说明书 说明书 幅图 |
(54)发明名称
一种针对云计算系统虚拟设备的模糊测试方法及系统 | |
(57)摘要
本发明涉及一种针对云计算系统虚拟设备的模糊测试方法及系统。该方法包括:对目标虚拟设备的代码进行感知,自动生成测试用例;插桩目标虚拟设备的QEMU的Qtest执行引擎,获取PCI总线的初始化序列,实现在不启动操作系统或系统快照的情况下,有效且快速实现设备状态的初始化;构造模糊测试执行引擎,直接读取测试数据,实现测试用例的自动重放,提高模糊测试的效率;监控QEMU进程,如果产生异常则通过测试用例最小化进程缩减测试用例,并自动生成POC程序代码来验证发现的异常。本发明能够有效地对基于KVM/QEMU开发的云平台进行安全漏洞的检测,从而帮助服务提供者及时防御或消除潜在的威胁,避免或降低不必要的损失。 | |
法律状态
法律状态公告日 | 法律状态信息 | 法律状态 |
2019-11-12 | 实质审查的生效 | 实质审查的生效 |
2019-10-18 | 公开 | 公开 正则匹配快代理 |
权 利 要 求 说 明 书
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)所述通过测试用例最小化进程缩减测试用例,包括:将测试用例依次等划分为序列块,第一轮按照划分的序列块依次缩减测试用例,若缩减后的测试用例依然能够造成虚拟机崩溃或者挂起,则表示此次序列块缩减有效,修改该序列块的序列标志位为1;若无效,暂时保留该序列块,修改该序列块的序列标志位为0;第二轮,将保留的序列块再依次等划分为较小的序列块,并按照较小序列块逐步缩减测试用例;依次类推,直至按照单个序列缩减测试用例得到最小的测试用例。
7.一种采用权利要求1所述方法的针对云计算系统虚拟设备的模糊测试系统,其特征在于,包括:
虚拟设备测试用例生成模块,用于自动生成目标虚拟设备的测试用例;该模块通过对目标虚拟设备的代码进行感知,获取目标虚拟设备的回调函数接口信息,并依据目标虚拟设备的测试用例输入数据结构自动生成测试用例;
虚拟设备初始化模块,用于初始化目标虚拟设备状态;该模块首先插桩获取PCI总线的初始化序列和内存寄存器的初始化序列,并通过重放初始化序列实现目标虚拟设备状态的初始化;
虚拟设备测试模块,用于以生成的测试用例为种子数据,对目标虚拟设备进行模糊测试;种子数据传递给该模块后,重放初始化序列,然后执行种子数据,并对QEMU进程进行监控;
测试用例最小化模块,用于在QEMU进程产生异常时实现测试用例的最小化,并自动生成POC代码来验证发现的异常;
测试覆盖信息实时显示模块,用于实时显示测试覆盖信息,直观有效的监测测试效果。
8.根据权利要求7所述的系统,其特征在于,所述虚拟设备测试模块获得被选择性插桩的目标虚拟设备代码分支的覆盖信息,并基于覆盖信息的反馈变异种子数据生成新的测试用例,然后启动新的QEMU进程,重放新的测试用例;如果QEMU进程挂起或者产生崩溃,则将造成QEMU进程异常的测试用例保存,最小化测试用例,并生成
可用的POC程序代码来验证发现的异常。
9.根据权利要求7所述的系统,其特征在于,所述测试覆盖信息实时显示模块显示代码分支的代码覆盖率,使测试样本队列中的代码覆盖信息在网页上高亮显示;所述测试覆盖信息实时显示模块的主要功能包括:显示函数、代码分支、代码覆盖率;区分显示测试目标的代码覆盖情况;显示代码分支的执行次数;显示未被覆盖的函数接口。
10.根据权利要求7所述的系统,其特征在于,所述测试用例最小化模块将测试用例依次等划分为序列块,第一轮按照划分的序列块依次缩减测试用例,若缩减后的测试用例依然能够造成虚拟机崩溃或者挂起,则表示此次序列块缩减有效,修改该序列块的序列标志位为1;若无效,暂时保留该序列块,修改该序列块的序列标志位为0;第二轮,将保留的序列块再依次等划分为较小的序列块,并按照较小序列块逐步缩减测试用例;依次类推,直至按照单个序列缩减测试用例得到最小的测试用例。
说 明 书
<p>技术领域
本发明涉及计算机系统安全领域,用于检测云计算系统虚拟设备中存在的安全漏洞,更具体地,是一种针对云计算系统虚拟设备的模糊测试方法及系统。
背景技术
随着全球云计算市场份额的持续增长,作为云计算的基础,虚拟化技术得到了广泛的应用,同时,不可避免带来了很多安全问题,利用虚拟化平台漏洞进行攻击的恶意行为层出不穷。虚拟设备作为虚拟化平台的一个重要组成部分,是虚拟化平台安全威胁的主要来源之一。利用虚拟设备的漏洞可以在目标云计算系统中发起逃逸攻击或拒绝服务攻击,从而影响云计算系统的正常安全运行。
虚拟设备主要运行在用户层,虚拟设备代码相比客户机系统,其执行权限更高,更接近于虚拟机管理程序。相比从客户层的客户机系统里测试虚拟机管理程序,利用虚拟设备的漏洞,从用户层渗透测试虚拟机管理程序更加直接。虚拟设备由很多开发者共同开发和维护,而且虚拟设备种类很多,虚拟设备代码体量庞大,每年都在增长,虚拟设备存在漏洞的概率很大。随着OpenStack成为众多行业构建云基础架构的首选,而OpenStack的重要组成部分—KVM计算资源虚拟化技术也随着OpenStack的普及而应用得越来越广泛。而且由于KVM和Xen的超级管理程序都使用QEMU来实现硬件设备的功能模拟,所以我们选取QEMU虚拟设备作为测试目标。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论