CN114238100A - 基于GGNN和分层注意力网络的Java漏洞检测定位方法 - Google Patents

基于GGNN和分层注意力网络的Java漏洞检测定位方法 Download PDF

Info

Publication number
CN114238100A
CN114238100A CN202111509563.XA CN202111509563A CN114238100A CN 114238100 A CN114238100 A CN 114238100A CN 202111509563 A CN202111509563 A CN 202111509563A CN 114238100 A CN114238100 A CN 114238100A
Authority
CN
China
Prior art keywords
node
cfg
ast
model
graph
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
Application number
CN202111509563.XA
Other languages
English (en)
Inventor
刘旭生
陈森
徐斌
李晓红
闫国庆
王俊杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
State Grid Co ltd Customer Service Center
Tianjin University
Original Assignee
State Grid Co ltd Customer Service Center
Tianjin University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by State Grid Co ltd Customer Service Center, Tianjin University filed Critical State Grid Co ltd Customer Service Center
Priority to CN202111509563.XA priority Critical patent/CN114238100A/zh
Publication of CN114238100A publication Critical patent/CN114238100A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biophysics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于GGNN和分层注意力网络的Java漏洞检测定位方法,主要包括漏洞数据集构造、数据集预处理、模型设计与训练、模型测试与评估。首先总结了当前领域内使用的数据集并设计收集了后续模型训练的自制数据集;然后对数据集进行数据预处理工作,以获得代码的初级表征并可使其作为后续模型的输入;接着使用预处理后的数据训练自定义的漏洞检测模型;最后,训练好的模型可以处理测试的数据集,并给出测试评估。与现有技术相比,本发明本发明实现了利用DL算法(优化算法)的图神经网络模型进行漏洞检测,缓解了该类研究缺乏数据集、可解释性差、生成代码图结构困难的问题。

Description

