灰盒模糊测试方法及装置

摘要: 本发明涉及计算机软件测试,尤其涉及一种灰盒模糊测试方法及装置。背景技术:1、覆盖引导灰盒模糊测试是一类重要的自动化软件测试技术,其通过执行目标程序、收集覆盖反馈...
灰盒模糊测试方法及装置

本发明涉及计算机软件测试,尤其涉及一种灰盒模糊测试方法及装置。

背景技术:

1、覆盖引导灰盒模糊测试是一类重要的自动化软件测试技术,其通过执行目标程序、收集覆盖反馈并不断变异测试输入来探索目标程序中未覆盖的代码路径,从而发现潜在漏洞。该类技术的核心效率取决于能否生成满足目标程序中的目标分支约束的输入,一旦某个分支约束长期无法被满足,该分支保护的深层代码区域就难以被测试,相关漏洞也难以被触发。

2、相关技术中,在进行灰盒模糊测试时,通常是通过种子调度、字节级调度、污点分析、比较值日志、通用变异器调度等方式来提高约束满足概率,从而生成较好的测试输入来进行测试。

3、然而,上述技术对目标程序的分支进行测试的能力仍然较为有限。

技术实现思路

1、本发明提供一种灰盒模糊测试方法及装置,用以解决现有技术中对目标程序的分支进行测试的能力仍然较为有限的缺陷,实现通过先识别出目标程序各分支中的困难前沿分支并对困难前沿分支生成专用变异器,然后通过专用变异器对上一轮测试用例进行局部改写以获得新的测试用例来对目标程序进行测试,这样生成的变异器和新的测试用例更有针对性,从而可以有效提升对困难前沿分支的测试能力,即提升对目标程序各分支的测试能力。

2、本发明提供一种灰盒模糊测试方法,包括:

3、根据目标程序对应的分支级插桩记录,确定目标程序中的各分支与各分支的出边之间的映射关系;

4、在通过测试用例对目标程序的各分支进行测试的过程中,根据映射关系,检测是否存在目标分支;上述目标分支为各分支中存在至少一个出边在第一预设时间窗口内未被覆盖的分支;

5、若存在目标分支,则根据目标分支对应的局部语义信息,生成目标分支对应的专用变异器;上述局部语义信息用于表征目标分支在目标程序中的上下文信息;

6、根据专用变异器对上一轮测试使用的测试用例进行局部改写,确定本轮测试使用的测试用例,并根据本轮测试使用的测试用例,对目标程序的目标分支进行测试。

7、根据本发明提供的一种灰盒模糊测试方法,上述根据目标分支对应的局部语义信息,生成目标分支对应的专用变异器,包括:

8、获取目标程序对应的项目描述信息和目标分支对应的局部语义信息;

9、根据局部语义信息和项目描述信息,确定提示词;

10、根据提示词,采用大语言模型生成目标分支对应的专用变异器。

11、根据本发明提供的一种灰盒模糊测试方法,上述根据提示词,采用大语言模型生成目标分支对应的专用变异器,包括:

12、获取操作数感知变异器模板;上述操作数感知变异器模板用于定义大语言模型的输入和输出,上述大语言模型的输入包括输入缓冲区、目标分支的第一操作数和第二操作数,上述大语言模型的输出包括根据目标分支的第一操作数和第二操作数是否成功修改输入缓冲区的结果,上述输入缓冲区包括上一轮测试使用的测试用例;

13、根据提示词和操作数感知变异器模板,引导大语言模型采用结构保持和语义引导的方式,生成目标分支对应的专用变异器。

14、根据本发明提供的一种灰盒模糊测试方法,上述获取目标程序对应的项目描述信息和目标分支对应的局部语义信息,包括:

15、通过程序查询代理查询目标程序的文档和源代码,并根据目标程序的文档和源代码,生成目标程序对应的项目描述信息;

16、通过程序查询代理按照设定查询方式在目标程序中进行查询,确定目标分支对应的局部语义信息;上述设定查询方式包括目录查询、文件查询、关键字搜索以及调用图查询中的至少一个。

17、根据本发明提供的一种灰盒模糊测试方法,上述根据专用变异器对上一轮测试使用的测试用例进行局部改写,确定本轮测试使用的测试用例,包括:

18、创建与灰盒模糊测试主线程隔离的变异工作子进程;

19、采用变异工作子进程,在设定超时时间和设定内存上限下,根据专用变异器对上一轮测试使用的测试用例进行局部改写,确定本轮测试使用的测试用例。

20、根据本发明提供的一种灰盒模糊测试方法,上述根据本轮测试使用的测试用例,对目标程序的目标分支进行测试,包括:

21、通过共享内存将本轮测试使用的测试用例返回给灰盒模糊测试主线程;

