本发明属于计算机,具体涉及一种操作系统内核定向模糊测试的种子变异方法及测试方法。
背景技术:
1、随着经济技术的发展和人们生活水平的提高,计算机操作系统已经广泛应用于人们的生产和生活当中,给人们的生产和生活带来了无尽的便利。因此,保障操作系统的稳定可靠运行,就成为了研究人员的研究重点之一。
2、内核,是一个操作系统的核心。内核是基于硬件的第一层软件扩充,其提供了操作系统的最基本的功能,是操作系统工作的基础。因此,在维护计算机的安全工作中,保障操作系统的内核的安全,就显得尤为重要。
3、模糊测试是目前主流的一种软件测试方法。它采用自动或者半自动的方式生成测试用例,然后向目标系统输入测试用例,在运行测试用例中通过监控系统异常行为来捕获漏洞。目前,将模糊测试运用到内核安全领域已经取得较好的成效。
4、操作系统内核模糊测试,是将系统调用序列作为模糊测试过程中的种子输入,通过生成随机参数和序列供操作系统执行,同时通过内核中的缺陷检测工具监视操作系统运行,以发现操作系统运行时的异常状态。
5、在内核模糊测试领域,当前绝大多数技术方案都是以覆盖率为导向进行漏洞挖掘。其基本流程如下:
6、首先模糊测试工具通过手动编码的规则生成系统调用的有效种子,并将其作为初始输入放入种子池中。然后根据种子覆盖信息挑选出测试例种子,对其进行变异操作,变异产生的测试用例将放入被测内核执行。执行产生的数据流和控制流信息将指导变异策略的选择。如果测试用例执行过程中覆盖了新的位置,则将该测试用例存入种子池中供下次使用。如果在执行测试用例时程序出现异常状态,则收取内核运行安全违规报告,测试结束;若没有出现异常状态则表示该测试用例无效,此时应该抛弃该无效测试用例,测试结束。
7、在以上的内核模糊测试过程中,模糊测试工具在挑选种子时以内核代码覆盖率为依据。但是,由于内核代码量庞大,并且针对某些特定需求时(如补丁修复后需要对指定位置进行模糊测试),采取覆盖率引导的方式,往往会耗费大量资源在无法到达目标位点的测试用例上,使得运行时间过长,最终导致测试工作在效率和效用上明显失衡。
技术实现思路
1、本发明的目的之一在于提供一种可靠性高、效率较高且变异效果好的操作系统内核定向模糊测试的种子变异方法。
2、本发明的目的之二在于提供一种包括了所述操作系统内核定向模糊测试的种子变异方法的测试方法。
3、本发明提供的这种操作系统内核定向模糊测试的种子变异方法,包括如下步骤:
4、s1. 获取目标操作系统的数据信息;
5、s2. 根据步骤s1获取的数据信息,对目标操作系统的内核源码进行静态分析,并以函数和基本块为粒度构建函数调用图和控制流图;
6、s3. 对步骤s2构建的函数调用图和控制流图进行整合,得到过程间控制流图;
7、s4. 对待测目标位置和过程间控制流图进行内核距离计算,得到内核代码相对目标位置的距离度量;
8、s5. 根据步骤s4得到的内核代码相对目标位置的距离度量值,对现有的内核种子库的种子进行评估,并选择得到符合设定条件的种子;
9、s6. 根据步骤s4得到的距离度量,基于函数粒度评分和基本块粒度评分,对步骤s5得到的种子进行质量评分和能量分配,得到具有不同能量的测试例种子;
10、s7. 根据步骤s6得到的测试例种子的覆盖信息,对测试例种子进行自适应变异,完成操作系统内核定向模糊测试的种子变异。
11、所述的步骤s2,具体包括如下步骤:
12、根据步骤s1获取的数据信息,对目标操作系统的内核源码进行静态分析,并构建函数调用图和控制流图;其中,在函数调用图上,若存在函数调用函数,则调用关系表示为;对于函数,在控制流图上若存在基本块指向,则控制流关系表示为;同时,生成的函数调用图以函数为粒度,生成的控制流图以基本块为粒度。
13、所述的步骤s4,具体包括如下步骤:
14、a. 将目标操作系统的内核源码位置映射到过程间控制流图的图结构节点上,确定函数调用图中的每个节点和函数内控制流图中每个基本块节点所对应的内核代码位置;设定目标待测位置集合为 t,位置在过程间控制流图上表示为目标函数集合和目标基本块集合;每个目标位置表示为函数调用图中的目标函数和函数控制流图中的目标基本块;
15、b. 根据函数调用图,计算函数粒度距离;
16、c. 根据控制流图,计算基本块粒度距离。
17、所述的步骤b,具体包括如下步骤:
18、对于目标位置,存在若干个路径到达可达目标函数;被调函数出现次数越多,则认定到函数的距离越小;因此,采用如下算式表示对应的第一影响因子:
19、式中为第一设定参数;
20、对于可达目标函数,可达目标函数包括的目标函数的基本块数越多则调用到的目标函数的路径越多;因此,采用如下算式表示对应的第二影响因子:
21、式中为第第二设定参数;
22、可达目标函数和目标函数之间的距离表示为
23、;
24、定义内核函数到目标函数集合的函数粒度距离为内核函数到目标函数集合中所有目标函数的距离的调和平均值,并表示为
25、式中为在函数调用图上函数为起点的目标函数集合,且表示为。
26、所述的步骤c,具体包括如下步骤:
27、对于同一函数内的任意两个基本块指向,定义基本块距离为在函数的控制流图中,从到的最短路径的距离;
28、定义为函数的控制流图中基本块调用的函数集合;同时将函数集合中可达目标函数的函数子集定义为,并表示为,其中为目标函数集合内所有函数的前驱节点;
29、定义过程间控制流图中可达目标函数集合的基本块集合为,并表示为,其中 f为函数调用图中所有函数的集合;
30、最后,采用如下算式计算过程间控制流图中基本块相对目标基本块的距离:式中 c为设定的权重参数。
31、步骤s6所述的质量评分,具体包括如下步骤:
32、设定内核种子库的种子集合为 p, p覆盖的基本块集合为, p覆盖的函数集合为;
33、采用如下算式计算种子 p相对于目标基本块集合的距离:
34、式中为测试种子 p覆盖的基本块集合;为集合中基本块的数量;
35、采用如下算式计算得到种子基本块粒度评分:
36、式中为内核种子库中所有种子的基本块粒度评分的最小值;为内核种子库中所有种子的基本块粒度评分的最大值;
37、采用如下算式计算种子 p相对于目标函数集合的距离:
38、式中为种子 p所覆盖的函数集合;为函数调用图上所有可达种子所覆盖函数的函数集合;为函数调用图上能够到达目标函数的函数集合;
39、采用如下算式计算得到种子函数粒度评分:
40、式中为当前种子库中所有种子函数粒度距离的集合;为当前种子库中种子函数粒度距离的最小值;为当前种子库中种子函数粒度距离的最大值;
41、根据种子基本块粒度评分和种子函数粒度评分,计算得到最终的种子的质量评分为;种子的质量评分越高,则表明种子距离待测目标的位置越近,分配的能量越高。
42、所述的步骤s7,具体包括如下步骤:
43、a. 对每一个测试例种子 s的能量进行判断:
44、若大于设定的变异阈值,则对当前的测试例种子 s进行细粒度变异;
45、若不大于设定的变异阈值,则对当前的测试例种子 s进行粗粒度变异;
46、b. 对每个测试例种子的变异几率进行修正:
47、针对细粒度变异的测试例种子,再次进行判断:
48、若当前种子的覆盖信息能够达到目标位点,则增加当前种子的细粒度突变几率;
49、若当前种子的覆盖信息不能够达到目标位点,则维持当前种子的细粒度突变几率;
50、针对粗粒度变异的测试例种子,再次进行判断:
51、若当前种子的覆盖信息能够达到目标位点,则维持当前种子的粗粒度突变几率;
52、若当前种子的覆盖信息不能够达到目标位点,则增加当前种子的粗粒度突变几率;
53、c. 按照以上修正后的变异几率,对每个测试例种子进行对应的变异,完成操作系统内核定向模糊测试的种子变异。
54、所述的步骤b,具体包括如下步骤:
55、针对细粒度变异的测试例种子,再次进行判断:
56、若当前种子的覆盖信息能够达到目标位点,则增加当前种子的细粒度突变几率,增加后的细粒度突变几率为;
57、若当前种子的覆盖信息不能够达到目标位点,则维持当前种子的细粒度突变几率为;
58、针对粗粒度变异的测试例种子,再次进行判断:
59、若当前种子的覆盖信息能够达到目标位点,则维持当前种子的粗粒度突变几率为;
60、若当前种子的覆盖信息不能够达到目标位点,则增加当前种子的粗粒度突变几率,增加后的粗粒度突变几率为;
61、其中为设定的细粒度突变的常数比率,为设定的恒定比率。
62、本发明还公开了一种包括了所述操作系统内核定向模糊测试的种子变异方法的测试方法,还包括如下步骤:
63、s8. 将未变异的测试例种子和变异后的测试例种子一同作为测试用例;
64、s9. 将步骤s8得到的测试用例放入目标操作系统的被测内核并执行,同时监控执行状态;
65、s10. 根据步骤s9得到的执行状态,完成测试。
66、所述的步骤s10,具体包括如下步骤:
67、(1)若当前测试用例在执行时覆盖了新的内核位置,则将该测试用例放入种子池,用于后续的测试;
68、若当前测试用例在执行时未覆盖新的内核位置,则进行后续判断:
69、(2)若当前测试用例在执行时程序出现设定的异常行为,则获取当前测试用例的内核运行安全违规报告,测试结束;
70、若当前测试用例在执行时程序未出现设定的异常行为,则直接丢弃该测试用例,测试结束。
71、本发明提供的这种操作系统内核定向模糊测试的种子变异方法及测试方法,引入内核代码相对目标待测位置的距离度量,再根据距离度量计算出种子质量评分,依据种子评分得到了最接近目标待测位置的高质量种子,并根据种子质量分配能量,由能量分配的差异对种子展开了适当粒度大小的变异,使得种子能够自适应变异得到合理数量的测试用例;因此,本发明方法不仅能够让优质种子优先变异执行,实现了种子变异的高可靠性高、高效率和优秀的变异效果,而且也能够使得后续的测试过程的资源花费较少,测试时间缩短,测试效率更高。