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

基于规约导向的错误处理缺陷的检测方法及系统与流程

2022-02-21 05:12:25 来源:中国专利 TAG:


1.本发明属于计算机程序漏洞检测技术领域,具体涉及一种基于规约导向的错误处理缺陷的检测方法、系统、电子设备以及存储介质。


背景技术:

2.软件开发者常使用应用程序编程接口(application program interface, api)来快速构建软件系统。在使用接口进行开发时,软件开发者需要遵循接口的功能和约束。当接口使用出错时,要及时的进行错误处理操作,否则可能会造成模块功能失效、程序崩溃等灾难。
3.静态分析是一种检测错误处理缺陷的常用方法。传统的静态分析工具(例如cppcheck、clang static analyzer、infer等)大多基于固定的缺陷模式进行检测,导致对很多的库函数以及用户自定义函数引发的错误处理缺陷支持不足,降低了传统静态分析工具在错误处理缺陷检测中的适用性。而现有的专门针对错误处理缺陷搭建的工具如eh-miner、epex、errdoc等,存在的弊端如下:1)eh-miner工具通过数据挖掘方法找到常见的规则,而后利用该规则进行错误处理缺陷的查找;这种方法虽然能够找到常见的错误处理缺陷,但是对复杂模式的缺陷,如错误处理导致的资源泄露问题,并没有好的解决方案;并且由于这类缺陷往往具有不同的上下文信息,导致难以通过数据挖掘的方法找到通用的错误处理代码规则。也就是说,对多种错误处理缺陷模式支持不足,难以找到适用于复杂模式的错误处理缺陷的检测方法。
4.2)而epex和errdoc工具在对复杂模式的缺陷检测的过程中,大量上下文信息的获取导致了消耗大量时间,存在缺陷检测效率低下的问题。


技术实现要素:

5.本发明提供一种基于规约导向的错误处理缺陷的检测方法、系统、电子设备以及存储介质,用以克服现有技术中存在的至少一个技术问题。
6.为实现上述目的,本发明提供一种基于规约导向的错误处理缺陷的检测方法,方法包括:获取待测的源代码文件以及规约文件;将源代码文件进行编译获得程序的中间表示,并将程序的中间表示进行转化获得cfa图结构;以及,将规约文件解析为规约实例;对规约实例进行筛选,获得存在目标接口的调用者的cfa图结构的规约实例;将规约实例中各个目标接口的调用者对应的cfa图结构分别作为待分析入口,对所有待分析入口逐个进行cfa图结构分析;其中,cfa图结构分析包括通过符号执行技术获得两个以上的覆盖上下文信息的符号路径信息;对每个符号路径信息根据规约实例的目标接口进行路径提取,获得路径集合;利用缺陷检测算法和规约实例,对路径集合中每条路径进行缺陷检测,并获得错
误处理缺陷检测数据;利用错误处理缺陷检测数据形成错误处理缺陷报告。
7.进一步,优选地,利用错误处理缺陷检测数据形成错误处理缺陷报告,包括:根据目标接口使用情况对错误处理缺陷检测数据进行主观缺陷判定,其中,将因目标接口的规约描述错误引起的错误处理缺陷作为主观缺陷;过滤错误处理缺陷检测数据中的主观缺陷,形成错误处理缺陷报告。
8.进一步,优选地,通过符号执行技术获得两个以上的覆盖上下文信息的符号路径信息,包括:对规约实例中每个目标接口的调用者的cfa图结构,通过符号执行技术对cfa图结构的路径进行抽象描述,获得多个覆盖上下文信息的符号路径信息;其中,每条路径由各个动作和各个动作的结束时值的映射关系组成。
9.进一步,优选地,通过符号执行技术对cfa图结构的路径进行抽象描述,获得多个覆盖上下文信息的符号路径信息;包括:提取cfa图结构的每条路径上的每个动作并对动作的结束时值进行分析;基于设定的符号值对动作分配唯一的id;其中,符号值包括动作产生的id、动作产生的接口以及所对应的参数位置n;分析每条路径的条件判断语句assume,函数调用语句 call 和返回语句 return,获得覆盖上下文的符号路径信息。
10.进一步,优选地,规约文件包括描述目标接口的错误处理规约和资源申请和释放函数对规约;将规约文件解析为规约实例,包括将描述目标接口的错误处理规约进行解析获得错误处理规约实例,以及将资源申请和释放函数对规约解析为函数对约束实例;对路径集合中每条路径进行缺陷检测中,缺陷检测为依次进行第一缺陷检测,第二缺陷检测以及第三缺陷检测;其中,第一缺陷为错误处理过程中检测条件缺失,第二缺陷为错误处理过程中检测条件错误以及第三缺陷为错误处理导致资源泄漏。
11.进一步,优选地,对路径集合中的每一条路径依次进行第一缺陷,第二缺陷以及第三缺陷检测,并获得错误处理缺陷信息;包括,对路径集合中的每一条路径是否存在第一缺陷进行判定;若待检测路径不包含针对目标接口条件判断语句assume,则确定当前路径存在第一缺陷;若路径包含针对目标接口条件判断语句assume;则对路径继续进行是否存在第二缺陷进行判定;若待检测路径的检测条件与错误处理规约实例描述的检测条件不匹配,则确定当前路径存在第二缺陷;若路径的检测条件与错误处理规约实例描述的检测条件匹配;则对路径继续进行是否存在第三缺陷进行判定;判断路径在目标接口进行错误处理之前是否存在资源申请的操作,若存在,则判断路径在目标接口进行错误处理之后是否存在资源释放动作;若在目标接口进行错误处理之后不存在资源释放动作,则确定当前路径存在第三缺陷。
12.进一步,优选地,根据目标接口使用情况对错误处理缺陷检测数据进行主观缺陷判定,包括:对当前错误处理缺陷数据进行目标接口的使用情况分析,获得统计信息;其中,统
计信息包括目标接口的各个类别的错误处理缺陷个数和目标接口被调用的总次数;利用过滤阈值对错误处理缺陷检测数据进行是否是主观缺陷进行判定;其中,过滤阈值为当前错误处理缺陷信息的目标接口的预设类别的错误处理缺陷个数与目标接口被调用的总次数的比值;当过滤阈值不低于0.75时,则确定当前错误处理缺陷数据为主观缺陷信息。
13.为了解决上述问题,本发明还提供一种基于规约导向的错误处理缺陷的检测系统,包括:获取单元,用于获取待测的源代码文件以及规约文件;预处理单元,用于将源代码文件进行编译获得程序的中间表示,并将程序的中间表示进行转化获得cfa图结构;以及,将规约文件解析为规约实例;对规约实例进行筛选,获得存在目标接口的调用者的cfa图结构的规约实例;分析单元,用于将规约实例中各个目标接口的调用者对应的cfa图结构分别作为待分析入口,对所有待分析入口逐个进行cfa图结构分析;其中, cfa图结构分析包括通过符号执行技术获得两个以上的覆盖上下文信息的符号路径信息;用于对每个符号路径信息根据规约实例的目标接口进行路径提取,获得路径集合;利用缺陷检测算法和规约实例,对路径集合中每条路径进行缺陷检测,并获得错误处理缺陷检测数据;错误处理缺陷报告获取单元,用于利用错误处理缺陷检测数据形成错误处理缺陷报告。
14.为了解决上述问题,本发明还提供一种电子设备,电子设备包括:存储器,存储至少一个指令;及处理器,执行所述存储器中存储的指令以实现上述所述的基于规约导向的错误处理缺陷的检测方法中的步骤。
15.为了解决上述问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一个指令,所述至少一个指令被电子设备中的处理器执行以实现上述所述的基于规约导向的错误处理缺陷的检测方法。
16.本发明的一种基于规约导向的错误处理缺陷的检测方法、系统、电子设备以及存储介质,通过静态分析技术获取上下文信息找到多种错误处理缺陷模式,然后利用多入口规模化分析策略和多种错误处理缺陷模式进行错误处理缺陷的检测,达到了提高检测效率,提高检测精度的效果。
附图说明
17.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
18.图1为本发明一实施例提供的基于规约导向的错误处理缺陷的检测方法的流程示意图;图2为本发明一实施例提供的基于规约导向的错误处理缺陷的检测方法的原理示意图;
图3为本发明一实施例提供的基于规约导向的错误处理缺陷的检测系统的模块示意图;图4为本发明一实施例提供的实现基于规约导向的错误处理缺陷的检测方法的电子设备的内部结构示意图;本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
19.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
20.参照图1所示,为本发明一实施例提供的基于规约导向的错误处理缺陷的检测方法的流程示意图。该方法可以由一个系统执行,该系统可以由软件和/或硬件实现。
21.本发明的基于规约导向的错误处理缺陷的检测方法,是针对c程序中api的错误处理缺陷,通过静态分析技术获取上下文信息找到多种错误处理缺陷模式,然后利用多入口规模化分析策略和多种错误处理缺陷模式进行错误处理缺陷的检测,达到了提高检测效率,提高检测精度的效果,对提升软件系统的安全性与可靠性有重要的意义。
22.在本实施例中,基于规约导向的错误处理缺陷的检测方法包括步骤s110~ s140:s110、获取待测的源代码文件以及规约文件。
23.其中,规约文件包括描述目标接口的错误处理规约和资源申请和释放函数对规约。也就是说,规约文件描述的规约包括两种类型: 1)目标接口的错误处理规约,即函数执行出错时,返回的错误状态码; 2)资源申请和释放函数对规约,即资源申请和释放函数对(malloc/free、lock/unlock等)。
24.s120、将源代码文件进行编译获得程序的中间表示,并将程序的中间表示进行转化获得cfa图结构;以及,将规约文件解析为规约实例;对规约实例进行筛选,获得存在目标接口的调用者的cfa图结构的规约实例。
25.具体地说,对用户提供的源代码文件以及规约文件进行预处理,以构造分析的上下文环境。一方面,将源代码文件进行预处理,即对c程序的源代码进行编译抓取,利用clang编译器进行编译抓取,从而将c源代码编译成基于llvm-ir的程序中间表示,将程序中间表示转化为cfa图结构。也就是说,生成 llvm-ir中间表达,并基于 ir 指令构造程序的控制流自动机(control flow automaton,cfa),需要说明的是,为每个函数均构建对应的cfa图结构;其中,llvm(lowlevel virtual machine),是一款开源的编译器框架;ir(intermediate representation),中间表示,是编译器对于源程序进行扫描后生成的内部表示,代表源程序的语义和语法结构。另一方面,对规约文件进行预处理,即解析外部输入的规约文件。将规约文件解析为规约实例,包括将描述目标接口的错误处理规约进行解析获得错误处理规约实例,以及将资源申请和释放函数对规约解析为函数对约束实例。并且对规约实例进行筛选,获得存在目标接口的调用者的cfa图结构的规约实例;并将筛选获得的存在目标接口的调用者的cfa图结构的规约实例用于后续的分析过程。总之,基于llvm-ir中间表示后续用于待测目标进行程序抽象来构建上下文信息,外部输入的规约文件的解析后续用于进行代码中错误处理路径的提取。
26.s130、将规约实例中各个目标接口的调用者对应的cfa图结构分别作为待分析入口,对所有待分析入口逐个进行cfa图结构分析;其中,cfa图结构分析包括通过符号执行技
术获得两个以上的覆盖上下文信息的符号路径信息;对每个符号路径信息根据规约实例的目标接口进行路径提取,获得路径集合;利用缺陷检测算法和规约实例,对路径集合中每条路径进行缺陷检测,并获得错误处理缺陷检测数据。
27.具体地说,步骤s130可以进一步地分解为步骤s131~ s132。
28.s131、将规约实例中各个目标接口的调用者对应的cfa图结构分别作为待分析入口,对所有待分析入口逐个进行cfa图结构分析;其中,cfa图结构分析包括通过符号执行技术获得两个以上的覆盖上下文信息的符号路径信息;对每个符号路径信息根据规约实例的目标接口进行路径提取,获得路径集合。
29.经典的程序分析方法以主函数为入口,自顶向下对程序分析。然而,这种传统的方式在面对大规模代码分析时,其分析效率存在巨大挑战。因此,为了提升分析的效率,本发明的基于规约导向的错误处理缺陷的检测方法选择逐函数分析的多入口的分析策略,多入口的分析策略,也就是将规约实例中各个目标接口的调用者(caller)对应的cfa图结构分别作为待分析入口,对所有待分析入口逐个进行cfa图结构分析。通过采用多入口的分析策略,将一个复杂的程序的分析问题分而治之,降低分析复杂度,达到了在保证全局有效规模化分析的同时,尽可能提高局部分析精度的技术效果。
30.基于cfa图结构对约束实例中的目标接口使用情况进行检索,将包含目标接口的调用者(caller)对应的cfa作为分析的入口之后,以及错误处理缺陷的检测之前;为了保留目标接口相关的程序语义前提下尽可能简化程序结构,还需要通过符号执行对规约实例中每个目标接口的调用者(caller)对应的cfa图结构进行模拟执行,并基于符号对程序路径的语义信息进行抽象描述。
31.需要说明的是,符号执行(symbolic execution)是一种程序分析技术,它可以通过分析程序来得到让特定代码区域执行的输入。顾名思义,使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。软件测试中的符号执行主要目标是: 在给定的探索尽可能多的、不同的程序路径(program path)。对于每一条程序路径,(1) 生成一个具体输入的集合;(2) 检查是否存在各种错误,包括断言违规、未捕获异常、安全漏洞和内存损坏。
32.需要说明的是,通过符号执行技术对cfa图结构的路径进行抽象描述,获得多个覆盖上下文信息的符号路径信息,包括以下步骤:提取cfa图结构的每条路径上的每个动作并对动作的结束时值进行分析;基于设定的符号值对动作分配唯一的id;其中,符号值包括动作产生的id、动作产生的接口以及所对应的参数位置n;分析每条路径的条件判断语句assume,函数调用语句 call 和返回语句 return,获得覆盖上下文的符号路径信息。
33.在具体的实施过程中,符号路径抽取的抽象语法结构。本步骤关注整数变量和指针变量两种变量。每一条路径t由一系列的路径动作a 和动作结束时值映射关系v组成。需要说明的是,本步骤基于llvm-ir实现,所有的值只会被赋值一次,所以只需要维护一个v即可。
34.在进行cfa图遍历的时候对每一条路径进行动作提取和值分析。因此本发明支持流敏感(flow-sensitive)分析。目前此过程中每个路径包含三种程序语句:条件判断语句 assume、函数调用语句 call 和返回语句 return。3个程序语句可以表述每个路径的情况。
其中,assume能够有效地捕获路径可达性信息(path-sensitive)。因此,通过分析每条路径的条件判断语句assume,函数调用语句 call 和返回语句 return,即可获得覆盖上下文的符号路径信息。
35.在分析过程中,对每一个动作分配一个唯一的id,以区别分析的上下文环境(context-sensitive)。 v记录符号变量sv到具体值 cv 的映射关系。一个符号值由具体动作产生的id、产生的接口、以及对应的参数位置n构成。例如,id_ f _arg_i 表示第idth动作为函数调用,其目标接口f的第ith个参数。此过程用0表示返回值索引,即f _arg_0表示目标接口f的返回值。在return 中,用arg_0表示f的调用者 c 的返回值。
36.本发明的基于规约导向的错误处理缺陷的检测方法中抽取的符号路径信息能够支持流敏感、路径敏感、上下文敏感的语义信息。
37.s132、利用缺陷检测算法和规约实例,对路径集合中每条路径进行缺陷检测,并获得错误处理缺陷检测数据。
38.对路径集合中每条路径进行缺陷检测中,缺陷检测为依次进行第一缺陷检测,第二缺陷检测以及第三缺陷检测;其中,第一缺陷为错误处理过程中检测条件缺失,第二缺陷为错误处理过程中检测条件错误以及第三缺陷为错误处理导致资源泄漏。
39.对路径集合中的每一条路径依次进行第一缺陷,第二缺陷以及第三缺陷检测,并获得错误处理缺陷信息;包括,s1321、对路径集合中的每一条路径是否存在第一缺陷进行判定;若待检测路径不包含针对目标接口条件判断语句assume,则确定当前路径存在第一缺陷;s1322、若路径包含针对目标接口条件判断语句assume;则对路径继续进行是否存在第二缺陷进行判定;若待检测路径的检测条件与错误处理规约实例描述的检测条件不匹配,则确定当前路径存在第二缺陷;s1323、若路径的检测条件与错误处理规约实例描述的检测条件匹配;则对路径继续进行是否存在第三缺陷进行判定;判断路径在目标接口进行错误处理之前是否存在资源申请的操作,若存在,则判断路径在目标接口进行错误处理之后是否存在资源释放动作;若在目标接口进行错误处理之后不存在资源释放动作,则确定当前路径存在第三缺陷。
40.总之,在具体的实施过程中,针对每个错误处理规约实例item中的目标接口进行相关路径的提取获得路径集合t,并对t中的每一条路径t进行分析,进行3种缺陷类型的检测:1)首先进行检测的是检测条件缺失类别的缺陷,若t中不包含针对目标接口f的条件判断 assume,那么说明该路径没有对目标接口f的返回值进行条件检测,导致一处错误处理缺陷:检测条件缺失; 2)随后进行检测的是检测条件错误类别的缺陷,若t中包含针对目标接口f的条件判断assume,但是,该检测条件与错误处理规约实例item描述的条件不匹配(例如assume中得到的条件为小于0,而item中描述的条件为小于等于0,那么说明在实际检测中缺失了对等于0的情况的检测),那么说明该路径对目标接口f的返回值进行了错误的条件判断,导致一处错误处理缺陷:检测条件错误;3)最终检测的是错误处理导致的资源泄漏类别缺陷,若t中包含针对目标接口f的条件判断assume,且该条件判断assume与错误处理规约相匹配,证明目标接口f在该路径中进行错误处理操作,随后检测在目标接口f进行错误处理之前,t中是否存在对资源申请的操作,即查找是否包含资源申请和释放函数对规约实例中资源申请操作的函数,如果存在并且成功申请资源,那么便查看在资源申请成功后,目标接口f在错误处理时是否进行资源释放的操作,即调用了资源申请和释放函数对规
约实例中资源申请函数所对应的资源释放函数。如果没有进行对应的资源释放,即找到一处错误处理缺陷:资源泄漏。
41.综上,利用分解后的目标接口的错误处理规约实例和符号路径作为输入,进行错误处理缺陷的检测,并获得错误处理缺陷检测数据。
42.s140、利用错误处理缺陷检测数据形成错误处理缺陷报告。
43.作为本实施例的改进,为了防止由于用户规约输入错误,造成检测过程中的大量误报,还包括对错误处理缺陷检测数据进行过滤的步骤s150。
44.s150、根据目标接口使用情况对错误处理缺陷检测数据进行主观缺陷判定,其中,将因目标接口的规约描述错误引起的错误处理缺陷作为主观缺陷;过滤错误处理缺陷检测数据中的主观缺陷,形成错误处理缺陷报告。
45.根据目标接口使用情况对错误处理缺陷检测数据进行主观缺陷判定,包括:s151、对当前错误处理缺陷数据进行目标接口的使用情况分析,获得统计信息;其中,统计信息包括目标接口的各个类别的错误处理缺陷个数和目标接口被调用的总次数;s152、利用过滤阈值对错误处理缺陷检测数据进行是否是主观缺陷进行判定;其中,过滤阈值为当前错误处理缺陷信息的目标接口的预设类别的错误处理缺陷个数与目标接口被调用的总次数的比值;s153、当过滤阈值不低于0.75时,则确定当前错误处理缺陷数据为主观缺陷信息。
46.具体地说,规约文件是用户提供,因此可能出现因规约文件出错,导致检测结果产生大量误报的可能性。在实际的实施过程中,需要针对该种情况对错误处理缺陷检测数据进行过滤。也就是说,设定过滤阈值
ħ = 针对目标接口f的某一类别的错误处理缺陷个数 / 目标接口f被调用的总次数。若
ħ
≥0.75,即可能为规约文件错误导致的大量误报产生。通过对错误处理缺陷检测数据中主观缺陷导致的误报进行过滤,将目标接口f该类别的缺陷全部过滤掉,进而以更低的时间成本发现更多的真实漏洞。通过制定基于统计信息的过滤策略,来减少系统的误报,进一步提升检测精度。
47.综上,本发明的基于规约导向的错误处理缺陷的检测方法,通过在预处理阶段将待测源代码以及规约文件进行标准化处理,得到cfa图结构以及规约实例,为后续分析过程提供基础。利用多入口规模化分析策略对规约实例中每个目标接口的调用者进行分析,可以有效的提升分析效率;采用符号执行策略,提取覆盖精确上下文信息的符号路径,以保证后续检测过程的精度。利用符号路径以及规约实例,进行规约导向的错误处理缺陷检测,为多种类别的错误处理缺陷检测提供了可行的解决方法。为了防止由于用户规约输入错误,造成检测过程中的大量误报,制定基于统计信息的过滤策略,来减少系统的误报,进一步提升检测精度。
48.图2为本发明一实施例提供的基于规约导向的错误处理缺陷的检测方法的原理示意图。
49.如图2所示,基于规约导向的错误处理缺陷的检测方法,主要包括四个环节:获取阶段,预处理阶段、分析阶段和过滤阶段。
50.首先,获取阶段就是通过步骤s110获取待测的源代码文件以及规约文件。
51.第二,预处理阶段就是通过上述步骤s120将源代码文件进行编译获得程序的中间表示,并将程序的中间表示进行转化获得cfa图结构;以及,将规约文件解析为规约实例。对规约实例进行筛选,获得存在目标接口的调用者的cfa图结构的规约实例。
52.也就是说,对用户提供的源代码文件以及规约文件进行预处理,以构造分析的上下文环境。预处理环节主要包括三个模块,编译抓取、ir-控制流自动机模块构建以及接口约束实例;具体地说,编译抓取是对c程序的源代码利用clang编译器进行编译抓取,从而将c源代码编译成基于llvm-ir的程序中间表示。ir-控制流自动机模块构建,是为每个函数均构建对应的cfa图结构;接口约束实例,是将规约文件解析为规约实例,对规约实例进行筛选,获得存在目标接口的调用者的cfa图结构的规约实例。并将筛选获得的存在目标接口的调用者的cfa图结构的规约实例用于后续的分析过程。
53.第三,分析阶段,就是通过上述步骤s130实现的,就是将规约实例中各个目标接口的调用者对应的cfa图结构分别作为待分析入口,对所有待分析入口逐个进行cfa图结构分析;其中,cfa图结构分析包括通过符号执行技术获得两个以上的覆盖上下文信息的符号路径信息;对每个符号路径信息根据规约实例的目标接口进行路径提取,获得路径集合;利用缺陷检测算法和规约实例,对路径集合中每条路径进行缺陷检测,并获得错误处理缺陷检测数据。
54.也就是说,分析环节主要包括三个模块,多入口的规模化分析策略,路径抽取以及缺陷检测器进行缺陷检测。多入口的规模化分析策略的环节,是通过将规约实例中各个目标接口的调用者(caller)对应的cfa图结构分别作为待分析入口,对所有待分析入口逐个进行cfa图结构分析来实现的。而路径抽取则是通过符号执行对规约实例中每个目标接口的调用者对应的cfa图结构进行静态模拟执行,并基于符号对程序路径的语义信息进行抽象描述来实现的。而缺陷检测器进行缺陷检测环节,则是利用分解后的接口约束实例和符号路径作为输入,进行错误处理缺陷的检测;对路径集合中每条路径进行缺陷检测中,缺陷检测为依次进行第一缺陷检测,第二缺陷检测以及第三缺陷检测;其中,第一缺陷为错误处理过程中检测条件缺失,第二缺陷为错误处理过程中检测条件错误以及第三缺陷为错误处理导致资源泄漏。
55.第四,过滤阶段。就是通过上述步骤s140和s150实现的,根据目标接口使用情况对错误处理缺陷检测数据进行主观缺陷判定,其中,将因目标接口的规约描述错误引起的错误处理缺陷作为主观缺陷;过滤错误处理缺陷检测数据中的主观缺陷,形成错误处理缺陷报告。
56.本发明所提供的基于规约导向的错误处理缺陷的检测方法,将基于规约导向的静态分析技术和错误处理缺陷安全性检查相融合,增强在c程序中api的错误处理缺陷的漏洞挖掘能力。并且通过基于多入口的规模化分析有效地提高分析效率,通过符号执行技术将程序中路径符号化表示,并使用静态分析技术中的整数分析和指针分析技术,能够覆盖程序的上下文语义,有效帮助基于路径信息的多种类型缺陷的查找。综上,本发明可以克服现有方法的局限性,以更低的时间成本发现更多的真实漏洞,在对c程序的错误处理缺陷检测精度和效率上体现出显著优势。
57.如图3所示,本发明提供一种基于规约导向的错误处理缺陷的检测系统300,本发明可以安装于电子设备中。根据实现的功能,该基于规约导向的错误处理缺陷的检测系统300可以获取单元310、预处理单元320、分析单元330和错误处理缺陷报告获取单元340。本发明所述单元也可以称之为模块,是指一种能够被电子设备处理器所执行,并且能够完成固定功能的一系列计算机程序段,其存储在电子设备的存储器中。
58.在本实施例中,关于各模块/单元的功能如下:获取单元310,用于获取待测的源代码文件以及规约文件;预处理单元320,用于将源代码文件进行编译获得程序的中间表示,并将程序的中间表示进行转化获得cfa图结构;以及,将规约文件解析为规约实例;对规约实例进行筛选,获得存在目标接口的调用者的cfa图结构的规约实例;分析单元330,用于将规约实例中各个目标接口的调用者对应的cfa图结构分别作为待分析入口,对所有待分析入口逐个进行cfa图结构分析;其中, cfa图结构分析包括通过符号执行技术获得两个以上的覆盖上下文信息的符号路径信息;用于对每个符号路径信息根据规约实例的目标接口进行路径提取,获得路径集合;利用缺陷检测算法和规约实例,对路径集合中每条路径进行缺陷检测,并获得错误处理缺陷检测数据;错误处理缺陷报告获取单元340,用于利用错误处理缺陷检测数据形成错误处理缺陷报告。
59.本发明的基于规约导向的错误处理缺陷的检测系统300,将基于规约导向的静态分析技术和错误处理缺陷安全性检查相融合,增强在c程序中api的错误处理缺陷的漏洞挖掘能力。并且通过基于多入口的规模化分析有效地提高分析效率,通过符号执行技术将程序中路径符号化表示,并使用静态分析技术中的整数分析和指针分析技术,能够覆盖程序的上下文语义,有效帮助基于路径信息的多种类型缺陷的查找。综上,本发明可以克服现有方法的局限性,以更低的时间成本发现更多的真实漏洞,在对c程序的错误处理缺陷检测精度和效率上体现出显著优势。
60.如图4所示,本发明提供一种基于规约导向的错误处理缺陷的检测方法的电子设备4。
61.该电子设备4可以包括处理器40、存储器41和总线,还可以包括存储在存储器41中并可在所述处理器40上运行的计算机程序,如基于规约导向的错误处理缺陷的检测程序42。存储器41还可以既包括基于规约导向的错误处理缺陷的检测系统的内部存储单元也包括外部存储设备。存储器41不仅可以用于存储安装于应用软件及各类数据,例如基于规约导向的错误处理缺陷的检测程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
62.其中,所述存储器41至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、移动硬盘、多媒体卡、卡型存储器(例如:sd或dx存储器等)、磁性存储器、磁盘、光盘等。所述存储器41在一些实施例中可以是电子设备4的内部存储单元,例如该电子设备4的移动硬盘。所述存储器41在另一些实施例中也可以是电子设备4的外部存储设备,例如电子设备4上配备的插接式移动硬盘、智能存储卡(smart media card, smc)、安全数字(secure digital, sd)卡、闪存卡(flash card)等。进一步地,所述存储器41还可以既包括电子设备4的内部存储单元也包括外部存储设备。所述存储器41不仅可以用于存储安装于电子设备4的应用软件及各类数据,例如基于规约导向的错误处理缺陷的检测程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
63.所述处理器40在一些实施例中可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(central processing unit,cpu)、微处理器、数字处理芯片、图形处理器
及各种控制芯片的组合等。所述处理器40是所述电子设备的控制核心(control unit),利用各种接口和线路连接整个电子设备的各个部件,通过运行或执行存储在所述存储器41内的程序或者模块(例如基于规约导向的错误处理缺陷的检测程序等),以及调用存储在所述存储器41内的数据,以执行电子设备4的各种功能和处理数据。
64.所述总线可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。该总线可以分为地址总线、数据总线、控制总线等。所述总线被设置为实现所述存储器41以及至少一个处理器40等之间的连接通信。
65.图4仅示出了具有部件的电子设备,本领域技术人员可以理解的是,图4示出的结构并不构成对所述电子设备4的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
66.例如,尽管未示出,所述电子设备4还可以包括给各个部件供电的电源(比如电池),优选地,电源可以通过电源管理系统与所述至少一个处理器40逻辑相连,从而通过电源管理系统实现充电管理、放电管理、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。所述电子设备4还可以包括多种传感器、蓝牙模块、wi-fi模块等,在此不再赘述。
67.进一步地,所述电子设备4还可以包括网络接口,可选地,所述网络接口可以包括有线接口和/或无线接口(如wi-fi接口、蓝牙接口等),通常用于在该电子设备4与其他电子设备之间建立通信连接。
68.可选地,该电子设备4还可以包括用户接口,用户接口可以是显示器(display)、输入单元(比如键盘(keyboard)),可选地,用户接口还可以是标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organic light-emitting diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备4中处理的信息以及用于显示可视化的用户界面。
69.应该了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。
70.所述电子设备4中的所述存储器41存储的基于规约导向的错误处理缺陷的检测程序42是多个指令的组合,在所述处理器40中运行时,可以实现:获取待测的源代码文件以及规约文件;将源代码文件进行编译获得程序的中间表示,并将程序的中间表示进行转化获得cfa图结构;以及,将规约文件解析为规约实例;对规约实例进行筛选,获得存在目标接口的调用者的cfa图结构的规约实例;将规约实例中各个目标接口的调用者对应的cfa图结构分别作为待分析入口,对所有待分析入口逐个进行cfa图结构分析;其中,cfa图结构分析包括通过符号执行技术获得两个以上的覆盖上下文信息的符号路径信息;对每个符号路径信息根据规约实例的目标接口进行路径提取,获得路径集合;利用缺陷检测算法和规约实例,对路径集合中每条路径进行缺陷检测,并获得错误处理缺陷检测数据;利用错误处理缺陷检测数据形成错误处理缺陷报告。
71.具体地,所述处理器40对上述指令的具体实现方法可参考图1对应实施例中相关步骤的描述,在此不赘述。需要强调的是,为进一步保证上述基于规约导向的错误处理缺陷
的检测程序的私密和安全性,上述数据库高可用处理数据存储于本服务器集群所处区块链的节点中。
72.进一步地,所述电子设备4集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或系统、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)。
73.本发明实施例还提供一种计算机可读存储介质,所述存储介质可以是非易失性的,也可以是易失性的,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现:获取待测的源代码文件以及规约文件;将源代码文件进行编译获得程序的中间表示,并将程序的中间表示进行转化获得cfa图结构;以及,将规约文件解析为规约实例;对规约实例进行筛选,获得存在目标接口的调用者的cfa图结构的规约实例;将规约实例中各个目标接口的调用者对应的cfa图结构分别作为待分析入口,对所有待分析入口逐个进行cfa图结构分析;其中,cfa图结构分析包括通过符号执行技术获得两个以上的覆盖上下文信息的符号路径信息;对每个符号路径信息根据规约实例的目标接口进行路径提取,获得路径集合;利用缺陷检测算法和规约实例,对路径集合中每条路径进行缺陷检测,并获得错误处理缺陷检测数据;利用错误处理缺陷检测数据形成错误处理缺陷报告。
74.具体地,所述计算机程序被处理器执行时具体实现方法可参考实施例基于规约导向的错误处理缺陷的检测方法中相关步骤的描述,在此不赘述。
75.在本发明所提供的几个实施例中,应该理解到,所揭露的设备,系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
76.所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
77.另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
78.对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。
79.因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附关联图标记视为限制所涉及的权利要求。
80.本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
81.此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或系统也可以由一个单元或系统通过软件或者硬件来实现。第二等词语用来表示名称,而并不表示任何特定的顺序。
82.最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。
再多了解一些

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

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

相关文献