掌桥专利:专业的专利平台
掌桥专利
首页

代码漏洞检测方法、装置、电子设备及存储介质

文献发布时间:2024-01-17 01:21:27


代码漏洞检测方法、装置、电子设备及存储介质

技术领域

本发明实施例涉及代码检测技术,尤其涉及一种代码漏洞检测方法、装置、电子设备及存储介质。

背景技术

代码漏洞检测问题是软件开发过程中的一个重要问题,代码的高度复杂性和结构的变化性使得代码漏洞检测成为一个极具挑战的问题。目前常用的代码漏洞检测方法有人工检测、基于深度学习的漏洞检测等。人工检测,费时费力,效率低、成本高,在工业使用中不具有实操意义。基于深度学习的漏洞检测,通常是将源代码看作是一个自然语言顺序的语言片段,仅利用了代码单词之间的词序关系进行检测,而忽视了蕴含在源代码中的其他信息,容易出现漏检或误检,检测准确率不高。

发明内容

本发明实施例提供一种代码漏洞检测方法、装置、电子设备及存储介质,能够更全面、准确地检测出代码中包括的漏洞,提高漏洞检测效率。

第一方面,本发明提供一种代码漏洞检测方法,包括:

解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据所述抽象语法树、所述控制流图和所述程序依赖图构建原始代码属性图;

对所述原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;

根据所述目标代码属性图确定所述样本代码的表征向量;

基于所述样本代码的表征向量和样本标签进行模型训练,得到代码检测模型;

基于所述代码检测模型对目标代码进行漏洞检测。

第二方面,本发明提供一种代码漏洞检测装置,包括:

构建模块,用于解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据所述抽象语法树、所述控制流图和所述程序依赖图构建原始代码属性图;

聚合模块,用于对所述原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;

确定模块,用于根据所述目标代码属性图确定所述样本代码的表征向量;

训练模块,用于基于所述样本代码的表征向量和样本标签进行模型训练,得到代码检测模型;

检测模块,用于基于所述代码检测模型对目标代码进行漏洞检测。

第三方面,本发明提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明任一实施例所述的代码漏洞检测方法。

第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任一实施例所述的代码漏洞检测方法。

本发明的方案中,可以解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据抽象语法树、控制流图和程序依赖图构建原始代码属性图;对原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;根据目标代码属性图确定样本代码的表征向量;基于样本代码的表征向量和样本标签进行模型训练,得到代码检测模型;基于代码检测模型对目标代码进行漏洞检测。本发明将代码转换成具有结构信息的代码属性图,不仅考虑到了代码的词序关系,还考虑到了代码的结构特性,考虑的维度更全面;对代码属性图中的节点特征向量进行卷积聚合操作,可以获得更好的节点表征,利用获取的样本代码的表征向量进行模型训练,使得训练出的模型能够更全面、准确地检测出代码中包括的漏洞,提高了漏洞检测效率。

附图说明

为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1是本发明提供的代码漏洞检测方法的一个流程示意图;

图2是本发明提供的代码漏洞检测方法的另一流程示意图;

图3是本发明提供的代码漏洞检测方法的一个图卷积网络示例图;

图4是本发明提供的代码漏洞检测装置的一个结构示意图;

图5是本发明提供的电子设备的一个结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

在介绍本发明的方案之前,先对本发明实施例涉及的相关术语进行解释:

图神经网络:传统的深度学习方法对欧几里得数据的特征进行了有效的提取,但是现实世界中数据多数是以图结构的形式进行表示。分析图结构的数据是一个应用广泛的命题,因此以图结构为基础的神经网络模型在数据处理的研究中越来越重要。图神经网络包括以下几种主要类别:递归图神经网络、卷积图神经网络、图自编码器、时空图神经网络等。

代码漏洞检测:在源代码中出现漏洞之后,通过一定的检测方法发现代码中出现的漏洞,以避免因代码漏洞问题出现的内存泄漏问题、安全问题等。

图1是本发明提供的代码漏洞检测方法的一个流程示意图,该方法可以由本发明提供的代码漏洞检测装置来执行,该装置可采用软件和/或硬件的方式实现。在一个具体的实施例中,该装置可以集成在电子设备中,电子设备比如可以是计算机、服务器等。以下实施例将以该装置集成在电子设备中为例进行说明,参考图1,该方法具体可以包括如下步骤:

步骤101,解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据抽象语法树、控制流图和程序依赖图构建原始代码属性图。