基于GGNN和分层注意力网络的Java漏洞检测定位方法
技术领域
本发明涉及软件检测技术领域,特别是涉及一种基于深度学习的Java漏洞静态检测方法。
背景技术
随着软件数量的迅猛增加和开源软件OSS的广泛利用,软件的漏洞数量和漏洞的影响也在日益增加和扩大。软件漏洞会对计算机的安全运行产生潜在的威胁,并给人们和社会带来巨大的经济损失和严重的信息泄露等问题,已经出现的“Heartbleed”漏洞就是鲜明的例子。有效缓解软件漏洞问题的方法是利用各种手段尽早在软件发布前将可能存在的漏洞检测出来。
近年来,随着机器学习的研究突破,许多研究尝试利用机器学习技术来自动检测漏洞,以减少人工劳动量。大多数利用机器学习技术进行检测的方法归为静态检测技术,因为它们大多不需要源代码执行,而只需模型对源码或编译后的二进制文件进行静态特征学习。传统的机器学习方法仍需要进行特征工程操作,即人工定义特征,这是十分耗时和复杂的工作,且定义的特征是客观的和特定于任务的。
当前流行的基于机器学习的漏洞检测技术是基于DL算法的漏洞检测方法。相较于传统的机器学习方法,DL算法自动提取数据如源代码的抽象层次特征,能够学习到更复杂和抽象的高级特征,进而发现人类专家特征工程发现不了的漏洞潜在特征,扩充了特征空间并且灵活地运用到多种应用场景。目前基于DL算法的漏洞检测方法虽然取得了以前工作没有的效果,但它也面临很多瓶颈需要突破,如DL模型固有的可解释性差、缺乏高质量的数据集、如何有效提取漏洞的抽象特征等难题;很多研究虽然声称它们的数据集是真实世界收集的,但大多研究并未公开其数据集,具有严格粒度分层的漏洞数据集更是缺少。另外,基于图神经网络的漏洞检测研究由于需要源代码需要编译才能生成图结构,会减少一定的数据量并增加研究的复杂度;还有,因为深度学习的“黑盒”特性,模型的可解释性能力差,不能很快地定位漏洞。
基于DL算法的漏洞检测技术从提取的代码初级特征上分为两类:一类是序列化的代码特征,如从代码中抽取的代码片段序列或遍历后的代码图结构,该类技术一般使用LSTM模型来生成代码的高级特征;另一类是使用图结构如代码属性图CPG作为代码的初级表征,这种方法可以捕捉到序列化方法损失的代码结构化信息,该类技术一般使用图神经网络来生成代码高级表征。
发明内容
本发明旨在提出一种基于GGNN和分层注意力网络的Java漏洞检测定位方法,利用深度学习技术在Java源代码图结构漏洞数据集上训练门控图神经网络GGNN,以获得能识别现有Java漏洞的成熟模型,并进一步利用注意力机制反向定位代码中可能发生漏洞的代码行,从而帮助测试人员更快更准的判别源代码是否有漏洞及漏洞发生。
本发明利用以下技术方案实现:
一种基于GGNN和分层注意力网络的Java漏洞检测定位方法,该方法具体包括以下步骤:
步骤1、构造漏洞数据集;
步骤2、数据集预处理,具体描述如下:
步骤2.1、生成源代码属性图CPG,所述代码属性图CPG由抽象语法树AST、控制流图CFGCFG和数据流图DFG构成;
步骤2.2、嵌入CPG图,即使用Word2Vec嵌入CPG图的源代码token以表示源代码的语义信息;
步骤3、漏洞检测定位模型设计与训练,具体过程描述如下:
将训练样本集定义为((ci,yi)|ci∈ζ,yi∈γ),i∈{1,2,...,num_of_data},ci表示第i个Method代码,yi表示第i个样本的标签,ζ表示Method代码集合,γ={0,1}n表示数据的标签集,0表示非漏洞,1表示存在漏洞;
训练集第i个训练样本的图嵌入表示为gi(V,X,A)∈ψ,ψ表示代码的CPG图嵌入集合,将训练集第i个训练样本的图嵌入表示如下:
gi(V,X,A)=EMB(ci)
其中,EMB()表示CPG图嵌入操作,V表示样本所有的结点,X表示所有结点的初始向量,A表示CPG图嵌入的邻接矩阵;
学习一个从ψ到γ的一个映射f:ψ→γ来预测一个Method是否包含漏洞,由下式的最小化二分类交叉熵函数表示:
Figure BDA0003404740940000031
其中,L(·)表示交叉熵损失函数,λ(ω(f))表示防止过拟合的惩罚项,f表示学习的模型;
在得到一个图嵌入gi(V,X,A)后,得到每个结点在输入GGNN前的初始状态
Figure BDA0003404740940000033
表达式如下:
Figure BDA0003404740940000032
其中,⊥表示转置,xj表示每个结点j的初始向量,z表示结点的初始特征;
在训练时,GGNN迭代T个时间步以使结点聚集邻域内结点的信息、并更新结点自身的状态,在每个时间步t<=T,每一种类的子图p的结点j的状态aj,p通过与结点j在子图p相连接的结点信息计算得到,表达式如下:
Figure BDA0003404740940000041
其中,
Figure BDA0003404740940000042
表示GGNN的权重矩阵,b表示偏差项,Ap表示子图p的邻接矩阵,
Figure BDA0003404740940000043
表示m个结点经过GNN后最后的状态;
CPG的每个结点的信息表达式如下:
Figure BDA0003404740940000044
其中,AGG()表示实际的综合方法;
GGNN之后通过门控循环单元GRU获得下一个时间步的结点状态:
Figure BDA0003404740940000045
步骤3.1、数据划分与模型搭建
确定训练集,其余作为测试集;
使用Pytorch深度学习框架搭建漏洞检测定位模型,使用Deep Graph Library的内置库GatedGraphConv实现GGNN网络;设置单词级和语句级注意力层;所述漏洞检测定位模型包括编码端和解码端;
步骤3.2、编码端生成CPG高级抽象:
在经过编码端GGNN的信息聚集、更新后,CPG图的每个结点都包含着源代码的高级抽象信息,接下来就是进行图级的分类预测,如下式所示:
Figure BDA0003404740940000046
其中,
Figure BDA0003404740940000047
表示结点集V最终的状态矩阵,表达式如下:
Figure BDA0003404740940000048
步骤3.3、解码端为分层注意力网络,由AST序列编码器、AST级注意力层、CFG序列编码器、CFG级注意力层和分类层组成;首先按照一定规则序列化所有结点,然后将序列化的结点送入双向GRU网络进行信息解码并最终做出分类判断,其中:
步骤4、模型测试与评估
在经过GGNN的迭代训练后,对整个CPG进行图级预测,判断是否为漏洞;
分别使用子图和综合图,依据漏洞检测定位模型的测试指标进行测试实验;
模型测试的步骤和模型训练时采用的步骤相同;
漏洞检测定位模型评测指标至少包括误报率和精准度,使用混淆矩阵来表示误报率,漏洞检测模型的整体预测准确率acc、漏洞检测模型的真正正样本预测为正样本的的比例pre、预测为正样本在全部正样本集合的比例recall、pre与recall的加权平均值f1。
与现有技术相比,本发明实现了利用DL算法(优化算法)的图神经网络模型进行漏洞检测,缓解了该类研究缺乏数据集、可解释性差、生成代码图结构困难的问题。
附图说明
图1为本发明的基于GGNN和分层注意力网络的Java漏洞检测定位方法整体流程图;
图2为Juliet数据集漏洞发生行定位示例图;
图3为commit修复diff信息示例图;
图4为本发明实施例的一个源代码示例图,其中:(4a)代码示例,(4b)代码示例对应的AST,(4c)代码示例对应的CFG,(4d)代码示例对应的DFG,(4e)代码示例对应的CPG;
图5为Def、Use信息定义代码示例图,其中:(5a)Def、Use信息定义代码示例,(5b)CFG、DFG综合图;
图6为源代码解析工具JavaParser的语句解析部分代码界面图;
图7为有关代码的基于DL算法的图神经网络模型整体架构示意图,(7a)为编码端GGNN,(7b)为解码端分层注意力网络。
具体实施方式
以下结合附图和具体实施例对本发明的技术方案进行详细说明。
如图1所示,为本发明的基于GGNN和分层注意力网络的Java漏洞检测定位方法整体流程图。该流程具体包括以下步骤:
步骤1、构造漏洞数据集,基于机器学习(ML)进行漏洞检测、分类,获得一个粒度分明、数量可观、质量优秀的漏洞数据集。本发明的漏洞数据集来源包括Java Juliet Test数据、前人收集的公开数据集以及从github开源软件收集的漏洞数据集。其中:
①对SARD的Java Juliet Test数据经过在Method粒度进行的人工筛选,抽取Method粒度的漏洞数据集,以函数名是否含有bad、good关键词抽取漏洞和非漏洞函数,只需关注Java常见的漏洞种类即可,这种做法足以体现模型的检测能力。
②从github上收集漏洞数据。为了保证数据的质量,进行了两次人工手动筛选。首先收集github受欢迎的Top 1000Java项目,然后利用设计的正则表达式筛选这些项目的commit提交历史,筛选后的commits就是可能与漏洞相关的漏洞修复,这是第一次人工筛选。之后,根据commit提交前后的diff信息,爬取所有被修改、删除、添加的函数,然后进行第二次人工筛选,去除肯定不是漏洞发生的函数,剩下的就是高质量的数据了。
步骤2、数据集预处理,具体描述如下:
步骤2.1、生成源代码属性图CPG,即由抽象语法树AST、控制流图CFGCFG和数据流图DFG构成代码属性图CPG。更具体来的,利用解析工具JavaParser生成在Method粒度的源代码的CPG表示。
要生成良好的能突出源代码特征的CPG并使GGNN模型能准确地识别出漏洞代码的特点需要满足:CPG的信息丰富和图的大小适当。
如图4所示,为本发明实施例的一个源代码示例图。其中:(4a)为代码示例,(4b)为代码示例对应的AST子图,(4c)为代码示例对应的CFG子图,(4d)为代码示例对应的DFG子图,(4e)为代码示例对应的CPG综合图。
如图5所示,为Def、Use信息定义代码示例图,其中:(5a)一个代码示例每行的def与use情况Def、Use信息定义代码示例,(5b)为CFG、DFG综合图。
如图6所示,为源代码解析工具JavaParser的语句解析部分代码界面图。
源代码解析工具JavaParser首先生成源代码的CFG文件,并在CFG文件的每个结点记录该结点是否有变量定义信息Def与变量使用信息Use。变量定义信息Def表示对变量的写操作;变量使用信息Use为对变量的读操作。
利用每个结点的Def、Use信息逆向遍历,直到找到一个Use-Def对时,停止遍历当前路径,生成一条由Def结点到Use结点的DFG边。以(5b)中的结点4为例,该节点的Use为(x,y):对于x,存在逆向路径(4,3,2,1,0)与(4,3,7,6)使得在终点结点0与6有x的Def,所以存在0到4和6到4的DFG边;对于y,则存在(4,3,2,1,0)与(4,3,7)的路径,使得终点0与7有y的Def,所以有0到4和7到4的DFG边。对本发明的需求来说,JavaParser产生的AST结点过于复杂、冗余,因此,本发明只保留每个CFG结点的直接AST孩子结点,其余结点将被删除。
CPG的每个结点都由代码和结点类型。其中每个结点构建为长度为101的向量,即d=101。为了使结点的语义信息更加准确,使用全部的样本代码作为语料库,使用Word2Vec训练词向量模型,词向量长度为100,结点的代码语义向量Vse为所有Token的向量和取平均,表达式如下:
Figure BDA0003404740940000071
其中,K表示设结点代码单词数,en(1≤n≤k)表示第n个单词的向量用表示;
Vse占结点向量表示的100位,剩余的1位用于存放结点的类型信息,使用整数L表示第L种类型。
步骤2.2、嵌入CPG图,即使用Word2Vec嵌入CPG图的源代码token以表示源代码的语义信息:
步骤3、模型设计与训练:
漏洞检测定位模型为编码-解码结构,编码端基于GGNN生成嵌入表示数据的高级抽象表征,解码端使用自定义的注意力机制解析代码高级抽象并做出分类判断,同时,注意力机制将会给判断提供依据。训练时,将数据集按照4∶1比例划分训练数据集和测试数据集。
漏洞检测定位模型的数学式表述如下:
训练样本集定义为((ci,yi)|ci∈ζ,yi∈γ),i∈{1,2,...,num_of_data},ci表示第i个Method代码,ζ表示Method代码集合,γ={0,1}n表示数据的标签集,yi表示第i个样本的标签,0表示非漏洞,反之表示存在漏洞。
训练集第i个训练样本的图嵌入表示为gi(V,X,A)∈ψ,ψ表示代码的CPG图嵌入集合,则:
gi(V,X,A)=EMB(ci)
其中,EMB( )表示图嵌入操作,V表示样本所有的结点,设其数量为m;X表示所有结点的初始向量且
Figure BDA0003404740940000081
d表示每个结点的初始维度,第j个结点向量表示为
Figure BDA0003404740940000082
A表示图嵌入的邻接矩阵且A∈{0,1}k×m×m,k表示子图种类编号,也表示CPG有几种类型的边,k=3则表示有AST、CFG、DFG三种子图,每种子图的邻接矩阵都是(m,m)大小。
Figure BDA0003404740940000083
表示在第p类子图中,结点s,t是否相连,为1则存在由结点s指向结点t的一条有向边,反之为0则不存在。
学习一个从ψ到γ的一个映射f:ψ→γ来预测一个Method是否包含漏洞,由下式的最小化二分类交叉熵函数表示:
Figure BDA0003404740940000084
其中,L(·)表示交叉熵损失函数,λ(ω(f))表示防止过拟合的惩罚项,f表示学习的模型。
在得到一个图嵌入gi(V,X,A)后,得到每个结点在输入GGNN前的初始状态
Figure BDA0003404740940000091
表达式如下:
Figure BDA0003404740940000092
其中,⊥表示转置,xj表示每个结点,的初始向量,z表示结点的初始特征。在训练时,GGNN迭代T个时间步以使结点聚集邻域内结点的信息、并更新结点自身的状态,在每个时间步t<=T,每一种类的子图p的结点j的状态aj,p通过与结点j在子图p相连接的结点信息计算得到,表达式如下:
Figure BDA0003404740940000093
其中,
Figure BDA0003404740940000094
表示GGNN的权重矩阵,b表示偏差项,Ap表示子图p的邻接矩阵,
Figure BDA0003404740940000095
表示m个结点经过GNN后最后的状态。
CPG的每个结点的信息表达式如下:
Figure BDA0003404740940000096
其中,AGG( )表示实际的综合方法,存在的可选项为{取平均、取最大、取和、拼接},本发明采用了“取和”的方式。
GGNN之后通过门控循环单元GRU获得下一个时间步的结点状态:
Figure BDA0003404740940000097
在经过GGNN的迭代训练后,对整个CPG进行图级预测,判断是否为漏洞。
本发明参考文本分类的分层注意力设计进行解码端设计,下面以文档分类类比解释解码端构造。
文档由多组语句构成,每个语句又由若干单词组成。使用分层注意力机制的文档分类不仅可以判断每个语句对最终分类结果的影响权重,还可以给出句中每个单词对分类结果的影响权重。类似的,将CFG子图的结点视为一组语句,每个CFG结点的子结点组,即CFG结点下的全部AST结点,可以视为构成句子的单词,如此就可以利用分层注意力机制决定模型做出判断的句子级和单词级依据。
将模型设计为端到端的模型结构,其中编码端用于抽取源代码高级抽象特征,模型使用GGNN网络;解码端使用自定义的分层注意力网络解析代码高级抽象并作出判断。
如图7所示,为有关代码的基于DL算法的图神经网络模型整体架构示意图。
步骤3.1、数据划分与模型搭建
采用常用的数据划分比例将80%的数据作为训练集、其余作为测试集。在数据划分时随机打乱数据,并保证漏洞与非漏洞数据在训练集和测试集的比例相等。为充分使用数据,采用五折交叉验证的方式循环训练模型,划分数据时,为节省空间,可以按照索引号划分,等到一组数据将被训练时才加载数据。
使用Pytorch深度学习框架搭建模型,使用Deep Graph Library的内置库GatedGraphConv实现GGNN网络,设置dropout和L2正则化以避免过拟合。分层注意力网络参照文档分类研究的理论实现,设置单词级和语句级注意力层。
步骤3.2、编码端生成CPG高级抽象
编码端由GGNN网络构成,使用Deep Graph Library进行GGNN的数据整理和训练,设置CPG结点阈值500,超过500的结点将会被删除,删除结点的规则为:按照CFG广度优先遍历后的结点序列,把靠后的CFG结点及其孩子AST结点将会被删除。每个Batch的数据图的结点数为该Batch最大图的结点数,不足的被扩充。GGNN迭代时间步设置为6,隐藏状态大小为100。
在经过编码端GGNN的信息聚集、更新后,CPG图的每个结点都包含着源代码的高级抽象信息,接下来就是进行图级的分类预测。图级预测是将所有结点的嵌入进行全局聚合,如下式所示:
Figure BDA0003404740940000101
其中,[]表示拼接操作,用来将结点的最终状态和初始状态拼接起来,MLP是多层感知机,用来将拼接后的结点集状态映射到一个m维向量,Sigmoid函数用来处理该向量并进行最后的二分类;
Figure BDA0003404740940000111
表示结点集V中结点在GGNN中最终迭代的结果,是结点集V中结点在GGNN中最终迭代的结果,表达式如下:
Figure BDA0003404740940000112
或者,将V中每个结点进行若干步的卷积池化操作,再输入MLP进行分类。
步骤3.3、解码端的设计与实现
本发明的解码端利用分层注意力网络,由这几个部分组成:AST序列编码器、AST级注意力层、CFG序列编码器、CFG级注意力层和分类层。操作步骤是首先按照一定规则序列化所有结点,然后将序列化的结点送入双向GRU网络进行信息解码并最终做出分类判断。图7右侧展示了解码端的细节结构。
AST序列编码器:按照广度优先遍历的方式排列CFG结点,假设每个CPG的CFG结点为Tcfg个,用
Figure BDA0003404740940000113
表示,每个CFG结点的孩子AST结点有Tast个,第i个CFG结点的AST子结点用
Figure BDA0003404740940000114
表示,这些AST结点也被序列排序在对应的CFG结点下。CFG结点类似于文档中的句子,对应的AST结点类似于句子里的单词。每个AST结点都会在一个正向GRU上获得一个隐藏状态
Figure BDA0003404740940000115
和一个逆向隐藏状态
Figure BDA0003404740940000117
然后就会得到AST结点经过AST序列编码器的状态
Figure BDA0003404740940000116
[·]表示拼接操作。
AST级注意力层:得到AST序列编码器的输出hit后,由下面三式得到第i个CFG结点的新的表示s′i
uit=tanh(Wwhit+bw)
Figure BDA0003404740940000121
Figure BDA0003404740940000122
即,首先由一层MLP得到hit的隐藏表示uit,然后使用一个AST结点级别(单词级别)上下文向量uw来衡量uit的重要程度,并使用softmax函数归一化权重,最后,CFG结点级别(句子级别)表示s′i通过加权求和各AST子结点状态得出。
CFG序列编码器:将第i个CFG结点的高级表示si与新的由AST结点得出的CFG结点表示s′i拼接,得到[si,s′i]作为CFG序列编码器的输入,其余操作与AST序列编码器类似:
每个CFG结点都在一个正向GRU上获得一个隐藏状态
Figure BDA0003404740940000123
和一个逆向隐藏状态
Figure BDA0003404740940000124
然后就会得到CFG结点经过CFG序列编码器的状态
Figure BDA0003404740940000125
CFG级注意力层:该层操作与AST级操作类似:
ui=tanh(Wshi+bs)
Figure BDA0003404740940000126
Figure BDA0003404740940000127
us作用与uw类似,但它是CFG级别的上下文向量,v是聚集了所有CFG结点信息的CPG向量,它是CPG的终极表示。
分类层:使用MLP实现最终的分类预测:
y=sigmoid(WCv+bc)。
步骤4、模型测试与评估
利用模型的测试指标分别使用子图和综合图进行实验,使用解码端以及无解码端直接进行整个图的信息聚合分类等。
模型测试的步骤和训练模型时基本一样,只是不再更新模型参数。另外,测试时并不能发现训练里没有的漏洞。
漏洞检测模型很重要的一个评测指标就是误报率和精准度,使用混淆矩阵来表示误报率,同时,它也是计算精准度pre、精确度acc,f1得分和召回率recall的基础。如表1所示,为混淆矩阵结构。它是预测值和实际值的计数的表格表示。
Figure BDA0003404740940000131
漏洞检测模型的整体预测准确率acc、漏洞检测模型的真正正样本预测为正样本的的比例pre、预测为正样本在全部正样本集合的比例recall、pre与recall的加权平均值f1,计算公式分别如下所示:
Figure BDA0003404740940000132
Figure BDA0003404740940000133
Figure BDA0003404740940000134
Figure BDA0003404740940000135
其中,TP(True Positive)表示分类器将正类预测为正的预测输出数量,TN(TrueNegative)表示分类器将负类预测为负的预测输出次数,FP(False Positive)表示分类器将负类预测为正的预测输出数量,FN(False Negative)表示分类器将正类预测为负的预测输出次数。
为了评估注意力机制的作用,本发明利用Java Juliet Test数据的特点和收集的开源项目漏洞数据集修改信息,设计了一种评估注意力机制效果的机制。如图2所示,为Juliet数据集漏洞发生行定位示例图。Java Juliet Test数据集在可能发生漏洞的代码行前都会有注释解释漏洞发生在该代码行及发生的原因。如图3所示,为commit修复diff信息示例图。展示了github开源项目commit修复漏洞时的diff信息,该信息其实指明了漏洞可能存在的代码行。有了这些漏洞发生的代码行信息后,Hit10就可以表示在按影响源代码分类结果的权重降序排列的前10%的代码行里有漏洞代码行被击中,类似的可以设置1%,5%,10%来显示注意力机制的效果。

