CN107038380A - 一种基于程序特征树的漏洞检测方法及系统 - Google Patents
一种基于程序特征树的漏洞检测方法及系统 Download PDFInfo
- Publication number
- CN107038380A CN107038380A CN201710242822.4A CN201710242822A CN107038380A CN 107038380 A CN107038380 A CN 107038380A CN 201710242822 A CN201710242822 A CN 201710242822A CN 107038380 A CN107038380 A CN 107038380A
- Authority
- CN
- China
- Prior art keywords
- program
- tree
- leak
- performance
- measured
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于程序特征树的漏洞检测方法及系统,其中方法的实现包括:分析漏洞函数代码生成漏洞程序依赖图,遍历漏洞程序依赖图生成漏洞程序特征树,以及,分析待测函数代码生成待测程序依赖图,遍历待测程序依赖图生成待测程序特征树;将漏洞程序特征树与待测程序特征树进行节点匹配,若漏洞程序特征树中的所有节点在待测程序特征树中均能找到匹配,则判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。本发明可以在确保检测准确度的同时,显著提高漏洞检测的执行效率。
Description
技术领域
本发明属于漏洞检测研究中的相似性漏洞检测技术领域,更具体地,涉及一种基于程序特征树的漏洞检测方法及系统。
背景技术
在开发软件时经常会重用现有的代码,这种从现有代码中引入相同或者相似代码段的做法叫做“代码克隆”。代码克隆在大规模软件开发中应用非常多,大量的代码克隆不但会增大整个工程的维护难度,在被克隆代码段有漏洞时也会导致漏洞的扩散。
往往在漏洞补丁发布时代码克隆问题会被忽视,这样就导致了已经发布的漏洞因为代码克隆而发生扩散并且得不到修补。而攻击者就可以根据已经发布的补丁来挖掘代码克隆导致的漏洞,并对整个系统造成影响。因此我们迫切需要一个准确高效的方法来检测代码克隆导致的漏洞的存在。
目前克隆代码检测方法有基于度量、基于文本、基于语法和基于语义四类,其中以基于语义的算法较为准确。该技术主要以程序依赖图(Program Dependence Graph,PDG)技术为代表,即给定一个程序,根据程序语句之间的数据依赖和控制依赖关系建立一个PDG,该PDG中与漏洞PDG同构的子图所对应的代码段即被判定为克隆代码。与其他几类方法相比,基于PDG的算法从较高的层面来分析源代码,以获得程序的语义信息,所以这种方法可以检测到被打乱顺序但是语义相同的代码段。这几类方法各有优点,其中基于文本和基于语法的方法复杂度低可用于大规模软件,但是缺少语义的支持导致算法的误报率比较高。而基于语义的PDG技术虽然准确率比较高,但是不能处理代码中变量值被修改的问题,这就造成了漏报的发生。另一方面建立PDG和同构子图查找时间复杂度较高,尤其是同构子图的查找已经被证明为NPC(NP complete)问题,因此难以应用于大规模软件。也就是说,目前的漏洞检测系统有以下不足:
一方面基于度量、文本和语法的方案,因为没有充分的考虑代码的语义结构,不能在进行漏洞匹配的过程中真实的反应漏洞的特征,从而导致漏洞检测准确度比较低。而另一方面基于语义的漏洞检测方案虽然准确度有所提高,但是却不能处理代码中变量值被修改的问题,更重要的是这种方法基于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)低开销。相比于现有基于语义的漏洞检测方案,本发明在保留了程序的语义的同时,将程序依赖图转换为程序特征树,避免了子图同构的高复杂度操作,降低了系统的时间开销。并且使用了控制依赖与数据依赖分离的技术,避免了大量的数据依赖对检测效率造成的影响,进一步提高了系统的执行效率。
(3)低耦合性。本发明在各个模块之间使用简单的接口连接,耦合性非常低,可以快速地完成模块的增删与修改。允许用户自定义模块功能级别,如映射类型的选择等。
附图说明
图1为本发明实施例公开的一种基于程序特征树的漏洞检测方法的流程示意图;
图2为本发明实施例公开的一种全路径遍历算法原理示意图;
图3为本发明实施例公开的一种基于程序特征树的漏洞检测框架的流程示意图;
图4为本发明实施例公开的一种基于程序特征树的漏洞检测系统的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明的整体思路在于,开发者使用漏洞函数代码在待测函数代码中查找是否含有相似性漏洞,来解决因为代码克隆而导致的漏洞扩散问题。通过分析源代码语义生成程序依赖图,然后使用标识符映射的方法将图中各个节点值涉及到的标识符映射为同一值,以减少漏报的出现。通过使用全路径遍历法将标识符映射处理之后的程序依赖图转化为程序特征树。通过比较能够代表程序语义的程序特征树的相似性在待测函数中查找可能出现的漏洞。
如图1所示为本发明实施例公开的一种基于程序特征树的漏洞检测方法的流程示意图,包括以下步骤:
(1)分析漏洞函数代码生成漏洞程序依赖图,遍历漏洞程序依赖图生成漏洞程序特征树,以及,分析待测函数代码生成待测程序依赖图,遍历待测程序依赖图生成待测程序特征树;
(2)将漏洞程序特征树与待测程序特征树进行节点匹配,若漏洞程序特征树中的所有节点在待测程序特征树中均能找到匹配,则判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。
作为一种可选的实施方式,步骤(1)具体包括以下步骤,参考图2所示:
(1.1)分析漏洞函数代码生成漏洞程序依赖图,以及,分析待测函数代码生成待测程序依赖图,其中,漏洞程序依赖图与待测程序依赖图中均包括控制依赖关系与数据依赖关系;
(1.2)获取漏洞程序依赖图中每一个节点和边的属性值,并对漏洞程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,以及,获取待测程序依赖图中每一个节点和边的属性值,并对待测程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,其中,属性值包括节点类型和节点值,映射方式为:按照标识符的类型,将相同类型的标识符映射为相同的值;
(1.3)使用深度优先的方式分别遍历所述漏洞程序依赖图与所述待测程序依赖图中所有路径,在当前节点无后继节点或者重新回到环入口节点时才开始向上层回溯;
(1.4)在分别对所述漏洞程序依赖图与所述待测程序依赖图遍历的过程中分离数据依赖和控制依赖,分别生成漏洞程序特征树与待测程序特征树。
其中,采用步骤(1.4)在遍历的过程中分离数据依赖和控制依赖,可以消除数据依赖边爆炸对漏洞检测效率的影响,使遍历中遇到的节点和控制依赖边重新构造出控制依赖树,并使数据依赖边构造出数据依赖集。其中:
控制依赖树中的节点对应到图中的唯一节点;控制依赖树中的边对应到图中相应节点之间的控制依赖边;数据依赖集中的节点对应到控制依赖树的节点;数据依赖集中的边对应到图中相应节点之间的数据依赖边。
如图3所示为本发明实施例公开的一种基于程序特征树的漏洞检测框架的流程示意图,包括以下步骤:
(2.1)初始节点匹配:在待测程序特征树的控制依赖树中查找与漏洞程序特征树的控制依赖树中根节点相匹配的节点获得初始匹配节点集合;
(2.2)控制依赖匹配:在待测程序特征树的控制依赖树中,以初始匹配节点集合中的节点为根节点,依次向下进行与漏洞程序特征树的控制依赖树的匹配操作,并记录匹配的节点对,若漏洞程序特征树的控制依赖树中的所有节点均能在待测程序特征树的控制依赖树中找到匹配,则执行步骤(2.3),否则结束执行;
(2.3)数据依赖匹配:根据步骤(2.2)中控制依赖匹配后得到的匹配对,判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。
如图4所示为本发明实施例公开的一种基于程序特征树的漏洞检测系统的结构示意图,包括以下模块:
程序特征生成模块,用于分析漏洞函数代码生成漏洞程序依赖图,遍历漏洞程序依赖图生成漏洞程序特征树,以及,分析待测函数代码生成待测程序依赖图,遍历待测程序依赖图生成待测程序特征树;
其中,程序特征生成模块包括:
程序依赖图生成模块,用于分析漏洞函数代码生成漏洞程序依赖图,以及,分析待测函数代码生成待测程序依赖图,其中,漏洞程序依赖图与待测程序依赖图中均包括控制依赖关系与数据依赖关系;
程序依赖图分析模块,用于获取漏洞程序依赖图中每一个节点和边的属性值,并对漏洞程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,以及,获取待测程序依赖图中每一个节点和边的属性值,并对待测程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,其中,属性值包括节点类型和节点值;
全路径遍历模块,用于使用深度优先的方式分别遍历所述漏洞程序依赖图与所述待测程序依赖图中所有路径,在当前节点无后继节点或者重新回到环入口节点时才开始向上层回溯;
程序特征树生成模块,用于在分别对所述漏洞程序依赖图与所述待测程序依赖图遍历的过程中分离数据依赖和控制依赖,分别生成漏洞程序特征树与待测程序特征树。
其中,漏洞程序特征树与待测程序特征树均包括控制依赖树与数据依赖集,其中,控制依赖树中的节点与相应的程序依赖图中的节点对应,表示一个代码实体,控制依赖树中的每一条边与相应的程序依赖图中相应节点之间的控制依赖边对应,表示节点之间的控制依赖关系;
数据依赖集中的节点与相应的控制依赖树中的节点对应,数据依赖集中的边与相应的程序依赖图中相应节点之间的数据依赖边对应。
漏洞检测模块,用于将漏洞程序特征树与待测程序特征树进行节点匹配,若漏洞程序特征树中的所有节点在待测程序特征树中均能找到匹配,则判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。
其中,漏洞检测模块包括:
初始节点匹配模块,用于在待测程序特征树的控制依赖树中查找与漏洞程序特征树的控制依赖树中根节点相匹配的节点获得初始匹配节点集合;
控制依赖匹配模块,用于在待测程序特征树的控制依赖树中,以初始匹配节点集合中的节点为根节点,依次向下进行与漏洞程序特征树的控制依赖树的匹配操作,并记录匹配的节点对,若漏洞程序特征树的控制依赖树中的所有节点均能在待测程序特征树的控制依赖树中找到匹配,则执行数据依赖匹配,否则结束执行;
数据依赖匹配模块,用于根据控制依赖匹配后得到的匹配对,判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (8)
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.一种基于程序特征树的漏洞检测系统,其特征在于,包括:
程序特征生成模块,用于分析漏洞函数代码生成漏洞程序依赖图,遍历漏洞程序依赖图生成漏洞程序特征树,以及,分析待测函数代码生成待测程序依赖图,遍历待测程序依赖图生成待测程序特征树;
漏洞检测模块,用于将漏洞程序特征树与待测程序特征树进行节点匹配,若漏洞程序特征树中的所有节点在待测程序特征树中均能找到匹配,则判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。
6.根据权利要求5所述的系统,其特征在于,所述程序特征生成模块包括:
程序依赖图生成模块,用于分析漏洞函数代码生成漏洞程序依赖图,以及,分析待测函数代码生成待测程序依赖图,其中,漏洞程序依赖图与待测程序依赖图中均包括控制依赖关系与数据依赖关系;
程序依赖图分析模块,用于获取漏洞程序依赖图中每一个节点和边的属性值,并对漏洞程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,以及,获取待测程序依赖图中每一个节点和边的属性值,并对待测程序依赖图中所有的节点值涉及到的标识符按照类型进行映射,其中,属性值包括节点类型和节点值;
全路径遍历模块,用于使用深度优先的方式分别遍历所述漏洞程序依赖图与所述待测程序依赖图中所有路径,在当前节点无后继节点或者重新回到环入口节点时才开始向上层回溯;
程序特征树生成模块,用于在分别对所述漏洞程序依赖图与所述待测程序依赖图遍历的过程中分离数据依赖和控制依赖,分别生成漏洞程序特征树与待测程序特征树。
7.根据权利要求6所述的系统,其特征在于,所述漏洞程序特征树与所述待测程序特征树均包括控制依赖树与数据依赖集,其中,控制依赖树中的节点与相应的程序依赖图中的节点对应,表示一个代码实体,控制依赖树中的每一条边与相应的程序依赖图中相应节点之间的控制依赖边对应,表示节点之间的控制依赖关系;
数据依赖集中的节点与相应的控制依赖树中的节点对应,数据依赖集中的边与相应的程序依赖图中相应节点之间的数据依赖边对应。
8.根据权利要求7所述的系统,其特征在于,所述漏洞检测模块包括:
初始节点匹配模块,用于在待测程序特征树的控制依赖树中查找与漏洞程序特征树的控制依赖树中根节点相匹配的节点获得初始匹配节点集合;
控制依赖匹配模块,用于在待测程序特征树的控制依赖树中,以初始匹配节点集合中的节点为根节点,依次向下进行与漏洞程序特征树的控制依赖树的匹配操作,并记录匹配的节点对,若漏洞程序特征树的控制依赖树中的所有节点均能在待测程序特征树的控制依赖树中找到匹配,则执行数据依赖匹配,否则结束执行;
数据依赖匹配模块,用于根据控制依赖匹配后得到的匹配对,判断待测程序特征树中与漏洞程序特征树匹配的各节点之间是否存在与漏洞程序特征树相同的数据依赖关系,若存在,则待测函数代码中存在漏洞。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710242822.4A CN107038380B (zh) | 2017-04-14 | 2017-04-14 | 一种基于程序特征树的漏洞检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710242822.4A CN107038380B (zh) | 2017-04-14 | 2017-04-14 | 一种基于程序特征树的漏洞检测方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107038380A true CN107038380A (zh) | 2017-08-11 |
CN107038380B CN107038380B (zh) | 2019-07-05 |
Family
ID=59535338
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710242822.4A Active CN107038380B (zh) | 2017-04-14 | 2017-04-14 | 一种基于程序特征树的漏洞检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107038380B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107798245A (zh) * | 2017-11-02 | 2018-03-13 | 北京理工大学 | 一种基于组件依赖图的软件安全漏洞预测方法 |
CN109194613A (zh) * | 2018-07-27 | 2019-01-11 | 新华三信息安全技术有限公司 | 一种数据包检测方法和装置 |
CN109902489A (zh) * | 2019-02-18 | 2019-06-18 | 福建六壬网安股份有限公司 | 一种检测漏洞脚本的方法及装置 |
CN110266680A (zh) * | 2019-06-17 | 2019-09-20 | 辽宁大学 | 一种基于双重相似性度量的工业通信异常检测方法 |
CN111783103A (zh) * | 2020-07-03 | 2020-10-16 | Oppo广东移动通信有限公司 | 基于Maven的依赖管理方法、装置、电子装置及存储介质 |
US20210012012A1 (en) * | 2019-07-12 | 2021-01-14 | Palo Alto Research Center Incorporated | System and method for constructing a graph-based model for optimizing the security posture of a composed internet of things system |
CN113139190A (zh) * | 2020-01-17 | 2021-07-20 | Oppo广东移动通信有限公司 | 程序文件检测方法、装置、电子设备及存储介质 |
CN113626823A (zh) * | 2021-06-29 | 2021-11-09 | 中国科学院信息工程研究所 | 一种基于可达性分析的组件间交互威胁检测方法及装置 |
US11930046B2 (en) | 2021-06-17 | 2024-03-12 | Xerox Corporation | System and method for determining vulnerability metrics for graph-based configuration security |
CN111783103B (zh) * | 2020-07-03 | 2024-06-04 | Oppo广东移动通信有限公司 | 基于Maven的依赖管理方法、装置、电子装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101241532A (zh) * | 2008-02-15 | 2008-08-13 | 北京邮电大学 | 面向源代码的基于不等式组求解的缓冲区溢出检测方法 |
CN101727391A (zh) * | 2009-12-14 | 2010-06-09 | 北京理工大学 | 一种软件漏洞特征操作序列的提取方法 |
CN103679034A (zh) * | 2013-12-26 | 2014-03-26 | 南开大学 | 一种基于本体的计算机病毒分析系统及其特征提取方法 |
CN103927176A (zh) * | 2014-04-18 | 2014-07-16 | 扬州大学 | 一种基于层次主题模型的程序特征树的生成方法 |
-
2017
- 2017-04-14 CN CN201710242822.4A patent/CN107038380B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101241532A (zh) * | 2008-02-15 | 2008-08-13 | 北京邮电大学 | 面向源代码的基于不等式组求解的缓冲区溢出检测方法 |
CN101727391A (zh) * | 2009-12-14 | 2010-06-09 | 北京理工大学 | 一种软件漏洞特征操作序列的提取方法 |
CN103679034A (zh) * | 2013-12-26 | 2014-03-26 | 南开大学 | 一种基于本体的计算机病毒分析系统及其特征提取方法 |
CN103927176A (zh) * | 2014-04-18 | 2014-07-16 | 扬州大学 | 一种基于层次主题模型的程序特征树的生成方法 |
Non-Patent Citations (3)
Title |
---|
ZHEN LI等: "VulPecker:An Automated Vulnerability Detection System Based on Code Similarity Anaysis", 《ACSAC"16PROCEEDINGS OF THE 32ND ANNUAL CONFERENCE ON COMPUTER SECURITY APPLICATIONS》 * |
唐艳武等: "上下文相关的软件漏洞模式自动提取方法", 《计算机工程》 * |
王涛等: "软件漏洞静态检测模型及检测框架", 《计算机科学》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107798245B (zh) * | 2017-11-02 | 2020-08-11 | 北京理工大学 | 一种基于组件依赖图的软件安全漏洞预测方法 |
CN107798245A (zh) * | 2017-11-02 | 2018-03-13 | 北京理工大学 | 一种基于组件依赖图的软件安全漏洞预测方法 |
CN109194613A (zh) * | 2018-07-27 | 2019-01-11 | 新华三信息安全技术有限公司 | 一种数据包检测方法和装置 |
CN109194613B (zh) * | 2018-07-27 | 2021-02-23 | 新华三信息安全技术有限公司 | 一种数据包检测方法和装置 |
CN109902489B (zh) * | 2019-02-18 | 2021-05-07 | 福建六壬网安股份有限公司 | 一种检测漏洞脚本的方法及装置 |
CN109902489A (zh) * | 2019-02-18 | 2019-06-18 | 福建六壬网安股份有限公司 | 一种检测漏洞脚本的方法及装置 |
CN110266680A (zh) * | 2019-06-17 | 2019-09-20 | 辽宁大学 | 一种基于双重相似性度量的工业通信异常检测方法 |
CN110266680B (zh) * | 2019-06-17 | 2021-08-24 | 辽宁大学 | 一种基于双重相似性度量的工业通信异常检测方法 |
US20210012012A1 (en) * | 2019-07-12 | 2021-01-14 | Palo Alto Research Center Incorporated | System and method for constructing a graph-based model for optimizing the security posture of a composed internet of things system |
CN113139190A (zh) * | 2020-01-17 | 2021-07-20 | Oppo广东移动通信有限公司 | 程序文件检测方法、装置、电子设备及存储介质 |
CN111783103A (zh) * | 2020-07-03 | 2020-10-16 | Oppo广东移动通信有限公司 | 基于Maven的依赖管理方法、装置、电子装置及存储介质 |
CN111783103B (zh) * | 2020-07-03 | 2024-06-04 | Oppo广东移动通信有限公司 | 基于Maven的依赖管理方法、装置、电子装置及存储介质 |
US11930046B2 (en) | 2021-06-17 | 2024-03-12 | Xerox Corporation | System and method for determining vulnerability metrics for graph-based configuration security |
CN113626823A (zh) * | 2021-06-29 | 2021-11-09 | 中国科学院信息工程研究所 | 一种基于可达性分析的组件间交互威胁检测方法及装置 |
CN113626823B (zh) * | 2021-06-29 | 2023-06-27 | 中国科学院信息工程研究所 | 一种基于可达性分析的组件间交互威胁检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107038380B (zh) | 2019-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107038380B (zh) | 一种基于程序特征树的漏洞检测方法及系统 | |
Juergens et al. | Code similarities beyond copy & paste | |
CN105912381B (zh) | 一种基于规则库的编译期代码安全检测方法 | |
CN107608732A (zh) | 一种基于bug知识图谱的bug搜索定位方法 | |
CN107038378B (zh) | 应用软件安全漏洞检测方法和系统 | |
CN109670318B (zh) | 一种基于核控制流图循环验证的漏洞检测方法 | |
CN107392016A (zh) | 一种基于代理的Web数据库攻击行为检测系统 | |
CN103116540A (zh) | 基于全局超级块支配图的动态符号执行方法及其装置 | |
CN101996292B (zh) | 一种基于序列聚类的软件安全特性分析方法 | |
CN111400724A (zh) | 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质 | |
CN103914374B (zh) | 基于程序切片和频繁模式提取的代码缺陷检测方法及装置 | |
CN107194251A (zh) | Android平台恶意应用检测方法及装置 | |
CN104504337A (zh) | 一种安卓数据泄露的恶意应用检测方法 | |
CN107038115B (zh) | 应用软件安全漏洞检测方法和系统 | |
CN102968375A (zh) | 基于关联规则挖掘的不可达路径检测方法 | |
CN106874762B (zh) | 基于api依赖关系图的安卓恶意代码检测方法 | |
CN105630678B (zh) | 一种智能电能表软件的可靠性检测仪及其检测方法 | |
CN103955372B (zh) | 一种移动终端中资源的检测方法及装置 | |
Li et al. | Vuldeelocator: A deep learning-based system for detecting and locating software vulnerabilities | |
CN106294136A (zh) | 并行程序运行期间性能变化的在线检测方法和系统 | |
CN105528296B (zh) | 一种面向对象软件的类簇测试方法 | |
CN101930398B (zh) | 基于Fuzzing技术的变异多维输入的软件脆弱性分析方法 | |
CN106570398A (zh) | 一种基于结构特性的恶意代码启发式检测方法及系统 | |
CN107168881A (zh) | 代码异常定位与处理方法 | |
CN116431516A (zh) | 一种用于变异测试的程序语句选择方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |