一种基于程序特征树的漏洞检测方法及系统技术方案

技术编号:15983109 阅读:27 留言:0更新日期:2017-08-12 05:45
本发明专利技术公开了一种基于程序特征树的漏洞检测方法及系统,其中方法的实现包括:分析漏洞函数代码生成漏洞程序依赖图,遍历漏洞程序依赖图生成漏洞程序特征树,以及,分析待测函数代码生成待测程序依赖图,遍历待测程序依赖图生成待测程序特征树;将漏洞程序特征树与待测程序特征树进行节点匹配,若漏洞程序特征树中的所有节点在待测程序特征树中均能找到匹配,则判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。本发明专利技术可以在确保检测准确度的同时,显著提高漏洞检测的执行效率。

【技术实现步骤摘要】
一种基于程序特征树的漏洞检测方法及系统
本专利技术属于漏洞检测研究中的相似性漏洞检测
,更具体地,涉及一种基于程序特征树的漏洞检测方法及系统。
技术介绍
在开发软件时经常会重用现有的代码,这种从现有代码中引入相同或者相似代码段的做法叫做“代码克隆”。代码克隆在大规模软件开发中应用非常多,大量的代码克隆不但会增大整个工程的维护难度,在被克隆代码段有漏洞时也会导致漏洞的扩散。往往在漏洞补丁发布时代码克隆问题会被忽视,这样就导致了已经发布的漏洞因为代码克隆而发生扩散并且得不到修补。而攻击者就可以根据已经发布的补丁来挖掘代码克隆导致的漏洞,并对整个系统造成影响。因此我们迫切需要一个准确高效的方法来检测代码克隆导致的漏洞的存在。目前克隆代码检测方法有基于度量、基于文本、基于语法和基于语义四类,其中以基于语义的算法较为准确。该技术主要以程序依赖图(ProgramDependenceGraph,PDG)技术为代表,即给定一个程序,根据程序语句之间的数据依赖和控制依赖关系建立一个PDG,该PDG中与漏洞PDG同构的子图所对应的代码段即被判定为克隆代码。与其他几类方法相比,基于PDG的算法从较高的层面来分析源代码,以获得程序的语义信息,所以这种方法可以检测到被打乱顺序但是语义相同的代码段。这几类方法各有优点,其中基于文本和基于语法的方法复杂度低可用于大规模软件,但是缺少语义的支持导致算法的误报率比较高。而基于语义的PDG技术虽然准确率比较高,但是不能处理代码中变量值被修改的问题,这就造成了漏报的发生。另一方面建立PDG和同构子图查找时间复杂度较高,尤其是同构子图的查找已经被证明为NPC(NPcomplete)问题,因此难以应用于大规模软件。也就是说,目前的漏洞检测系统有以下不足:一方面基于度量、文本和语法的方案,因为没有充分的考虑代码的语义结构,不能在进行漏洞匹配的过程中真实的反应漏洞的特征,从而导致漏洞检测准确度比较低。而另一方面基于语义的漏洞检测方案虽然准确度有所提高,但是却不能处理代码中变量值被修改的问题,更重要的是这种方法基于PDG的子图同构来进行漏洞的检测,而NPC复杂的子图同构问题导致了检测的效率非常低。
技术实现思路
针对现有技术的以上缺陷或改进需求,本专利技术提供了一种基于程序特征树的漏洞检测方法及系统,保证了大规模软件漏洞检测准确度的同时提高了系统的执行效率。有效解决基于度量、文本和语法方案漏洞检测准确度较低以及基于语义漏洞检测效率较低的技术问题。为实现上述目的,按照本专利技术的一个方面,提供了一种基于程序特征树的漏洞检测方法,包括:(1)分析漏洞函数代码生成漏洞程序依赖图,遍历漏洞程序依赖图生成漏洞程序特征树,以及,分析待测函数代码生成待测程序依赖图,遍历待测程序依赖图生成待测程序特征树;(2)将漏洞程序特征树与待测程序特征树进行节点匹配,若漏洞程序特征树中的所有节点在待测程序特征树中均能找到匹配,则判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。优选地,步骤(1)具体包括以下步骤:(1.1)分析漏洞函数代码生成漏洞程序依赖图,以及,分析待测函数代码生成待测程序依赖图,其中,漏洞程序依赖图与待测程序依赖图中均包括控制依赖关系与数据依赖关系;(1.2)获取漏洞程序依赖图中每一个节点和边的属性值,并对漏洞程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,以及,获取待测程序依赖图中每一个节点和边的属性值,并对待测程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,其中,属性值包括节点类型和节点值;(1.3)使用深度优先的方式分别遍历所述漏洞程序依赖图与所述待测程序依赖图中所有路径,在当前节点无后继节点或者重新回到环入口节点时才开始向上层回溯;(1.4)在分别对所述漏洞程序依赖图与所述待测程序依赖图遍历的过程中分离数据依赖和控制依赖,分别生成漏洞程序特征树与待测程序特征树。优选地,所述漏洞程序特征树与所述待测程序特征树均包括控制依赖树与数据依赖集,其中,控制依赖树中的节点与相应的程序依赖图中的节点对应,表示一个代码实体,控制依赖树中的每一条边与相应的程序依赖图中相应节点之间的控制依赖边对应,表示节点之间的控制依赖关系;数据依赖集中的节点与相应的控制依赖树中的节点对应,数据依赖集中的边与相应的程序依赖图中相应节点之间的数据依赖边对应。优选地,步骤(2)具体包括以下步骤:(2.1)初始节点匹配:在待测程序特征树的控制依赖树中查找与漏洞程序特征树的控制依赖树中根节点相匹配的节点获得初始匹配节点集合;(2.2)控制依赖匹配:在待测程序特征树的控制依赖树中,以初始匹配节点集合中的节点为根节点,依次向下进行与漏洞程序特征树的控制依赖树的匹配操作,并记录匹配的节点对,若漏洞程序特征树的控制依赖树中的所有节点均能在待测程序特征树的控制依赖树中找到匹配,则执行步骤(2.3),否则结束执行;(2.3)数据依赖匹配:根据步骤(2.2)中控制依赖匹配后得到的匹配对,判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。按照本专利技术的另一方面,提供了一种基于程序特征树的漏洞检测系统,包括:程序特征生成模块,用于分析漏洞函数代码生成漏洞程序依赖图,遍历漏洞程序依赖图生成漏洞程序特征树,以及,分析待测函数代码生成待测程序依赖图,遍历待测程序依赖图生成待测程序特征树;漏洞检测模块,用于将漏洞程序特征树与待测程序特征树进行节点匹配,若漏洞程序特征树中的所有节点在待测程序特征树中均能找到匹配,则判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。优选地,所述程序特征生成模块包括:程序依赖图生成模块,用于分析漏洞函数代码生成漏洞程序依赖图,以及,分析待测函数代码生成待测程序依赖图,其中,漏洞程序依赖图与待测程序依赖图中均包括控制依赖关系与数据依赖关系;程序依赖图分析模块,用于获取漏洞程序依赖图中每一个节点和边的属性值,并对漏洞程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,以及,获取待测程序依赖图中每一个节点和边的属性值,并对待测程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,其中,属性值包括节点类型和节点值;全路径遍历模块,用于使用深度优先的方式分别遍历所述漏洞程序依赖图与所述待测程序依赖图中所有路径,在当前节点无后继节点或者重新回到环入口节点时才开始向上层回溯;程序特征树生成模块,用于在分别对所述漏洞程序依赖图与所述待测程序依赖图遍历的过程中分离数据依赖和控制依赖,分别生成漏洞程序特征树与待测程序特征树。优选地,所述漏洞程序特征树与所述待测程序特征树均包括控制依赖树与数据依赖集,其中,控制依赖树中的节点与相应的程序依赖图中的节点对应,表示一个代码实体,控制依赖树中的每一条边与相应的程序依赖图中相应节点之间的控制依赖边对应,表示节点之间的控制依赖关系;数据依赖集中的节点与相应的控制依赖树中的节点对应,数据依赖集中的边与相应的程序依赖图中相应节点之间的数据依赖边对应。优选地,所述漏洞检本文档来自技高网
...
一种基于程序特征树的漏洞检测方法及系统