Claims (3)

1.一种基于GGNN和分层注意力网络的Java漏洞检测定位方法,其特征在于,该方法具体包括以下步骤:
步骤1、构造漏洞数据集;
步骤2、数据集预处理,具体描述如下:
步骤2.1、生成源代码属性图CPG,所述代码属性图CPG由抽象语法树AST、控制流图CFGCFG和数据流图DFG构成;
步骤2.2、嵌入CPG图,即使用Word2Vec嵌入CPG图的源代码token以表示源代码的语义信息;
步骤3、漏洞检测定位模型设计与训练,具体过程描述如下:
将训练样本集定义为((ci,yi)|ci∈ζ,yi∈γ),i∈{1,2,...,num_of_data},ci表示第i个Method代码,yi表示第i个样本的标签,ζ表示Method代码集合,γ={0,1}n表示数据的标签集,0表示非漏洞,1表示存在漏洞;
训练集第i个训练样本的图嵌入表示为gi(V,X,A)∈ψ,ψ表示代码的CPG图嵌入集合,将训练集第i个训练样本的图嵌入表示如下:
gi(V,X,A)=EMB(ci)
其中,EMB()表示CPG图嵌入操作,V表示样本所有的结点,X表示所有结点的初始向量,A表示CPG图嵌入的邻接矩阵;
学习一个从ψ到γ的一个映射f:ψ→γ来预测一个Method是否包含漏洞,由下式的最小化二分类交叉熵函数表示:
Figure FDA0003404740930000011
其中,L(·)表示交叉熵损失函数,λ(ω(f))表示防止过拟合的惩罚项,f表示学习的模型;
在得到一个图嵌入gi(V,X,A)后,得到每个结点在输入GGNN前的初始状态
Figure FDA0003404740930000027
表达式如下:
Figure FDA0003404740930000021
其中,⊥表示转置,xj表示每个结点j的初始向量,z表示结点的初始特征;
在训练时,GGNN迭代T个时间步以使结点聚集邻域内结点的信息、并更新结点自身的状态,在每个时间步t<=T,每一种类的子图p的结点j的状态aj,p通过与结点j在子图p相连接的结点信息计算得到,表达式如下:
Figure FDA0003404740930000022
其中,
Figure FDA0003404740930000023
表示GGNN的权重矩阵,b表示偏差项,Ap表示子图p的邻接矩阵,
Figure FDA0003404740930000024
表示m个结点经过GNN后最后的状态;
CPG的每个结点的信息表达式如下:
Figure FDA0003404740930000025
其中,AGG()表示实际的综合方法;
GGNN之后通过门控循环单元GRU获得下一个时间步的结点状态:
Figure FDA0003404740930000026
步骤3.1、数据划分与模型搭建
确定训练集,其余作为测试集;
使用Pytorch深度学习框架搭建漏洞检测定位模型,使用Deep Graph Library的内置库GatedGraphConv实现GGNN网络;设置单词级和语句级注意力层;所述漏洞检测定位模型包括编码端和解码端;
步骤3.2、编码端生成CPG高级抽象:
在经过编码端GGNN的信息聚集、更新后,CPG图的每个结点都包含着源代码的高级抽象信息,接下来就是进行图级的分类预测,如下式所示:
Figure FDA0003404740930000031
其中,
Figure FDA0003404740930000032
表示结点集V最终的状态矩阵,表达式如下:
Figure FDA0003404740930000033
步骤3.3、解码端为分层注意力网络,由AST序列编码器、AST级注意力层、CFG序列编码器、CFG级注意力层和分类层组成;首先按照一定规则序列化所有结点,然后将序列化的结点送入双向GRU网络进行信息解码并最终做出分类判断,其中:
步骤4、模型测试与评估
在经过GGNN的迭代训练后,对整个CPG进行图级预测,判断是否为漏洞;
分别使用子图和综合图,依据漏洞检测定位模型的测试指标进行测试实验;
模型测试的步骤和模型训练时采用的步骤相同;
漏洞检测定位模型评测指标至少包括误报率和精准度,使用混淆矩阵来表示误报率,漏洞检测模型的整体预测准确率acc、漏洞检测模型的真正正样本预测为正样本的的比例pre、预测为正样本在全部正样本集合的比例recall、pre与recall的加权平均值f1。
2.如权利要求1所述的基于深度学习的预测多器官药物性病理分析方法,其特征在于,将漏洞检测定位模型设计为端到端的模型结构,其中编码端使用GGNN网络;解码端使用自定义的分层注意力网络解析代码高级抽象并作出判断。
3.如权利要求1所述的基于GGNN和分层注意力网络的Java漏洞检测定位方法,其特征在于,在所述步骤3.3中:
所述AST序列编码器:按照广度优先遍历的方式排列CFG结点,每个CPG的CFG结点为Tcfg个,用
Figure FDA0003404740930000034
表示,每个CFG结点的孩子AST结点有Tast个,第i个CFG结点的AST子结点用
Figure FDA0003404740930000035
表示,这些AST结点也被序列排序在对应的CFG结点下;CFG结点类似于文档中的句子,对应的AST结点类似于句子里的单词;每个AST结点都会在一个正向GRU上获得一个隐藏状态
Figure FDA0003404740930000041
和一个逆向隐藏状态
Figure FDA0003404740930000042
然后就会得到AST结点经过AST序列编码器的状态
Figure FDA0003404740930000043
[·]表示拼接操作;
所述AST级注意力层:得到AST序列编码器的输出hit后,由下面三式得到第i个CFG结点的新的表示si',
uit=tanh(Wwhit+bw)
Figure FDA0003404740930000044
Figure FDA0003404740930000045
即,首先由一层MLP得到hit的隐藏表示uit,然后使用一个AST结点级别(单词级别)上下文向量uw来衡量uit的重要程度,并使用softmax函数归一化权重,最后,CFG结点级别(句子级别)表示si'通过加权求和各AST子结点状态得出;
所述CFG序列编码器:将第i个CFG结点的高级表示si与新的由AST结点得出的CFG结点表示si'拼接,得到[si,si']作为CFG序列编码器的输入,其余操作与AST序列编码器类似:
每个CFG结点都在一个正向GRU上获得一个隐藏状态
Figure FDA0003404740930000046
和一个逆向隐藏状态
Figure FDA0003404740930000047
然后就会得到CFG结点经过CFG序列编码器的状态
Figure FDA0003404740930000048
所述CFG级注意力层,表达式如下:
ui=tanh(Wshi+bs)
Figure FDA0003404740930000051
Figure FDA0003404740930000052
其中,us表示CFG级别的上下文向量,v表示聚集了所有CFG结点信息的CPG向量;
所述分类层:使用MLP实现最终的分类预测:
y=sigmoid(WCv+bc)。
CN202111509563.XA 2021-12-10 2021-12-10 基于GGNN和分层注意力网络的Java漏洞检测定位方法 Pending CN114238100A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111509563.XA CN114238100A (zh) 2021-12-10 2021-12-10 基于GGNN和分层注意力网络的Java漏洞检测定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111509563.XA CN114238100A (zh) 2021-12-10 2021-12-10 基于GGNN和分层注意力网络的Java漏洞检测定位方法