其中,样本代码为预先标记了代码漏洞情况的代码,用于模型训练;抽象语法树是代码的树状结构表示形式,代码在编译过程中会被解析为一串以标记为单位的词法单元流,再根据编译器解析为抽象语法树,树的单个节点分别表示代码片段中的某种结构,如标识符、变量等;抽象的意义在于它并没有形象地表示出代码的真正语法细节,而是展示了一种大致的结构,例如代码片段中用于嵌套的花括号,在抽象语法树中并没有具象的节点进行呈现。控制流图也叫控制流程图,是用在编译器中的一个抽象数据结构,是一个过程或程序的抽象表现,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径,它用图的形式表示一个过程内所有基本块执行的可能流向,也能反映一个过程的实时执行过程。程序依赖图是程序的一种图形表示,它是带有标记的有向多重图,能够表示程序的控制依赖和数据依赖关系。

具体实现中,抽象语法树在语法分析阶段经常进行等价转换,会造成代码分析过程混乱等现象,因此需要对抽象语法树进行一定的处理,消除多余的成分。代码属性图即是以抽象语法树、控制流图和程序依赖图等构成的多重图,其中的属性是指图中所有的节点和边都可以指定其拥有的属性名称及对应的值,图中的边可以被指派一种标签的属性作为该条边的类型。

步骤102,对原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图。

其中,节点特征可以是以节点为粒度的结构特征,例如度,介数中心性和紧密中心性等;其中,度是指一个节点关联的邻居节点的个数;介数中心性描述的是一个节点作为枢纽节点的重要程度;紧密中心性描述一个节点到图中其他节点的难易程度。节点的特征向量通常是将节点具有的特征向量化后得到。

具体的,对于图中的每一个节点,使用图卷积操作学习每个节点相邻的节点的特征,并将邻居节点的特征聚合到当前节点上整合信息,将得到的每个节点的聚合向量作为新的节点特征向量。在节点特征更新之后,聚合所有的节点特征向量,得到目标代码属性图。

步骤103,根据目标代码属性图确定样本代码的表征向量。

具体的,根据目标代码属性图中将节点连接起来的边类型的不同,可以将目标代码属性图拆分为多个子图,由每个子图中节点的特征向量得到当前子图的表征向量,再继续通过卷积计算得到每个子图的权重,与对应各个子图的表征向量相乘并求和作为样本代码的表征向量。

步骤104,基于样本代码的表征向量和样本标签进行模型训练,得到代码检测模型。

具体的,样本代码具有样本标签,对代码漏洞情况进行了标注,如是否有漏洞,漏洞的具体位置,具体的函数类型等。将样本代码的表征向量输入模型进行训练,模型的输出是代码的漏洞情况。在训练达到某个截至条件时,停止训练,将最后一轮更新后的模型作为代码检测模型。截至条件比如训练轮数达到预设轮数,训练损失低于某个值等。

步骤105,基于代码检测模型对目标代码进行漏洞检测。

具体的,首先对目标代码构建原始代码属性图;再对原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;接着将得到的目标代码属性图进行处理得到目标代码的表征向量;最后将目标代码的表征向量输入代码检测模型中进行代码检测,得到检测结果。检测结果为代码的漏洞情况,如代码中不存在漏洞,或者代码中存在漏洞,漏洞位于代码第x行,漏洞处于函数y中等情况。

本发明的方案,解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据抽象语法树、控制流图和程序依赖图构建原始代码属性图;对原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;根据目标代码属性图确定样本代码的表征向量;基于样本代码的表征向量和样本标签进行模型训练,得到代码检测模型;基于代码检测模型对目标代码进行漏洞检测。本发明利用代码属性图,考虑了代码的词序关系和结构特性,考虑的维度更全面;对节点特征向量进行卷积聚合操作,可以获得更好的节点表征,使得训练出的模型能更全面、准确地检测出代码中包括的漏洞,提高了检测效率。

图2是本发明提供的代码漏洞检测方法的另一流程示意图,如图2所示,该方法可以包括如下步骤:

步骤201,解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据抽象语法树、控制流图和程序依赖图构建原始代码属性图。

步骤202,根据边确定原始代码属性图中每个节点的邻居节点。

其中,原始代码属性图中包括用于表示样本代码的组成对象的节点和用于表示节点连接关系的边。

代码属性图的边有多种类别,示例性的,边的类别可以包括:IS_FILE_OF,IS_PARENT_DIR_OF,IS_CLASS_OF,IS_AST_PARENT_OF,FLOWS_TO,IS_FUNCTION_OF_AST,REACHES,USE和DEF等。

具体的,IS_FILE_OF,这个类型的边可以为每个文件创建一个节点并连接这些节点,还可以连接结构体/类声明节点与其所在的文件;

IS_PARENT_DIR_OF,这个类型的边可以为每个目录创建一个节点并连接这些节点,可以公开目录层次结构;

