CN113158194A - 一种基于多关系图网络的漏洞模型的构建方法及检测方法 - Google Patents
一种基于多关系图网络的漏洞模型的构建方法及检测方法 Download PDFInfo
- Publication number
- CN113158194A CN113158194A CN202110339007.6A CN202110339007A CN113158194A CN 113158194 A CN113158194 A CN 113158194A CN 202110339007 A CN202110339007 A CN 202110339007A CN 113158194 A CN113158194 A CN 113158194A
- Authority
- CN
- China
- Prior art keywords
- function blocks
- vulnerability
- function
- holes
- node
- 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
Images
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
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
- G06F40/154—Tree transformation for tree-structured or markup documents, e.g. XSLT, XSL-FO or stylesheets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/284—Lexical analysis, e.g. tokenisation or collocates
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于多关系图网络的漏洞模型的构建方法及检测方法,收集源码程序文件,并对源码程序文件进行预处理得到函数块,根据函数块对应的函数名中是否包含good和bad,对应标签为无漏洞的函数块和有漏洞的函数块;对所述的无漏洞的函数块和有漏洞的函数块处理得到各自对应的第二抽象语法树;对第二抽象语法树进行第一遍历得到7种边关系;本发明在现有技术中提取抽象语法树节点信息的基础上,增加了7种边关系,7种边关系能在漏洞检测方面显著的提升准确率,并且降低漏报率;在搭建GGNN漏洞模型时,融入GRU和highway gate来提高向量在不同关系图之间的传播速度,进而缩短模型训练的周期,解决了现有技术中漏洞检测模型检测效果不佳的技术问题。
Description
技术领域
本发明属于代码审计领域,涉及结构化的源码表示以及深度学习中的图神经网络,具体涉及一种基于多关系图网络的漏洞模型的构建方法及检测方法。
背景技术
软件漏洞是导致系统攻击和用户隐私数据泄露的主要原因。机器学习技术常用于构建漏洞检测工具和模型以识别常见的软件漏洞,其通过学习已有漏洞程序中的潜在模式以生成漏洞检测模型,然后将检测模型应用到实际的软件项目中,从而识别出潜在的漏洞代码。机器学习有效的原因在于-漏洞程序具有相同或相似的代码特征和模式。并且有充分的证据表明,机器学习技术在检测常见代码漏洞或缺陷方面的效果可以超越人工专家规则的检测效果。
最近的研究已经利用深度学习来推理程序结构,从而识别源代码中潜在的软件漏洞。与传统的机器学习技术相比,深度学习的优势在于不需要专家参与漏洞模式的构建,它会自动从训练样本中捕获更为深层的漏洞模式。目前基于深度学习且用于程序建模的典型方法是递归神经网络,常见的比如长短时记忆网络及其变体。但是,长短时记忆网络是为顺序序列所设计的,并不适合对具有良好控制流和数据流的代码程序进行建模。因此,传统的基于LSTM的漏洞检测方法只能捕获源代码文本的浅层语法信息,而不能利用丰富的程序结构以及深层的结构信息和语义信息构建模型,也就导致了现有类似LSTM的方法往往准确率不高,容易发生漏报和误报。
发明内容
针对现有技术存在的不足,本发明的目的在于,提供一种基于多关系图网络的漏洞模型的构建方法及检测方法,解决现有技术中漏洞检测模型检测准确率不高的技术问题。
为了解决上述技术问题,本发明采用如下技术方案予以实现:
一种基于多关系图网络的漏洞模型的构建方法,该方法按照以下步骤进行:
步骤1,收集源码程序文件,并对源码程序文件进行预处理得到函数块,根据函数块对应的函数名中是否包含good和bad,对应标签为无漏洞的函数块和有漏洞的函数块;
步骤2,对所述的无漏洞的函数块和有漏洞的函数块处理得到各自对应的第二抽象语法树;对第二抽象语法树进行第一遍历得到7种边关系,并生成关系图;同时对第二抽象语法树进行遍历得到的PCDG;将关系图和PCDG连接得到最终关系图;
所述的7种边包括Child、GuardedBy、GuardedByNegation、Jump、ComputeFrom、NextToken和LastUse;
步骤3,构建向量字典,利用向量字典把最终关系图中的token转化为词向量,将词向量拼接得到邻接矩阵;
步骤4,搭建并训练GGNN漏洞模型;
基于GNN模型搭建GGNN漏洞模型,将邻接矩阵输入到GGNN漏洞模型进行训练,得到最优的GGNN漏洞模型。
本发明还具有以下技术特征:
具体的,所述的GGNN漏洞模型包括四个GRU和highway gate;所述的GRU用于丰富邻接矩阵中的token对应的的词向量的语义信息;所述的highway gate用于对不同邻接矩阵中的token对应的词向量进行融合;
具体的,所述的highway gate用于对不同邻接矩阵中的token对应的词向量进行融合通过公式(2)和公式(3)实现:
其中:
t表示迭代轮次,的取值范围是1~n;
T表示变换函数;
σ表示sigmoid函数;
υ表示顶点;
·表示矩阵按元素相乘。
所述的GRU用于丰富邻接矩阵中的token对应的的词向量的语义信息的具体过程包括:
S1,使用GRU将输入到GGNN漏洞模型中的邻接矩阵中token的对应的词向量作为消息发送给当前所在邻接矩阵中的所有相邻token,并在隐藏层的每一轮迭代过程中更新token的词向量,得到被更新过的邻接矩阵;
S2,用GRU更新不同的被更新过的邻接矩阵中相同token的词向量,得到含全局信息的邻接矩阵;
S3,使用Readout函数读取包含全局信息的邻接矩阵中的所有词向量,根据公式(4)连接所有词向量,得到输出向量hG;
其中:
hG表示为某个关系图的全局词向量;
i表示关系图的序号,i的取值范围是1~m;
m表示关系图的总数,m的取正整数;
υ表示顶点;
t表示迭代轮次,的取值范围是1~n;
n表示最大迭代次数的,n的取值范围是正整数;
Gi表示第i张关系图。
具体的,所述的第一遍历的具体步骤为:
步骤2.1,遍历第二抽象语法树中所有节点,按照遍历的先后顺序为每个节点编号;
步骤2.2,定位包含Jump类型的节点m,从节点m出发,从第二抽象语法树中提取出所有和节点m有直接或者间接关系的节点集合,用所述的节点编号记录下节点m和所述的节点集合中每一个节点之间的关系和内容,将所述的关系和内容作为函数块的Jump边关系;
步骤2.3,以步骤2.2中所述的方法得到该函数块的剩余的6种边关系,并连接7种边关系得到关系图。
具体的,所述的预处理具体包括以下步骤:
步骤1.1,对收集到的源码程序文件的变量名、函数名重写,得到重写后的源码程序文件;
步骤1.2,解析所述的重写后的源码程序文件,得到重写后的源码程序文件的第一抽象语法树,对所述的第一抽象语法树进行切片得到函数块。
具体的,所述的构建向量词典的具体步骤为:
步骤3.1,收集不同函数块对应的最终关系图中所有的token,将token中的变量名和自定义函数名用统一的变量名和函数名进行替换,构建一个漏洞代码语料库;
步骤3.2,利用工具将漏洞代码语料库训练成向量字典。
一种基于多关系图网络的漏洞模型的检测方法,该方法包括以下步骤:
步骤一,收集新的源码程序文件,并对源码程序文件进行预处理得到函数块,根据函数块对应的函数名中是否包含good和bad,对应标签为无漏洞的函数块和有漏洞的函数块;
步骤二,:将步骤一中得到的无漏洞的函数块和有漏洞的函数块进行如权利要求1所述的步骤2至步骤3的处理得到用于检测的邻接矩阵;
步骤三,将步骤二中得到的用于检测的邻接矩阵输入到如权利要求1中步骤4得到的最优的GGNN漏洞模型中,若测试结果中存在含有double-free漏洞的函数块,则报告该函数块,若测试结果中不存在含有double-free漏洞的函数块,则检测结束。
本发明与现有技术相比,有益的技术效果是:
本发明在现有技术中提取抽象语法树节点信息的基础上,增加了7种边关系,7种边关系能在漏洞检测方面显著的提升准确率,并且降低漏报率;在搭建GGNN漏洞模型时,融入GRU和highway gate来分别增加不同关系图的语义信息以及提高向量在不同关系图之间的传播速度,进而缩短模型训练的周期,解决了现有技术中漏洞检测模型检测效果不佳的技术问题。
附图说明
图1为本发明的流程图。
图2为源码程序文件的代码片段图。
图3为重写后的源码程序文件的代码片段图。
图4为实例代码的PCDG图。
图5为实例代码的关系图。
图6为实例代码的最终关系图。
图7为GGNN邻域节点聚合图。
图8为GGNN多关系聚合图。
图9为GGNN的模型结构图。
图10为不同组合边的效果图。
图11为C语言中Top30的漏洞类型的漏洞检测效果图。
图12为本发明与已有漏洞检测方法在开源项目中识别的漏洞数量对比图。
图13为已有漏洞检测方法和本发明在C语言中Top30的漏洞类型上的指标评估图。
图14为已有漏洞检测方法和本发明在GitHub数据集上的指标评估图。
以下结合实施例对本发明的具体内容作进一步详细解释说明。
具体实施方式
需要说明的是,本申请中SARD的全称是Software Assurance ReferenceDataset,即软件保障参考数据集。
需要说明的是,本申请中NVD的全称是National Vulnerability Database,即国家漏洞数据库。
需要说明的是,本申请中CVE的全称是Common Vulnerabilities and Exposures,即公共漏洞和暴露。
需要说明的是,本申请中cdt的全称是C/C++Development Tooling,即c/c++开发工具。
需要说明的是,本申请中的AST的全称是Abstract Syntax Tree,即抽象语法树。
需要说明的是,本申请中的PCDG的全称是Program Control And DependencyGraph,即程序控制依赖图。
需要说明的是,本申请中的GRU的全称是Gated Recurrent Unit,即门控循环单元。
需要说明的是,本申请中的GGNN的全称是Gated Graph Neural Network,即门控图神经网络。
需要说明的是,本申请中的Child表示标准的父子节点关系。
需要说明的是,本申请中的每一个token表示每一个节点信息。
需要说明的是,本申请中的highway gate表示高速门。
需要说明的是,本申请中GuardedBy边和GuardedByNegation边分别表示某个变量被使用的正向和反向顺序关系,用于捕获操作数的错误顺序。
需要说明的是,本申请中Jump边表示某个变量和控制条件之间的关系,用于将变量与控制依赖项相连。
需要说明的是,本申请中ComputeFrom边表示某个变量被定义和被使用位置的关系,用于确定某个变量被使用过的具体位置。
需要说明的是,本申请中NextToken边表示每个叶子节点及其后继叶子节点之间的关系,用于捕获语句操作码和操作数的顺序。
需要说明的是,本申请中LastUse边表示相同变量的使用位置关系,用于记录变量最后的使用位置。
需要说明的是,本申请中语义信息表示就是token和token之间的关联性。
需要说明的是,word2vec是一种用来产生词向量的常规模型。这些模型为浅而双层的神经网络,用来训练以重新建构词文本。
需要说明的是,Joern是一种用于获取控制流、数据流边关系的常规技术方法。
需要说明的是,batchzise表示每一次训练模型时,数据的输入批次。
需要说明的是,epoch表示训练模型的轮次。
需要说明的是,本申请中的ReLu和Adam算法是现有的常规算法。
1、程序控制依赖图(PCDG)包括程序语法树边、程序控制流边、程序数据流边,用于描述程序中基本的结构信息、执行路径以及数据流。控制流和数据流对我们的模型构建是必要的,如图2中给出的良性代码示例。传统基于LSTM的顺序序列深度模型,都将图2所示代码分类为存在“double-free”漏洞。这种假阳性的根本原因是,序列模型必须将代码结构线性化,并将其视为一个个token(AST中单一叶子节点)的顺序序列,从而忽略了不同控制流路径。因此,这些模型会认为attr_value在第6行和第9行被释放了两次。如果加入了控制流和数据流,模型就可以推断出第9行的attr_value在不同的执行路径中已经被释放,因此不存在“double-free”漏洞。
2、为评估Child、GuardedBy、GuardedByNegation、JUMP、ComputeFrom、NextToken和LastUse中不同组合边是否对漏洞检测模型的效果有实质的提升,将不同边之间的组合进行实验效果的比较。这些组合分别是:
F-vanilla-AST:只用到了标准的AST边,即只有child边(基本的父子边关系);
F-AST:包括了除控制流和数据流以外的所有边;
F-CDFG:只包括标准AST边和控制流、数据流边;
F-CONCAT:它是通过对每个最终关系图的单个词向量进行学习,然后将其连接起来进行预测;
F-MLP:它用了一个多层感知机(MLP)层来聚合单个关系图中的向量,但没用到注意力机制(attention)和高速门(highway gate)。
图10结果表明,只使用标准的AST边对程序进行建模的准确率较低,而本发明因为使用了所有的边关系图,各个评估指标在对比实验中都是最好的。
3、跨多关系图学习
(1)相邻边聚合
与所有GNN一样,我们也使用了邻域聚合方案来更新节点的嵌入向量,如图7所示。我们用一个100维向量表示某个图节点,其值是由嵌入层通过对相邻节点的向量进行特定规则的递归聚合和变换计算得到的。节点交换信息的方式是将它们的当前状态(即嵌入向量)作为消息发送给它们的所有相邻节点。在每个节点上,消息被聚合,然后在下一个嵌入层(即下一次迭代)更新。重复固定的迭代次数,更新完成节点状态之后,使用一个Readout函数将节点状态聚合为一个新的节点向量,这时该节点就包括了周围节点的所有信息。
(2)不同关系图聚合
另外,我们的模型能跨多个关系图进行信息的传播和聚合。如图8所示,我们首先使用特定关系的函数通过邻域聚合来计算单个关系图对应的新图状态。然后,应用GRU单元跨关系图来聚合和更新相同节点的状态。如公式(1)所示,使用正向传播更新关系图状态,其中
其中:
t表示迭代轮次,的取值范围是1~n;
υ表示顶点;
ν表示另一顶点
l表示顶点υ和ν之间不同类型边的总数;
Al表示顶点υ和ν之间边;
Wl表示用于模型学习的参数;
GRU表示用于学习的另一个参数;
以下给出本发明的具体实施例,需要说明的是本发明并不局限于以下具体实施例,凡在本申请技术方案基础上做的等同变换均落入本发明的保护范围。
实施例1:
本实施例给出了一种基于多关系图网络的漏洞模型的构建方法,该方法按照以下步骤进行:
步骤1,收集源码程序文件,并对源码程序文件进行预处理得到函数块,根据函数块对应的函数名中是否包含good和bad,对应标签为无漏洞的函数块和有漏洞的函数块;
在本实施例中,从SARD收集源码程序文件。
步骤2,对所述的无漏洞的函数块和有漏洞的函数块处理得到各自对应的第二抽象语法树;对第二抽象语法树进行第一遍历得到7种边关系,并生成关系图;同时对第二抽象语法树进行遍历得到的PCDG;将关系图和PCDG连接得到最终关系图;
所述的7种边包括Child、GuardedBy、GuardedByNegation、Jump、ComputeFrom、NextToken和LastUse;
在本实施例中,使用cdt生成图3所示的源码程序文件片段的第二抽象语法树,遍历第二抽象语法树中所有的节点,得到图4所示的7种边的关系图;然后把第二抽象语法树输入到joern,得到如图5所示的PCDG;再把图4和图5连接成图6所示的最终关系图。
步骤3,构建向量字典,利用向量字典把最终关系图中的token转化为词向量,将词向量拼接得到邻接矩阵;
所述的邻接矩阵按比例分为训练集和验证集;
本实施例中,训练集和验证集的比例为9:1。
步骤4,搭建并训练GGNN漏洞模型;
基于GNN模型搭建GGNN漏洞模型,并设置初始模型参数,将训练集输入到GGNN漏洞模型进行训练,得到训练好的GGNN漏洞模型;
在本实施例中,搭建好GGNN漏洞模型后,设置初始模型参数,将训练集输入到GGNN漏洞模型进行训练,得到训练好的GGNN漏洞模型;训练好的GGNN漏洞模型验证,得到最优的GGNN漏洞模型。
模型参数包括学习率、batchsize、epoch、优化器、激活函数、隐藏层维度以及隐藏层层数。
设置学习率为0.01,batchsize为32,epoch为100,优化器为Adam,激活函数为ReLu,隐藏层的层数为5,隐藏层维度256。
将用于验证的邻接矩阵输入到训练好的GGNN漏洞模型进行验证,当验证结果中的准确率高于95%时,即得到最优的GGNN漏洞模型,当验证结果中的准确率低于95%时,调整模型参数后重新训练,直到得到最优的GGNN漏洞模型。
作为本实施例的一种优选方案,所述的GGNN漏洞模型包括四个GRU和highwaygate;所述的GRU用于丰富邻接矩阵中的token对应的的词向量的语义信息;所述的highwaygate用于对不同邻接矩阵中的token对应的词向量进行融合。
作为本实施例的一种优选方案,所述的highway gate用于对不同邻接矩阵中的token对应的词向量进行融合通过公式(2)和公式(3)实现:
其中:
t表示迭代轮次,的取值范围是1~n;
T表示变换函数;
σ表示sigmoid函数;
υ表示顶点;
·表示矩阵按元素相乘。
作为本实施例的一种优选方案,所述的GRU用于丰富邻接矩阵中的token对应的的词向量的语义信息的具体过程包括:
S1,使用GRU将输入到GGNN漏洞模型中的邻接矩阵中token的对应的词向量作为消息发送给当前所在邻接矩阵中的所有相邻token,并在隐藏层的每一轮迭代过程中更新token的词向量,得到被更新过的邻接矩阵;
S2,用GRU更新不同的被更新过的邻接矩阵中相同token的词向量,得到含全局信息的邻接矩阵;
S3,使用Readout函数读取包含全局信息的邻接矩阵中的所有词向量,根据公式(4)连接所有词向量,得到输出向量hG;
其中:
hG表示为某个关系图的全局词向量;
i表示关系图的序号,i的取值范围是1~m;
m表示关系图的总数,m的取正整数;
υ表示顶点;
t表示迭代轮次,的取值范围是1~n;
n表示最大迭代次数的,n的取值范围是正整数;
Gi表示第i张关系图。
作为本实施例的一种优选方案,所述的第一遍历的具体步骤为:
步骤2.1,遍历第二抽象语法树中所有节点,按照遍历的先后顺序为每个节点编号;
步骤2.2,定位包含Jump类型的节点m,从节点m出发,从第二抽象语法树中提取出所有和节点m有直接或者间接关系的节点集合,用所述的节点编号记录下节点m和所述的节点集合中每一个节点之间的关系和内容,将所述的关系和内容作为函数块的Jump边关系;
步骤2.3,以步骤2.2中所述的方法得到该函数块的剩余的6种边关系,并连接7种边关系得到关系图。
作为本实施例的一种优选方案,所述的预处理具体包括以下步骤:
步骤1.1,对收集到的源码程序文件的变量名、函数名重写,得到重写后的源码程序文件;
本实施例中,对图2所示的源码程序文件的变量名、函数名重写,得到重写后的源码程序文件如图3所示。
步骤1.2,解析所述的重写后的源码程序文件,得到重写后的源码程序文件的第一抽象语法树,对所述的第一抽象语法树进行切片得到函数块。
作为本实施例的一种优选方案,所述的构建向量词典的具体步骤为:
步骤3.1,收集不同函数块对应的最终关系图中所有的token,将token中的变量名和自定义函数名用统一的变量名和函数名进行替换,构建一个漏洞代码语料库;
步骤3.2,利用工具将漏洞代码语料库训练成向量字典。
实施例2:
本实施例给出了一种基于多关系图网络的漏洞模型的检测方法,该方法包括以下步骤:
步骤一,收集新的源码程序文件,并对源码程序文件进行预处理得到函数块,根据函数块对应的函数名中是否包含good和bad,对应标签为无漏洞的函数块和有漏洞的函数块;
步骤二,将步骤一中得到的无漏洞的函数块和有漏洞的函数块进行如权利要求1所述的步骤2至步骤3的处理得到用于检测的邻接矩阵;
步骤三,将步骤二中得到的用于检测的邻接矩阵输入到如权利要求1中步骤4得到的最优的GGNN漏洞模型中,若测试结果中存在含有double-free漏洞的函数块,则报告该函数块,若测试结果中不存在含有double-free漏洞的函数块,则检测结束。
实测例1:
遵循上述技术方案,在漏洞检测的实验中,图11展示了C语言Top30中每种漏洞类型的在本发明上的评估结果,结果包括了准确率、精确度、召回率和F1得分,其中每种漏洞类型的检测准确都超过80%,部分超过90%,平均值达到85%以上。图12展示了本发明的方法与与VULDEEPECKER、μVULDEEPECKER、LIN et al.、VUDDY、DEEPBUGS以及DEVIGN在开源仓库上进行漏洞检测,前三种方法是基于BiLSTM,VUDDY使用哈希函数发现漏洞代码克隆,DEEPBUGS使用前馈神经网络检查缺陷,DEVIGN使用标准的GNN操作不区分类型的AST边。所有方法中,除了μVULDEEPECKER之外,其他都通过二进制决策来预测代码中是否包含漏洞。其中,展示了每个项目中被成功识别的漏洞,左边的条形图是成功发现的漏洞总数。黑色符号表示一个漏洞被模型成功识别,其中圆圈表示漏洞在NVD或CVE中被报告了,而一个正方形表示漏洞在两个数据库中都没有被报告。本发明成功识别了56个漏洞中的53个,包括11个未被报告的漏洞,召回率达到0.95,本发明优于其他与之对比的方法。此外,本发明还找到了其他所有模型都未检测到的四个漏洞。
实测例2:
遵循上述技术方案,同样使用实测例1中的对比方法,我们对所有方法在标准数据集上(SARD和NVD)和Github数据集上的评估结果如图13和图14所示,图13中,用SARD和NVD数据集上的C函数既当训练集也当测试集,该图表明本发明是唯一一个平均准确率超过90%的方法,并且在整体性能评估指标方面也优于其他方法。图14中,用SARD和NVD数据集上的C函数进行训练,用GitHub数据集进行测试,图中最小和最大条显示了不同的漏洞类型的结果差异,从图中可见,来自标准数据库的训练数据并不能完全代表现实程序中出现的漏洞代码样本。GitHub代码样本的也准确性下降了。总体上,本发明在准确性、召回率和F1得分方面的表现最好。
Claims (8)
1.一种基于多关系图网络的漏洞模型的构建方法,其特征在于,该方法按照以下步骤进行:
步骤1,收集源码程序文件,并对源码程序文件进行预处理得到函数块,根据函数块对应的函数名中是否包含good和bad,对应标签为无漏洞的函数块和有漏洞的函数块;
步骤2,对所述的无漏洞的函数块和有漏洞的函数块处理得到各自对应的第二抽象语法树;对第二抽象语法树进行第一遍历得到7种边关系,并生成关系图;同时对第二抽象语法树进行遍历得到的PCDG;将关系图和PCDG连接得到最终关系图;
所述的7种边包括Child、GuardedBy、GuardedByNegation、Jump、ComputeFrom、NextToken和LastUse;
步骤3,构建向量字典,利用向量字典把最终关系图中的token转化为词向量,将词向量拼接得到邻接矩阵;
步骤4,搭建并训练GGNN漏洞模型;
基于GNN模型搭建GGNN漏洞模型,将邻接矩阵输入到GGNN漏洞模型进行训练,得到最优的GGNN漏洞模型。
2.如权利要求1所述的基于多关系图网络的漏洞模型的构建方法,其特征在于,所述的GGNN漏洞模型包括四个GRU和highway gate;
所述的GRU用于丰富邻接矩阵中的token对应的的词向量的语义信息;
所述的highway gate用于对不同邻接矩阵中的token对应的词向量进行融合。
4.如权利要求2所述的基于多关系图网络的漏洞模型的构建方法,其特征在于,所述的GRU用于丰富邻接矩阵中的token对应的的词向量的语义信息的具体过程包括:
S1,使用GRU将输入到GGNN漏洞模型中的邻接矩阵中token的对应的词向量作为消息发送给当前所在邻接矩阵中的所有相邻token,并在隐藏层的每一轮迭代过程中更新token的词向量,得到被更新过的邻接矩阵;
S2,用GRU更新不同的被更新过的邻接矩阵中相同token的词向量,得到含全局信息的邻接矩阵;
S3,使用Readout函数读取包含全局信息的邻接矩阵中的所有词向量,根据公式(4)连接所有词向量,得到输出向量hG;
其中:
hG表示为某个关系图的全局词向量;
i表示关系图的序号,i的取值范围是1~m;
m表示关系图的总数,m的取正整数;
υ表示顶点;
t表示迭代轮次,的取值范围是1~n;
n表示最大迭代次数的,n的取值范围是正整数;
Gi表示第i张关系图。
5.如权利要求1所述的基于多关系图网络的漏洞模型的构建方法,其特征在于,所述的第一遍历的具体步骤为:
步骤2.1,遍历第二抽象语法树中所有节点,按照遍历的先后顺序为每个节点编号;
步骤2.2,定位包含Jump类型的节点m,从节点m出发,从第二抽象语法树中提取出所有和节点m有直接或者间接关系的节点集合,用所述的节点编号记录下节点m和所述的节点集合中每一个节点之间的关系和内容,将所述的关系和内容作为函数块的Jump边关系;
步骤2.3,以步骤2.2中所述的方法得到该函数块的剩余的6种边关系,并连接7种边关系得到关系图。
6.如权利要求1所述的基于多关系图网络的漏洞模型的构建方法,其特征在于,所述的预处理具体包括以下步骤:
步骤1.1,对收集到的源码程序文件的变量名、函数名重写,得到重写后的源码程序文件;
步骤1.2,解析所述的重写后的源码程序文件,得到重写后的源码程序文件的第一抽象语法树,对所述的第一抽象语法树进行切片得到函数块。
7.如权利要求1所述的基于多关系图网络的漏洞模型的构建方法,其特征在于,所述的构建向量词典的具体步骤为:
步骤3.1,收集不同函数块对应的最终关系图中所有的token,将token中的变量名和自定义函数名用统一的变量名和函数名进行替换,构建一个漏洞代码语料库;
步骤3.2,利用工具将漏洞代码语料库训练成向量字典。
8.一种基于多关系图网络的漏洞模型的检测方法,其特征在于,该方法包括以下步骤:
步骤一,收集新的源码程序文件,并对源码程序文件进行预处理得到函数块,根据函数块对应的函数名中是否包含good和bad,对应标签为无漏洞的函数块和有漏洞的函数块;
步骤二,将步骤一中得到的无漏洞的函数块和有漏洞的函数块进行如权利要求1所述的步骤2至步骤3的处理得到用于检测的邻接矩阵;
步骤三,将步骤二中得到的用于检测的邻接矩阵输入到如权利要求1中步骤4得到的最优的GGNN漏洞模型中,若测试结果中存在含有double-free漏洞的函数块,则报告该函数块,若测试结果中不存在含有double-free漏洞的函数块,则检测结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110339007.6A CN113158194B (zh) | 2021-03-30 | 2021-03-30 | 一种基于多关系图网络的漏洞模型的构建方法及检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110339007.6A CN113158194B (zh) | 2021-03-30 | 2021-03-30 | 一种基于多关系图网络的漏洞模型的构建方法及检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113158194A true CN113158194A (zh) | 2021-07-23 |
CN113158194B CN113158194B (zh) | 2023-04-07 |
Family
ID=76885350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110339007.6A Active CN113158194B (zh) | 2021-03-30 | 2021-03-30 | 一种基于多关系图网络的漏洞模型的构建方法及检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113158194B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114238100A (zh) * | 2021-12-10 | 2022-03-25 | 国家电网有限公司客户服务中心 | 基于GGNN和分层注意力网络的Java漏洞检测定位方法 |
CN115357904A (zh) * | 2022-07-29 | 2022-11-18 | 南京航空航天大学 | 一种基于程序切片和图神经网络的多类漏洞检测方法 |
CN115396242A (zh) * | 2022-10-31 | 2022-11-25 | 江西神舟信息安全评估中心有限公司 | 一种数据识别的方法及网络安全漏洞的检测方法 |
CN117974340A (zh) * | 2024-03-29 | 2024-05-03 | 昆明理工大学 | 结合深度学习分类与图聚类的社交媒体事件检测方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050138413A1 (en) * | 2003-12-11 | 2005-06-23 | Richard Lippmann | Network security planning architecture |
US20190018975A1 (en) * | 2015-06-02 | 2019-01-17 | ALTR Solutions, Inc. | Internal controls engine and reporting of events generated by a network or associated applications |
CN110245496A (zh) * | 2019-05-27 | 2019-09-17 | 华中科技大学 | 一种源代码漏洞检测方法及检测器和其训练方法及系统 |
CN111274134A (zh) * | 2020-01-17 | 2020-06-12 | 扬州大学 | 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质 |
CN111460450A (zh) * | 2020-03-11 | 2020-07-28 | 西北大学 | 一种基于图卷积网络的源代码漏洞检测方法 |
CN111460820A (zh) * | 2020-03-06 | 2020-07-28 | 中国科学院信息工程研究所 | 一种基于预训练模型bert的网络空间安全领域命名实体识别方法和装置 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
US20210056211A1 (en) * | 2019-08-23 | 2021-02-25 | Praetorian | System and method for automatically detecting a security vulnerability in a source code using a machine learning model |
CN112541180A (zh) * | 2020-12-16 | 2021-03-23 | 北京理工大学 | 一种基于语法特征和语义特征的软件安全漏洞检测方法 |
-
2021
- 2021-03-30 CN CN202110339007.6A patent/CN113158194B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050138413A1 (en) * | 2003-12-11 | 2005-06-23 | Richard Lippmann | Network security planning architecture |
US20190018975A1 (en) * | 2015-06-02 | 2019-01-17 | ALTR Solutions, Inc. | Internal controls engine and reporting of events generated by a network or associated applications |
CN110245496A (zh) * | 2019-05-27 | 2019-09-17 | 华中科技大学 | 一种源代码漏洞检测方法及检测器和其训练方法及系统 |
US20210056211A1 (en) * | 2019-08-23 | 2021-02-25 | Praetorian | System and method for automatically detecting a security vulnerability in a source code using a machine learning model |
CN111274134A (zh) * | 2020-01-17 | 2020-06-12 | 扬州大学 | 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质 |
CN111460820A (zh) * | 2020-03-06 | 2020-07-28 | 中国科学院信息工程研究所 | 一种基于预训练模型bert的网络空间安全领域命名实体识别方法和装置 |
CN111460450A (zh) * | 2020-03-11 | 2020-07-28 | 西北大学 | 一种基于图卷积网络的源代码漏洞检测方法 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN112541180A (zh) * | 2020-12-16 | 2021-03-23 | 北京理工大学 | 一种基于语法特征和语义特征的软件安全漏洞检测方法 |
Non-Patent Citations (5)
Title |
---|
HANTAO FENG等: "Efficient Vulnerability Detection based on abstract syntax tree and Deep Learning", 《IEEE INFOCOM 2020 - IEEE CONFERENCE ON COMPUTER COMMUNICATIONS WORKSHOPS (INFOCOM WKSHPS)》 * |
HUANTING WANG等: "Combining Graph-Based Learning With Automated Data Collection for Code Vulnerability Detection" * |
孙伟等: "基于抽象语法树的C#源代码SQL注入漏洞检测算法" * |
陈肇炫等: "基于抽象语法树的智能化漏洞检测系统", 《信息安全学报》 * |
韩承锋等: "适用于分布式静态检测的Java代码依赖性分析技术", 《计算机系统应用》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114238100A (zh) * | 2021-12-10 | 2022-03-25 | 国家电网有限公司客户服务中心 | 基于GGNN和分层注意力网络的Java漏洞检测定位方法 |
CN114238100B (zh) * | 2021-12-10 | 2024-08-02 | 国家电网有限公司客户服务中心 | 基于GGNN和分层注意力网络的Java漏洞检测定位方法 |
CN115357904A (zh) * | 2022-07-29 | 2022-11-18 | 南京航空航天大学 | 一种基于程序切片和图神经网络的多类漏洞检测方法 |
CN115357904B (zh) * | 2022-07-29 | 2024-04-02 | 南京航空航天大学 | 一种基于程序切片和图神经网络的多类漏洞检测方法 |
CN115396242A (zh) * | 2022-10-31 | 2022-11-25 | 江西神舟信息安全评估中心有限公司 | 一种数据识别的方法及网络安全漏洞的检测方法 |
CN115396242B (zh) * | 2022-10-31 | 2023-04-07 | 江西神舟信息安全评估中心有限公司 | 一种数据识别的方法及网络安全漏洞的检测方法 |
CN117974340A (zh) * | 2024-03-29 | 2024-05-03 | 昆明理工大学 | 结合深度学习分类与图聚类的社交媒体事件检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113158194B (zh) | 2023-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113158194B (zh) | 一种基于多关系图网络的漏洞模型的构建方法及检测方法 | |
Zhou et al. | Devign: Effective vulnerability identification by learning comprehensive program semantics via graph neural networks | |
CN108647520B (zh) | 一种基于脆弱性学习的智能模糊测试方法与系统 | |
Tian et al. | BVDetector: A program slice-based binary code vulnerability intelligent detection system | |
Le et al. | Deepcva: Automated commit-level vulnerability assessment with deep multi-task learning | |
US20190138731A1 (en) | Method for determining defects and vulnerabilities in software code | |
CN111460472A (zh) | 一种基于深度学习图网络的加密算法识别方法 | |
Zhou et al. | Source code size estimation approaches for object-oriented systems from UML class diagrams: A comparative study | |
CN117454387A (zh) | 基于多维度的特征提取的漏洞代码检测方法 | |
CN116663010A (zh) | 一种基于gpt模型的智能合约漏洞检测系统构建方法 | |
Ufuktepe et al. | Tracking code bug fix ripple effects based on change patterns using markov chain models | |
CN116702157B (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
CN117725592A (zh) | 一种基于有向图注意力网络的智能合约漏洞检测方法 | |
CN117633811A (zh) | 一种多视角特征融合的代码漏洞检测方法 | |
CN115442211B (zh) | 基于孪生神经网络和固定解析树的网络日志解析方法及装置 | |
Wu et al. | Inductive vulnerability detection via gated graph neural network | |
Ostrowski et al. | Knowledge-based software testing agent using evolutionary learning with cultural algorithms | |
CN114707151B (zh) | 一种基于api调用和网络行为的僵尸软件检测方法 | |
CN115859307A (zh) | 基于树型注意力和加权图匹配的相似漏洞检测方法 | |
CN116361808A (zh) | 一种多层次特征增强的智能合约漏洞检测方法及系统 | |
CN116366322A (zh) | 基于路径剖析及代码插桩的智能合约威胁检测与防护方法 | |
CN116415251A (zh) | 一种基于深度学习的漏洞影响范围推理方法和系统 | |
CN113127341B (zh) | 一种基于图网络模型的增量代码缺陷检测方法及系统 | |
Ufuktepe et al. | The relation between bug fix change patterns and change impact analysis | |
Fan et al. | High-frequency keywords to predict defects for android applications |
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 |