技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种基于得分矩阵的高效模糊测试方法与流程  >  正文

一种基于得分矩阵的高效模糊测试方法与流程

  • 国知局
  • 2024-10-15 10:05:23

本发明属于网络安全,尤其涉及一种基于得分矩阵的高效模糊测试方法。

背景技术:

1、现有的定向模糊测试方法(如aflgo)作为发现软件应用程序的潜在漏洞和安全重要问题的一种自动化测试方法,在fuzzing的前期,因为探索到的路径有限,此时离目标点的距离可能还很远,此时重点在探索,即尽可能扩大覆盖率,当覆盖率到一定程度时,再利用距离较近的seed来变异,以此快速覆盖到使用者期望到达的目标点。

2、aflgo在进行定向模糊测试时。首先,编译源码,得到待fuzz程序的控制流图(controlflowgraph,cfg)和函数调用图(callgraph,cg)。这一步由afl中的llvmpass完成。

3、其次,通过cfg和cg,以及给定的target,计算所有的基本块(basicblock,bb)到target所在的基本块的距离。这一步由python脚本完成。

4、然后,再编译一次源码,对程序进行插桩,除了afl原有的插桩逻辑外,添加向指定地址增加每个基本块距离的指令,即指定一个共享内存地址为记录distance的变量,在基本块中插桩,插入如下指令:distance+=current_bb_distance,向distance变量增加当前基本块的距离。

5、最后是fuzzing部分的逻辑,根据插桩反馈的信息,aflgo可以在每一个测试用例作为输入给程序执行的时候得到这个测试用例对应的distance,也就是测试用例执行路径距离目标点的距离,然后根据距离对测试用例进行打分,这个打分的算法就是模拟退火算法,距离越近,打分越高,测试用例得到变异的机会越多。

6、当前定向模糊测试方法(如aflgo)作为发现软件应用程序的潜在漏洞和安全重要问题的一种自动化测试方法,使用代码覆盖率反馈生成输入引导定向模糊器探索大多数不相关的代码,通过访问这些代码,定向模糊器在达到目标或触发指定漏洞方面几乎没有任何进展,而且这种路径探索策略会导致模糊测试工具浪费大量精力探索不相关的代码,从而严重限制定向模糊器的性能,导致模糊器需要包括cpu时间和内存在内的大量的计算资源,这使得它们无法大规模应用于待测软件系统的安全性检测工作中去。

技术实现思路

1、为解决上述问题,本发明提供一种基于得分矩阵的高效模糊测试方法,实现了对待测软件精确识别定向模糊器应该探索的相关代码

2、一种基于得分矩阵的高效模糊测试方法,包括以下步骤:

3、s1:对待测服务软件的程序代码进行分块,得到多个基本块,同时从各基本块中筛选出目标基本块,其余作为普通基本块;

4、s2:获取各基本块对应的块距离;

5、s3:根据各普通基本块对应的块距离获取各普通基本块相对于各目标基本块的块得分;

6、s4:对于每一个普通基本块,将其对应于所有目标基本块的块得分的平均值作为自身最终对应的块得分;

7、s5:选择块得分大于0的普通基本块进行插桩操作,得到插桩后的待测服务软件的程序代码;

8、s6:根据插桩后的待测服务软件的程序代码构建包含各普通基本块的块得分以及被插桩的普通基本块的位置信息的基本块标定图谱;

9、s7:在插桩后的待测服务软件的程序代码中的关键位置插入设定的代码片段,得到待测代码;所述关键位置需满足漏洞特征库中的任一漏洞特征;

10、s8:随机生成测试用例,然后将测试用例输入待测代码,根据基本块标定图谱识别出测试用例在待测代码的执行过程中所涉及的被插桩普通基本块;

11、s9:根据识别出来的被插桩普通基本块对应的块得分对当前测试用例进行评分,得到分数a;同时,根据当前测试用例是否引起待测代码的关键变量发生变化对当前测试用例进行评分,得到分数b;将分数a和分数b加权求和,得到当前测试用例的最终得分;

12、s10:判断当前时刻是否达到设定的循环时间,若为否,则进入步骤s11,若为是,结束循环;

13、s11:判断当前测试用例是否触发任一普通基本块到达任一目标基本块的新路径或者触发待测代码中的漏洞,若为是,则将当前测试用例存入种子池,并为当前测试用例设定一个变异概率,进入步骤s12;若为否,则丢弃当前测试用例,进入步骤s12;