Publications (1)

Publication Number Publication Date
CN114238100A true CN114238100A (zh) 2022-03-25

Family

ID=80754787

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111509563.XA Pending CN114238100A (zh) 2021-12-10 2021-12-10 基于GGNN和分层注意力网络的Java漏洞检测定位方法

Country Status (1)

Country Link
CN (1) CN114238100A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114791886A (zh) * 2022-06-21 2022-07-26 纬创软件(武汉)有限公司 一种软件问题跟踪方法和系统
CN114936158A (zh) * 2022-05-28 2022-08-23 南通大学 一种基于图卷积神经网络的软件缺陷定位方法
CN115396242A (zh) * 2022-10-31 2022-11-25 江西神舟信息安全评估中心有限公司 一种数据识别的方法及网络安全漏洞的检测方法
CN115455438A (zh) * 2022-11-09 2022-12-09 南昌航空大学 一种程序切片漏洞检测方法、系统、计算机及存储介质
CN115686923A (zh) * 2023-01-05 2023-02-03 中国人民解放军军事科学院系统工程研究院 一种软件源代码缺陷自动修复方法及系统
CN115758370A (zh) * 2022-09-09 2023-03-07 中国人民解放军军事科学院系统工程研究院 一种软件源代码缺陷检测方法、装置及存储介质

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114936158A (zh) * 2022-05-28 2022-08-23 南通大学 一种基于图卷积神经网络的软件缺陷定位方法
CN114936158B (zh) * 2022-05-28 2024-06-04 南通大学 一种基于图卷积神经网络的软件缺陷定位方法
CN114791886A (zh) * 2022-06-21 2022-07-26 纬创软件(武汉)有限公司 一种软件问题跟踪方法和系统
CN115758370A (zh) * 2022-09-09 2023-03-07 中国人民解放军军事科学院系统工程研究院 一种软件源代码缺陷检测方法、装置及存储介质
CN115758370B (zh) * 2022-09-09 2024-06-25 中国人民解放军军事科学院系统工程研究院 一种软件源代码缺陷检测方法、装置及存储介质
CN115396242A (zh) * 2022-10-31 2022-11-25 江西神舟信息安全评估中心有限公司 一种数据识别的方法及网络安全漏洞的检测方法
CN115396242B (zh) * 2022-10-31 2023-04-07 江西神舟信息安全评估中心有限公司 一种数据识别的方法及网络安全漏洞的检测方法
CN115455438A (zh) * 2022-11-09 2022-12-09 南昌航空大学 一种程序切片漏洞检测方法、系统、计算机及存储介质
CN115455438B (zh) * 2022-11-09 2023-02-07 南昌航空大学 一种程序切片漏洞检测方法、系统、计算机及存储介质
CN115686923A (zh) * 2023-01-05 2023-02-03 中国人民解放军军事科学院系统工程研究院 一种软件源代码缺陷自动修复方法及系统

