一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于分支覆盖指导的有效符号执行方法及装置

2022-07-31 01:13:15 来源:中国专利 TAG:


1.本发明涉及软件信息技术领域,尤其涉及一种基于分支覆盖指导的有效符号执行方法及装置。


背景技术:

2.近年来,随着互联网、工业控制系统、物联网的快速发展,软件数量也在迅速增加,软件运行动态加载各类插件模块并频繁更新、打补丁,使得软件的形态更加动态化。软件程序中的漏洞容易被不法分子挖掘利用,威胁到软件程序的安全,因此软件开发人员有必要对所开发的软件程序进行测试,挖掘软件程序中的漏洞,并解决该漏洞。
3.现有技术中,一般采用符号执行方法,挖掘软件程序中的漏洞。现有的符号执行方法,一般采用路径空间覆盖的技术,例如动态符号执行,虽然该种方法可以对软件程序较为全面的探测,但随着软件程序规模的增大,带来状态爆炸的问题,导致难以有效应用于实际的生产开发中。


技术实现要素:

4.本发明提供一种基于分支覆盖指导的有效符号执行方法及装置,用以解决现有技术中挖掘软件程序漏洞的效率低的缺陷,实现提高挖掘软件程序漏洞的效率。
5.本发明提供一种基于分支覆盖指导的有效符号执行方法,包括:
6.对被测程序的执行路径进行遍历,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息;其中,所述执行信息包括静态执行信息和动态执行信息;
7.基于所述执行信息,将所述执行路径覆盖的分支谓词划分到对应的分支谓词集合;
8.基于路径选择器,以及所述分支谓词集合,确定路径约束;
9.基于所述路径约束,确定新的执行路径,并基于所述新的执行路径,得到所述被测程序对应的符号执行结果。
10.根据本发明提供的基于分支覆盖指导的有效符号执行方法,所述基于所述路径约束,确定新的执行路径,包括:
11.将所述路径约束输入至约束求解器,得到所述被测程序的程序输入值,并基于所述程序输入值,确定新的执行路径。
12.根据本发明提供的基于分支覆盖指导的有效符号执行方法,所述对被测程序的执行路径进行遍历,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息,包括:
13.基于静态分析方法,提取程序变量与分支谓词之间的依赖关系,并基于所述程序变量与分支谓词之间的依赖关系,以及程序变量之间的依赖关系,得到所述静态执行信息;
14.在所述被测程序的执行过程中,动态收集当前执行路径前缀下的生成信息,并提取所述当前执行路径前缀下的生成信息中的依赖关系,得到所述动态执行信息。
15.根据本发明提供的基于分支覆盖指导的有效符号执行方法,所述依赖关系包括:数据依赖、控制依赖,以及隐含依赖。
16.根据本发明提供的基于分支覆盖指导的有效符号执行方法,所述约束求解器为smt约束求解器。
17.本发明还提供一种基于分支覆盖指导的有效符号执行装置,包括:
18.第一执行模块,用于对被测程序的执行路径进行遍历,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息;其中,所述执行信息包括静态执行信息和动态执行信息;
19.谓词划分模块,用于基于所述执行信息,将所述执行路径覆盖的分支谓词划分到对应的分支谓词集合;
20.约束确定模块,用于基于路径选择器,以及所述分支谓词集合,确定路径约束;
21.第二执行模块,用于基于所述路径约束,确定新的执行路径,并基于所述新的执行路径,得到所述被测程序对应的符号执行结果。
22.根据本发明提供的基于分支覆盖指导的有效符号执行装置,所述第一执行模块,包括:
23.第一执行信息确定单元,用于基于静态分析方法,提取程序变量与分支谓词之间的依赖关系,并基于所述程序变量与分支谓词之间的依赖关系,以及程序变量之间的依赖关系,得到所述静态执行信息;
24.第二执行信息确定单元,用于在所述被测程序的执行过程中,动态收集当前执行路径前缀下的生成信息,并提取所述当前执行路径前缀下的生成信息中的依赖关系,得到所述动态执行信息。
25.本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述基于分支覆盖指导的有效符号执行方法的步骤。
26.本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述基于分支覆盖指导的有效符号执行方法的步骤。
27.本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述基于分支覆盖指导的有效符号执行方法的步骤。
28.本发明提供的基于分支覆盖指导的有效符号执行方法及装置,通过对被测程序的执行路径进行遍历,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息;其中,所述执行信息包括静态执行信息和动态执行信息;基于所述执行信息,将所述执行路径覆盖的分支谓词划分到对应的分支谓词集合;基于路径选择器,以及所述分支谓词集合,确定路径约束;基于所述路径约束,确定新的执行路径,并基于所述新的执行路径,得到所述被测程序对应的符号执行结果。
29.基于静态执行信息,确定的分支谓词集合中的分支谓词相互独立,不会相互影响,且维持分支覆盖,在指导符号执行时,可以简单有效地保证方法正确性,提高被测程序的漏洞挖掘效率。基于精确的动态执行信息划分谓词集合,在指导符号执行时,可以进一步裁剪安全的执行路径。
附图说明
30.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
31.图1是本发明提供的基于分支覆盖指导的有效符号执行方法的流程示意图之一;
32.图2是本发明提供的程序行为空间的示意图;
33.图3是本发明提供的基于分支覆盖指导的有效符号执行方法的流程示意图之二;
34.图4是本发明提供的基于分支覆盖指导的有效符号执行装置的结构示意图;
35.图5是本发明提供的电子设备的结构示意图。
具体实施方式
36.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
37.下面结合图1-图5描述本发明的基于分支覆盖指导的有效符号执行方法及装置。
38.如图1所示,本发明提供的基于分支覆盖指导的有效符号执行方法,包括:
39.步骤110、对被测程序的执行路径进行遍历,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息;其中,所述执行信息包括静态执行信息和动态执行信息。
40.可以理解的是,被测程序,也即是需要检测漏洞的软件程序。基于符号执行的漏洞挖掘,一般是通过路径覆盖分析给定输入空间内的所有程序行为,从而挖掘该输入空间内的漏洞信息。
41.如图2所示,假设每条执行路径πi覆盖部分程序行为b
πi
,而不同执行路径可能覆盖完全不同的程序行为,或者覆盖部分相同甚至完全相同的程序行为。虽然路径覆盖是分析所有程序行为的充分条件,但是它并不是其必要条件。例如,在分析执行路径π1、π2、π3之后,不再需要遍历路径π4,因为路径π4覆盖的所有程序行为b
π4
都包含在b
π1
、b
π2
或者b
π3
中,即因此,路径覆盖的程序分析方法,可能并不会增加程序行为的覆盖,但会引入路径爆炸,从而严重影响基于符号执行的软件程序分析的效率及有效性。
42.由于难以精确判断给定的执行路径的具体程序行为,所以无法精确计算最小程序执行路径集合。例如,当路径π4先于其它路径执行时,其余路径都需要被分析以覆盖所有可能的程序行为。那么,如何有效标识近似最优程序执行路径集合是减少冗余路径分析的关键问题。为了尽量减少执行路径分析数量,本发明提出的基于分支覆盖指导的有效符号执行方法,基于静态执行信息和动态执行信息,利用分支覆盖信息指导符号执行优先遍历可以覆盖更多程序行为的执行路径,从而为裁剪不会覆盖任何新程序行为的冗余路径创造更多的机会。
43.步骤120、基于所述执行信息,将所述执行路径覆盖的分支谓词划分到对应的分支谓词集合。
44.可以理解的是,在同一个分支谓词集合中的分支谓词,是互相独立的分支谓词。符号执行在路径探索过程中,在两个相互独立的分支谓词间,不需要通过保持路径覆盖来分析不同的程序行为,而只需要维持开销更小的分支覆盖即可。
45.为使得本发明提出的基于分支覆盖指导的有效符号执行方法,具有与基于全路径覆盖的基于分支覆盖指导的有效符号执行方法同样的效果,即能够覆盖所有的程序行为,关键是在符号执行路径遍历过程中,如何根据执行路径中各谓词间的依赖关系,快速而有效地确定必须保持路径覆盖分析的分支谓词集合,以及可以只考虑分支覆盖的谓词集合。
46.步骤130、基于路径选择器,以及所述分支谓词集合,确定路径约束。
47.可以理解的是,路径选择器用于符号执行对应的执行路径。路径选择器进行路径选择时,主要基于两种方法:1)使用启发式函数对路径进行搜索,目的是先探索最值得探索的路径;2)使用一些可靠的程序分析技术减少路径探索的复杂性。
48.步骤140、基于所述路径约束,确定新的执行路径,并基于所述新的执行路径,得到所述被测程序对应的符号执行结果。
49.可以理解的是,符号执行结果,也即是检测出来的被测程序的漏洞集合。
50.本发明提供的基于分支覆盖指导的有效符号执行方法,通过得到的静态执行信息或者动态执行信息,指导符号执行展开路径覆盖与分支覆盖相结合的有效路径探索。
51.本发明提供的方法,忽略不会产生新程序行为的执行路径,从而避免展开盲目的全路径覆盖分析。具体地,传统符号执行在路径遍历时考虑不同的分支取值组合从而保证路径全覆盖,而本发明提供的方法指导符号执行,在相同分支谓词集合中的谓词间展开分支覆盖分析而非路径覆盖。随着软件程序规模增大,程序变量间的关系会更加复杂,而基于分支覆盖指导的符号执行技术的效率与标识的集合内分支数呈指数级提高,从而实现指数级的减少相应的时间开销。
52.本发明提供的分支谓词划分的代码如下所示:
[0053][0054]
该代码片段包含第1行和第5行的两个程序分支谓词。传统符号执行应用在该代码片段上时,会依次遍历4条执行路径,分别为1f5f、1f5t、1t5f与1t5t(“f”与“t”分别表示false(错误)/true(正确)分支)。然而路径1f5f与1t5t能覆盖该程序的所有行为,而1f5t、1t5f则是不会覆盖任何新程序行为的冗余路径。
[0055]
本发明提供的基于分支覆盖指导的有效符号执行方法对应的算法伪代码如下所
示:
[0056][0057]
该算法伪代码描述如何基于测试用例t所触发的执行路径,产生下一条驱动其它路径分析的测试用例。首先,在行5依据被测程序p的语句依赖信息depinfo,将当前路径上的谓词划为多个谓词集合,并保证每个谓词子集中的所有谓词都是相互独立的。然后,行7-14的循环依次处理每个谓词子集,并调用函数branchcover生成可以满足该谓词集合分支覆盖的路径约束集合,并为每个路径约束生成新的测试用例t’。与现有的基于分支覆盖指导的有效符号执行方法不同的是,该算法伪代码产生的路径数并不直接依赖于路径上的谓词数n,而是依赖于谓词分类后的子集数m。因此,该方法能有效地缓解传统符号执行所面临的路径爆炸问题。
[0058]
在一些实施例中,所述基于所述路径约束,确定新的执行路径,包括:
[0059]
将所述路径约束输入至约束求解器,得到所述被测程序的程序输入值,并基于所述程序输入值,确定新的执行路径。
[0060]
可以理解的是,如图3所示,在遍历每条执行路径π后,基于静态执行信息或者动态执行信息将路径π覆盖的分支谓词划分到不同集合。接着,路径选择器基于生成的分支谓词集合,构造选择需要优先遍历的执行路径,构造该执行路径的路径约束,并将路径约束送到约束求解器中求解约束,生成可以触发选定路径的新的程序输入值。
[0061]
在一些实施例中,所述对被测程序的执行路径进行遍历,基于所述被测程序的各
谓词的依赖关系,获取所述执行路径对应的执行信息,包括:
[0062]
基于静态分析方法,提取程序变量与分支谓词之间的依赖关系,并基于所述程序变量与分支谓词之间的依赖关系,以及程序变量之间的依赖关系,得到所述静态执行信息;
[0063]
在所述被测程序的执行过程中,动态收集当前执行路径前缀下的生成信息,并提取所述当前执行路径前缀下的生成信息中的依赖关系,得到所述动态执行信息。
[0064]
可以理解的是,本发明提供的基于分支覆盖指导的有效符号执行方法,基于软件程序中的依赖展开程序分支谓词集合划分,用于指导符号执行,在保证软件程序行为覆盖率的同时,尽可能避免冗余路径的探索。谓词集合的划分既决定该基于分支覆盖指导的有效符号执行方法的有效性,即是否会错过漏洞,同时也决定了该基于分支覆盖指导的有效符号执行方法发现漏洞的效率,即是否会遍历一些肯定不会发现新漏洞的路径。
[0065]
基于保证挖掘漏洞的有效性及效率,本发明分别提出静态的分支谓词集合划分方法以及动态的谓词集合划分方法。
[0066]
首先,采用静态分析技术提取程序变量与分支谓词间的依赖关系,确定不会相互影响,从而只需要维持分支覆盖的谓词集合。基于静态分析方法的分支谓词划分用于指导符号执行时,可以简单有效地保证方法正确性。
[0067]
此外,本发明提出的动态谓词集合划分方法,在执行过程中动态收集当前路径前缀下生成的信息,提取动态信息中的依赖关系进行分支划分。与静态分支谓词划分相比,动态谓词集合划分方法基于精确的动态执行信息划分谓词集合,从而指导符号执行进一步裁剪安全的执行路径。
[0068]
在一些实施例中,所述依赖关系包括:数据依赖、控制依赖以及隐含依赖。
[0069]
可以理解的是,针对静态分支谓词集合划分,本发明基于依赖分析中的数据依赖、控制依赖、隐含依赖等关系,定义两个谓词p1与p2间的相互独立性。谓词p1与谓词p2是相互独立的,当且仅当p1与p2之间不存在任何传递的数据依赖、控制依赖或隐含依赖,同时不存在任何其他语句同时传递数据依赖、控制依赖或隐含依赖于谓词p1与p2。
[0070]
对于上述的分支谓词划分的代码,在完成路径1f5f遍历后,确定在第1行与第5行处的分支谓词相互独立,没有任何相互依赖,因此它们将被划分到相同的谓词集合中。因此,在该路径的遍历过程中不需要在第1行与第5行的分支谓词间达成路径覆盖,而只需要谓词保证分支覆盖即可。进而,在遍历路径1f5f后,只需要再次遍历路径1t5t就可以分析对应软件程序的所有可能行为。
[0071]
在一些实施例中,所述约束求解器为smt约束求解器。
[0072]
可以理解的是,smt约束求解器是一种无量化位向量理论的约束求解器,可以解决由程序分析工具、定理证明器、自动错误查找器、密码算法、智能模糊器和模型检验器产生的各种问题。
[0073]
综上所述,本发明提供的基于分支覆盖指导的有效符号执行方法,包括:对被测程序的执行路径进行遍历,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息;其中,所述执行信息包括静态执行信息和动态执行信息;基于所述执行信息,将所述执行路径覆盖的分支谓词划分到对应的分支谓词集合;基于路径选择器,以及所述分支谓词集合,确定路径约束;基于所述路径约束,确定新的执行路径,并基于所述新的执行路径,得到所述被测程序对应的符号执行结果。
[0074]
在本发明提供的基于分支覆盖指导的有效符号执行方法中,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息;其中,所述执行信息包括静态执行信息和动态执行信息;基于静态执行信息,确定的分支谓词集合中的分支谓词相互独立,不会相互影响,且维持分支覆盖,在指导符号执行时,可以简单有效地保证方法正确性,提高被测程序的漏洞挖掘效率。基于精确的动态执行信息划分谓词集合,在指导符号执行时,可以进一步裁剪安全的执行路径。
[0075]
下面对本发明提供的基于分支覆盖指导的有效符号执行装置进行描述,下文描述的基于分支覆盖指导的有效符号执行装置与上文描述的基于分支覆盖指导的有效符号执行方法可相互对应参照。
[0076]
如图4所示,本发明提供的基于分支覆盖指导的有效符号执行装置400,包括:第一执行模块410、谓词划分模块420、约束确定模块430和第二执行模块440。
[0077]
第一执行模块410用于对被测程序的执行路径进行遍历,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息;其中,所述执行信息包括静态执行信息和动态执行信息。
[0078]
谓词划分模块420用于基于所述执行信息,将所述执行路径覆盖的分支谓词划分到对应的分支谓词集合。
[0079]
约束确定模块430,用于基于路径选择器,以及所述分支谓词集合,确定路径约束。
[0080]
第二执行模块440用于基于所述路径约束,确定新的执行路径,并基于所述新的执行路径,得到所述被测程序对应的符号执行结果。
[0081]
在一些实施例中,所述第一执行模块410,包括:第一执行信息确定单元和第二执行信息确定单元。
[0082]
第一执行信息确定单元用于基于静态分析方法,提取程序变量与分支谓词之间的依赖关系,并基于所述程序变量与分支谓词之间的依赖关系,以及程序变量之间的依赖关系,得到所述静态执行信息。
[0083]
第二执行信息确定单元用于在所述被测程序的执行过程中,动态收集当前执行路径前缀下的生成信息,并提取所述当前执行路径前缀下的生成信息中的依赖关系,得到所述动态执行信息。
[0084]
在一些实施例中,第二执行模块440,包括:新路径确定单元。
[0085]
新路径确定单元用于将所述路径约束输入至约束求解器,得到所述被测程序的程序输入值,并基于所述程序输入值,确定新的执行路径。
[0086]
在一些实施例中,所述依赖关系包括:数据依赖、控制依赖以及隐含依赖。
[0087]
在一些实施例中,所述约束求解器为smt约束求解器。
[0088]
下面对本发明提供的电子设备、计算机程序产品及存储介质进行描述,下文描述的电子设备、计算机程序产品及存储介质与上文描述的基于分支覆盖指导的有效符号执行方法可相互对应参照。
[0089]
图5示例了一种电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(communications interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行基于分支覆盖指导的有效符号执
行方法,该方法包括:
[0090]
步骤110、对被测程序的执行路径进行遍历,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息;其中,所述执行信息包括静态执行信息和动态执行信息;
[0091]
步骤120、基于所述执行信息,将所述执行路径覆盖的分支谓词划分到对应的分支谓词集合;
[0092]
步骤130、基于路径选择器,以及所述分支谓词集合,确定路径约束;
[0093]
步骤140、基于所述路径约束,确定新的执行路径,并基于所述新的执行路径,得到所述被测程序对应的符号执行结果。
[0094]
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0095]
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的基于分支覆盖指导的有效符号执行方法,该方法包括:
[0096]
步骤110、对被测程序的执行路径进行遍历,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息;其中,所述执行信息包括静态执行信息和动态执行信息;
[0097]
步骤120、基于所述执行信息,将所述执行路径覆盖的分支谓词划分到对应的分支谓词集合;
[0098]
步骤130、基于路径选择器,以及所述分支谓词集合,确定路径约束;
[0099]
步骤140、基于所述路径约束,确定新的执行路径,并基于所述新的执行路径,得到所述被测程序对应的符号执行结果。
[0100]
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的基于分支覆盖指导的有效符号执行方法,该方法包括:
[0101]
步骤110、对被测程序的执行路径进行遍历,基于所述被测程序的各谓词的依赖关系,获取所述执行路径对应的执行信息;其中,所述执行信息包括静态执行信息和动态执行信息;
[0102]
步骤120、基于所述执行信息,将所述执行路径覆盖的分支谓词划分到对应的分支谓词集合;
[0103]
步骤130、基于路径选择器,以及所述分支谓词集合,确定路径约束;
[0104]
步骤140、基于所述路径约束,确定新的执行路径,并基于所述新的执行路径,得到
所述被测程序对应的符号执行结果。
[0105]
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0106]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0107]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献