软件测试方法、装置及计算机存储介质与流程
- 国知局
- 2024-07-31 23:24:18
本发明涉及安全测试,尤其涉及一种软件测试方法、装置及计算机存储介质。
背景技术:
1、随着计算机技术和互联网信息技术的发展,各式各样的程序与系统被开发出来,程序的功能也变得越来越丰富。然而,由于开发人员水平参差不齐、开发人员之间沟通不足、架构设计不合理等原因,程序中往往存在着会导致程序崩溃、甚至会受不法分子利用的漏洞。由于程序漏洞总是不可避免地存在,因而,漏洞检测受到广泛关注。
2、目前软件功能越来越复杂,代码量越来越繁杂,普通的安全审计策略不仅低效,而且检测精度难以保证,很难发现藏于深处的漏洞。而模糊测试技术可以弥补这些不足,以覆盖率为指引,自动化的完成测试,极大的提高了检测效率。因此模糊测试技术成为了检测软件漏洞常用的工具。
3、目前,模糊测试技术主要是基于代码覆盖率反馈来指引测试的种子的生成和变异。
4、基于代码覆盖率的模糊测试技术主要是通过提升代码覆盖率来确保检测的广度和深度。代码覆盖率越高,发现漏洞的可能性越大。而软件的代码覆盖率很容易遇到瓶颈,因此,代码覆盖率提升,就能突破瓶颈,从而找出潜藏漏洞。
5、因此,亟需一种提高代码覆盖率的软件测试方法。
6、公开于该背景技术部分的信息仅仅旨在增加对本发明的总体背景的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域一般技术人员所公知的现有技术。
技术实现思路
1、本发明实施例提供了一种软件测试方法、装置及计算机存储介质,在变异后的种子访问的方法代码块中存在访问次数较小的方法代码块时,将变异后的种子加入种子池中,从而可以在一定程度上增加对访问次数较小的方法代码块的探测,使得访问次数较小的方法代码块可能会访问未访问过的方法代码块,从而在一定程度上提高待测源码的覆盖率,进而可以增加挖掘待测源码的漏洞的可能性。
2、第一方面,本发明实施例提供了一种软件测试方法,包括:确定软件的待测源码,其中,所述待测源码包括多个方法代码块和多个调用,每个所述方法代码块可被至少一个所述调用访问;对所述待测源码对应的种子池进行n次测试操作,其中,对于所述n次中的第i次的测试操作,所述n为大于等于3的正整数,所述i为大于等于2小于等于n-1的正整数,包括:
3、对所述待测源码对应的种子池进行n次测试操作,其中,对于所述n次中的第i次的测试操作,所述n为大于等于3的正整数,所述i为大于等于2小于等于n-1的正整数,包括:
4、从所述种子池中选择种子,对选择的种子进行变异,得到变异后的种子,其中,所述变异后的种子包括所述多个调用中的至少一个调用;利用所述变异后的种子对所述待测源码进行模糊测试,得到测试结果,其中,所述测试结果包括所述变异后的种子访问的至少一个第一方法代码块的第一访问次数;至少基于所述至少一个第一方法代码块的第二访问次数,确定所述变异后的种子是否加入所述种子池中,其中,每个所述第一方法代码块的第二访问次数为第1次测试操作到当前对所述第一方法代码块的访问次数。
5、本方案中,在变异后的种子访问的方法代码块中存在访问次数较小的方法代码块时,将变异后的种子加入种子池中,从而可以在一定程度上增加对访问次数较小的方法代码块的探测,使得访问次数较小的方法代码块可能会访问未访问过的方法代码块,从而在一定程度上提高待测源码的覆盖率,进而可以增加挖掘待测源码的漏洞的可能性。
6、在一种可能的实现方式中,所述方法还包括:
7、在所述至少一个第一方法代码块包括第i次之前的测试操作中未访问的方法代码块时,将所述变异后的种子加入所述种子池中;在所述至少一个第一方法代码块为第i次之前的测试操作中已访问的方法代码块时,执行至少基于所述至少一个第一方法代码块的第二访问次数,确定所述变异后的种子是否加入所述种子池中。
8、本方案中,首先基于覆盖率进行种子筛选,在覆盖率没有高于之前的覆盖率的情况下,则说明变异后的种子没有访问新的方法代码块,此时无法认定变异后的种子一定是没有探寻价值的,此时,可以考虑测试结果中方法代码块在全局的访问次数,判断变异后的种子是否具有探寻价值,从而综合考虑覆盖率和方法代码块在全局的访问次数,综合判断变异后的种子是否具有探寻价值,从而实现种子筛选。后续,可以在一定程度上增加对访问次数较小的方法代码块的探测,使得访问次数较小的方法代码块可能会访问未访问过的方法代码块,从而在一定程度上提高待测源码的覆盖率,进而可以增加挖掘待测源码的漏洞的可能性。
9、在一种可能的实现方式中,,所述方法还包括:基于从第1次的测试操作开始到当前已得到的各测试结果,得到至少一个第一方法代码块各自对应的第二访问次数。
10、在一种可能的实现方式中,所述基于所述至少一个第二方法代码块的第一访问次数和所述测试结果,确定所述变异后的种子是否加入所述种子池中,包括:
11、至少基于所述至少一个第一方法代码块的第二访问次数,确定所述至少一个第一方法代码块各自对应的第一数值,其中,所述第一数值指示了对应的第一方法代码块被访问的概率;基于所述至少一个第一方法代码块各自对应的第一数值,确定所述变异后的种子是否加入所述种子池中。
12、本方案中,通过筛选出在可以访问被访问的概率较小的方法代码块的变异后的种子,将其加入种子池中,从而可以在一定程度上增加对访问概率较小的方法代码块的探测,使得访问概率较小的方法代码块可能会调用未访问过的方法代码块,从而在一定程度上提高待测源码的覆盖率,进而可以增加挖掘待测源码的漏洞的可能性。
13、在该实现方式的一个例子中,所述多个方法代码块分别作为节点形成有向图,所述有向图中存在访问关系的方法代码块之间通过边连接,所述边的箭头指向被访问的方法代码块。
14、可选地,所述至少基于所述至少一个第一方法代码块的第二访问次数,确定所述至少一个第一方法代码块各自对应的第一数值,包括:
15、基于至少一个第一方法代码块的第二访问次数,所述有向图中所述至少一个第一方法代码块的入度和出度,确定所述至少一个第二方法代码块各自对应的第一数值。
16、本方案中,通过考虑已访问的方法代码块的访问次数、入度和出度,可以较为准确的判断已访问的方法代码块的概率。
17、示例性地,所述第一数值和第二方法代码块被访问的概率之间为反比关系,所述访问次数越多、所述入度越大、所述出度越小,所述第一数值越小。
18、本方案中,方法代码块的入度越大、出度越小、访问次数越多,则该方法代码块被访问的概率越高。
19、可选地,每个所述方法代码块配置有第二数值,所述第二数值指示了所述方法代码块被访问的概率;所述至少基于所述至少一个第一方法代码块的第二访问次数,确定所述至少一个第一方法代码块各自对应的第一数值,包括:
20、基于所述至少一个第二方法代码块的第一访问次数,配置的第二数值,确定所述至少一个第一方法代码块各自对应的第一数值。
21、本方案中,通过考虑已访问的方法代码块的访问次数、预先配置的第二数值(用于表示被访问的概率),可以较为准确的已访问的方法代码块各自被访问的概率。
22、需要说明的是,方法代码块作为共享对象的可能性越大,被访问的概率越高。示例性地,所述共享对象为共享的功能,用于处理错误内容的方法。通常被访问的概率低的方法代码块更容易发现漏洞,也更容易调用未被访问的方法代码块。
23、在该实现方式的一个例子中,所述方法还包括:确定访问所述至少一个第一方法代码块的第一调用的第一数目和第二数目,其中,所述第一数目指示了对应的第一调用在第i次之前的测试操作中已访问的方法代码块的数目,所述第二数目指示了对应的调用可访问的方法代码块的数目;所述至少基于所述至少一个第一方法代码块的第二访问次数,确定所述至少一个第一方法代码块各自对应的第一数值,包括:基于所述至少一个第一方法代码块的第二访问次数,访问所述至少一个第一方法代码块的第一调用对应的第一数目和第二数目,确定所述至少一个方法代码块各自对应的第一数值。
24、本方案中,通过考虑已访问的方法代码块的访问次数,访问该方法代码块的调用的第一数目、第二数目,可以较为准确的已访问的方法代码块的概率。
25、在该实现方式的一个例子中,所述选择的种子对应有访问的方法代码块的第一数值。
26、可选地,所述对选择的种子进行变异,包括:基于所述选择的种子对应的访问的方法代码块的第一数值,确定第一变异策略;基于所述第一变异策略,对所述选择的种子进行变异。
27、本方案中,基于选择的种子访问的方法代码块被访问的概率,确定变异策略,基于确定的变异策略实现变异,从而在一定程度上提高漏洞发掘的概率。
28、示例性地,本发明实施方案中,对访问被访问概率较低的方法代码块的调用,或者访问被访问概率较低的方法代码块的调用相邻的调用进行变异,可以在一定程度上提高漏洞发掘的概率。
29、在一种可能的实现方式中,所述软件为操作系统的内核。
30、第二方面,本发明实施例提供了一种软件测试装置,软件测试装置包括若干个模块,各个模块用于执行本发明实施例第一方面提供的软件测试方法中的各个步骤,关于模块的划分在此不做限制。该软件测试装置各个模块所执行的具体功能及达到的有益效果请参考本发明实施例第一方面提供的软件测试方法的各个步骤的功能,在此不再赘述。
31、示例地,软件测试装置,包括:
32、源码确定模块,用于确定软件的待测源码,其中,所述待测源码包括多个方法代码块和多个调用,每个所述方法代码块可被至少一个所述调用访问;
33、测试模块,用于对所述待测源码对应的种子池进行n次测试操作,其中,所述测试模块包括:选择变异单元、测试单元、筛选单元,其中,对于所述n次中的第i次的测试操作,所述i为大于等于2小于等于n-1的正整数,通过所述选择变异单元、测试单元、筛选单元实现;
34、选择单元,用于从所述种子池中选择种子,对选择的种子进行变异,得到变异后的种子,其中,所述变异后的种子包括所述多个调用中的至少一个调用;
35、测试单元,用于利用所述变异后的种子对所述待测源码进行模糊测试,得到测试结果,其中,所述测试结果包括所述变异后的种子访问的至少一个第一方法代码块的访问次数;
36、筛选单元,用于至少基于所述至少一个第一方法代码块的第二访问次数,确定所述变异后的种子是否加入所述种子池中,其中,每个所述第一方法代码块的第二访问次数为第1次测试操作到当前对所述第一方法代码块的访问次数。
37、在一种可能的实现方式中,所述装置还包括:分析模块,用于在所述至少一个第一方法代码块包括第i次之前的测试操作中未访问的方法代码块时,将所述变异后的种子加入所述种子池中;在所述至少一个第一方法代码块为第i次之前的测试操作中已访问的方法代码块时,执行所述筛选单元。
38、在一种可能的实现方式中,筛选单元,还用于基于从第1次的测试操作开始到当前已得到的各测试结果,得到至少一个第一方法代码块各自对应的第二访问次数。
39、在一种可能的实现方式中,筛选单元,用于至少基于所述至少一个第一方法代码块的第二访问次数,确定所述至少一个第一方法代码块各自对应的第一数值,其中,所述第一数值指示了对应的第一方法代码块被访问的概率;基于所述至少一个第一方法代码块各自对应的第一数值,确定所述变异后的种子是否加入所述种子池中。
40、在该实现方式的一个例子中,所述多个方法代码块分别作为节点形成有向图,所述有向图中存在访问关系的方法代码块之间通过边连接,所述边的箭头指向被访问的方法代码块。
41、可选地,筛选单元,用于基于至少一个第一方法代码块的第二访问次数,所述有向图中所述至少一个第一方法代码块的入度和出度,确定所述至少一个第二方法代码块各自对应的第一数值。
42、示例性地,所述第一数值和第二方法代码块被访问的概率之间为反比关系,所述访问次数越多、所述入度越大、所述出度越小,所述第一数值越小。
43、可选地,每个所述方法代码块配置有第二数值,所述第二数值指示了所述方法代码块被访问的概率;筛选单元,用于基于所述至少一个第二方法代码块的第一访问次数,配置的第二数值,确定所述至少一个第一方法代码块各自对应的第一数值。
44、在该实现方式的一个例子中,筛选单元,用于确定访问所述至少一个第一方法代码块的第一调用的第一数目和第二数目,其中,所述第一数目指示了对应的第一调用在第i次之前的测试操作中已访问的方法代码块的数目,所述第二数目指示了对应的调用可访问的方法代码块的数目;基于所述至少一个第一方法代码块的第二访问次数,访问所述至少一个第一方法代码块的第一调用对应的第一数目和第二数目,确定所述至少一个方法代码块各自对应的第一数值。
45、根据一种可行的实现方式,所述选择的种子对应有访问的方法代码块的第一数值,所述选择的种子对应有访问的方法代码块的第一数值。
46、可选地,选择单元,用于基于所述选择的种子对应的访问的方法代码块的第一数值,确定第一变异策略;基于所述第一变异策略,对所述选择的种子进行变异。
47、示例性地,本发明实施方案中,对种子对应的访问概率值较低的方法代码块所属的调用或者相邻的调用进行变异,可以在一定程度上提高漏洞发掘的概率。
48、在一种可能的实现方式中,所述软件为操作系统的内核。
49、第三方面,本发明实施例提供了一种软件测试装置,包括:至少一个存储器,用于存储程序;至少一个处理器,用于执行存储器存储的程序,当存储器存储的程序被执行时,处理器用于执行第一方面中所提供的方法。
50、第四方面,本发明实施例提供了一种软件测试装置,其特征在于,装置运行计算机程序指令,以执行第一方面中所提供的方法。示例性的,该装置可以为芯片,或处理器。
51、在一个例子中,该装置可以包括处理器,该处理器可以与存储器耦合,读取存储器中的指令并根据该指令执行第一方面中所提供的方法。其中,该存储器可以集成在芯片或处理器中,也可以独立于芯片或处理器之外。
52、第五方面,本发明实施例提供了一种计算机存储介质,计算机存储介质中存储有指令,当指令在计算机上运行时,使得计算机执行第一方面中所提供的方法。
53、第六方面,本发明实施例提供了一种包含指令的计算机程序产品,当指令在计算机上运行时,使得计算机执行执行第一方面中所提供的方法。
本文地址:https://www.jishuxx.com/zhuanli/20240730/197368.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表