14、s12:判断种子池是否为空,若为是,则随机生成新的测试用例重新执行s8~s11;若为否,根据种子池中各测试用例对应的最终得分和变异概率选择出一个测试用例来进行变异,并将变异后的测试用例重新执行步骤s8~s11,直到达到设定的循环时间。

15、进一步地,步骤s3中各普通基本块相对于各目标基本块的块得分的获取方法如下:

16、依次将每一个普通基本块作为当前普通基本块、每一个目标基本块作为当前普通基本块执行以下步骤:

17、s31:获取当前普通基本块到当前目标基本块之间的所有可能路径,并根据每一条可能路径上包含的普通基本块是否具有分支语句将所有可能路径划分为分支路径和非分支路径;其中,对于分支路径,每一条分支路径均执行块得分获取操作,对于非分支路径,选择其中距离最短的非分支路径执行块得分获取操作;其中,所述块得分获取操作为:

18、获取当前路径上,位于当前普通基本块bj与目标基本块之间的后续基本块,并将后续基本块的数量记为n;

19、将各后续基本块对应的块距离代入如下公式,得到当前普通基本块bj在当前路径上的块得分:

20、

21、其中,t(bj)为当前普通基本块bj在当前路径上的块得分,d(i)为当前普通基本块bj的第i个后续基本块对应的块距离,fi(bj)为当前普通基本块bj到达其第i个后续基本块的到达概率,ε为设定的惩罚项;

22、s32:将当前普通基本块在所有分支路径上的块得分求均值后,再将得到的均值与距离最短的非分支路径上的块得分求均值,将最终得到的均值作为当前普通基本块相对于当前目标基本块的块得分。

23、进一步地,步骤s2中各基本块对应的块距离的获取方法为:

24、令每一个基本块作为当前基本块执行以下操作:获取当前基本块到达各个目标基本块的到达概率,将各个到达概率的倒数的平均值作为当前基本块对应的块距离;其中,若当前基本块为目标基本块,则当前基本块到达自身所属的目标基本块的概率为1。

25、进一步地,在循环执行步骤s8~s12的过程中,如果任一测试用例输入待测代码后,待测代码出现了崩溃,表明当前测试用例触发了待测代码中的漏洞;同时,待测代码出现崩溃后,自动重启待测代码继续循环执行步骤s8~s10。

26、进一步地,步骤s7中的漏洞特征库的构建方法为:

27、在公开数据中收集与被测服务软件相关的漏洞特征;

28、读取被测服务软件的源码,手动提取漏洞特征;

29、将收集得到的漏洞特征和手动提取的漏洞特征构建为漏洞特征库。

30、进一步地,步骤s7中插入的设定代码片段为能够检测出关键位置处的关键变量是否发生预期变化的代码;其中,关键变量为与漏洞相关且能够触发漏洞的变量,关键位置为关键变量所在的基本块。

31、进一步地,步骤s9中的分数a的权重高于分数b的权重。

32、有益效果:

33、1、本发明提供一种基于得分矩阵的高效模糊测试方法,仅对块得分大于0的普通基本块进行插桩操作,相当于通过剪枝的方式删除到达概率为0的分支,这可以防止本发明的模糊测试生成新的不相关测试用例输入;由此可见,本发明通过这种优化方式避免本发明的模糊测试工具朝着不相关代码的路径进行探索;同时,本发明种子池中的测试用例均可触发可到达目标基本块的新路径或触发待测试代码中的漏洞,则本发明根据种子池中各测试用例对应的最终得分和变异概率选择出一个测试用例来进行变异,并根据变异后的测试用例继续对待测代码进行漏洞测试,能够使得测试用例尽可能走高分路径到达目标基本快,提高了对待测软件的漏洞挖掘效率。

34、2、本发明提供一种基于得分矩阵的高效模糊测试方法,对于非分支路径,选择其中距离最短的非分支路径执行块得分获取操作,可以更好地反映到达目标基本块的进度并得到基本块到达概率矩阵。

35、3、本发明提供一种基于得分矩阵的高效模糊测试方法,认为在块得分分数越高的基本块上挖掘到的漏洞可能性更高,因此,本发明设计的得分运算对大数不敏感,为无法到达目标基本块的某后续基本块设定较重的惩罚项,可有效引导本发明挖掘到更多元匹配目标基本块的基本块,而不是某个后续基本块概率更高的基本块,从而更容易挖掘在目标基本块上挖掘出漏洞。

本文地址:https://www.jishuxx.com/zhuanli/20241015/316399.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。