1.一种基于人机协同的软件漏洞模糊测试方法,其特征在于,利用服务自动匹配与组装技术,将软件安全分析人员的认知能力作为认知服务提供给软件漏洞模糊测试过程,包括以下步骤:
s11.将软件漏洞模糊测试过程组件化为一系列细粒度的服务,在软件漏洞模糊测试过程的某一阶段,输入任务信息,经过子任务a完成软件服务匹配,并输出结果,如果输出结果满足阶段性需求,再把任务信息输入子任务b;否则,执行步骤s12;
s12.子任务a通过认知服务触发器判断要执行的操作是否匹配认知服务,如果匹配,则执行步骤s13;如果不匹配,则转到步骤s14;
s13.调用认知服务库里的资源进行操作或由直接人机交互给予响应完成操作,再执行子任务b;
s14.把子任务a分解为软件任务a1和认知任务a2,认知任务a2通过认知服务触发器从认知服务库里获取认知服务,并基于软件任务a1和认知任务a2,在服务资源执行达到阶段性需求后,继续执行子任务b。
2.根据权利要求1所述的一种基于人机协同的软件漏洞模糊测试方法,其特征在于,软件漏洞模糊测试过程包括以下阶段:
第一阶段:解析输入数据的数据格式;
第二阶段:根据数据格式制定变异策略;
第三阶段:确定输入数据是否到达变异策略的结尾,如果未达到,根据变异策略继续进行变异;如果到达,则测试过程结束;
第四阶段:根据变异策略对输入数据进行变异后,输入到待测试的程序;
第五阶段:观察程序是否异常或崩溃;
第六阶段:如果程序异常或崩溃,收集并记录程序崩溃或异常数据,然后转到第三阶段;
第七阶段:如果程序未显示异常或崩溃,直接转到第三阶段。
3.根据权利要求2所述的一种基于人机协同的软件漏洞模糊测试方法,其特征在于,对于软件漏洞模糊测试过程的每个操作阶段,划分为若干子任务:
在输入数据格式解析阶段,子任务包括:文件数据解析、二进制数据解析、协议数据解析和平台数据解析;
在变异策略制定阶段,子任务包括:加、乘、字节翻转和字节设置;
在数据生成阶段,子任务包括:数字类型生成、字符类型生成、十六进制类型生成和未知类型生成;
在数据输入阶段,子任务包括:网络输入、文本输入、命令行输入、窗口输入和参数输入;
在异常信息的观察、收集和记录阶段,子任务包括:调试器信息收集、内存异常信息收集、堆栈异常信息收集、文件记录和崩溃点信息收集。
4.根据权利要求3所述的一种基于人机协同的软件漏洞模糊测试方法,其特征在于,对于划分形成的若干子任务再进行分类,分别为软件服务、认知服务、混合服务和直接人机交互服务,并形成相应的软件服务库、认知服务库、混合服务库和直接人机交互服务库。
5.根据权利要求4所述的一种基于人机协同的软件漏洞模糊测试方法,其特征在于,所述软件服务包括:文件数据解析、协议数据解析、加、乘、网络输入、文本输入和文件记录。
6.根据权利要求5所述的一种基于人机协同的软件漏洞模糊测试方法,其特征在于,所述认知服务包括:二进制数据解析、字节翻转、字节设置、数字类型生成、字符类型生成、十六进制类型生成和调试器信息收集。
7.根据权利要求6所述的一种基于人机协同的软件漏洞模糊测试方法,其特征在于,所述混合服务包括:平台数据解析、参数输入、崩溃点信息收集、内存异常信息收集和堆栈异常信息收集。
8.根据权利要求7所述的一种基于人机协同的软件漏洞模糊测试方法,其特征在于,所述直接人机交互服务是:未知类型生成、命令行输入和窗口输入。
9.根据权利要求8所述的一种基于人机协同的软件漏洞模糊测试方法,其特征在于,基于所述软件服务、认知服务、混合服务和直接人机交互服务,设计人机协同策略规划机制,包括如下步骤:
步骤s21.初始化软件漏洞模糊测试任务ft;
步骤s22.令ft={ph1,ph2,...,phi},其中phi是软件漏洞模糊测试过程的每个阶段,故i的最大值为7;
步骤s23.从i=1开始,判断phi中包含的子任务集是否与所述软件服务库中的软件服务匹配;如果匹配,将其存储在缓冲区中,然后执行步骤s24;否则,转到步骤s25;
步骤s24.判断i=7是否成立,如果是,转到步骤s28;否则,令i=i+1,并转到步骤s23;
步骤s25.判断phi中包含的子任务集是否与所述认知服务库中的认知服务匹配;如果是,将其存储在缓冲区中,转到步骤s24;否则,执行步骤s26;
步骤s26.判断phi中包含的子任务集是否与所述混合服务库中的混合服务匹配,如果是,将其存储在缓冲区中,转到步骤s24;否则,执行步骤s27;
步骤s27.将phi中包含的子任务集提交到直接人机交互服务接口,直接人机交互服务接口向子任务返回确认消息后,将其存储在缓冲区中,然后转到步骤s24;
步骤s28.整个模糊测试人机协同策略规划完成,对结果进行整理,并输出人机协同策略。
10.根据权利要求9所述的一种基于人机协同的软件漏洞模糊测试方法,其特征在于,在软件漏洞模糊测试过程中,操作者能够随时修正乃至中断测试过程,且能够用直接人机交互服务代替测试过程中的部分或全部未执行的子任务,相关子任务的结果由直接人机交互服务给出;测试过程完成后,提供测试过程的回溯选项,操作者能够了解测试过程的详情,并能够对不满意的测试环节进行修改,以再次生成人机协同策略。