CN116663017A - 一种基于多程序图的漏洞检测方法及装置 - Google Patents
一种基于多程序图的漏洞检测方法及装置 Download PDFInfo
- Publication number
- CN116663017A CN116663017A CN202310725504.9A CN202310725504A CN116663017A CN 116663017 A CN116663017 A CN 116663017A CN 202310725504 A CN202310725504 A CN 202310725504A CN 116663017 A CN116663017 A CN 116663017A
- Authority
- CN
- China
- Prior art keywords
- graph
- code
- abstract
- original
- neural network
- 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.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 46
- 239000011159 matrix material Substances 0.000 claims abstract description 19
- 238000013528 artificial neural network Methods 0.000 claims abstract description 18
- 238000013527 convolutional neural network Methods 0.000 claims abstract description 18
- 238000000034 method Methods 0.000 claims description 38
- 239000013598 vector Substances 0.000 claims description 37
- 238000010586 diagram Methods 0.000 claims description 23
- 238000012549 training Methods 0.000 claims description 18
- 230000006870 function Effects 0.000 claims description 13
- 239000012634 fragment Substances 0.000 claims description 9
- 230000008569 process Effects 0.000 claims description 8
- 230000003068 static effect Effects 0.000 claims description 8
- 238000003062 neural network model Methods 0.000 claims description 6
- 238000012360 testing method Methods 0.000 claims description 6
- 230000011218 segmentation Effects 0.000 claims description 4
- 238000013507 mapping Methods 0.000 claims description 3
- 230000004931 aggregating effect Effects 0.000 claims description 2
- 238000010276 construction Methods 0.000 claims description 2
- 238000012545 processing Methods 0.000 description 11
- 239000000284 extract Substances 0.000 description 7
- 230000000694 effects Effects 0.000 description 5
- 238000011160 research Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 101100503482 Arabidopsis thaliana FTSH5 gene Proteins 0.000 description 3
- 101150082136 VAR1 gene Proteins 0.000 description 3
- 238000004140 cleaning Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000011176 pooling Methods 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 101100064720 Borrelia burgdorferi (strain ATCC 35210 / B31 / CIP 102532 / DSM 4680) fusA gene Proteins 0.000 description 1
- 101100382067 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) BUD14 gene Proteins 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Image Analysis (AREA)
Abstract
本发明公开了一种基于多程序图的漏洞检测方法及装置,本发明使用多个不同的程序图来构造代码片段的图,每个图都表示代码片段中的一个语句,图中节点表示相关语句及其细粒度代码元素。并基于图神经网络对这些图进行编码,再根据编码后的图以及文本信息使用三种不同的方式来表征每个输入的代码片段,将其编码为三通道特征矩阵,最终使用卷积神经网络来识别输入的代码片段是否存在漏洞,本方法用于检测方法级别的漏洞,通过引入图神经网络、卷积神经网络,使漏洞检测效果进一步提高。
Description
技术领域
本发明涉及代码漏洞检测领域,尤其涉及一种基于多程序图的漏洞检测方法及装置。
背景技术
在软件开发和维护过程中,漏洞检测是软件质量保证的重要组成部分,且软件漏洞是网络攻击盛行的一个重要原因,并对社会的软件基础设施造成了重大破坏。长期以来,漏洞检测一直是软件安全领域的一个重要问题。随着目前软件***愈加复杂庞大,漏洞出现频率不断提升,急需针对漏洞检测领域开展***的研究工作,以便高效及时地发现软件***的漏洞,实时修补,提高软件使用的安全等级。然而,人工检测漏洞耗时耗力。
为了帮助开发人员减少软件调试过程中的人力工作,提高软件漏洞检测的准确率和效率,诞生了代码漏洞智能化检测这一研究课题。顾名思义,代码漏洞检测即基于开发者实现的代码实体,由机器智能化判断其中是否包含漏洞。基于程序分析的方法和基于机器学习的方法已被提出用于自动检测漏洞。
尽管目前已经存在许多基于程序分析和基于机器学习的方法来自动检测漏洞,但它们依赖于安全专家定义的明确规则或模式,并且存在高误报率或高漏报率。最近,越来越多的研究利用深度学习技术,尤其是图神经网络来检测漏洞。这些方法利用程序分析技术将输入方法表示为程序图,并使用图分析来检测漏洞。然而,它们存在两个主要问题,一是它们主要将源代码转换为单一表示形式,例如程序依赖图,这限制了它们捕获多维漏洞相关特征的能力;二是它们将每个输入的代码片段转换为单个图,其中每个节点通常表示一条语句,这使得难以有效地捕获细粒度代码特征并从长函数中提取与漏洞相关的特征。
发明内容
本发明目的在于针对现有技术的不足,为代码漏洞的自动检测提供了一种基于多程序图漏洞检测的算法,以检测结构复杂、长度较长的代码片段中是否包含漏洞。当前研究依托深度学习已能进行一定程度的漏洞智能化检测,但是检测效果还有很大提升空间。本发明提出了一种通过结合程序依赖图鱼抽象语法树为代码片段构建多张程序图,并融合代码构建特征矩阵以进一步提高检测效果的方法,即,引入图神经网络,使代码特征学习的更加精确,检测能力得到进一步强化。提出一种基于多程序图的漏洞检测方法。
本发明的目的是通过以下技术方案来实现的:一种基于多程序图的漏洞检测方法,包括如下步骤:
S1、获取据代码-标签对数据,构建数据集,包括训练集和测试集;
S2、对训练集中源代码构建原始代码和抽象代码并使用静态分析器得到两种代码对应的抽象语法树以及程序依赖图;
S3、对原始代码和抽象代码分别将对应的抽象语法树和程序依赖图结合构建原始图和抽象图;对训练集输入代码片段与原始图和抽象图和上下文相结合;得到原始语句图和抽象语句图;
S4、将代码文本分词后使用预训练模型将原始代码中每行代码编码文本向量,使用图神经网络模型将原始语句图和抽象语句图分别编码为原始向量和抽象向量;根据语句在代码中出现的顺序,将所有语句的特征向量组合起来,构建代码片段的特征矩阵;
S5、采用卷积神经网络模型来根据特征矩阵识别输入的代码片段是否含有漏洞;使用测试集对预训练模型、卷积神经网络模型和图神经网络模型进行评估并调参;
S6、将待预测的代码的原始语句图和抽象语句图输入到调参后的图神经网络、预训练网络和卷积神经网络,得到预测结果。
进一步地,所述数据集为公开数据集使用静态分析器进行针对性数据清洗得到的。
进一步地,所述针对性数据清洗具体为清洗掉数据集中无法正确生成抽象语法树以及程序依赖图的方法。
进一步地,所述S2中构建原始代码和抽象代码具体为:
构建原始代码:去除代码片段中的空行和注释信息;
构建抽象代码:将原始代码片段的每个用户定义变量和方法名称映射到一个符号;使用相同标识符的变量或方法名将使用相同的占位符。
进一步地,所述S3构建原始图和抽象图具体为:
使用程序依赖图作为主干,其中每个节点表示一行代码,并将程序依赖图中的每个节点替换为其对应代码的抽象语法树。
进一步地,所述S3中原始语句图和抽象语句图的生成具体为:
以相同的方式分别从原始图和抽象图中提取一系列子图;每个子图表征一行代码,称为目标代码;所述每个子图表征一行代码过程中,只选择路径长度不超过2的代码行作为上下文,并将它们的节点和边包含在子图中;从原始图和抽象图中提取的子图为原始语句图和抽象语句图。
进一步地,所述S4在构建代码片段的特征矩阵中,使用BPE分词器将每个语句图节点的代码文本分词,然后使用预训练模型Sent2Vec将每个代码文本转换为固定维度的特征向量;
使用两个注意力图神经网络分别对抽象语句图和原始语句图进行编码:根据节点的语句图将每个语句图编码为一个原始向量或抽象向量;其中注意力图神经网络通过自注意层传递聚合相邻节点的信息,使节点能够关注其邻居的特征。
进一步地,所述S5中采用卷积神经网络模型将每个语句根据原始向量、抽象向量和文本向量分为原始图通道、抽象图通道和文本通道。
进一步地,所述卷积神经网络模型在S5中作为分类器,在第一卷积层和第二卷积层之间添加一个SENet层,通过使用全局平均池生成通道统计信息将全局空间信息挤压到通道描述符中,使卷积神经网络模型能够利用通道依赖性;最终卷积神经网络模型输出漏洞和无漏洞的概率分布向量,用概率分布向量来预测函数是否易受攻击。
本发明说明书的另一方面还提供了一种基于代码可执行路径的漏洞检测装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,用于实现一种基于多程序图的漏洞检测方法。
本发明的有益效果:
本发明将源代码文本转化为多维的表现形式,使得本发明能够捕获多维漏洞相关特征;使用多程序图表征代码片段,在这一方面做了开创性尝试,捕获细粒度代码特征并从长函数中提取与漏洞相关的特征;通过引入图神经网络、卷积神经网络,使漏洞检测效果进一步提高。并证实了可以在当前已有的代码漏洞智能化检测方法的基础上进一步提升生成效果。
附图说明
图1是本发明的漏洞检测算法框架图;
图2是本发明的原始代码与抽象代码示例图;
图3是本发明的图2源代码转化原始语句图和抽象语句图示例图;
图4是本发明的基于多程序图的漏洞检测装置结构图。
具体实施方式
以下结合附图对本发明具体实施方式作进一步详细说明。
如图1所示,本发明提供的一种基于多程序图的漏洞检测方法及装置,
根据说明书实施例提供的第一方面,一种基于多程序图的漏洞检测方法具体步骤如下所述:
S1,获得代码-标签对数据,构建数据集,将数据集划分为训练集和测试集。本发明实施例采用三个公开数据集(SARD,FFmegp+Quem,Big-Vul),并针对静态分析工具可执行型特性进行针对性数据清洗,生成可使用的数据集。三个数据集共包含30441条有漏洞代码片段,134428条无漏洞的代码片段,共计164869条代码片段。清洗过程具体为:清洗掉数据集中静态分析工具无法正确生成抽象语法树以及程序依赖图的方法。
S2,使用不同的方式来表示源代码,即抽象代码和原始代码,结合程序依赖图和抽象语法树构造源代码的图表示:首先去除代码片段中的空行和注释信息,构建原始代码。接着,通过使用公共标识符和单独的索引(例如VAR1)映射原始代码片段中的每个用户定义变量和函数名称构建抽象代码。根据原始代码和抽象代码,通过静态分析器得到对应的抽象语法树以及程序依赖图。将原始代码(抽象代码)的抽象语法树以及程序依赖图结合起来,为输入的代码片段构造一个图,并称这样的图为原始图(抽象图)。具体为,使用程序依赖图作为主干,其中每个节点表示一行代码,并将程序依赖图中的每个节点替换为其对应代码的抽象语法树。
实施例如下:给定一个原始代码,我们将其中的每个用户定义变量和方法名称映射到一个符号,格式为TYPE#。变量和方法名称的TYPE分别设置为“VAR”和“FUN”。#是为每个不同类型(即变量或方法)顺序生成的数字ID。例如,代码片段中的第一个变量将规范化为VAR1,第三个唯一函数名称将规范化为FUN2。使用相同标识符的变量(方法名)将使用相同的占位符。另外,字符串内容也与代码结构无关,所以我们将它们映射成一个特殊的符号“STR”。不同的用户自定义变量、方法名和字符串出现在不同的代码片段中时,可能映射到相同的符号名。
S3,对原始代码和抽象代码分别将对应的抽象语法树和程序依赖图结合构建原始图和抽象图;
针对输入代码片段中的每行代码,我们从原始图和抽象图中提取与其相关的节点和边及其上下文,分别生成原始语句图和抽象语句图。
传统的方法将代码表示为图,例如抽象语法树、控制流图和程序依赖图。这样是代码结构和语义建模的好方法。而且越来越多的研究利用图神经网络来分析图结构数据,例如社交网络和交通网络。受源代码的图表示和图神经网络在各个领域的巨大成功的启发,研究人员也采用图神经网络开发了用于软件漏洞检测的有效工具。但是这些基于图神经的技术仍然存在一个主要问题:它们将每个代码片段表示为单个图,其中每个节点通常表示一行代码,这使得图神经网络难以捕获细粒度代码特征并从长代码中提取与漏洞相关的特征。
为此,本发明实施例采用基于程序依赖图与抽象语法树语句图构建技术,模型以相同的方式分别从原始图和抽象图中提取一系列子图。每个子图旨在表征一行代码,称为目标代码。在代码片段中,每行代码通常相互关联,每行代码的上下文在理解和编码该行代码起着重要作用。因此,模型不仅提取目标代码f的节点和边,还提取f上下文中代码的节点和边来构造每个子图。直观地说,如果在程序依赖图中中f和另一行代码s之间存在路径,模型就将s包含在f的上下文中。此外,f和s之间的路径越长,它们的相关性越小。因此,在这项工作中,我们只考虑路径长度不超过2的代码行作为上下文,并将它们的节点和边包含在子图中。从原始图和抽象图中提取的子图分别称为原始语句图和抽象语句图。
具体地如图2所示,首先将代码片段转换为原始代码以及抽象代码,进一步利用静态分析工具分别得到原始代码和抽象代码的原始代码图以及抽象代码图。然后根据原始代码图以及抽象代码图获得图3所示的原始语句图以及抽象语句图。图2中左侧为语句“data=data_buff”所对应的原始语句图,图2中右侧为语句“VAR1=VAR2”是原始语句语句“data=data_buff”所对应的抽象语句,据此生成了图3中的抽象语句图。
S4,将代码文本分词后使用预训练模型将原始代码中每行代码编码文本向量,使用图神经网络模型将原始语句图和抽象语句图分别编码为原始向量和抽象向量;根据语句在代码中出现的顺序,将所有语句的特征向量组合起来,构建代码片段的特征矩阵;
传统的方法主要将源代码转换为单一表示,这限制了它们捕获多维漏洞相关特征的能力。例如,给定一个代码片段,现有方法通常将其中的用户定义变量和方法名称抽象化,并将其表示为其抽象版本的程序依赖图。虽然这种表示可以帮助图神经网络提取函数的结构信息,但它阻碍了语义信息的捕获;
本发明实施例为了对语句图进行编码,首先使用BPE分词器将每个图节点的代码文本分词为分词。例如,节点“VAR1=FUN1(VAR1);”被标记为[‘VAR1’、‘=’、‘FUN1’、‘(’、‘VAR1’、‘)’、‘;’]。接下来,预训练模型使用Sent2Vec,一种广泛使用的句子嵌入技术,将每个标记化代码文本转换为固定维度的特征向量。然后,图神经网络模型模型使用GAT(注意力图神经网络)根据其节点的特征向量将每个语句图编码为一个特征向量。GAT通过利用屏蔽的自注意层通过消息传递聚合相邻节点的信息,这使节点能够关注其邻居的特征。模型使用两个GAT分别对抽象语句图和原始语句图进行编码。
每个代码片段都被转换成一个三维特征矩阵。受图像处理中通道概念的启发,模型将三种类型的语句特征向量视为三个通道,并采用卷积神经网络模型来根据特征矩阵识别代码片段是否含有漏洞。此外,模型还采用了SENet层来增强通道之间的交互。
S5,采用卷积神经网络模型来根据特征矩阵识别输入的代码片段是否含有漏洞。此外,还在卷积神经网络中SENet层来增强通道之间的交互。
具体地,在特征矩阵生成之后,代码片段都被转换成三维特征矩阵,模型使用特征矩阵来识别函数是易受攻击的还是干净的。模型将原始向量、抽象向量和文本向量这三种类型的语句向量视为三个通道,分别称为原始图通道、抽象图通道和文本通道。本发明CNN模型作为分类器。分类器的输入特征矩阵大小为128*128*3。每个卷积(conv)层由一个conv和一个ReLu函数组成。filter size为3*3,conv stride为1pixel,padding为1pixel。全连接层的配置在所有网络中都是相同的。不同的通道表达了不同类型的信息。为了促进不同通道之间的特征交互和融合,本发明在第一个conv层和第二个conv层之间添加了一个SENet。SENet可以通过显式建模通道之间的相互依赖性来自适应地重新校准通道方面的特征响应。SENet层是一个计算层,可以针对任何给定的变换Ftr是一个卷积算子。Ftr的输出是U=[u1,u2,...,uc]。在模型中,Etr是SENet层之前的卷积层。SENet由两部分组成,squeeze和excitation。在squeeze中,SENet通过使用全局平均池生成通道统计信息将全局空间信息挤压到通道描述符中。这使模型能够利用通道依赖性。Squeeze操作Fsq定义如下:
其中U是卷积运算符的输出。统计量是通过空间维度H×W收缩U生成的,zc是z的第c个元素。
在excitation操作中,SENet捕获通道依赖性。它利用带有sigmoid激活的门控机制:
s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))
其中σ是ReLU函数。SENet层的最终输出是通过使用激活重新缩放转换输出U获得的:
其中和Fscale指的是特征映射/>和标量sc之间的逐通道乘法/>是SENet层的输出。
在训练过程中,在特征矩阵生成阶段获得的特征矩阵首先经过卷积(conv)层和具有2x2像素窗口、步幅为2的最大池化层。然后,特征矩阵通过一个SENet层。下一层是两个卷积层的堆栈(每个堆栈由1个卷积层和1个最大池化层组成)。最后,特征矩阵通过两个全连接层:第一个层每个有4096个通道,第二个执行双向分类,因此包含2个通道(每个类一个)。最后一层是softmax层。分类器的输出是漏洞和不是漏洞的概率分布向量。模型用它来预测函数是否易受攻击。最后,得到一个经过训练的漏洞检测模型,然后可以使用该模型来识别新功能是否存在漏洞。
针对漏洞检测效果的评估指标,常用的有准确率、精确率、召回率、和F1值,由于漏洞检测任务中最关键的是准确率与召回率,而F1值能同时评估这两种指标,因此本发明采用F1值作为评估指标。使用不同参数组合获得了不同的模型,我们选取在测试集上获得最高F1值的模型作为我们的最终模型。
S6、将待检测的代码输入训练好的漏洞检测模型中,得到代码预测结果。
与前述基于多程序图的漏洞方法的实施例相对应,本发明还提供了基于多程序图的漏洞检测装置的实施例。
参见图4,本发明实施例提供的一种基于多程序图的漏洞检测装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,用于实现上述实施例中的基于多程序图的漏洞检测方法。
本发明基于多程序图的漏洞检测装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本发明多程序图的漏洞检测装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的基于多程序图的漏洞检测方法。
所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(Smart Media Card,SMC)、SD卡、闪存卡(Flash Card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。
Claims (10)
1.一种基于多程序图的漏洞检测方法,其特征在于,包括如下步骤:
S1、获取据代码-标签对数据,构建数据集,包括训练集和测试集;
S2、对训练集中源代码构建原始代码和抽象代码并使用静态分析器得到两种代码对应的抽象语法树以及程序依赖图;
S3、分别将原始代码和抽象代码对应的抽象语法树和程序依赖图结合,构建原始图和抽象图;原始图、抽象图和训练集输入代码片段上下文相结合;得到原始语句图和抽象语句图;
S4、对代码文本分词,使用预训练模型将原始代码中分词后的每行代码编码为文本向量,使用图神经网络模型将原始语句图和抽象语句图分别编码为原始向量和抽象向量;根据语句在代码中出现的顺序,将所有语句的特征向量组合起来,构建代码片段的特征矩阵;
S5、采用卷积神经网络模型来根据特征矩阵识别输入的代码片段是否含有漏洞;使用测试集对预训练模型、图神经网络模型和卷积神经网络模型进行评估并调参;
S6、将待预测代码的原始语句图和抽象语句图输入到调参后的图神经网络、预训练网络和卷积神经网络,得到预测结果。
2.根据权利要求1所述的一种基于多程序图的漏洞检测方法,其特征在于,所述数据集为公开数据集使用静态分析器进行针对性数据清洗得到的。
3.根据权利要求2所述的一种基于多程序图的漏洞检测方法,其特征在于,所述针对性数据清洗具体为清洗掉数据集中无法正确生成抽象语法树以及程序依赖图的数据。
4.根据权利要求1所述的一种基于多程序图的漏洞检测方法,其特征在于,所述S2中构建原始代码和抽象代码具体为:
构建原始代码:去除代码片段中的空行和注释信息;
构建抽象代码:将原始代码片段的每个用户定义变量和方法名称映射到一个符号;使用相同标识符的变量或方法名将使用相同的占位符。
5.根据权利要求1所述的一种基于多程序图的漏洞检测方法,其特征在于,所述S3构建原始图和抽象图具体为:
使用程序依赖图作为主干,其中每个节点表示一行代码,并将程序依赖图中的每个节点替换为其对应代码的抽象语法树。
6.根据权利要求1所述的一种基于多程序图的漏洞检测方法,其特征在于,所述S3中原始语句图和抽象语句图的生成具体为:
以相同的方式分别从原始图和抽象图中提取一系列子图;每个子图表征一行代码,称为目标代码;所述每个子图表征一行代码过程中,只选择路径长度不超过2的代码行作为上下文,并将它们的节点和边包含在子图中;从原始图和抽象图中提取的子图为原始语句图和抽象语句图。
7.根据权利要求1所述的一种基于多程序图的漏洞检测方法,其特征在于,所述S4在构建代码片段的特征矩阵中,使用BPE分词器将每个语句图节点的代码文本分词,然后使用预训练模型Sent2Vec将每个代码文本转换为固定维度的特征向量;
使用两个注意力图神经网络分别对抽象语句图和原始语句图进行编码:根据节点的语句图将每个语句图编码为一个原始向量或抽象向量;其中注意力图神经网络通过自注意层传递聚合相邻节点的信息,使节点能够关注其邻居的特征。
8.根据权利要求1所述的一种基于多程序图的漏洞检测方法,其特征在于,所述S5中采用卷积神经网络模型将每个语句根据原始向量、抽象向量和文本向量分为原始图通道、抽象图通道和文本通道。
9.根据权利要求1所述的一种基于多程序图的漏洞检测方法,其特征在于,所述卷积神经网络模型在S5中作为分类器,在第一卷积层和第二卷积层之间添加一个SENet层,通过使用全局平均池生成通道统计信息将全局空间信息挤压到通道描述符中,使卷积神经网络模型能够利用通道依赖性;最终卷积神经网络模型输出漏洞和无漏洞的概率分布向量,用概率分布向量来预测函数是否易受攻击。
10.一种基于代码可执行路径的漏洞检测装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,其特征在于,所述处理器执行所述可执行代码时,用于实现如权利要求1-9中任一项所述的基于多程序图的漏洞检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310725504.9A CN116663017A (zh) | 2023-06-19 | 2023-06-19 | 一种基于多程序图的漏洞检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310725504.9A CN116663017A (zh) | 2023-06-19 | 2023-06-19 | 一种基于多程序图的漏洞检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116663017A true CN116663017A (zh) | 2023-08-29 |
Family
ID=87727865
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310725504.9A Pending CN116663017A (zh) | 2023-06-19 | 2023-06-19 | 一种基于多程序图的漏洞检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116663017A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117725422A (zh) * | 2024-02-07 | 2024-03-19 | 北京邮电大学 | 程序代码漏洞检测模型训练方法及检测方法 |
-
2023
- 2023-06-19 CN CN202310725504.9A patent/CN116663017A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117725422A (zh) * | 2024-02-07 | 2024-03-19 | 北京邮电大学 | 程序代码漏洞检测模型训练方法及检测方法 |
CN117725422B (zh) * | 2024-02-07 | 2024-05-07 | 北京邮电大学 | 程序代码漏洞检测模型训练方法及检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111783100B (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
CN113641586B (zh) | 软件源代码缺陷检测方法、***、电子设备及储存介质 | |
Lo et al. | SMArTIC: Towards building an accurate, robust and scalable specification miner | |
CN115357904B (zh) | 一种基于程序切片和图神经网络的多类漏洞检测方法 | |
CN116579618B (zh) | 基于风险管理的数据处理方法、装置、设备及存储介质 | |
CN116257406A (zh) | 用于智慧城市的网关数据管理方法及其*** | |
CN113128237B (zh) | 一种服务资源的语义表征模型构建方法 | |
CN116663017A (zh) | 一种基于多程序图的漏洞检测方法及装置 | |
CN115146279A (zh) | 程序漏洞检测方法、终端设备及存储介质 | |
CN116866054A (zh) | 公共信息安全监测***及其方法 | |
CN115618291A (zh) | 一种基于Transformer的web指纹识别方法、***、设备以及存储介质 | |
CN116663018A (zh) | 一种基于代码可执行路径的漏洞检测方法及装置 | |
CN117235745A (zh) | 基于深度学习工控漏洞挖掘方法、***、设备和存储介质 | |
CN116595537A (zh) | 一种基于多模态特征的生成式智能合约的漏洞检测方法 | |
CN116467720A (zh) | 一种基于图神经网络的智能合约漏洞检测方法及电子设备 | |
CN112906824A (zh) | 车辆聚类方法、***、设备及存储介质 | |
CN111562943A (zh) | 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置 | |
CN112750047A (zh) | 行为关系信息提取方法及装置、存储介质、电子设备 | |
CN116244738B (zh) | 一种基于图神经网络的敏感信息检测方法 | |
WO2024148880A1 (zh) | 一种基于多源异构数据的***检测方法及装置 | |
CN116611057B (zh) | 数据安全检测方法及其*** | |
Xue et al. | VulSAT: Source Code Vulnerability Detection Scheme Based on SAT Structure | |
CN117521658B (zh) | 一种基于篇章级事件抽取的rpa流程挖掘方法及*** | |
CN115718696B (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 |