IS_CLASS_OF,这个类型的边可以连接结构体/类声明节点与成员的声明;

IS_AST_PARENT_OF,这个类型的边可以连接抽象语法树节点与它们的子节点;

IS_FUNCTION_OF_AST,这个类型的边可以连接函数节点与其对应的抽象语法树根节点;

FLOWS_TO和REACHES,这两个类型的边可以连接语句节点,分别表示控制和数据流;

USE,这个类型的边可以连接符号节点与使用此符号的语句节点;

DEF,这个类型的边可以连接符号节点与定义此符号的语句节点。

而代码属性图的节点主要分为以下几大类:函数节点;抽象语法树节点,用于表示代码的语法结构;语句节点,是抽象语法树节点的一个子集;符号节点,类型值为“符号”,用于数据流分析;文件和目录节点,类型值为“文件”或“目录”;结构体/类声明节点,类型值为“类”。

代码属性图中的每一个节点都由固定边相连接,因此可以根据边确定原始代码属性图中每个节点的邻居节点。

步骤203,将每个节点的节点特征向量和对应节点的邻居节点的节点特征向量代入节点特征更新函数进行向量聚合操作,得到每个节点的聚合向量。

具体的,对于图中的每一个节点,使用图卷积操作学习每个节点相邻的节点的特征,并将邻居节点的特征聚合到当前节点上整合信息。其中,聚合是双向调用的过程,可以从内到外再从外到内进行卷积,这样的卷积操作可以对图节点的相邻节点特征进行计算,而不改变图结构,可以进行多层叠加,从而获得更好的学习节点特征。向量聚合过程中进行了多层卷积,随着层次加深,提取的信息也愈加复杂、抽象,更加有利于节点特征的学习。

步骤204,将每个节点的节点特征向量更新为对应节点的聚合向量,得到目标代码属性图。

具体的,将每个节点的节点特征向量更新为对应节点的聚合向量,得到由新的节点特征向量构成的代码属性图,作为目标代码属性图。

步骤205,根据边的类型将目标代码属性图拆分成多个子图。

其中,边的类型主要有公开目录层次结构,连接文件节点,连接节点的子节点和连接其他语句节点等。通过边的类型的不同将边与由它连接的节点作为新的子图,将目标代码属性图拆分成多个子图。

步骤206,获取多个子图中每个子图的权重和每个子图的表征向量。

其中,在给图中的每条边赋一个值的情况下,将该值称为这条边的权,将一个子图内的所有边的权之和定义为这个子图的权重。因此可以通过子图的边和节点的特征向量,获取多个子图中每个子图的权重和每个子图的表征向量。

步骤207,将每个子图的权重和对应子图的表征向量加权求和,得到样本代码的表征向量。

其中,权重计算即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。因此可以通过将每个子图的权重和对应子图的表征向量加权求和,得到样本代码的表征向量。

步骤208,基于样本代码的表征向量和样本标签进行模型训练,得到代码检测模型。

示例性的,代码检测模型的输入是代码经过处理后的图,用特征向量和边向量表示,图的特征向量由图中的每个节点的特征向量聚合得到,边向量表示顶点之间的连接关系。在输入到输出之间是N轮对节点的特征的更新,每一轮节点特征更新时,都根据边向量找到相邻节点,从特征向量中获得相邻节点的特征向量,与当前节点自身的特征向量输入到节点特征更新函数中进行当前节点的特征更新,N大于1。代码检测模型示意图如图3所示,可以看出每个节点的特征都由其邻居节点特征学习而来。

步骤209,利用测试代码对代码检测模型进行测试。

具体的,在训练得到模型之后,进入测试阶段。与训练阶段相同,首先对测试代码构建原始代码属性图;再对原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;接着将得到的目标代码属性图进行处理得到测试代码的表征向量;最后将测试代码的表征向量输入代码检测模型中进行代码检测,得到检测结果;将检测结果与测试代码的漏洞情况进行对比,得到测试代码的测试准确率。

步骤210,在测试通过时,基于代码检测模型对目标代码进行漏洞检测。

示例性的,设定测试结果为准确率超过80%为测试通过,代码检测模型可以使用。则在测试通过时,基于代码检测模型对目标代码进行漏洞检测。

本发明的方案,解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据抽象语法树、控制流图和程序依赖图构建原始代码属性图;对原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;根据目标代码属性图确定样本代码的表征向量;基于样本代码的表征向量和样本标签进行模型训练,得到代码检测模型;基于代码检测模型对目标代码进行漏洞检测。本发明利用代码属性图,考虑了代码的词序关系和结构特性,考虑的维度更全面;对节点特征向量进行卷积聚合操作,可以获得更好的节点表征,使得训练出的模型能更全面、准确地检测出代码中包括的漏洞,提高了检测效率。