22、采用灰盒模糊测试主线程根据本轮测试使用的测试用例,对目标程序的目标分支进行测试。

23、根据本发明提供的一种灰盒模糊测试方法,上述根据目标分支对应的局部语义信息,生成目标分支对应的专用变异器,包括:

24、创建与灰盒模糊测试主线程独立的大语言模型主线程;

25、采用大语言模型主线程执行根据目标分支对应的局部语义信息,生成目标分支对应的专用变异器的步骤。

26、根据本发明提供的一种灰盒模糊测试方法,上述根据专用变异器对上一轮测试使用的测试用例进行局部改写,确定本轮测试使用的测试用例,包括:

27、将目标分支对应的专用变异器加入至变异器数据库;上述变异器数据库中包括生成的多个专用变异器以及各专用变异器对应的贝塔分布参数;

28、根据各专用变异器的贝塔分布参数,从各专用变异器中筛选出至少一个目标专用变异器;

29、根据目标专用变异器对上一轮测试使用的测试用例进行局部改写,确定本轮测试使用的测试用例。

30、根据本发明提供的一种灰盒模糊测试方法,上述方法还包括:

31、在本轮测试使用的测试用例被执行后,获得本轮执行结果;上述本轮执行结果中包括目标专用变异器是否覆盖目标出边;

32、根据本轮执行结果更新目标专用变异器的贝塔分布参数。

33、根据本发明提供的一种灰盒模糊测试方法,上述专用变异器的贝塔分布参数包括表征测试成功的第一累计次数参数和表征测试失败的第二累计次数参数,上述根据本轮执行结果更新目标专用变异器的贝塔分布参数,包括:

34、获取稀有边集合;上述稀有边集合中包括各分支的出边中未被覆盖的目标出边或命中频率低于阈值的目标出边;

35、若目标专用变异器覆盖目标出边,则对目标专用变异器的第一累计次数参数的值进行加一;若目标专用变异器未覆盖目标出边,则对目标专用变异器的第二累计次数参数的值进行加一。

36、根据本发明提供的一种灰盒模糊测试方法,上述方法还包括:

37、若根据专用变异器确定的测试用例在第二预设时间窗口内仍未覆盖专用变异器对应的目标分支,则获取测试失败相关信息;

38、根据专用变异器、测试失败相关信息以及专用变异器对应的目标分支的局部语义信息,重新生成专用变异器对应的目标分支的新的专用变异器。

39、本发明还提供一种灰盒模糊测试装置,包括如下模块:

40、映射关系确定模块,用于根据目标程序对应的分支级插桩记录,确定目标程序中的各分支与各分支的出边之间的映射关系;

41、检测模块,用于在通过测试用例对目标程序的各分支进行测试的过程中,根据映射关系,检测是否存在目标分支;上述目标分支为各分支中存在至少一个出边在第一预设时间窗口内未被覆盖的分支;

42、专用变异器生成模块,用于若存在目标分支,则根据目标分支对应的局部语义信息,生成目标分支对应的专用变异器;上述局部语义信息用于表征目标分支在目标程序中的上下文信息;

43、改写及模糊测试模块,用于根据专用变异器对上一轮测试使用的测试用例进行局部改写,确定本轮测试使用的测试用例,并根据本轮测试使用的测试用例,对目标程序的目标分支进行测试。

44、本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一种所述灰盒模糊测试方法。

45、本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述灰盒模糊测试方法。

46、本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述灰盒模糊测试方法。

47、本发明提供的灰盒模糊测试方法及装置,通过根据目标程序对应的分支级插桩记录,确定目标程序中的各分支与各分支的出边之间的映射关系,在通过测试用例对目标程序的各分支进行测试的过程中,根据映射关系,检测是否存在目标分支,若存在目标分支,则根据目标分支对应的局部语义信息,生成目标分支对应的专用变异器,根据专用变异器对上一轮测试使用的测试用例进行局部改写以确定本轮测试使用的测试用例,并根据本轮测试使用的测试用例,对目标程序的目标分支进行测试,其中,上述目标分支为各分支中存在至少一个出边在第一预设时间窗口内未被覆盖的分支,局部语义信息用于表征目标分支在目标程序中的上下文信息。在该方法中,由于通过先识别出目标程序各分支中的困难前沿分支并对困难前沿分支生成专用变异器,然后通过专用变异器对上一轮测试用例进行局部改写以获得新的测试用例来对目标程序进行测试,这样生成的变异器和新的测试用例更有针对性,从而可以有效提升对目标程序中困难前沿分支的测试能力,即提升对目标程序各分支的测试能力。同时不要求重新生成完整的测试输入,而是在已有种子能够到达目标分支的基础上,仅围绕目标分支的约束语义生成局部、结构保持、可复用的专用变异器,从而可以降低路径条件累积带来的难度。