Similar Documents

Publication Publication Date Title
CN114238100A (zh) 基于GGNN和分层注意力网络的Java漏洞检测定位方法
Bandyopadhyay et al. Outlier resistant unsupervised deep architectures for attributed network embedding
CN113641586B (zh) 软件源代码缺陷检测方法、系统、电子设备及储存介质
CN108446540B (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN112507699B (zh) 一种基于图卷积网络的远程监督关系抽取方法
Zhang et al. Tree communication models for sentiment analysis
Ma et al. Hybrid embedding-based text representation for hierarchical multi-label text classification
Bui et al. Bilateral dependency neural networks for cross-language algorithm classification
Zhang et al. Blockchain phishing scam detection via multi-channel graph classification
CN112364352B (zh) 可解释性的软件漏洞检测与推荐方法及系统
CN109670306A (zh) 基于人工智能的电力恶意代码检测方法、服务器及系统
Gusmão et al. Interpreting embedding models of knowledge bases: a pedagogical approach
Xu et al. Vulnerability detection for source code using contextual LSTM
Dong et al. Towards interpreting recurrent neural networks through probabilistic abstraction
Zhao et al. DouBiGRU-A: software defect detection algorithm based on attention mechanism and double BiGRU
Ranu et al. Mining discriminative subgraphs from global-state networks
Wang et al. An efficient network intrusion detection approach based on deep learning
CN116361788A (zh) 一种基于机器学习的二进制软件漏洞预测方法
CN112035345A (zh) 一种基于代码片段分析的混合深度缺陷预测方法
Gao et al. Malware detection using attributed CFG generated by pre-trained language model with graph isomorphism network
Mao et al. Explainable software vulnerability detection based on attention-based bidirectional recurrent neural networks
Kim Enhancing code clone detection using control flow graphs.
Lu et al. Student program classification using gated graph attention neural network
Lin et al. Towards interpreting ML-based automated malware detection models: A survey
CN115270130A (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