1.一种覆盖率引导的VxWorks内核模糊测试方法,其特征在于包括四个阶段:测试准备阶段、测试进行阶段、测试结束阶段、测试终止阶段;
所述测试准备阶段包括以下操作:
1-1.使用QEMU模拟器执行VxWorks内核代码,创建测试用例生成工具进程vxAFL和运行VxWorks的QEMU模拟器进程之间共享内存,实现进程vxAFL和QEMU模拟器进程之间的VxWorks执行路径信息的交换;共享内存格式化为一维数组,数组索引表示对应路径,数组值表示这条路径执行次数;
1-2.测试用例生成工具进程vxAFL创建与QEMU模拟器进程之间的消息管道用于VxWorks执行异常状态信息通知;
1-3.在QEMU模拟器中读取内核镜像文件,解析内核镜像文件获得QEMU模拟器运行时VxWorks内核符号对应的内存地址,感知内核运行状态;
1-4.测试用例生成工具进程vxAFL根据VxWorks内核测试函数功能的不同,提供对应初始测试用例文件,然后从对应初始测试用例文件路径读取初始测试用例;
1-5.在QEMU模拟器进程中创建哈希表用于存放内存地址、内存地址对应的初始值的内存写入操作条目;
1-6.QEMU模拟器的内存写入函数中插入钩子函数代码;测试执行阶段中虚拟机执行内存写入指令时,写入的内存地址作为参数调用钩子函数,然后在哈希表中保存内存地址对应的初始值,在每轮测试结束后恢复对应内存地址的初始值。
2.根据权利要求1所述一种覆盖率引导的VxWorks内核模糊测试方法,其特征在于:所述测试进行阶段包括以下操作:
2-1.在QEMU模拟器执行VxWorks系统的过程中,实现通过QEMU模拟器的虚拟处理器结构体获取程序执行指针,使用程序执行指针计算VxWorks执行路径信息对应的唯一值并写入共享内存;3-1-2
2-2.在QEMU模拟器进程中,根据程序执行指针判断是否执行进入VxWorks异常处理函数,如果进入异常处理函数,通过消息管道将异常状态通知测试用例生成工具进程vxAFL,然后将异常测试用例放入测试用例队列,并用于下一轮测试。
3.根据权利要求2所述一种覆盖率引导的VxWorks内核模糊测试方法,其特征在于:所述测试结束阶段包括以下操作:
3-1.测试用例生成工具进程vxAFL通过读取共享内存中的VxWorks执行路径信息得出覆盖率,并根据当前测试用例的覆盖率判断是否将其保存到测试用例队列,然后开始下一轮测试;
3-2.测试用例生成工具进程vxAFL通过消息管道获得VxWorks系统执行的异常状态,将当前测试用例、崩溃异常状态、共享内存中的路径信息保存于测试异常结果文件中;
3-3.每轮测试结束后,测试用例生成工具进程vxAFL从测试用例队列中取出一个待模糊的异常测试用例,进行模糊化后写入测试用例文件;
3-4.在QEMU模拟器进程中恢复虚拟处理器结构体内容,遍历哈希表中被修改的内存地址对应的内存地址初始值,通过QEMU模拟器的帮助函数将被修改的内存地址初始值写入VxWorks系统对应内存地址,以此恢复QEMU进程的初始状态;
3-5.在QEMU模拟器进程中读取测试用例文件,根据被测VxWorks系统函数的数据存放地址,通过QEMU模拟器的帮助函数将测试用例写入对应数据存放地址所在内存;
3-6.如果当前测试时间距离上一次发现新路径或出现崩溃的时间超过阈值时终止测试循环,进入测试终止阶段,反之进入测试进行阶段进行下一轮测试。
4.根据权利要求2或3所述一种覆盖率引导的VxWorks内核模糊测试方法,其特征在于:所述测试终止阶段包括以下操作:
在QEMU模拟器进程中释放分配的共享内存区域、关闭通信管道,然后vxAFL进程终止QEMU进程执行,最后vxAFL进程结束自身执行,整个测试过程结束。
5.根据权利要求4所述一种覆盖率引导的VxWorks内核模糊测试方法,其特征在于步骤
2-1具体实现如下:
2.1.1 QEMU使用cpu_tb_exec函数执行每一个翻译代码块TB,每次TB块执行中虚拟处理器结构体被传入cpu_tb_exec函数,因此可以通过该结构体获得当前翻译代码块的程序指针;
2.1.2 QEMU中当获得当前TB块的程序指针cur_pc后,首先使用程序指针计算得到哈希值,然后使用哈希值与前一个执行TB块的哈希值对创建的共享内存区域进行计数操作,计数值即覆盖率,相当于分支路径触发次数。
6.根据权利要求5所述一种覆盖率引导的VxWorks内核模糊测试方法,其特征在于步骤
3-1具体实现如下:
在vxAFL进程中包含一个与执行路径信息vxAFL_area相同大小的数组vxAFL_all,用于存放测试过程中所有触发的路径信息,然后在每次测试结束后,vxAFL进程通过读取共享内存区域中当前测试用例VxWorks系统执行路径信息vxAFL_area,如果当前测试用例出现新的分支路径或者分支路径计数值增加,则将当前测试用例保存到测试用例队列;将导致出现新分支路径的测试用例设置为优选测试用例,在测试中优先选取出队列进行模糊测试。