【技术保护点】
一种基于程序特征树的漏洞检测方法,其特征在于,包括:(1)分析漏洞函数代码生成漏洞程序依赖图,遍历漏洞程序依赖图生成漏洞程序特征树,以及,分析待测函数代码生成待测程序依赖图,遍历待测程序依赖图生成待测程序特征树;(2)将漏洞程序特征树与待测程序特征树进行节点匹配,若漏洞程序特征树中的所有节点在待测程序特征树中均能找到匹配,则判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。

【技术特征摘要】
1.一种基于程序特征树的漏洞检测方法,其特征在于,包括:(1)分析漏洞函数代码生成漏洞程序依赖图,遍历漏洞程序依赖图生成漏洞程序特征树,以及,分析待测函数代码生成待测程序依赖图,遍历待测程序依赖图生成待测程序特征树;(2)将漏洞程序特征树与待测程序特征树进行节点匹配,若漏洞程序特征树中的所有节点在待测程序特征树中均能找到匹配,则判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。2.根据权利要求1所述的方法,其特征在于,步骤(1)具体包括以下步骤:(1.1)分析漏洞函数代码生成漏洞程序依赖图,以及,分析待测函数代码生成待测程序依赖图,其中,漏洞程序依赖图与待测程序依赖图中均包括控制依赖关系与数据依赖关系;(1.2)获取漏洞程序依赖图中每一个节点和边的属性值,并对漏洞程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,以及,获取待测程序依赖图中每一个节点和边的属性值,并对待测程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,其中,属性值包括节点类型和节点值;(1.3)使用深度优先的方式分别遍历所述漏洞程序依赖图与所述待测程序依赖图中所有路径,在当前节点无后继节点或者重新回到环入口节点时才开始向上层回溯;(1.4)在分别对所述漏洞程序依赖图与所述待测程序依赖图遍历的过程中分离数据依赖和控制依赖,分别生成漏洞程序特征树与待测程序特征树。3.根据权利要求2所述的方法,其特征在于,所述漏洞程序特征树与所述待测程序特征树均包括控制依赖树与数据依赖集,其中,控制依赖树中的节点与相应的程序依赖图中的节点对应,表示一个代码实体,控制依赖树中的每一条边与相应的程序依赖图中相应节点之间的控制依赖边对应,表示节点之间的控制依赖关系;数据依赖集中的节点与相应的控制依赖树中的节点对应,数据依赖集中的边与相应的程序依赖图中相应节点之间的数据依赖边对应。4.根据权利要求3所述的方法,其特征在于,步骤(2)具体包括以下步骤:(2.1)初始节点匹配:在待测程序特征树的控制依赖树中查找与漏洞程序特征树的控制依赖树中根节点相匹配的节点获得初始匹配节点集合;(2.2)控制依赖匹配:在待测程序特征树的控制依赖树中,以初始匹配节点集合中的节点为根节点,依次向下进行与漏洞程序特征树的控制依赖树的匹配操作,并记录匹配的节点对,若漏洞程序特征树的控制依赖树中的所有节点均能在待测程序特征树的控制依赖树中找到匹配,则执行步骤(2.3),否则结束执行;(2.3)数据依赖匹配:根据步骤(2.2)中控制依赖匹配后得到的匹配对,判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。5.一种基于程序特征树的...

【专利技术属性】
技术研发人员:金海邹德清齐汉超李珍
申请(专利权)人:华中科技大学
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1