模糊测试中的种子用例处理方法、装置、设备及存储介质与流程
未命名
10-20
阅读:87
评论:0

1.本技术涉及计算机技术领域,尤其涉及一种模糊测试中的种子用例处理方法、装置、电子设备及计算机可读存储介质。
背景技术:
2.释放后再访问(uaf,use-after-free)是一种计算机程序运行过程中的漏洞,uaf漏洞指在程序运行过程中,访问一块已经被释放的内存区域,uaf漏洞通常会引起程序崩溃、越权等问题。如何通过测试手段检测uaf漏洞,则是目前研究的重要热点。
3.目前,测试工具可以将测试用例作为种子进行测试,以判断测试用例在被测程序中是否会触发uaf漏洞,通过不断筛选种子以及对种子进行变异,产生接近测试目标的种子,实现对uaf漏洞的测试。其中,测试过程中,可以采用测试用例执行产生的指令操作的覆盖率,对种子的价值进行评价,并对种子进行优化引导,从而加速测试过程。
4.但是,目前的方案中,利用覆盖率对种子进行优化引导的效率太慢,难以快速产生高价值种子,从而降低了测试的效率。
技术实现要素:
5.本技术实施例提供一种模糊测试中的种子用例处理方法及装置,以解决现有技术中优化引导的效率太慢,从而降低了测试的效率的问题。
6.第一方面,本技术实施例提供了一种模糊测试中的种子用例处理方法,所述方法包括:获取被测程序和种子用例,并基于所述种子用例变异生成测试用例;在所述被测程序运行所述测试用例的过程中,若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针后续对目标状况的消除概率;所述预设执行特征用于表征所述测试用例在内存释放到内存再访问的过程中,指针的指向片区发生了变更;所述目标状况表征所述指针所指向片区发生更改的状况;根据所述消除概率为所述目标种子用例设置优先级,所述优先级与所述消除概率呈正相关关系;按照所述目标种子用例的优先级,对所述目标种子用例进行后处理操作。
7.第二方面,本技术实施例提供了一种模糊测试中的种子用例处理装置,所述装置包括:获取模块,用于获取被测程序和种子用例,并基于所述种子用例变异生成测试用例;计算模块,用于在所述被测程序运行所述测试用例的过程中,若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针后续对目标状况的消除概率;所述预设执行特征用于表征所述测试用例在内存释放
到内存再访问的过程中,指针的指向片区发生了变更;所述目标状况表征所述指针所指向片区发生更改的状况;设置模块,用于根据所述消除概率为所述目标种子用例设置优先级,所述优先级与所述消除概率呈正相关关系;后处理模块,用于按照所述目标种子用例的优先级,对所述目标种子用例进行后处理操作。
8.第三方面,本技术实施例还提供了一种电子设备,包括处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现所述第一方面的方法。
9.第四方面,本技术实施例还提供了一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行所述第一方面的方法。
10.本技术实施例在被测程序运行所述测试用例的过程中,在检测到测试用例包含预设执行特征时,找出满足内存释放语句和内存再访问语句所访问的内存区域不同的测试用例作为高价值的种子用例进行关注,并通过计算该种子用例的指针后续对目标状况的消除概率,利用消除概率对目标种子用例的优先级进行设定,以期在后续按照目标种子用例的优先级,对目标种子用例进行后处理操作,从而更细粒度的对种子用例进行引导,更高效率的通过后处理获得理想的种子用例,提升模糊测试挖掘uaf漏洞的效率。
11.上述说明仅是本技术技术方案的概述,为了能够更清楚了解本技术的技术手段,而可依照说明书的内容予以实施,并且为了让本技术的上述和其它目的、特征和优点能够更明显易懂,以下列举本技术的具体实施方式。
附图说明
12.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
13.图1是本技术实施例提供的一种实施场景图;图2是本技术实施例提供的一种模糊测试中的种子用例处理方法的步骤流程图;图3是本技术实施例提供的另一种模糊测试中的种子用例处理方法的步骤流程图;图4是本技术实施例提供的一种插桩代码的功能流程图;图5是本技术实施例提供的一种种子用例选择过程的流程图;图6是本技术实施例提供的一种能量赋值过程的流程图;图7是本技术实施例提供的一种模糊测试中的种子用例处理装置框图;图8是本技术的一种装置的框图;图9是本技术的一些实施例中服务端的结构示意图。
具体实施方式
14.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
15.本技术的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中的术语“和/或”用于描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本技术实施例中术语“多个”是指两个或两个以上,其它量词与之类似。
16.术语解释:释放后再访问(uaf)漏洞:指在程序运行过程中,访问一块已经被释放的内存区域,uaf漏洞的触发要求包括:需要按照次序依次执行内存分配、内存释放以及内存再访问这几个关键内存操作;并且要求内存释放和内存再访问语句所访问的内存区域相同或至少存在交集。
17.模糊测试:一种程序测试技术,目标是不断地自动化地生成随机构造的测试用例来触发被测程序的非预期行为,主要流程包括:被测程序插桩、种子选择、能量赋值、种子变异、种子执行以及种子筛选六部分,模糊测试通过不停地变异生成新测试用例对被测程序进行测试,并将触发被测程序缺陷的种子记录到缺陷集中。
18.被测程序:模糊测试中的执行载体,用于执行测试用例从而实现对uaf漏洞的检测。测试用例在被测程序中执行产生的结果,可以用来判断测试用例是否触发uaf漏洞。
19.测试用例:用来模拟uaf漏洞的触发场景,测试用例作为被测程序的参数输入,用于在被测程序执行测试用例的过程中,进行是否触发uaf漏洞的判断,种子用例可以通过变异等手段不断产生新的测试用例,以期产生高价值的种子用例。用于产生新测试用例的测试用例,称为种子用例,简称为种子。
20.悬挂指针:操作语句的指针指向的内存空间已经被释放,但是该指针后续没有进行任何的赋值改变,以至于指针仍然指向已经被回收的内存地址,这种情况下该指针就被称为悬挂指针。
21.变异:是指在一个现有种子的基础上,进行一些操作,从而形成一些新种子的过程。种子变异的目的是通过这些随机操作不断地生成新种子进行测试,以期触发被测程序的漏洞。
22.插桩:是指在被测程序中自动化地插入一些额外辅助代码,且要求这些额外代码不能影响被测程序的原有业务逻辑,插桩的目的是为了获取某些运行时信息,以供后续利用。
23.预设执行特征:表征测试用例在内存释放到内存再访问的过程中,指针的指向片区发生了变更情况的特征。
24.消除概率:反映种子用例的指针后续对指针所指向片区发生更改的状况进行消除的概率,消除概率用于评价种子用例的价值,种子用例的消除概率与种子用例的价值呈正相关关系,参照图1,图1是本技术实施例提供的一种实施场景图,其示出了模糊测试循环过程。
25.其中,种子是被测程序的输入内容,种子即为测试用例;种子池存放着目前待测试的种子,种子池中的种子可以有优先级的划分;程序插桩是指在被测程序中自动化地插入一些额外辅助代码,从而获取某些运行时信息以供后续利用;种子选择:是指在所有待测种子中选取一个作为当前要测试的种子,种子选择的目的是优先选出评价较高的种子,在其基础上进行变异以及测试等操作,尽可能早地对评价较优的种子进行操作,将评价一般的种子置后处理,从而实现尽早发现漏洞的目的;种子变异:是指在一个现有种子的基础上,进行一些操作,从而形成一些新种子的过程。这些操作通常包括随机步长按位翻转、随机拼接、随机裁剪以及随机填充等。种子变异的目的是通过这些随机操作不断地生成新种子进行测试,以期触发被测程序的漏洞,种子变异的关键点是随机;能量赋值:决定了在种子变异过程中,基于该种子所进行的变异次数。能量赋值决定了花费在某个现有种子上的时间等资源,目的是尽可能地在评价较优的种子上花费更多的时间,而减少在评价较低的种子上所花费的时间,从而提高模糊测试的效率。
26.整体实现流程中,种子池中的种子经过种子选择,获得评价较高的种子进行较高的能量赋值,之后种子进行变异,获得新种子,新种子输入已插桩的被测程序进行运行,若新种子运行过程中命中uaf漏洞并报错,则将该新种子放入缺陷集;若新种子运行过程中未命中uaf漏洞,则将新种子加入种子池继续测试循环,最终缺陷集中存储的种子即为uaf漏洞的测试结果。
27.图2,是本技术实施例提供的一种模糊测试中的种子用例处理方法的步骤流程图,如图2所示,该方法可以包括:步骤101、获取被测程序和种子用例,并基于所述种子用例变异生成测试用例。
28.在本技术实施例中,测试用例作为被测程序的参数输入,用来模拟uaf漏洞的触发场景,在被测程序执行测试用例的过程中,进行是否触发uaf漏洞的判断;被测程序则是模糊测试中的执行载体,用于执行测试用例从而实现对uaf漏洞的检测。测试用例在被测程序中执行产生的结果,可以用来判断测试用例是否触发uaf漏洞。其中,用于变异产生新测试用例的测试用例,称为种子用例,简称为种子。
29.具体的,测试用例可以通过编写生成,如基于设定的测试用例模板,通过填入对应参数的值,从而生成一个测试用例。测试用例也可以随机生成,如,通过随机算法随机、批量的生成测试用例。当然,测试用例也可以是从维护测试用例的数据源所获得的。作为种子的种子用例通过变异可以生成测试用例,变异即是指在一个现有种子用例的基础上,进行一些操作,从而形成一些新种子用例的过程。
30.步骤102、在所述被测程序运行所述测试用例的过程中,若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针
后续对目标状况的消除概率。
31.在本技术实施例中,uaf漏洞的触发要求包括:(1)需要按照次序依次执行内存分配、内存释放以及内存再访问这几个关键内存操作;(2)要求内存释放和内存再访问语句所访问的内存区域相同或至少存在交集。
32.例如一段程序代码中,首先出现了内存分配语句:char* ptr=(char*)malloc(10),表征分配了10字节的内存区域并使用指针ptr指向该内存区域;进一步的出现了内存释放语句:free(ptr),表征释放之前分配的10字节大小的内存区域;最后出现了内存再访问语句:printf(“%s,operation aborted”,ptr),表征再次读取已经被释放了的内存区域;则基于上述操作,最终触发被测程序中蕴含的uaf漏洞。
33.则基于上述对uaf漏洞的定义,uaf漏洞的测试期望被测程序在运行测试用例的过程中,可以依次执行内存分配、内存释放、内存再访问,以及内存释放和内存再访问语句所访问的内存区域相同或至少存在交集,满足上述要求的测试用例则被认为是理想的种子用例,这类高价值的种子用例被称为目标种子用例。
34.实际测试的过程中,会存在依次执行了内存分配、内存释放、内存再访问的目标种子用例,但是该目标种子用例对应的内存释放语句和内存再访问语句所访问的内存区域不同(指内存释放对应的悬挂指针后续被重新赋值,导致内存再访问时该指针对应的内存区域更改,即理解为内存释放语句和内存再访问语句之间,指针的指向发生了更改)。这种情况下,相关技术会将该测试用例认为是无价值种子进行忽略。但是,满足依次执行了内存分配、内存释放、内存再访问,但是内存释放语句和内存再访问语句所访问的内存区域不同的目标种子用例,与理想的种子用例的区别仅在于:理想的种子用例的内存释放语句和内存再访问语句之间指针的指向不更改;而目标种子用例的内存释放语句和内存再访问语句之间指针的指向发生了更改。而目标种子用例相对于理想的种子用例的区别,是可以有效的通过后续的变异手段所尽量消除的。因此,本技术实施例将满足依次执行了内存分配、内存释放、内存再访问,但是内存释放语句和内存再访问语句所访问的内存区域不同的目标种子用例作为高价值种子用例进行关注,以期在后续优先对目标种子用例进行变异,且在变异中给予目标种子用例更高的能量赋值,从而更细粒度的对目标种子用例进行引导,更高效率的获得理想的种子用例,提升模糊测试挖掘uaf漏洞的效率。
35.在该步骤中,描述了如何找到满足依次执行了内存分配、内存释放、内存再访问,但是内存释放语句和内存再访问语句所访问的内存区域不同的目标种子用例,以及如何获得针对目标种子用例的价值评判参数。
36.具体的,针对目标种子用例的特性,首先定义预设执行特征。预设执行特征即表征了被测程序运行测试用例时,依次执行了内存分配、内存释放、内存再访问,并且测试用例在内存释放到内存再访问的过程中,指针的指向片区发生了变更。则基于定义的预设执行特征,在被测程序运行测试用例的过程中,若检测到测试用例包含预设执行特征,则认为该测试用例是高价值的目标种子用例。
37.例如,一段测试用例的运行程序代码中,首先出现了内存分配语句:char* ptr=(char*)malloc(size);进一步的出现了内存释放语句:free(ptr);最后出现了内存再访问语句:logerror(“operation aborted”,ptr);但是在内存释放语句和内存再访问语句之间,存在多个指针指向更改语句:if(condition1){ptr=a};if(condition2){ptr=b};if
(condition3){ptr=c}。这就导致内存释放语句的指针的指向片区和内存再访问语句的指针的指向片区不同,此时程序虽然为命中uaf漏洞,但是本技术实施例将这种测试用例作为高价值的目标种子用例进行关注。
38.进一步的,针对目标种子用例,可以计算该目标种子用例的指针后续对目标状况的消除概率,将该消除概率作为目标种子用例的价值评判参数,其中,目标状况表征指针所指向片区发生更改的状况。具体的,对于目标种子用例的执行语句来说,其当前处于内存释放到内存再访问的过程中指针的指向片区发生了变更的第一分支,且已得知第一分支的概率;目标种子用例的执行语句的另一个分支则是内存释放到内存再访问的过程中指针的指向片区不发生变更的第二分支,第二分支的概率等于1减去第一分支的概率得到的差值(即为:第二分支的概率=1-第一分支的概率);则第二分支的概率可用于表征目标种子用例的指针后续对目标状况的消除概率(存在多个执行语句的情况下,消除概率可以为多个第二分支概率中的最小值);即目标种子用例的语句在后续变异中,可以按照消除概率变异跳转至第二分支。基于上述对uaf漏洞特性的分析,执行语句处于第二分支的测试用例更接近于理想的种子用例,因此,消除概率的大小,可以作为目标种子用例的价值评判依据,从而影响后续对种子用例的优先级的设置。
39.步骤103、根据所述消除概率为所述目标种子用例设置优先级,所述优先级与所述消除概率呈正相关关系。
40.本技术实施例中,由于目标种子用例的语句在后续变异中,可以按照消除概率变异跳转至第二分支,因此,消除概率可以作为目标种子用例的价值评判参数,来设定目标种子用例的优先级。优先级与消除概率呈正相关关系,即目标种子用例的消除概率越大,该目标种子用例后续通过变异生成理想的种子用例的概率也就越大,目标种子用例在测试环节中的价值也就越大,从而为该目标种子用例设定更大的优先级,通过更大的优先级引导针对该目标种子用例的后续操作。
41.一种相关技术中,对种子用例的引导是按照种子用例执行时对边序列的覆盖率进行的顺序引导。即一个种子用例的执行具有一条执行路径,执行路径上的一步操作是一个边,通过计算种子用例对执行路径中单条边的覆盖率,来实现种子用例的引导。
42.另一种相关技术中,对种子用例的引导是基于操作序列的引导策略。具体以静态的类型状态分析得到的操作序列引导,以对操作序列(依次包含内存分配、内存释放、内存再访问的操作序列)的覆盖率进行的引导。另外,该相关技术具体可以在变异环节基于突变的信息流分析实现种子用例的引导,使用信息流分析的方法来建立种子用例与程序变量之间关系,基于该关系通过变异输入参数来改变变量状态,生成更优种子。
43.但是,上述两种相关技术都未在种子选择阶段进行局部定向引导,也并未关注满足依次执行了内存分配、内存释放、内存再访问,但是内存释放语句和内存再访问语句所访问的内存区域不同的目标种子用例,从而遗失了高价值的种子用例,进而影响了测试效率。
44.而本技术实施例将目标种子用例作为高价值种子用例进行关注,以期在后续基于目标种子用例的消除概率对目标种子用例的优先级进行设定,对优先级较高的目标种子用例进行变异,且在变异中给予目标种子用例更高的能量赋值,从而更细粒度的对目标种子用例进行引导,更高效率的获得理想的种子用例,提升模糊测试挖掘uaf漏洞的效率。
45.步骤104,按照所述目标种子用例的优先级,对所述目标种子用例进行后续处理操
作。
46.在本技术实施例中,按照目标种子用例的优先级对目标种子用例进行后续处理操作,是指为优先级较高的目标种子用例进行变异,且在变异中给予目标种子用例更高的能量赋值,以期快速的获得理想的种子用例,变异产生的新的测试用例可以输入被测程序进行测试,并将触发uaf漏洞的测试用例记录到缺陷集中。
47.综上,本技术实施例在被测程序运行所述测试用例的过程中,在检测到测试用例包含预设执行特征时,找出满足内存释放语句和内存再访问语句所访问的内存区域不同的测试用例作为高价值种子用例进行关注,并通过计算这种目标种子用例的指针后续对目标状况的消除概率,利用消除概率对目标种子用例的优先级进行设定,以期在后续按照目标种子用例的优先级,对目标种子用例进行后续处理操作,从而更细粒度的对种子用例进行引导,更高效率的通过后续处理获得理想的种子用例,提升模糊测试挖掘uaf漏洞的效率。
48.图3,是本技术实施例提供的一种模糊测试中的种子用例处理方法的具体步骤流程图,如图3所示,该方法可以包括:步骤201、获取被测程序和种子用例,并基于所述种子用例变异生成测试用例。
49.步骤202、根据预设执行特征,在所述被测程序中分别插入识别功能代码片段和计算功能代码片段。
50.在本技术实施例中,参照图1,该步骤称为程序插桩。程序插桩是指在被测程序中自动化地插入一些额外辅助代码,且要求这些额外代码不能影响被测程序的原有业务逻辑,插桩的目的是为了获取某些运行时信息,以供后续利用。
51.具体的,本技术实施例的程序插桩,具体插入的内容是识别功能代码片段和计算功能代码片段。识别功能代码片段用于在后续过程中,检测测试用例是否包含预设执行特征;计算功能代码片段则在检测到测试用例包含预设执行特征时,将所述测试用例设为目标种子用例,并计算该目标种子用例的指针后续对目标状况的消除概率。
52.步骤203、通过所述识别功能代码片段对测试用例的运行状况进行检测,并在所述检测结果为所述测试用例包含预设执行特征的情况下,将所述测试用例设为目标种子用例,并通过所述计算功能代码片段计算所述目标种子用例的指针后续消除目标状况的消除概率。
53.在本技术实施例中,插桩插入的识别功能代码片段可以对测试用例的运行状况进行检测,在检测结果为测试用例包含预设执行特征的情况下,将所述测试用例设为目标种子用例,并通过计算功能代码片段计算目标种子用例的指针后续消除目标状况的消除概率。本技术实施例将满足依次执行了内存分配、内存释放、内存再访问,但是内存释放语句和内存再访问语句所访问的内存区域不同的目标种子用例,当作检测结果为包含预设执行特征的高价值的目标种子用例进行关注,以期在后续优先对目标种子用例进行变异,且在变异中给予目标种子用例更高的能量赋值,从而更细粒度的对目标种子用例进行引导,更高效率的获得理想的种子用例,提升模糊测试挖掘uaf漏洞的效率。
54.可选的,步骤203具体可以包括子步骤2031-2033:子步骤2031、获取悬挂指针的指针标识,所述悬挂指针为指向已释放片区,并且还未再次赋值的指针。
55.子步骤2032、根据所述指针标识,获取所述悬挂指针在所述内存释放至所述内存
再访问的过程中的执行序列。
56.子步骤2033、在确定所述执行序列中存在所述悬挂指针的指向发生更改的分支的情况下,确定所述测试用例为所述目标种子用例,并计算对所述目标种子用例的指针后续出现目标状况的消除概率。
57.在本技术实施例中,针对子步骤2031-2033,在操作语句的指针指向的内存空间已经被释放,但是该指针后续没有进行任何的赋值改变,以至于指针仍然指向已经被回收的内存地址,这种情况下该指针就被称为悬挂指针。悬挂指针的指针标识会在指针列表中,悬挂指针的指针标识即为悬挂装置的指针名称,用于对悬挂指针起到标识作用。因此本技术实施例可以从指针列表中获取悬挂指针的指针标识,之后通过该指针标识,获取悬挂指针在内存释放至内存再访问的过程中的执行序列,即内存释放至内存再访问的过程中会有很多执行操作,通过悬挂指针的指针标识,可以从中筛选出悬挂指针在内存释放至内存再访问的过程中的执行序列。
58.进一步的,获得悬挂指针在所述内存释放至所述内存再访问的过程中的执行序列后,可以判断其中是否执行了悬挂指针的指向发生更改的分支,若存在,则确定测试用例包含预设执行特征,确定测试用例为目标种子用例,并计算对目标种子用例的指针后续出现目标状况的消除概率。
59.因此,本技术基于相关技术所忽略的,满足依次执行了内存分配、内存释放、内存再访问,但是内存释放语句和内存再访问语句所访问的内存区域不同的目标种子用例的特性,首先定义预设执行特征;预设执行特征即表征了被测程序运行测试用例时,依次执行了内存分配、内存释放、内存再访问,并且测试用例在内存释放到内存再访问的过程中,指针的指向片区发生了变更;则基于定义的预设执行特征,在被测程序运行测试用例的过程中,若检测到执行序列中执行了悬挂指针的指向发生更改的分支,则认为该测试用例是高价值的目标种子用例。
60.可选的,步骤203还可以包括子步骤2034-2038:子步骤2034、获取悬挂指针的指针标识,所述悬挂指针为指向已释放片区,并且还未再次赋值的指针。
61.子步骤2035、根据所述指针标识,获取所述悬挂指针在所述内存释放至所述内存再访问的过程中的执行序列。
62.子步骤2036、根据所述执行序列,获取所述悬挂指针的指向发生更改的分支的执行概率。
63.子步骤2037、将1与所述执行概率的差值,作为第一概率(即为:第一概率=1-执行概率)。
64.子步骤2038、将所有所述第一概率中的最小值作为所述消除概率。
65.在本技术实施例中,针对子步骤2034-2038,具体在计算包含了预设执行特征的目标种子用例的消除概率的过程中,首先可以通过指针列表中悬挂指针的指针标识,从内存释放至内存再访问的执行过程中,筛选出悬挂指针在内存释放至内存再访问的过程中的执行序列。
66.进一步的,获得执行序列后,由于已确定目标种子用例包含了预设执行特征,则可以进一步确定目标种子用例当前已执行了悬挂指针的指向发生更改的分支,并得到了该分
支的执行概率,从而本技术实施例可以直接获取悬挂指针的指向发生更改的分支的执行概率。之后,由于目标种子用例包含执行了悬挂指针的指向发生更改的分支以及执行了悬挂指针的指向未发生更改的分支,因此,指向未发生更改的分支的第一概率等于1-减去指向发生更改的分支的执行概率得到的差值(即为:第一概率=1-指向发生更改的分支的执行概率)。
67.若执行序列存在多个操作语句都分别计算得到了第一概率,则可以将所有第一概率中的最小值作为消除概率。即目标种子用例的语句在后续变异中,可以按照消除概率变异跳转至指向未发生更改的分支。基于本技术实施例对uaf漏洞特性的分析,执行语句处于指向未发生更改的分支的测试用例更接近于理想的种子用例,使得消除概率作为目标种子用例的价值评判参数,从而影响后续对目标种子用例的优先级的设置,进而影响到目标种子用例的后续处理执行。
68.可选的,步骤203还可以包括子步骤2039-20312:子步骤2039、在所述被测程序运行所述测试用例的过程中,若通过所述识别功能代码片段检测到所述被测程序的执行指令为内存释放指令,则将所述内存释放指令对应的指针标识和初始消除概率的对应关系进行存储。
69.子步骤20310、若进一步通过所述识别功能代码片段检测到所述被测程序的执行指令为指向更改指令,且所述指向更改指令被重新赋值,则确定所述测试用例包含预设执行特征,将所述测试用例设为目标种子用例。
70.子步骤20311、通过所述计算功能代码片段计算所述消除概率,根据计算得到的消除概率更新所述对应关系中的初始消除概率。
71.子步骤20312、若进一步通过所述识别功能代码片段检测到所述被测程序的执行指令为访存指令,且所述访存指令对应的指针的指针标识处于所述对应关系中,则将所述指针标识添加至预设指针集合。
72.在本技术实施例中,针对子步骤2039-20312,通过向被测程序插桩,可以在被测程序中插入识别功能代码片段和计算功能代码片段。识别功能代码片段用于在后续过程中,检测测试用例是否包含预设执行特征;计算功能代码片段则在检测到测试用例包含预设执行特征时,将测试用例设为目标种子用例,计算目标种子用例的指针后续对目标状况的消除概率。一种实现方式中,可以使用底层虚拟机(llvm,low level virtual machine)框架,在afl-llvm-pass.so.cc文件基础上编写实施本技术实施例的插桩代码片段。
73.具体的,参照图4,其示出了本技术实施例提供的一种插桩代码的功能流程图,首先执行s1、遍历被测程序的每一条指令,对当前所处指令执行s2、判断指令是否为内存释放指令;若是内存释放指令,则执行s3、将内存释放指令对应的指针标识和初始消除概率1的对应关系存入共享内存map;执行s3之后或指令不是内存释放指令时,继续执行s4、判断进一步检测的指令是否为指向更改指令,且指向更改指令是否被重新赋值;若指令是指向更改指令,且指向更改指令被重新赋值,则执行s5、通过计算功能代码片段计算消除概率,根据计算得到的消除概率更新map中对应的初始消除概率;若指令不是指向更改指令,或指向更改指令未被重新赋值,或执行s5之后;则执行s6、判断进一步检测的指令是否为访存指令,且指令的指针是否位于map中;若进一步检测的指令为访存指令,且指令的指针位于map中,则执行s7、将指针的指针标识添加至预设指针集合。若进一步检测的指令不为访存指
令,或指令的指针不位于map中,或执行s7之后,则执行s8、判断是否遍历完被测程序的所有指令,若是则结束,若否则执行s9、处理被测程序的下一指令。
74.其中,计算功能代码片段计算消除概率p,可以采用下述公式:p=min(1-pi),i=1,2,3
…
n;其中,min为取最小值运算符,pi是悬挂指针的指向发生更改的分支的执行概率,n为悬挂指针的指向发生更改的分支的数量。
75.本技术实施例通过识别功能代码片段将满足依次执行了内存分配、内存释放、内存再访问,但是内存释放语句和内存再访问语句所访问的内存区域不同的目标种子用例作为高价值种子用例进行关注,并通过计算功能代码片段计算目标种子用例的指针后续对目标状况的消除概率,将消除概率的大小作为目标种子用例的价值评判依据,从而影响后续对目标种子用例的优先级的设置。
76.参照图5,其示出了本技术实施例提供的一种种子用例选择过程的流程图,其描述了将要进行变异操作的种子用例的选择策略。首先执行m1、判断是否存在包含预设执行特征的目标种子用例;若存在,则执行m2、优先选择消除概率最大的目标种子用例;若不存在,则执行m3、按照先进先出策略选择目标种子用例。
77.步骤204、根据所述消除概率为所述目标种子用例设置优先级,所述优先级与所述消除概率呈正相关关系。
78.步骤205、按照所述目标种子用例的优先级,对所述目标种子用例进行变异操作,获得新的测试用例。
79.在本技术实施例中,对目标种子用例进行变异操作,是指在一个现有种子用例的基础上,进行一些操作,从而形成一些新测试用例的过程。种子用例变异的目的是通过这些随机操作不断地生成新测试用例进行测试,以期通过变异快速产生能够触发被测程序的漏洞的理想的种子用例。
80.具体的,基于目标种子用例的优先级,对目标种子用例进行变异操作,其原则在于对优先级较高的目标种子用例进行变异,且在变异中给予目标种子用例更高的能量赋值,从而更细粒度的对目标种子用例进行引导,更高效率的获得理想的种子用例,提升模糊测试挖掘uaf漏洞的效率。
81.可选的,变异操作包括:随机步长按位翻转操作、随机拼接操作、随机裁剪操作、随机填充操作中的一种或多种。
82.可选的,步骤205具体可以包括子步骤2051-2052:子步骤2051、基于所述目标种子用例的优先级,为所述目标种子用例设置变异权重,所述目标种子用例的优先级与所述目标种子用例的变异权重呈正相关关系。
83.子步骤2052、按照所述目标种子用例的变异权重,对所述目标种子用例进行变异操作,获得新的测试用例;所述变异权重与所述目标种子用例的变异次数呈正相关关系。
84.在本技术实施例中,针对子步骤2051-2052,变异权重是指能量赋值过程中,影响为种子用例赋予的变异能量大小的参数。首先变异权重决定了在种子用例变异过程中,基于该种子用例所进行的变异次数。能量赋值决定了花费在某个种子用例上的时间等资源。在本技术实施例的目的是尽可能地在优先度较高的种子用例上花费更多的时间,而减少在优先度较低的种子用例上所花费的时间,从而提高模糊测试的效率。
85.可选的,子步骤2051具体可以包括子步骤20511-20513:子步骤20511、获取针对所述目标种子用例的初始变异权重。
86.子步骤20512、根据预设的基础系数,以及与所述目标种子用例的优先级对应的消除概率,计算得到扩大系数。
87.子步骤20513、将所述初始变异权重与所述扩大系数的乘积,作为针对所述目标种子用例设置的变异权重。
88.在本技术实施例中,针对子步骤20511-20513,对影响能量赋值的变异权重score的设定,可以参照图6,其示出了本技术实施例提供的一种能量赋值过程的流程图。首先执行n1、判断是否触发了悬挂指针;若未触发,则执行n2、按照默认分配策略进行能量赋值(如按照目标种子用例执行时的覆盖率进行能量赋值);若触发,则执行n3、按照消除概率对原变异权重进行更改。
89.其中,对于包含预设执行特征的目标种子用例,其变异权重score的公式如下:score=perf_score
×
(4+probability_of_danglepointer
×
10);其中,perf_score是包含预设执行特征的目标种子用例的初始变异权重,probability_of_danglepointer为包含预设执行特征的目标种子用例的消除概率。需要说明的是,包含预设执行特征的目标种子用例的初始变异权重,是根据实际需求提前预置的权重值,本技术实施例不对初始变异权重的取值做具体限定。
90.步骤206、基于所述被测程序和所述新的测试用例进行测试,获得包含缺陷测试用例的缺陷集,所述缺陷测试用例为执行报错的新的测试用例。
91.可选的,所述方法还可以包括:步骤207、针对未报错的新的测试用例,进入所述在所述被测程序运行所述测试用例的过程中,若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针后续对目标状况的消除概率的步骤。
92.在本技术实施例中,针对步骤206-207,针对变异产生的新的测试用例,可以构造输入文件夹,将新的测试用例放入输入文件夹,之后启动测试工具的子进程;在子进程中运行被测程序,并将输入文件夹中的新的测试用例输入给被测程序进行运行,若新的测试用例运行过程中命中uaf漏洞并报错,则将该新的测试用例放入缺陷集;若新的测试用例运行过程中未命中uaf漏洞,则将新的测试用例加入种子池继续测试循环,最终缺陷集中存储的测试用例即为uaf漏洞的测试结果。
93.综上,本技术实施例在被测程序运行所述测试用例的过程中,在检测到测试用例包含预设执行特征时,找出满足内存释放语句和内存再访问语句所访问的内存区域不同的测试用例作为高价值种子用例进行关注,并通过计算该测试用例的指针后续对目标状况的消除概率,利用消除概率对目标种子用例的优先级进行设定,以期在后续按照目标种子用例的优先级,对目标种子用例进行后处理操作,从而更细粒度的对种子用例进行引导,更高效率的通过后处理获得理想的种子用例,提升模糊测试挖掘uaf漏洞的效率。
94.图7是本技术实施例提供的一种模糊测试中的种子用例处理装置的框图,该装置包括:获取模块301,用于获取被测程序和种子用例,并基于所述种子用例变异生成测试用例;
计算模块302,用于在所述被测程序运行所述测试用例的过程中,若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针后续对目标状况的消除概率;所述预设执行特征用于表征所述测试用例在内存释放到内存再访问的过程中,指针的指向片区发生了变更;所述目标状况表征所述指针所指向片区发生更改的状况;设置模块303,用于根据所述消除概率为所述目标种子用例设置优先级,所述优先级与所述消除概率呈正相关关系;后处理模块304,用于按照所述目标种子用例的优先级,对所述目标种子用例进行后处理操作。
95.可选的,所述计算模块302,包括:第一获取子模块,用于获取悬挂指针的指针标识,所述悬挂指针为指向已释放片区、并且还未再次赋值的指针;第二获取子模块,用于根据所述指针标识,获取所述悬挂指针在所述内存释放至所述内存再访问的过程中的执行序列;识别子模块,用于在确定所述执行序列中存在所述悬挂指针的指向发生更改的分支的情况下,确定所述测试用例为所述目标种子用例,并计算对所述目标种子用例的指针后续出现目标状况的消除概率。
96.可选的,所述计算模块302,包括第三获取子模块,用于获取悬挂指针的指针标识,所述悬挂指针为指向已释放片区、并且还未再次赋值的指针;第四获取子模块,用于根据所述指针标识,获取所述悬挂指针在所述内存释放至所述内存再访问的过程中的执行序列;第一计算子模块,用于根据所述执行序列,获取所述悬挂指针的指向发生更改的分支的执行概率;第二计算子模块,用于将1与所述执行概率的差值,作为第一概率;第三计算子模块,用于将所有所述第一概率中的最小值作为所述消除概率。
97.可选的,所述后处理模块304,包括:变异子模块,用于按照所述目标种子用例的优先级,对所述目标种子用例进行变异操作,获得新的测试用例;测试子模块,用于基于所述被测程序和所述新的测试用例进行测试,获得包含缺陷测试用例的缺陷集,所述缺陷测试用例为执行报错的新的测试用例。
98.可选的,所述变异子模块,包括:权重设置单元,用于基于所述目标种子用例的优先级,为所述目标种子用例设置变异权重,所述目标种子用例的优先级与所述目标种子用例的变异权重呈正相关关系;变异单元,用于按照所述测试用例的变异权重,对所述目标种子用例进行变异操作,获得新的测试用例;所述变异权重与所述目标种子用例的变异次数呈正相关关系。
99.可选的,所述权重设置单元,包括:获取子单元,用于获取针对所述目标种子用例的初始变异权重;第一计算子单元,用于根据预设的基础系数,以及与所述目标种子用例的优先级
对应的消除概率,计算得到扩大系数;第二计算子单元,用于将所述初始变异权重与所述扩大系数的乘积,作为针对所述目标种子用例设置的变异权重。
100.可选的,所述变异操作包括:随机步长按位翻转操作、随机拼接操作、随机裁剪操作、随机填充操作中的一种或多种。
101.可选的,所述装置还包括:分支模块,用于针对未报错的新的测试用例,进入所述在所述被测程序运行所述测试用例的过程中,若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针后续对目标状况的消除概率的步骤。
102.可选的,所述装置还包括:插入模块,用于根据预设执行特征,在所述被测程序中分别插入识别功能代码片段和计算功能代码片段;计算模块302包括:代码处理子模块,用于通过所述识别功能代码片段对测试用例的运行状况进行检测,并在所述检测结果为所述测试用例包含预设执行特征的情况下,将所述测试用例设为目标种子用例,并通过所述计算功能代码片段计算所述目标种子用例的指针后续消除目标状况的消除概率。
103.可选的,所述代码处理子模块,包括:存储单元,用于在所述被测程序运行所述测试用例的过程中,若通过所述识别功能代码片段检测到所述被测程序的执行指令为内存释放指令,则将所述内存释放指令对应的指针标识和初始消除概率的对应关系进行存储;确定单元,用于若进一步通过所述识别功能代码片段检测到所述被测程序的执行指令为指向更改指令,且所述指向更改指令被重新赋值,则确定所述测试用例包含预设执行特征,将所述测试用例设为目标种子用例;概率计算单元,用于通过所述计算功能代码片段计算所述消除概率,根据计算得到的消除概率更新所述对应关系中的初始消除概率;添加单元,用于若进一步通过所述识别功能代码片段检测到所述被测程序的执行指令为访存指令,且所述访存指令对应的指针的指针标识处于所述对应关系中,则将所述指针标识添加至预设指针集合。
104.综上,本技术实施例在被测程序运行所述测试用例的过程中,在检测到测试用例包含预设执行特征时,找出满足内存释放语句和内存再访问语句所访问的内存区域不同的测试用例作为高价值种子用例进行关注,并通过计算这种测试用例的指针后续对目标状况的消除概率,利用消除概率对目标种子用例的优先级进行设定,以期在后续按照目标种子用例的优先级,对目标种子用例进行后处理操作,从而更细粒度的对种子用例进行引导,更高效率的通过后处理获得理想的种子用例,提升模糊测试挖掘uaf漏洞的效率。
105.对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
106.本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
107.关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
108.本技术实施例提供了一种模糊测试中的种子用例处理装置,包括有存储器,以及一个以上的程序,其中一个以上程序存储于存储器中,且经配置以由一个以上处理器执行所述一个以上程序包含用于进行上述一个或多个实施例中所述的方法。
109.图8是根据一示例性实施例示出的一种模糊测试中的种子用例处理装置800的框图。例如,装置800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
110.参照图8,装置800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(i/ o)的接口812,传感器组件814,以及通信组件816。
111.处理组件802通常控制装置800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理元件802可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
112.存储器804被配置为存储各种类型的数据以支持在设备800的操作。这些数据的示例包括用于在装置800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
113.电源组件806为装置800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为装置800生成、管理和分配电力相关联的组件。
114.多媒体组件808包括在所述装置800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
115.音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(mic),当装置800处于操作模式,如呼叫模式、记录模式和语音信息处理模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
116.i/ o接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
117.传感器组件814包括一个或多个传感器,用于为装置800提供各个方面的状态评估。例如,传感器组件814可以检测到设备800的打开/关闭状态,组件的相对定位,例如所述组件为装置800的显示器和小键盘,传感器组件814还可以搜索装置800或装置800一个组件的位置改变,用户与装置800接触的存在或不存在,装置800方位或加速/减速和装置800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
118.通信组件816被配置为便于装置800和其他设备之间有线或无线方式的通信。装置800可以接入基于通信标准的无线网络,如wifi,2g或3g,或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件816还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频信息处理(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
119.在示例性实施例中,装置800可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
120.在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由装置800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
121.图9是本技术的一些实施例中服务端的结构示意图。该服务端1900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,cpu)1922(例如,一个或一个以上处理器)和存储器1932,一个或一个以上存储应用程序1942或数据1944的存储介质1930(例如一个或一个以上海量存储设备)。其中,存储器1932和存储介质1930可以是短暂存储或持久存储。存储在存储介质1930的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务端中的一系列指令操作。更进一步地,中央处理器1922可以设置为与存储介质1930通信,在服务端1900上执行存储介质1930中的一系列指令操作。
122.服务端1900还可以包括一个或一个以上电源1926,一个或一个以上有线或无线网络接口1950,一个或一个以上输入输出接口1958,一个或一个以上键盘1956,和/或,一个或一个以上操作系统1941,例如windows servertm,mac os xtm,unixtm, linuxtm,freebsdtm等等。
123.一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置(服务端或者终端)的处理器执行时,使得装置能够执行上述实施例方法。
124.一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置(服务端或者终端)的处理器执行时,使得装置能够执行上述实施例方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本技术所涉及的计算机程序产品或者计算机程序实施例中未披露的技术细节,请参照本技术方法实施例的描
述。
125.此外,需要说明的是:本技术实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或者计算机程序可以包括计算机指令,该计算机指令可以存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器可以执行该计算机指令,使得该计算机设备执行上述实施例方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本技术所涉及的计算机程序产品或者计算机程序实施例中未披露的技术细节,请参照本技术方法实施例的描述。
126.本领域技术人员在考虑说明书及实践这里公开的申请后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由下面的权利要求指出。
127.应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求来限制。
128.以上所述仅为本技术的较佳实施例,并不用以限制本技术,凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
129.以上对本技术所提供的一种模糊测试中的种子用例处理方法、装置、电子设备及计算机可读存储介质,进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
技术特征:
1.一种模糊测试中的种子用例处理方法,其特征在于,所述方法包括:获取被测程序和种子用例,并基于所述种子用例变异生成测试用例;在所述被测程序运行所述测试用例的过程中,若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针后续对目标状况的消除概率;所述预设执行特征用于表征所述测试用例在内存释放到内存再访问的过程中,指针的指向片区发生了变更;所述目标状况表征所述指针所指向片区发生更改的状况;根据所述消除概率为所述目标种子用例设置优先级,所述优先级与所述消除概率呈正相关关系;按照所述目标种子用例的优先级,对所述目标种子用例进行后处理操作。2.根据权利要求1所述的模糊测试中的种子用例处理方法,其特征在于,所述若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针后续对目标状况的消除概率,包括:获取悬挂指针的指针标识,所述悬挂指针为指向已释放片区、并且还未再次赋值的指针;根据所述指针标识,获取所述悬挂指针在所述内存释放至所述内存再访问的过程中的执行序列;在确定所述执行序列中存在所述悬挂指针的指向发生更改的分支的情况下,确定所述测试用例为所述目标种子用例,并计算对所述目标种子用例的指针后续出现目标状况的消除概率。3.根据权利要求1所述的模糊测试中的种子用例处理方法,其特征在于,所述计算所述目标种子用例的指针后续对目标状况的消除概率,包括:获取悬挂指针的指针标识,所述悬挂指针为指向已释放片区、并且还未再次赋值的指针;根据所述指针标识,获取所述悬挂指针在所述内存释放至所述内存再访问的过程中的执行序列;根据所述执行序列,获取所述悬挂指针的指向发生更改的分支的执行概率;将1与所述执行概率的差值,作为第一概率;将所有所述第一概率中的最小值作为所述消除概率。4.根据权利要求1所述的模糊测试中的种子用例处理方法,其特征在于,所述按照所述目标种子用例的优先级,对所述目标种子用例进行后处理操作,包括:按照所述目标种子用例的优先级,对所述目标种子用例进行变异操作,获得新的测试用例;基于所述被测程序和所述新的测试用例进行测试,获得包含缺陷测试用例的缺陷集,所述缺陷测试用例为执行报错的、新的测试用例。5.根据权利要求4所述的模糊测试中的种子用例处理方法,其特征在于,所述按照所述目标种子用例的优先级,对所述目标种子用例进行变异操作,获得新的测试用例,包括:基于所述目标种子用例的优先级,为所述目标种子用例设置变异权重,所述目标种子用例的优先级与所述目标种子用例的变异权重呈正相关关系;按照所述目标种子用例的变异权重,对所述目标种子用例进行变异操作,获得新的测
试用例;所述变异权重与所述目标种子用例的变异次数呈正相关关系。6.根据权利要求5所述的模糊测试中的种子用例处理方法,其特征在于,所述基于所述目标种子用例的优先级,为所述目标种子用例设置变异权重,包括:获取针对所述目标种子用例的初始变异权重;根据预设的基础系数,以及与所述目标种子用例的优先级对应的消除概率,计算得到扩大系数;将所述初始变异权重与所述扩大系数的乘积,作为针对所述目标种子用例设置的变异权重。7.根据权利要求5所述的模糊测试中的种子用例处理方法,其特征在于,所述变异操作包括:随机步长按位翻转操作、随机拼接操作、随机裁剪操作、随机填充操作中的一种或多种。8.根据权利要求4所述的模糊测试中的种子用例处理方法,其特征在于,所述方法还包括:针对未报错的新的测试用例,进入所述在所述被测程序运行所述测试用例的过程中,若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针后续对目标状况的消除概率的步骤。9.根据权利要求1所述的模糊测试中的种子用例处理方法,其特征在于,在所述获取被测程序之后,还包括:根据预设执行特征,在所述被测程序中分别插入识别功能代码片段和计算功能代码片段;所述若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针后续对目标状况的消除概率,包括:通过所述识别功能代码片段对测试用例的运行状况进行检测,并在所述检测结果为所述测试用例包含预设执行特征的情况下,将所述测试用例设为目标种子用例,并通过所述计算功能代码片段计算所述目标种子用例的指针后续消除目标状况的消除概率。10.根据权利要求9所述的模糊测试中的种子用例处理方法,其特征在于,所述通过所述识别功能代码片段对测试用例的运行状况进行检测,并在所述检测结果为所述测试用例包含预设执行特征的情况下,将所述测试用例设为目标种子用例,并通过所述计算功能代码片段计算所述目标种子用例的指针后续消除目标状况的消除概率,包括:在所述被测程序运行所述测试用例的过程中,若通过所述识别功能代码片段检测到所述被测程序的执行指令为内存释放指令,则将所述内存释放指令对应的指针标识和初始消除概率的对应关系进行存储;若进一步通过所述识别功能代码片段检测到所述被测程序的执行指令为指向更改指令,且所述指向更改指令被重新赋值,则确定所述测试用例包含预设执行特征,将所述测试用例设为目标种子用例;通过所述计算功能代码片段计算所述消除概率,根据计算得到的消除概率更新所述对应关系中的初始消除概率;若进一步通过所述识别功能代码片段检测到所述被测程序的执行指令为访存指令,且所述访存指令对应的指针的指针标识处于所述对应关系中,则将所述指针标识添加至预设
指针集合。11.一种模糊测试中的种子用例处理装置,其特征在于,所述装置包括:获取模块,用于获取被测程序和种子用例,并基于所述种子用例变异生成测试用例;计算模块,用于在所述被测程序运行所述测试用例的过程中,若检测到所述测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算所述目标种子用例的指针后续对目标状况的消除概率;所述预设执行特征用于表征所述测试用例在内存释放到内存再访问的过程中,指针的指向片区发生了变更;所述目标状况表征所述指针所指向片区发生更改的状况;设置模块,用于根据所述消除概率为所述目标种子用例设置优先级,所述优先级与所述消除概率呈正相关关系;后处理模块,用于按照所述目标种子用例的优先级,对所述目标种子用例进行后处理操作。12.一种电子设备,其特征在于,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如权利要求1至10中任一项所述的方法。13.一种计算机可读存储介质,其特征在于,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如权利要求1至10中任一项所述的方法。
技术总结
本申请提供了一种模糊测试中的种子用例处理方法及装置,包括:获取被测程序以及种子用例,基于种子用例变异生成测试用例;在被测程序运行测试用例的过程中,若检测到测试用例包含预设执行特征,则将所述测试用例设为目标种子用例,并计算目标种子用例的指针后续对目标状况的消除概率;预设执行特征用于表征测试用例在内存释放到内存再访问的过程中,指针的指向片区发生了变更;目标状况表征指针所指向片区发生更改的状况;根据消除概率为目标种子用例设置优先级,按照目标种子用例的优先级,对目标种子用例进行后处理操作。本申请可以更细粒度的对种子用例进行引导,更高效率的通过后处理获得理想的种子用例,提升模糊测试挖掘UAF漏洞的效率。UAF漏洞的效率。UAF漏洞的效率。
技术研发人员:请求不公布姓名
受保护的技术使用者:中科方德软件有限公司
技术研发日:2023.09.05
技术公布日:2023/10/15
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/