图4是本发明提供的代码漏洞检测装置的一个结构示意图,该装置适用于执行本发明提供的代码漏洞检测方法。如图4所示,该装置具体可以包括:

构建模块401,用于解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据抽象语法树、控制流图和程序依赖图构建原始代码属性图;

聚合模块402,用于对原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;

确定模块403,用于根据目标代码属性图确定样本代码的表征向量;

训练模块404,用于基于样本代码的表征向量和样本标签进行模型训练,得到代码检测模型;

检测模块405,用于基于代码检测模型对目标代码进行漏洞检测。

一实施例中,所述原始代码属性图中包括用于表示所述样本代码的组成对象的节点和用于表示节点连接关系的边。

一实施例中,聚合模块402具体用于:

根据所述边确定所述原始代码属性图中每个节点的邻居节点;

根据所述每个节点的节点特征向量和对应节点的邻居节点的节点特征向量对所述每个节点进行向量聚合操作,得到所述目标代码属性图。

一实施例中,聚合模块402根据所述每个节点的节点特征向量和对应节点的邻居节点的节点特征向量对所述每个节点进行向量聚合操作,得到所述目标代码属性图,包括:

将所述每个节点的节点特征向量和对应节点的邻居节点的节点特征向量代入节点特征更新函数进行向量聚合操作,得到所述每个节点的聚合向量;

将所述每个节点的节点特征向量更新为对应节点的聚合向量,得到所述目标代码属性图。

一实施例中,确定模块403具体用于:

根据所述边的类型将所述目标代码属性图拆分成多个子图;

获取所述多个子图中每个子图的权重和所述每个子图的表征向量;

根据所述每个子图的权重和所述每个子图的表征向量确定所述样本代码的表征向量。

一实施例中,确定模块403根据所述每个子图的权重和所述每个子图的表征向量确定所述样本代码的表征向量,包括:

将所述每个子图的权重和对应子图的表征向量加权求和,得到所述样本代码的表征向量。

一实施例中,在基于所述样本代码的表征向量和样本标签进行模型训练,得到代码检测模型之后,所述装置还包括:

测试模块,用于利用测试代码对所述代码检测模型进行测试;

触发模块,用于在测试通过时,触发执行所述基于所述代码检测模型对目标代码进行漏洞检测。

本发明的装置,解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据抽象语法树、控制流图和程序依赖图构建原始代码属性图;对原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;根据目标代码属性图确定样本代码的表征向量;基于样本代码的表征向量和样本标签进行模型训练,得到代码检测模型;基于代码检测模型对目标代码进行漏洞检测。本发明利用代码属性图,考虑了代码的词序关系和结构特性,考虑的维度更全面;对节点特征向量进行卷积聚合操作,可以获得更好的节点表征,使得训练出的模型能更全面、准确地检测出代码中包括的漏洞,提高了检测效率。

本发明还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述任一实施例提供的代码漏洞检测方法。

本发明还提供了一种计算机可读介质,其上存储有计算机程序,程序被处理器执行时实现上述任一实施例提供的代码漏洞检测方法。

下面参考图5,其示出了适于用来实现本发明的电子设备的计算机系统500的结构示意图。图5示出的电子设备仅仅是一个示例,不应对本发明的功能和使用范围带来任何限制。

如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有计算机系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。

以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。

特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本发明的系统中限定的上述功能。

需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本发明中所涉及到的模块和/或单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块和/或单元也可以设置在处理器中,例如,可以描述为:一种处理器包括构建模块、聚合模块、确定模块、训练模块和检测模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定。

作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:

解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据抽象语法树、控制流图和程序依赖图构建原始代码属性图;对原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;根据目标代码属性图确定样本代码的表征向量;基于样本代码的表征向量和样本标签进行模型训练,得到代码检测模型;基于代码检测模型对目标代码进行漏洞检测。

根据本发明的技术方案,解析样本代码得到抽象语法树、控制流图和程序依赖图,并根据抽象语法树、控制流图和程序依赖图构建原始代码属性图;对原始代码属性图中的节点特征向量进行卷积聚合操作,得到目标代码属性图;根据目标代码属性图确定样本代码的表征向量;基于样本代码的表征向量和样本标签进行模型训练,得到代码检测模型;基于代码检测模型对目标代码进行漏洞检测。本发明利用代码属性图,考虑了代码的词序关系和结构特性,考虑的维度更全面;对节点特征向量进行卷积聚合操作,可以获得更好的节点表征,使得训练出的模型能更全面、准确地检测出代码中包括的漏洞,提高了检测效率。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

技术分类

06120116154701