CN111274134B - 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质 - Google Patents
基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN111274134B CN111274134B CN202010053062.4A CN202010053062A CN111274134B CN 111274134 B CN111274134 B CN 111274134B CN 202010053062 A CN202010053062 A CN 202010053062A CN 111274134 B CN111274134 B CN 111274134B
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- cwe
- node
- file
- code
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- 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/045—Combinations of networks
-
- 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
Abstract
本发明公开了一种基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质,方法包括:构建漏洞数据集;将漏洞数据集划分为训练集和测试集;漏洞文件代码图表示;漏洞特征提取;构建预测器,并利用该预测器预测代码文件中的漏洞。系统用于实现上述方法过程,计算机设备和存储介质通过执行计算机程序能够实现上述方法过程。本发明可以更好地利用漏洞代码的语法、语义信息,充分挖掘漏洞代码与上下文的关系,并有效的识别一类漏洞,普适性和通用性更强,可以取代实际代码审计中人工制定漏洞指标的环节,使实际使用成本更低、应用领域更广、精度更高。
Description
技术领域
本发明属于软件工程领域,特别涉及一种基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质。
背景技术
漏洞识别与预测是软件维护过程中的重要组成部分。近年来,随着软件项目的规模扩张和复杂度提升,在软件开发过程中出现了大量的漏洞,如何准确高效地识别并预测漏洞已成为具有相当挑战性的工作。而在之前的工作中多采用由人类专家手工制定的特征或模式被机器学习算法作为输入来检测漏洞,然而由专家手工定义一些漏洞度量(如代码大小,圈复杂度等),成本过高且主观性较强,会导致较高的误报率和漏报率。已有的漏洞识别与预测工作大多都是面向静态分析场景的研究,没有考虑自身的语义特征。同时机器学习与深度学习发展迅速,许多模型都能为漏洞识别提供参考,但是种类繁多,没有统一高效的识别与预测模型,为进一步漏洞的修复造成了一定困难。
此外,目前已有一些工作使用机器学习的方法来识别软件漏洞的语法特征并进行漏洞的预测。如文献《To fear or not to fear that is the question:codecharacteristics of a vulnerable function with an existing exploit》中通过八个代码度量指标描述来自Linux内核和Apache HTTP服务器中的漏洞,通过机器学习的方法预测漏洞的可利用性,但还是停留在手工定义漏洞特征的层面。也有一些工作通过将图引入代码表示来以更细的粒度(函数级)来分析漏洞代码,如文献《Vulnerabilityextrapolation:assisted discovery of vulnerabilities using machine learning》中通过融合抽象语法树、控制流图以及程序依赖图形成代码属性图来表示源代码,但没有提出完整的识别预测模型。
发明内容
本发明的目的在于提供一种具有成本低、准确性高、应用范围广等特点的漏洞识别与预测方法、系统、计算机设备和存储介质。
实现本发明目的的技术解决方案为:一种基于图神经网络的漏洞识别与预测方法,包括以下步骤:
步骤1,构建漏洞数据集;
步骤2,将漏洞数据集划分为训练集和测试集;
步骤3,漏洞文件代码图表示;
步骤4,漏洞特征提取;
步骤5,构建预测器,并利用该预测器预测代码文件中的漏洞。
进一步地,步骤1所述构建漏洞数据集,具体过程包括:
步骤1-1,采集漏洞数据库NVD中的数据,包括漏洞报告;
步骤1-2,提取漏洞报告中的CWE漏洞类型标签、描述信息以及漏洞文件;
步骤1-3,利用一组与软件安全性相关的漏洞发生特征关键词和所述描述信息进行匹配,筛选出安全性漏洞,由所有安全性漏洞构成漏洞数据集。
进一步地,步骤2所述将漏洞数据集划分为训练集和测试集,具体包括:
步骤2-1,对CWE漏洞类型标签进行归并,获得漏洞类型表如下表1所示:
表1漏洞类型表
步骤2-2,从漏洞数据集中随机选取部分状态为Modified的漏洞报告,结合CWE漏洞类型标签和上述表1对选取的漏洞报告进行分类,构建语料库,并将语料库中的一部分漏洞报告作为训练集,其余漏洞报告作为测试集。
进一步地,步骤3所述漏洞文件代码图表示,具体过程包括:
步骤3-1,将所述漏洞数据集中的每个漏洞文件分解为一组方法即函数;特殊地,头文件也视为一组方法;
步骤3-2,利用GumTree对每个漏洞文件对应的一组方法进行语法分析,获得一组语法抽象树AST;
步骤3-3,利用word2vec对语法抽象树AST中的代码单词code tokens进行词向量学习,获得一组词向量;
由上述过程将每一个漏洞文件表示为一个代码属性图gi(V,X,A),该图中结点的代码属性由词向量表示,边属性的类型为AST;其中V表示结点集合,X表示初始结点的特征矩阵,A表示两结点是否通过一条AST边相连,0表示两结点不相连,1表示相连,A为一个m×m的邻接矩阵,m为结点总数。
进一步地,步骤4所述漏洞特征提取,具体为:结合门控图神经网络GGNN的特征学习和门控递归单元实现漏洞特征提取;具体过程包括:
步骤4-1,初始化结点集合V中每个结点vj的状态向量hj (1);
其中,t≤T',hj (t-1)表示在t-1次迭代时的结点j的状态向量,W为权重矩阵,b为偏差,T表示矩阵或向量转置,j=1,2,…,m;
式中,σ(·)表示Sigmoid激活函数,Wz、Uz为更新门zj的权重矩阵,Wr、Ur为重置门rj的权重矩阵;
步骤4-4,基于重置门rj判断前一时间步t-1的结点状态即隐藏状态是否需要保留,具体过程包括:
式中,W和U为权重矩阵;
在T'个时间步内迭代上述步骤4-2至步骤4-6,最后一次迭代后的状态向量Hi (T')表示所有结点的最终结点表示矩阵,即漏洞特征:
进一步地,步骤4-1所述初始化结点集合V中每个结点vj的状态向量hj (1),具体过程包括:
针对每个结点vj,将其第一维用xj表示,其余维填充为0,由此初始化结点vj的状态向量为hj (1)∈Rz,z≥d,其中xj表示对应的结点vj的d维词向量,z表示结点的维数。
进一步地,步骤5所述构建预测器,并利用该预测器预测代码文件中的漏洞,具体包括:
步骤5-1,将漏洞特征作为预测器的输入端,构建预测器为:
步骤5-2,采用交叉熵作为代价函数,通过最小化代价函数获得最优预测函数f:
式中,L(·)表示交叉熵代价函数,ci表示第i个输入的代码文件,yi表示输出,输出结果为0表示输入的代码文件无模型训练的漏洞,输出结果为1表示输入的代码文件存在模型训练的漏洞。
一种基于图神经网络的漏洞识别与预测系统,所述系统包括:
第一构建模块,用于构建漏洞数据集;
划分模块,用于将漏洞数据集划分为训练集和测试集;
图表示模块,用于实现漏洞文件代码图表示;
提取模块,用于实现漏洞特征提取;
第二构建模块,用于构建预测器,并利用该预测器预测代码文件中的漏洞。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
步骤1,构建漏洞数据集;
步骤2,将漏洞数据集划分为训练集和测试集;
步骤3,漏洞文件代码图表示;
步骤4,漏洞特征提取;
步骤5,构建预测器,并利用该预测器预测代码文件中的漏洞。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
步骤1,构建漏洞数据集;
步骤2,将漏洞数据集划分为训练集和测试集;
步骤3,漏洞文件代码图表示;
步骤4,漏洞特征提取;
步骤5,构建预测器,并利用该预测器预测代码文件中的漏洞。
本发明与现有技术相比,其显著优点为:1)本发明不是直接对漏洞报告中提取的漏洞文件代码进行分析,而是先从图的角度对漏洞代码进行表示,能更好地利用漏洞代码的语法、语义信息,充分挖掘漏洞代码与上下文的关系;2)本发明首次提出通过从NVD中获得的CWE漏洞类型标签,对大量多项目漏洞报告数据进行标注,形成漏洞语料库,用来训练并达到对某一类特定类型漏洞的识别与预测;3)考虑到目前软件漏洞的高速增长,传统的手工定义漏洞特征进行漏洞识别的方法难度越来越大,本发明通过图神经网络这一深度学习方法,自动对输入的漏洞文件进行特征的提取,一定程度上可以减少误报率和漏报率;4)本发明使用词向量学习得到代码的结点表示,并将其作为图神经网络的输入,相较于纯粹的基于序列的训练模型(如LSTM),当输入为图形结构时,图神经网络更为灵活,可以解决图输入的无序性,更好的考虑漏洞代码的语义特征,为软件漏洞定位和修复的实际应用研究打下基础。
下面结合附图对本发明作进一步详细描述。
附图说明
图1为一个实施例中基于图神经网络的漏洞识别与预测的方法的流程图。
图2为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,结合图1,本发明提出一种基于图神经网络的漏洞识别与预测方法,包括以下步骤:
步骤1,构建漏洞数据集;
步骤2,将漏洞数据集划分为训练集和测试集;
步骤3,漏洞文件代码图表示;
步骤4,漏洞特征提取;
步骤5,构建预测器,并利用该预测器预测代码文件中的漏洞。
进一步地,在其中一个实施例中,步骤1中构建漏洞数据集,具体过程包括:
步骤1-1,采集漏洞数据库NVD中的数据,包括漏洞报告;
步骤1-2,提取漏洞报告中的CWE漏洞类型标签、描述信息以及漏洞文件;
步骤1-3,利用一组与软件安全性相关的漏洞发生特征关键词和描述信息进行匹配,筛选出安全性漏洞,由所有安全性漏洞构成漏洞数据集。
进一步地,在其中一个实施例中,步骤2中将漏洞数据集划分为训练集和测试集,具体包括:
步骤2-1,对CWE漏洞类型标签进行归并,获得漏洞类型表如表1所示;
步骤2-2,从漏洞数据集中随机选取部分状态为Modified的漏洞报告,结合CWE漏洞类型标签和上述表1对选取的漏洞报告进行分类,构建语料库,并将语料库中的一部分漏洞报告作为训练集,其余漏洞报告作为测试集。
进一步地,在其中一个实施例中,步骤3中漏洞文件代码图表示,具体过程包括:
步骤3-1,将漏洞数据集中的每个漏洞文件分解为一组方法即函数;特殊地,头文件也视为一组方法;
步骤3-2,利用GumTree对每个漏洞文件对应的一组方法进行语法分析,获得一组语法抽象树AST;
步骤3-3,利用word2vec对语法抽象树AST中的代码单词code tokens进行词向量学习,获得一组词向量;
由上述过程将每一个漏洞文件表示为一个代码属性图gi(V,X,A),该图中结点的代码属性由词向量表示,边属性的类型为AST;其中V表示结点集合,X表示初始结点的特征矩阵,A表示两结点是否通过一条AST边相连,0表示两结点不相连,1表示相连,A为一个m×m的邻接矩阵,m为结点总数。
采用本实施例的方案,不是直接对漏洞报告中提取的漏洞文件代码进行分析,而是先从图的角度对漏洞代码进行表示,能更好地利用漏洞代码的语法、语义信息,充分挖掘漏洞代码与上下文的关系。
进一步地,在其中一个实施例中,步骤4中漏洞特征提取,具体为:结合门控图神经网络GGNN的特征学习和门控递归单元实现漏洞特征提取;具体过程包括:
步骤4-1,初始化结点集合V中每个结点vj的状态向量hj (1);
其中,t≤T',hj (t-1)表示在t-1次迭代时的结点j的状态向量,W为权重矩阵,b为偏差,T表示矩阵或向量转置,j=1,2,…,m;
式中,σ(·)表示Sigmoid激活函数,Wz、Uz为更新门zj的权重矩阵,Wr、Ur为重置门rj的权重矩阵;
步骤4-4,基于重置门rj判断前一时间步t-1的结点状态即隐藏状态是否需要保留,具体过程包括:
式中,W和U为权重矩阵;
采用本实施例的方案,将词向量学习得到代码的结点表示作为图神经网络的输入,相较于纯粹的基于序列的训练模型(如LSTM),当输入为图形结构时,图神经网络更为灵活,可以解决图输入的无序性,更好的考虑漏洞代码的语义特征,为软件漏洞定位和修复的实际应用研究打下基础。
进一步地,在其中一个实施例中,步骤4-1初始化结点集合V中每个结点vj的状态向量hj (1),具体过程包括:
针对每个结点vj,将其第一维用xj表示,其余维填充为0,由此初始化结点vj的状态向量为hj (1)∈Rz,z≥d,其中xj表示对应的结点vj的d维词向量,z表示结点的维数。
进一步地,在其中一个实施例中,步骤5构建预测器,并利用该预测器预测代码文件中的漏洞,具体包括:
步骤5-1,将漏洞特征作为预测器的输入端,构建预测器为:
步骤5-2,采用交叉熵作为代价函数,通过最小化代价函数获得最优预测函数f:
式中,L(·)表示交叉熵代价函数,ci表示第i个输入的代码文件,yi表示输出,输出结果为0表示输入的代码文件无模型训练的漏洞,输出结果为1表示输入的代码文件存在模型训练的漏洞。
在一个实施例中,一种基于图神经网络的漏洞识别与预测系统,该系统包括:
第一构建模块,用于构建漏洞数据集;
划分模块,用于将漏洞数据集划分为训练集和测试集;
图表示模块,用于实现漏洞文件代码图表示;
提取模块,用于实现漏洞特征提取;
第二构建模块,用于构建预测器,并利用该预测器预测代码文件中的漏洞。
进一步地,在其中一个实施例中,上述第一构建模块包括:
采集单元,用于采集漏洞数据库NVD中的数据,包括漏洞报告;
提取单元,用于提取漏洞报告中的CWE漏洞类型标签、描述信息以及漏洞文件;
筛选单元,用于利用一组与软件安全性相关的漏洞发生特征关键词和描述信息进行匹配,筛选出安全性漏洞,由所有安全性漏洞构成漏洞数据集。
进一步地,在其中一个实施例中,上述划分模块包括:
归并单元,用于对CWE漏洞类型标签进行归并,获得漏洞类型表如表1所示;
划分单元,用于从漏洞数据集中随机选取部分状态为Modified的漏洞报告,并结合CWE漏洞类型标签和上述表1对选取的漏洞报告进行分类,构建语料库,并将语料库中的一部分漏洞报告作为训练集,其余漏洞报告作为测试集
进一步地,在其中一个实施例中,上述图表示模块包括:
分解单元,用于将漏洞数据集中的每个漏洞文件分解为一组方法即函数;特殊地,头文件也视为一组方法;
语法分析单元,用于利用GumTree对每个漏洞文件对应的一组方法进行语法分析,获得一组语法抽象树AST;
词向量学习单元,利用word2vec对语法抽象树AST中的代码单词code tokens进行词向量学习,获得一组词向量;
图表示模块将每一个漏洞文件表示为一个代码属性图gi(V,X,A),该图中结点的代码属性由词向量表示,边属性的类型为AST;其中V表示结点集合,X表示初始结点的特征矩阵,A表示两结点是否通过一条AST边相连,0表示两结点不相连,1表示相连,A为一个m×m的邻接矩阵,m为结点总数。
进一步地,在其中一个实施例中,上述提取模块包括依次执行的:
初始化单元,用于初始化结点集合V中每个结点vj的状态向量hj (1),具体包括:针对每个结点vj,将其第一维用xj表示,其余维填充为0,由此初始化结点vj的状态向量为hj (1)∈Rz,z≥d,其中xj表示对应的结点vj的d维词向量,z表示结点的维数;
其中,t≤T',hj (t-1)表示在t-1次迭代时的结点j的状态向量,W为权重矩阵,b为偏差,T表示矩阵或向量转置,j=1,2,…,m;
式中,σ(·)表示Sigmoid激活函数,Wz、Uz为更新门zj的权重矩阵,Wr、Ur为重置门rj的权重矩阵;
判别单元,用于基于重置门rj判断前一时间步t-1的结点状态即隐藏状态是否需要保留,具体过程包括:
式中,W和U为权重矩阵;
进一步地,在其中一个实施例中,上述第二构建模块包括:
第二构建单元,用于将漏洞特征作为预测器的输入端,构建预测器:
预测单元,用于采用交叉熵作为代价函数,通过最小化代价函数获得最优预测函数f:
式中,L(·)表示交叉熵代价函数,ci表示第i个输入的代码文件,yi表示输出,输出结果为0表示输入的代码文件无模型训练的漏洞,输出结果为1表示输入的代码文件存在模型训练的漏洞。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图2所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储多系统数据融合数据过程中需要用到的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种多系统数据融合方法。
本领域技术人员可以理解,图2中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
步骤1,构建漏洞数据集;
步骤2,将漏洞数据集划分为训练集和测试集;
步骤3,漏洞文件代码图表示;
步骤4,漏洞特征提取;
步骤5,构建预测器,并利用该预测器预测代码文件中的漏洞。
进一步地,在其中一个实施例中,处理器执行计算机程序实现上述构建漏洞数据集,具体实现以下步骤:
步骤1-1,采集漏洞数据库NVD中的数据,包括漏洞报告;
步骤1-2,提取漏洞报告中的CWE漏洞类型标签、描述信息以及漏洞文件;
步骤1-3,利用一组与软件安全性相关的漏洞发生特征关键词和描述信息进行匹配,筛选出安全性漏洞,由所有安全性漏洞构成漏洞数据集。
进一步地,在其中一个实施例中,处理器执行计算机程序实现上述将漏洞数据集划分为训练集和测试集,具体实现以下步骤:
步骤2-1,对CWE漏洞类型标签进行归并,获得漏洞类型表如表1所示;
步骤2-2,从漏洞数据集中随机选取部分状态为Modified的漏洞报告,结合CWE漏洞类型标签和上述表1对选取的漏洞报告进行分类,构建语料库,并将语料库中的一部分漏洞报告作为训练集,其余漏洞报告作为测试集。
进一步地,在其中一个实施例中,处理器执行计算机程序实现上述漏洞文件代码图表示,具体实现以下步骤:
步骤3-1,将漏洞数据集中的每个漏洞文件分解为一组方法即函数;特殊地,头文件也视为一组方法;
步骤3-2,利用GumTree对每个漏洞文件对应的一组方法进行语法分析,获得一组语法抽象树AST;
步骤3-3,利用word2vec对语法抽象树AST中的代码单词code tokens进行词向量学习,获得一组词向量;
由上述过程将每一个漏洞文件表示为一个代码属性图gi(V,X,A),该图中结点的代码属性由词向量表示,边属性的类型为AST;其中V表示结点集合,X表示初始结点的特征矩阵,A表示两结点是否通过一条AST边相连,0表示两结点不相连,1表示相连,A为一个m×m的邻接矩阵,m为结点总数。
进一步地,在其中一个实施例中,处理器执行计算机程序实现上述漏洞特征提取,具体实现以下步骤:
步骤4-1,初始化结点集合V中每个结点vj的状态向量hj (1):针对每个结点vj,将其第一维用xj表示,其余维填充为0,由此初始化结点vj的状态向量为hj (1)∈Rz,z≥d,其中xj表示对应的结点vj的d维词向量,z表示结点的维数;
其中,t≤T',hj (t-1)表示在t-1次迭代时的结点j的状态向量,W为权重矩阵,b为偏差,T表示矩阵或向量转置,j=1,2,…,m;
式中,σ(·)表示Sigmoid激活函数,Wz、Uz为更新门zj的权重矩阵,Wr、Ur为重置门rj的权重矩阵;
步骤4-4,基于重置门rj判断前一时间步t-1的结点状态即隐藏状态是否需要保留,具体过程包括:
式中,W和U为权重矩阵;
进一步地,在其中一个实施例中,处理器执行计算机程序实现上述构建预测器,并利用该预测器预测代码文件中的漏洞,具体实现以下步骤:
步骤5-1,将漏洞特征作为预测器的输入端,构建预测器为:
步骤5-2,采用交叉熵作为代价函数,通过最小化代价函数获得最优预测函数f:
式中,L(·)表示交叉熵代价函数,ci表示第i个输入的代码文件,yi表示输出,输出结果为0表示输入的代码文件无模型训练的漏洞,输出结果为1表示输入的代码文件存在模型训练的漏洞。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
步骤1,构建漏洞数据集;
步骤2,将漏洞数据集划分为训练集和测试集;
步骤3,漏洞文件代码图表示;
步骤4,漏洞特征提取;
步骤5,构建预测器,并利用该预测器预测代码文件中的漏洞。
进一步地,在其中一个实施例中,计算机程序被处理器执行实现上述构建漏洞数据集,具体实现以下步骤:
步骤1-1,采集漏洞数据库NVD中的数据,包括漏洞报告;
步骤1-2,提取漏洞报告中的CWE漏洞类型标签、描述信息以及漏洞文件;
步骤1-3,利用一组与软件安全性相关的漏洞发生特征关键词和描述信息进行匹配,筛选出安全性漏洞,由所有安全性漏洞构成漏洞数据集。
进一步地,在其中一个实施例中,计算机程序被处理器执行实现上述将漏洞数据集划分为训练集和测试集,具体实现以下步骤:
步骤2-1,对CWE漏洞类型标签进行归并,获得漏洞类型表如表1所示;
步骤2-2,从漏洞数据集中随机选取部分状态为Modified的漏洞报告,结合CWE漏洞类型标签和上述表1对选取的漏洞报告进行分类,构建语料库,并将语料库中的一部分漏洞报告作为训练集,其余漏洞报告作为测试集。
进一步地,在其中一个实施例中,计算机程序被处理器执行实现上述漏洞文件代码图表示,具体实现以下步骤:
步骤3-1,将漏洞数据集中的每个漏洞文件分解为一组方法即函数;特殊地,头文件也视为一组方法;
步骤3-2,利用GumTree对每个漏洞文件对应的一组方法进行语法分析,获得一组语法抽象树AST;
步骤3-3,利用word2vec对语法抽象树AST中的代码单词code tokens进行词向量学习,获得一组词向量;
由上述过程将每一个漏洞文件表示为一个代码属性图gi(V,X,A),该图中结点的代码属性由词向量表示,边属性的类型为AST;其中V表示结点集合,X表示初始结点的特征矩阵,A表示两结点是否通过一条AST边相连,0表示两结点不相连,1表示相连,A为一个m×m的邻接矩阵,m为结点总数。
进一步地,在其中一个实施例中,计算机程序被处理器执行实现上述漏洞特征提取,具体实现以下步骤:
步骤4-1,初始化结点集合V中每个结点vj的状态向量hj (1):针对每个结点vj,将其第一维用xj表示,其余维填充为0,由此初始化结点vj的状态向量为hj (1)∈Rz,z≥d,其中xj表示对应的结点vj的d维词向量,z表示结点的维数;
其中,t≤T',hj (t-1)表示在t-1次迭代时的结点j的状态向量,W为权重矩阵,b为偏差,T表示矩阵或向量转置,j=1,2,…,m;
式中,σ(·)表示Sigmoid激活函数,Wz、Uz为更新门zj的权重矩阵,Wr、Ur为重置门rj的权重矩阵;
步骤4-4,基于重置门rj判断前一时间步t-1的结点状态即隐藏状态是否需要保留,具体过程包括:
式中,W和U为权重矩阵;
进一步地,在其中一个实施例中,计算机程序被处理器执行实现上述构建预测器,并利用该预测器预测代码文件中的漏洞,具体实现以下步骤:
步骤5-1,将漏洞特征作为预测器的输入端,构建预测器为:
步骤5-2,采用交叉熵作为代价函数,通过最小化代价函数获得最优预测函数f:
式中,L(·)表示交叉熵代价函数,ci表示第i个输入的代码文件,yi表示输出,输出结果为0表示输入的代码文件无模型训练的漏洞,输出结果为1表示输入的代码文件存在模型训练的漏洞。
本发明可以更好地利用漏洞代码的语法、语义信息,充分挖掘漏洞代码与上下文的关系,并有效的识别一类漏洞,普适性和通用性更强,可以取代实际代码审计中人工制定漏洞指标的环节,使实际使用成本更低、应用领域更广、精度更高。
Claims (8)
1.一种基于图神经网络的漏洞识别与预测方法,其特征在于,包括以下步骤:
步骤1,构建漏洞数据集;具体过程包括:
步骤1-1,采集漏洞数据库NVD中的数据,包括漏洞报告;
步骤1-2,提取漏洞报告中的CWE漏洞类型标签、描述信息以及漏洞文件;
步骤1-3,利用一组与软件安全性相关的漏洞发生特征关键词和所述描述信息进行匹配,筛选出安全性漏洞,由所有安全性漏洞构成漏洞数据集;
步骤2,将漏洞数据集划分为训练集和测试集;
步骤3,漏洞文件代码图表示;具体过程包括:
步骤3-1,将所述漏洞数据集中的每个漏洞文件分解为一组方法即函数;特殊地,头文件也视为一组方法;
步骤3-2,利用GumTree对每个漏洞文件对应的一组方法进行语法分析,获得一组语法抽象树AST;
步骤3-3,利用word2vec对语法抽象树AST中的代码单词code tokens进行词向量学习,获得一组词向量;
由上述过程将每一个漏洞文件表示为一个代码属性图gi(V,X,A),该图中结点的代码属性由词向量表示,边属性的类型为AST;其中V表示结点集合,X表示初始结点的特征矩阵,A表示两结点是否通过一条AST边相连,0表示两结点不相连,1表示相连,A为一个m×m的邻接矩阵,m为结点总数;
步骤4,结合门控图神经网络GGNN的特征学习和门控递归单元实现漏洞特征提取,将图中每个结点向量作为门控图神经网络GGNN的输入端,迭代后的状态向量作为漏洞特征;
步骤5,将漏洞特征作为预测器的输入端,构建预测器,并利用该预测器预测代码文件中的漏洞。
2.根据权利要求1所述的基于图神经网络的漏洞识别与预测方法,其特征在于,步骤2所述将漏洞数据集划分为训练集和测试集,具体包括:
步骤2-1,对CWE漏洞类型标签进行归并,获得如下漏洞类型与CWE标签的对应关系:Resource Leaks:CWE-913、CWE-74、CWE-400、CWE-404、CWE-610、CWE-669、CWE-913;Insecure Arguments:CWE-134、CWE-20、CWE-330、CWE-665;Use After Free:CWE-416;RaceConditions:CWE-362、CWE-754、CWE-755;Null Pointer Deference:CWE-476;BufferOverflows:CWE-120、CWE-119;Information Exposure:CWE-200、CWE-311、CWE-668、CWE-922;Privilege Escalation:CWE-269、CWE-326;Improper Authentication:CWE-287、CWE-345、CWE-862、CWE-863;
步骤2-2,从漏洞数据集中随机选取部分状态为Modified的漏洞报告,结合CWE漏洞类型标签和上述对应关系对选取的漏洞报告进行分类,构建语料库,并将语料库中的一部分漏洞报告作为训练集,其余漏洞报告作为测试集。
3.根据权利要求2所述的基于图神经网络的漏洞识别与预测方法,其特征在于,步骤4所述漏洞特征提取,具体为:结合门控图神经网络GGNN的特征学习和门控递归单元实现漏洞特征提取;具体过程包括:
步骤4-1,初始化结点集合V中每个结点vj的状态向量hj (1);
其中,t≤T',hj (t-1)表示在t-1次迭代时的结点j的状态向量,W为权重矩阵,b为偏差,T表示矩阵或向量转置,j=1,2,…,m;
式中,σ(·)表示Sigmoid激活函数,Wz、Uz为更新门zj的权重矩阵,Wr、Ur为重置门rj的权重矩阵;
步骤4-4,基于重置门rj判断前一时间步t-1的结点状态即隐藏状态是否需要保留,具体过程包括:
式中,W和U为权重矩阵;
4.根据权利要求3所述的基于图神经网络的漏洞识别与预测方法,其特征在于,步骤4-1所述初始化结点集合V中每个结点vj的状态向量hj (1),具体过程包括:
针对每个结点vj,将其第一维用xj表示,其余维填充为0,由此初始化结点vj的状态向量为hj (1)∈Rz,z≥d,其中xj表示对应的结点vj的d维词向量,z表示结点的维数。
6.一种基于图神经网络的漏洞识别与预测系统,其特征在于,所述系统包括:
第一构建模块,用于构建漏洞数据集;具体过程包括:
步骤1-1,采集漏洞数据库NVD中的数据,包括漏洞报告;
步骤1-2,提取漏洞报告中的CWE漏洞类型标签、描述信息以及漏洞文件;
步骤1-3,利用一组与软件安全性相关的漏洞发生特征关键词和所述描述信息进行匹配,筛选出安全性漏洞,由所有安全性漏洞构成漏洞数据集;
划分模块,用于将漏洞数据集划分为训练集和测试集;
图表示模块,用于实现漏洞文件代码图表示;具体过程包括:
步骤3-1,将所述漏洞数据集中的每个漏洞文件分解为一组方法即函数;特殊地,头文件也视为一组方法;
步骤3-2,利用GumTree对每个漏洞文件对应的一组方法进行语法分析,获得一组语法抽象树AST;
步骤3-3,利用word2vec对语法抽象树AST中的代码单词code tokens进行词向量学习,获得一组词向量;
由上述过程将每一个漏洞文件表示为一个代码属性图gi(V,X,A),该图中结点的代码属性由词向量表示,边属性的类型为AST;其中V表示结点集合,X表示初始结点的特征矩阵,A表示两结点是否通过一条AST边相连,0表示两结点不相连,1表示相连,A为一个m×m的邻接矩阵,m为结点总数;
提取模块,用于实现漏洞特征提取;
第二构建模块,用于构建预测器,并利用该预测器预测代码文件中的漏洞。
7.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010053062.4A CN111274134B (zh) | 2020-01-17 | 2020-01-17 | 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010053062.4A CN111274134B (zh) | 2020-01-17 | 2020-01-17 | 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111274134A CN111274134A (zh) | 2020-06-12 |
CN111274134B true CN111274134B (zh) | 2023-07-11 |
Family
ID=71001094
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010053062.4A Active CN111274134B (zh) | 2020-01-17 | 2020-01-17 | 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111274134B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111783100B (zh) * | 2020-06-22 | 2022-05-17 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN111897946B (zh) * | 2020-07-08 | 2023-09-19 | 扬州大学 | 漏洞补丁推荐方法、系统、计算机设备和存储介质 |
CN112182585B (zh) * | 2020-09-29 | 2024-04-26 | 湖南大学 | 源代码漏洞检测方法、系统及存储介质 |
CN112364352B (zh) * | 2020-10-21 | 2023-11-24 | 扬州大学 | 可解释性的软件漏洞检测与推荐方法及系统 |
CN112560481A (zh) * | 2020-12-25 | 2021-03-26 | 北京百度网讯科技有限公司 | 语句处理方法、设备和存储介质 |
CN112579477A (zh) * | 2021-02-26 | 2021-03-30 | 北京北大软件工程股份有限公司 | 一种缺陷检测方法、装置以及存储介质 |
CN113157917B (zh) * | 2021-03-15 | 2023-03-24 | 西北大学 | 基于OpenCL的优化分类模型的建立、优化分类方法及系统 |
CN113076543B (zh) * | 2021-03-22 | 2022-02-08 | 四川大学 | 一种针对社交网络中漏洞利用知识库的构建方法 |
CN113158194B (zh) * | 2021-03-30 | 2023-04-07 | 西北大学 | 一种基于多关系图网络的漏洞模型的构建方法及检测方法 |
CN112989363B (zh) * | 2021-05-19 | 2021-09-28 | 北京邮电大学 | 漏洞定位方法、装置、电子设备和存储介质 |
CN113326187B (zh) * | 2021-05-25 | 2023-11-24 | 扬州大学 | 数据驱动的内存泄漏智能化检测方法及系统 |
CN113360915B (zh) * | 2021-06-09 | 2023-09-26 | 扬州大学 | 基于源代码图表示学习的智能合约多漏洞检测方法及系统 |
CN113378176B (zh) * | 2021-06-11 | 2023-06-23 | 大连海事大学 | 一种基于图神经网络检测带有权重偏差的软件漏洞识别方法 |
CN113343248A (zh) * | 2021-07-19 | 2021-09-03 | 北京有竹居网络技术有限公司 | 一种漏洞识别方法、装置、设备和存储介质 |
CN113742733B (zh) * | 2021-08-09 | 2023-05-26 | 扬州大学 | 阅读理解漏洞事件触发词抽取和漏洞类型识别方法及装置 |
CN113810389B (zh) * | 2021-08-31 | 2022-10-14 | 杭州电子科技大学 | 一种dhr系统漏洞修补过程中漏洞选取方法及装置 |
WO2023092511A1 (en) * | 2021-11-26 | 2023-06-01 | Huawei Technologies Co.,Ltd. | Methods and apparatuses for software vulnerability detection |
CN114676438B (zh) * | 2022-04-15 | 2023-06-09 | 电子科技大学 | 面向硬件系统多维脆弱性的快速探测方法 |
CN117290238B (zh) * | 2023-10-10 | 2024-04-09 | 湖北大学 | 基于异质类关系图神经网络的软件缺陷预测方法和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109977205A (zh) * | 2019-03-08 | 2019-07-05 | 中南大学 | 一种计算机自主学习源代码的方法 |
CN110018820A (zh) * | 2019-04-08 | 2019-07-16 | 浙江大学滨海产业技术研究院 | 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法 |
CN110175454A (zh) * | 2019-04-19 | 2019-08-27 | 肖银皓 | 一种基于人工智能的智能合约安全漏洞挖掘方法及系统 |
CN110232280A (zh) * | 2019-06-20 | 2019-09-13 | 北京理工大学 | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 |
CN110245496A (zh) * | 2019-05-27 | 2019-09-17 | 华中科技大学 | 一种源代码漏洞检测方法及检测器和其训练方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9454659B1 (en) * | 2014-08-15 | 2016-09-27 | Securisea, Inc. | Software vulnerabilities detection system and methods |
US20190370473A1 (en) * | 2018-05-30 | 2019-12-05 | Nvidia Corporation | Detecting vulnerabilities to fault injection in computer code using machine learning |
-
2020
- 2020-01-17 CN CN202010053062.4A patent/CN111274134B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109977205A (zh) * | 2019-03-08 | 2019-07-05 | 中南大学 | 一种计算机自主学习源代码的方法 |
CN110018820A (zh) * | 2019-04-08 | 2019-07-16 | 浙江大学滨海产业技术研究院 | 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法 |
CN110175454A (zh) * | 2019-04-19 | 2019-08-27 | 肖银皓 | 一种基于人工智能的智能合约安全漏洞挖掘方法及系统 |
CN110245496A (zh) * | 2019-05-27 | 2019-09-17 | 华中科技大学 | 一种源代码漏洞检测方法及检测器和其训练方法及系统 |
CN110232280A (zh) * | 2019-06-20 | 2019-09-13 | 北京理工大学 | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111274134A (zh) | 2020-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111274134B (zh) | 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质 | |
US11328171B2 (en) | Image retrieval method and apparatus | |
US9727821B2 (en) | Sequential anomaly detection | |
US9372736B2 (en) | Leveraging path information to generate predictions for parallel business processes | |
CN113596007B (zh) | 一种基于深度学习的漏洞攻击检测方法和设备 | |
CN112910710B (zh) | 网络流量时空预测方法、装置、计算机设备和存储介质 | |
Narayanan et al. | Contextual weisfeiler-lehman graph kernel for malware detection | |
CN115827257B (zh) | 用于处理器体系的cpu容量预测方法及其系统 | |
CN116579618B (zh) | 基于风险管理的数据处理方法、装置、设备及存储介质 | |
Ling et al. | An intelligent sampling framework for multi-objective optimization in high dimensional design space | |
Kakisim et al. | Sequential opcode embedding-based malware detection method | |
Kunjir et al. | A comparative study of predictive machine learning algorithms for COVID-19 trends and analysis | |
Li et al. | Adversarial Sequence Tagging. | |
Huang et al. | RS-Del: Edit distance robustness certificates for sequence classifiers via randomized deletion | |
CN113378178A (zh) | 一种基于深度学习的图自信学习软件漏洞检测方法 | |
CN117113350A (zh) | 基于路径自适应的恶意软件检测方法、系统及设备 | |
Jeon et al. | Early prediction of ransomware API calls behaviour based on GRU-TCN in healthcare IoT | |
CN116361788A (zh) | 一种基于机器学习的二进制软件漏洞预测方法 | |
CN114897290A (zh) | 业务流程的演化识别方法、装置、终端设备以及存储介质 | |
CN116628695A (zh) | 基于多任务学习的漏洞挖掘方法及装置 | |
CN115454473A (zh) | 基于深度学习漏洞决策的数据处理方法及信息安全系统 | |
Wilber et al. | Integrating infection intensity into within-and between-host pathogen dynamics: Implications for invasion and virulence evolution | |
Schramm et al. | Differential equation models for sharp threshold dynamics | |
CN105718801A (zh) | 一种基于编程模式和模式匹配的漏洞聚类方法 | |
CN110909777A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |