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

一种程序切片漏洞检测方法、系统、计算机及存储介质

2022-12-10 20:43:24 来源:中国专利 TAG:


1.本技术涉及信息安全检测技术领域,特别是涉及一种程序切片漏洞检测方法、系统、计算机及存储介质。


背景技术:

2.随着数字化、信息化、智能化技术的高速发展,利用程序漏洞盗取信息或发起网络攻击已成为信息安全的主要威胁,软件安全和信息安全愈发受到重视。为了减少程序漏洞的引入,人们提出了程序切片漏洞检测技术,它能帮助人们在设计、编码等工作中尽早地确定审查重心,并显著地减少漏洞的数量,从而降低软件研制和维护成本。
3.在程序漏洞分析中,程序切片是一种重要分析方法,通过数据流和控制流来分解程序,并删除程序中不重要语句,提取出影响程序点的程序代码,从而更关注程序中可能包含漏洞的部分。但是,由于产生程序漏洞的类型差异较大,如设计错误、编码不规范、测试不足等,如何更准确地检测这些复杂、隐秘且多样的程序漏洞仍是一个较大挑战。
4.近年来,深度学习方法在漏洞数据挖掘中显现出了强大的潜力,采用深度学习提升程序切片漏洞检测性能成为了一种趋势。图表征学习是深度学习技术的一种,该方法将图结构表征成低维、稠密的向量结构,实现图结构的深入分析。利用图表征学习方法进行程序切片漏洞检测是一种更为有效的新方法,然而当前图表征学习技术在进行程序切片图节点嵌入过程中采用word2vec或code2vec实现,强调从代码行的词汇构成的语言处理角度进行特征向量化,没有充分考虑代码行本身的深层结构特征,复杂语义结构难以被充分地体现在嵌入向量。与此同时,以传统图卷积网络、图神经网络为主的图表征学习方法在学习程序切片中深层的结构特征上仍有不足,漏洞检测的效率难以进一步提升。


技术实现要素:

5.本技术实施例提供了一种程序切片漏洞检测方法、系统、计算机及存储介质,旨在强化图表征能力并提升程序切片漏洞检测性能,并以此为基础,有效地推动信息安全和漏洞检测技术的发展。
6.第一方面,本技术实施例提供了一种程序切片漏洞检测方法,其特征在于,包括以下步骤:提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据;将所述图数据区隔为训练集及测试集;基于所述训练集构建ggnat图表征学习模型,所述ggnat图表征学习模型用于漏洞检测。
7.进一步地,所述将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据的步骤包括:
对所述节点进行节点嵌入,以将所述节点转化为节点数据;将所述图边以邻接矩阵的形式进行存储,以将所述图边转化为图边数据;组合所述节点数据及所述图边数据,以形成所述图数据。
8.进一步地,所述对所述节点进行节点嵌入,以将所述节点转化为节点数据的步骤具体为:获取所述节点数据的包含代码,提取所述包含代码的节点属性特征,将所述节点属性特征映射到数值向量空间,以获取属性向量v
attribute
;将所述包含代码的代码段落进行向量表示,以获取段落向量v
paragraph
;将所述包含代码的代码段落转换为ast数据结构树,聚合所述ast数据结构树的子树节点,将聚合后的所述子树节点映射至向量空间,以获取结构向量v
ast
;拼接所述属性向量v
attribute
、所述段落向量v
paragraph
及所述结构向量v
ast
,以形成所述节点数据。
9.进一步地,所述训练集于所述图数据中的占比为70%~80%。
10.进一步地,所述基于所述训练集构建ggnat图表征学习模型,所述ggnat图表征学习模型用于漏洞检测的步骤包括:以门控图神经网络构建门控图循环层,将所述训练集作为所述门控图循环层的输入值,以获取节点状态;以图注意力机制构建图注意层,将所述节点状态作为所述图注意层的输入值,以获取节点特征;以最大池化与平均池化的组合池化法进行卷积运算,以构建池化层,将所述节点特征作为所述池化层的输入值,以获取全局表征向量;以多层感知机构建预测层,将所述全局表征向量作为所述预测层的输入值,以获取所述ggnat图表征学习模型。
11.进一步地,所述预测层包括多层感知机模型,所述多层感知机模型为:其中,sigmoid为饱和激活函数、avg为平均数函数、mlp为多层感知器、为所述全局表征向量。
12.进一步地,在所述基于所述训练集构建ggnat图表征学习模型,所述ggnat图表征学习模型用于漏洞检测的步骤之后,还包括:将所述测试集代入所述ggnat图表征学习模型,以检测所述ggnat图表征学习模型的漏洞检测功能。
13.第二方面,本技术实施例提供了一种程序切片漏洞检测系统,用于所述程序切片漏洞检测方法,其特征在于,所述系统包括:提取模块,用于提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;转化模块,用于将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据;
分隔模块,用于将所述图数据区隔为训练集及测试集;构建模块,用于基于所述训练集构建ggnat图表征学习模型,所述ggnat图表征学习模型用于漏洞检测。
14.第三方面,本技术实施例提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的程序切片漏洞检测方法。
15.第四方面,本技术实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面所述的程序切片漏洞检测方法。
16.相比于相关技术,本发明的有益效果在于:将所述程序切片用程序依赖图表征,并从属性、段落及ast结构三个不同特征维度分别对所述节点进行嵌入,通过拼接共同表征图节点,有效地解决了传统图特征学习方法在图节点向量嵌入中对代码行级的结构特征和统计特征表征能力上不足的问题;采用融合ggnn算法与图注意机制的所述ggnat图表征学习模型进行图表征学习,能够高效地挖掘多维特征与漏洞之间的关联,相比传统的漏洞检测方法,本发明能显著提高检测的性能。
17.本技术的一个或多个实施例的细节在以下附图和描述中提出,以使本技术的其他特征、目的和优点更加简明易懂。
附图说明
18.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:图1为本发明第一实施例中程序切片漏洞检测方法的流程图;图2为本发明第二实施例中程序切片漏洞检测方法的流程图;图3为本发明第二实施例中程序切片漏洞检测方法中结构向量的获取流程图;图4为本发明第二实施例中程序切片漏洞检测方法中以训练集构建ggnat漏洞检测模型的过程图;图5为本发明第三实施例中程序切片漏洞检测系统的结构框图。
19.如下具体实施方式将结合上述附图进一步说明本发明。
具体实施方式
20.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。基于本技术提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
21.显而易见地,下面描述中的附图仅仅是本技术的一些示例或实施例,对于本领域的普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图将本技术应用于其他类似情景。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本技术公开的内容相关的本领域的普通技术人员而言,在本技术揭露的技术内容的基础上进行的一些定义,制造或者生产等变更只是常规的技术手段,不应当理解为本技术公开的内容不充分。
22.在本技术中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本技术所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
23.除非另作定义,本技术所涉及的技术术语或者科学术语应当为本技术所属技术领域内具有一般技能的人士所理解的通常意义。本技术所涉及的“一”、“一个”、“一种”、“该”等类似词语并不表示数量限制,可表示单数或复数。本技术所涉及的术语“包括”、“包含”、“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单元)的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本技术所涉及的“连接”、“相连”、“耦接”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电气的连接,不管是直接的还是间接的。本技术所涉及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本技术所涉及的术语“第一”、“第二”、“第三”等仅仅是区别类似的对象,不代表针对对象的特定排序。
24.本技术中的所述程序切片漏洞检测方法的对象为程序切片,在应用前,需将源代码进行程序切片提取,并根据源代码的漏洞状态进行程序切片漏洞标记。
25.请参阅图1,本发明第一实施例提供的程序切片漏洞检测方法。所述方法包括步骤s10至步骤s40:步骤s10:提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;获得程序切片的程序依赖图,所述程序依赖图包括控制依赖图和数据依赖图,所述控制依赖图和所述数据依赖图为由节点和图边构成的有向图。所述节点(对应程序切片一行代码)的存储格式为[节点id,节点类型,包含代码,位置,是否控制流/数据流节点],所述节点的类型包含函数、函数调用、定义、标识符、if语句、wile循环、赋值、参数、组合语句、等式判断、符号标记;所述图边的存储格式为[起始节点id,结束节点id,边的类型], 所述图边的类型包括控制流类型和数据流类型。
[0026]
步骤s20:将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据;对所述节点进行嵌入,将所述节点从属性、段落、ast结构三个特征维度进行嵌入,分别转化为对应的数值化特征向量,之后进行拼接,组合成完整的图数据。图数据用g=《n, e》表示,n表示节点数据,e表示图边数据。
[0027]
步骤s30:将所述图数据区隔为训练集及测试集;所述训练集于所述图数据中的占比为:70%~80%,所述测试集于所述图数据中的占比为:20%~30%,可以理解地,所述训练集及所述测试集蕴含所述图数据内的全部数据。
[0028]
步骤s40:基于所述训练集构建ggnat图表征学习模型,所述ggnat图表征学习模型用于漏洞检测;
构建带图注意力机制的门控图神经网络(gatedgraphneuralnetworkwithgraphattention, ggnat) 作为图表征学习模型,对所述训练集进行特征挖掘,捕获特征向量与漏洞标签的内在关联。
[0029]
通过采用融合ggnn算法与图注意机制的所述ggnat图表征学习模型进行图表征学习,能够高效地挖掘多维特征与漏洞之间的关联,相比传统的漏洞检测方法,能显著提高检测的性能。
[0030]
请参阅图2,本发明第二实施例提供的程序切片漏洞检测方法,所述方法包括以下步骤:步骤s100:提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;对程序切片进行图结构提取,将程序切片的代码文本转化csv格式的图结构表示的信息。使用开源工具joern解析源程序,获得源程序对应ast的节点文件node.csv与边文件edge.csv。所有的节点信息保存在node.csv中,边的信保存在edge.csv中。根据cwe程序切片所包含的代码行,从edge.csv中的数据流和控制流信息筛选与切片相关的边,在node.csv中根据筛选的边找到相关的节点,构成程序切片的图结构信息。
[0031]
步骤s110:对所述节点进行节点嵌入,以将所述节点转化为节点数据;具体地,包括步骤s111:获取所述节点数据的包含代码,提取所述包含代码的节点属性特征,将所述节点属性特征映射到数值向量空间,以获取属性向量v
attribute
;步骤s112:将所述包含代码的代码段落进行向量表示,以获取段落向量v
paragraph
;步骤s113:将所述包含代码的代码段落转换为ast数据结构树,聚合所述ast数据结构树的子树节点,将聚合后的所述子树节点映射至向量空间,以获取结构向量v
ast
;步骤s114:拼接所述属性向量v
attribute
、所述段落向量v
paragraph
及所述结构向量v
ast
,以形成所述节点数据。
[0032]
将所述程序切片对应的图结构中的节点实行嵌入操作。打开所述程序切片对应的节点的csv文件,找到csv文件中“包含代码”,采用分词技术对“包含代码”进行词汇分解,分别从属性、段落、ast结构三个特征维度进行属性特征向量化。
[0033]
采用统计度量的方式对所述包含代码进行属性提取,针对所述节点设计12个属性,作为所述节点的属性特征,具体属性如下表所述:
节点的属性特征中大部分为数值数据,节点类型采用onehot进行统一编码,图深度更加代码的循环嵌套深度判断,将节点类型映射到数值向量空间,数值化后的12个属性采用向量的方式存储,收集12个属性数据获取所述属性向量v
attribute

[0034]
通过段落嵌入方式,对所述包含代码中的代码段落进行向量表示,采用两个主要步骤符号化与doc2vec,符号化将源程序包含的变量名词汇规范化为统一的符号形式,使用doc2vec技术进行向量化,具体地,首先进行符号化,将包含的变量名词汇规范化为统一的符号形式。对于自定义的变量名,使用var_number来表示,对于自定义的函数名使用fun_number来表示,number用变量名和函数名在代码中出现的先后来计数表示。之后使用doc2vec技术进行向量空间映射,本实施例中设置向量大小为100维,即每个所述节点的代码段落通过一个包含100组特征的段落向量表示,即获取段落向量v
paragraph

[0035]
将所述包含代码的代码段落转换为ast数据结构树,ast嵌入过程如图3所示,通过对所述ast数据结构树自底向上传播信息,逐步实现子树节点的聚合,利用itbcnn算法实现整个ast到向量空间的映射。本实施例中设置ast向量大小为100维,即每个所述节点的ast数据结构树通过一个包含100组结构特征的ast向量表示,以获取结构向量v
ast

[0036]
具体地,将其代码段落转换为相应的抽象语法树(abstractsyntaxtree, ast),ast存储结构为一个有向图,ast中节点数据结构为[类型,信息],ast节点的“类型”参数为函数、操作符、关键字、函数等,“信息”参数包含原始文本信息(如if、while、case关键字,函数名、变量名、常量56, 12等单个token)。利用这些信息对节点进行嵌入。“类型”参数使用one-hot编码进行嵌入,“信息”参数使用word2vec进行嵌入,二者拼接之后经过一个线性层嵌入向量。进一步,使用一种改进的基于树的卷积神经网络编码技术(improvetreebasedconvolutionalneuralnetwork,itbcnn)对包含初始嵌入向量的ast结构信息进行二次编码,采用卷积滑动窗口自ast底向上滑动,实现子树节点的信息聚合,卷积滑动窗口内的子树视为二叉树,节点的权重矩阵由表示top、left、right的权重矩阵w
t
,w
l
,wr以及偏差d的加权求和得到。因此对于有k个节点的卷积窗口,其输出out定义为:,
其中是由节点在ast中的深度和位置信息计算得到的权重,vi是节点的初始特征向量,tanh是激活函数。
[0037]
经过卷积层之后,使用注意力聚合ast节点信息进行编码。通过注意权重将ast所有节点特征映射为一个表示整个ast的特征向量。随机初始化一个全局注意力向量,会随着模型学习过程不断更新。对于ast的节点集合,对应的注意权重由节点的特征向量与全局注意力向量计算内积然后归一化得到:,其中,exp是以自然常数e为底的指数函数,表示ast的节点特征向量集合中第j个节点的特征向量。最后聚合得到表示图节点结构特征的结构向量v
ast

[0038]
对csv文件所有的所述节点重复上述实施过程,完成一个程序切片对应csv文件的三类属性特征提取,将三类特征向量进行拼接,组成一个212维的节点向量v
graphnode
,v
graphnode
=v
attribute
v
paragraph
v
ast
。所述212维的节点向量即为所述节点数据。
[0039]
步骤s120:将所述图边以邻接矩阵的形式进行存储,以将所述图边转化为图边数据;步骤s130:组合所述节点数据及所述图边数据,以形成所述图数据。
[0040]
将有向图中图边通过邻接矩阵进行存储。有向图的表包含起始节点和结束节点,邻接矩阵中行表示起始节点位置,列表示结束节点位置,起始节点到结束节点有边存在,则矩阵向量中对应位置为1,否则为0。所述程序依赖图包含所述控制依赖图和所述数据依赖图,根据图边的类型分别创建控制依赖邻接矩阵及控制依赖邻接矩阵,以获取图边数据。所述节点数据及所述图边数据共同组成所述图数据。
[0041]
步骤s140:将所述图数据区隔为训练集及测试集;步骤s150:以门控图神经网络构建门控图循环层,将所述训练集作为所述门控图循环层的输入值,以获取节点状态;请参阅图4,使用dgl深度学习库提供的门控图循环神经网络apigatedgraphconvu作为门控图循环层,设置参数in_feats以及out_feats为所述212维的节点向量,num_steps为8,n_etypes为2,将所述训练集,即将70%~80%的所述图数据作为apigatedgraphconvu的输入,输出为所述节点的初始向量信息更新后的所述212维的节点向量,即为所述节点状态。
[0042]
通过所述门控图循环层对所述节点的信息进行传播,所述节点的信息通过将所述节点的自身的信息与相邻的所述节点的信息进行聚合获得。所述程序切片对应图为g(v,x,a),v为节点集合,数量为n,为顶点的初始特征向量,a为不同类型的边的邻接矩阵集合。在门控图循环层,节点的初始隐状态,假设总共经过t时间步长完成训练,则在第t≤t个时间步内,对节点v根据不同类型的边进行信息聚合,对结果求和得到v的新的状态:
,其中,为第一个节点第t-1个时间步的隐状态,为最后一个节点第t-1个时间步的隐状态,表示节点的总数,为需要学习的权重矩阵,k为边的类型总数,a
p
为边的类型为p的邻接矩阵,t表示对矩阵进行转置,b为偏差bais。然后使用门控循环单元计算v的隐状态:,其中gru为门控循环单元,使用门控机制对,的信息进行筛选。表示第t ≤ t个时间步任意一个节点v的隐状态,由它的前一个时间步的隐状态和新得到的状态信息经门控循环单元进行信息筛选得到,当经过t时间步长完成训练后,隐状态(t表示最后一个时间步)就作为节点v经过门控图循环层得到的特征向量。
[0043]
步骤s160:以图注意力机制构建图注意层,将所述节点状态作为所述图注意层的输入值,以获取节点特征;使用dgl深度学习库提供的图注意力网络apigatconv作为图注意力层,设置参数in_feats以及out_feats为所述212维的节点向量,num_heads为3,feat_drop为0.5,atten_drop为0.2。所述图注意力层采用多头注意力机制,对多个注意力的结果取均值作为所述图注意力层的输出。所述门控图循环层的输出的所述节点状态即为所述图注意层的输入,所述图注意力层的输出为强化表达后的212维的节点向量,即所述节点特征。
[0044]
所述图注意力层采用一种基于空间域的图神经网络架构,通过某一顶点通过注意力机制对相邻的所述节点特征进行加权来更新自己的特征。对于输入的所述节点状态向量集合,首先为节点的相邻节点分配注意力,注意力相关系数:,其中,其中是前馈神经网络参数,leakyrelu是激活函数,是对顶点i和顶点j的状态向量进行拼接,是对顶点i与顶点i相邻节点k的状态向量进行拼接,w是权重矩阵。
[0045]
对于采用多头注意力机制的图注意力层,最终输出结果取均值,因此所述节点特征:,其中,a
ijk
表示第k阶的注意力机制的注意力系数归一化的结果,wk表示第k阶的注
意力机制的权值矩阵,ni表示节点i的相邻节点集合,表示节点i的相邻节点j由门控图循环层计算得到的状态向量, sigmoid为激活函数,avg表示对结果求平均值,表示节点i经过图注意力层计算之后的状态向量。
[0046]
步骤s170:以最大池化与平均池化的组合池化法进行卷积运算,以构建池化层,将所述节点特征作为所述池化层的输入值,以获取全局表征向量;使用pytorch提供的apiconv1d卷积运算、apimaxpool1d池化运输和avgpool1d池化运输构建池化层。卷积层数设置为2,第一层卷积中设置conv1d的参数in_channels和out_channels为424,核数量为3,设置maxpool1d和avgpool1d的参数核大小为3,步长为3。第二层卷积中设置conv1d的参数in_channels为424,out_channels为1,设置maxpool1d和avgpool1d的参数核数量为2,步长为2。
[0047]
结合了maxpool和avgpool两种池化的组合池化方法进行卷积运算,分别定义两种池化运算和,式中conv(
·
)为卷积运算,elu为激活函数,maxpool负责筛选卷积窗口内的重要特征,avgpool对卷积窗口内的特征求均值以保留原始信息。池化层的输入为所述节点的初始特征xi与经过所述门控循环层和所述图注意力层得到的所述节点特征,表示经过图注意力层得到的节点特征集合,表示节点的总数,表示第i个节点的所述节点特征,设l为卷积的层数,对进行卷积运算,分别通过、得到、,然后对始特征xi与经过所述门控循环层和所述图注意力层得到的所述节点特征进行拼接的结果进行卷积运算,分别通过、
得到和,即为所述全局表征向量。
[0048]
步骤s180:以多层感知机构建预测层,将所述全局表征向量作为所述预测层的输入值,以获取所述ggnat图表征学习模型;使用pytorch提供的线性层apilinear构建多层感知机,使用linear分别创建mlp和mlp_h, mlp_h设置参数in_features为所述212维的节点向量,out_features为1,mlp设置参数in_features为424,out_features为1。
[0049]
使用pytorch提供apisigmoid来计算最终的预测结果,对所述池化层的输出分别经过mlp和mlp_h后的结果求均值,得到的均值在经过sigmoid计算预测结果。
[0050]
可以理解地,所述预测层包括多层感知机模型,所述训练集经过所述门控图循环层、所述图注意层及所述池化层后,形成所述全局表征向量,所述全局表征向量经过多层感知机模型后的输出即为所述ggnat图表征学习模型,所述多层感知机模型为:,所述多层感知机模型首先对所述池化层输出的:,分别进行线性变换,然后计算点积,并对结果求均值,最后通过sigmoid函数得到预测结果。
[0051]
步骤s190:将所述测试集代入所述ggnat图表征学习模型,以检测所述ggnat图表征学习模型的漏洞检测功能;在本实施例中,所述ggnat图表征学习模型被视为一个黑盒漏洞检测方式,对采用多特征图数据输入的所述ggnat图表征学习模型命名为mulfggnat。在所述训练集通过所述门控图循环层、所述图注意层、所述池化层及所述预测层,经所述多层感知机模型输出为所述ggnat图表征学习模型后,将所述测试集,即将剩余20%~30%的所述图数据代入所述ggnat图表征学习模型,以检验所述ggnat图表征学习模型的漏洞检测效率。
[0052]
本实施例中,以信息安全领域中开源的软件保证参考数据集提供的程序切片集为对象,选择其中六种最为常见的程序漏洞类型作为本实施例的分析对象,如下表所示:为了衡量本发明的漏洞检测性能表现,选择基于token的cnn方法、bi-lstm方法,基于程序依赖图的gcn方法与ggnn方法作为本实施例的比较对象,比较结果如下表。
[0053]
可以看出,本技术的程序切片漏洞检测方法相比传统的基于深度学习的漏洞检测方法在准确率和f值上有明显提升。从平均值来看,比其他方法中最好的gcn方法其准确率提升约2.2%,f值提升约7.1%。
[0054]
将所述程序切片用程序依赖图表征,并从属性、段落及ast结构三个不同特征维度分别对所述节点进行嵌入,通过拼接共同表征图节点,有效地解决了传统图特征学习方法在图节点向量嵌入中对代码行级的结构特征和统计特征表征能力上不足的问题;采用融合ggnn算法与图注意机制的所述ggnat图表征学习模型进行图表征学习,能够高效地挖掘多维特征与漏洞之间的关联,相比传统的漏洞检测方法,本发明能显著提高检测的性能。
[0055]
请参阅图5,本发明第三实施例提供了一种程序切片漏洞检测系统,该系统应用于所述程序切片漏洞检测方法,并实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0056]
所述系统包括:提取模块10,用于提取程序切片的程序依赖图,以将程序切片的代码文本转化为由节点和图边构成的图结构;转化模块20,用于将所述节点及所述图边进行数据化描述,以将所述图结构转化为图数据;优选地,所述转化模块20包括:嵌入单元,用于对所述节点进行节点嵌入,以将所述节点转化为节点数据;所述嵌入单元具体用于获取所述节点数据的包含代码,提取所述包含代码的节点属性特征,将所述节点属性特征映射到数值向量空间,以获取属性向量v
attribute
;将所述包含代码的代码段落进行向量表示,以获取段落向量v
paragraph
;将所述包含代码的代码段落转换为ast数据结构树,聚合所述ast数据结构树的子树节点,将聚合后的所述子树节点映射至向量空间,以获取结构向量v
ast
;拼接所述属性向量v
attribute
、所述段落向量v
paragraph
及所述结构向量v
ast
,以形成所述节点数据。
[0057]
存储单元,用于将所述图边以邻接矩阵的形式进行存储,以将所述图边转化为图边数据。
[0058]
组合单元,用于组合所述节点数据及所述图边数据,以形成所述图数据分隔模块30,用于将所述图数据区隔为训练集及测试集;构建模块40,用于基于所述训练集构建ggnat图表征学习模型,所述ggnat图表征学习模型用于漏洞检测。
[0059]
所述构建模块40包括:第一构建单元,用于以门控图神经网络构建门控图循环层,将所述训练集作为所述门控图循环层的输入值,以获取节点状态;第二构建单元,用于以图注意力机制构建图注意层,将所述节点状态作为所述图注意层的输入值,以获取节点特征;第三构建单元,用于以最大池化与平均池化的组合池化法进行卷积运算,以构建池化层,将所述节点特征作为所述池化层的输入值,以获取全局表征向量;第四构建单元,用于以多层感知机构建预测层,将所述全局表征向量作为所述预测层的输入值,以形成所述ggnat图表征学习模型;测试模块50,用于将所述测试集代入所述ggnat图表征学习模型,以检测所述ggnat图表征学习模型的漏洞检测功能。
[0060]
本发明还提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述技术方案中所述的程序切片漏洞检测方法。
[0061]
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述技术方案中所述的程序切片漏洞检测方法。
[0062]
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0063]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献