掌桥专利:专业的专利平台
掌桥专利
首页

一种上下文感知的可解释漏洞检测系统及方法

文献发布时间:2023-06-19 16:08:01



技术领域

本发明涉及软件安全领域,尤其是一种上下文感知的可解释漏洞检测系统及方法。

背景技术

漏洞检测的方法分为基于程序分析和基于机器学习,从现有的研究表明,基于代码相似性的漏洞检测方法主要检测的是代码克隆引起的漏洞,对于非代码克隆引起的漏洞检测的准确率并不高;基于规则的漏洞检测方法需要人类专家定义漏洞特征,过程繁琐并且容易出错;基于机器学习和深度学习的漏洞检测方法在近年来已经取得了成功,但仍存在很多的不足,基于深度学习的漏洞检测方法VulDeePecker只利用由数据依赖的语义信息,而没有考虑控制依赖;基于软件度量的漏洞检测方法,而代码度量是基于程序的整体属性,因此与漏洞代码本身的关联不强,检测能力较差。

解释复杂深度学习模型的方法可以分为两大类:白盒与黑盒,白盒机制侧重于为单个预测提供解释,在白盒机制中经常使用基于前向和后向传播的方法;黑盒方法通过本地学习可解释模型和加法模型生成解释以近似预测,遵循前向传播方法,GNNExplainer解释器被用来研究解释图结构数据的预测,它排除了某些边和节点特征来观察节点或图分类的变化,在GNNExplainer解释器中,解释子图是通过最大化可能的子图分布和GNN的预测之间的相互信息来提取的,然而,与其他前向传播方法类似,GNNExplainer解释器为单个实例预测生成解释,不足以提供对于训练的GNN模型的全局解释,也难以为多个实例提供解释。

发明内容

发明目的:本发明的目的是提供一种上下文感知的可解释漏洞检测系统,通过构建第一代码属性图建立监测模型,生成漏洞预测分数,并依据漏洞预测分数建立解释模型,解释模型采用多层神经网络解释,构建第二代码属性图,依据第二代码属性图对待检测漏洞代码进行检测,最终输出局部最优子图,实现对多个实例进行集体解释。

技术方案:本发明提供的一种上下文感知的可解释漏洞检测系统,包括漏洞数据预处理模块、漏洞检测模型构建模块、结果解释模型构建模块、漏洞检测及解释模块;

漏洞数据预处理模块,用以从漏洞数据库中提取漏洞代码构建漏洞数据集,并将漏洞代码构建漏洞数据集转化为第一代码属性图;

漏洞检测模型构建模块,用以根据第一代码属性图构建检测模型,根据第一代码属性图构建检测模型,对待检测漏洞代码进行代码表征,检测待检测漏洞代码是否包含漏洞,同时生成漏洞预测分数;

结果解释模型构建模块,用以根据漏洞预测分数构建解释模型;

漏洞检测及解释模块,用以构建第二代码属性图,同时对待检测漏洞代码进行漏洞检测和结果解释,最终输出检测结果和漏洞解释结果。

进一步的,漏洞数据预处理模块包含采集单元、表征单元、合成单元:

采集单元用以从漏洞数据库NVD采集漏洞数据,包括漏洞类型等详细信息,从开源代码库GitHub中收集可能存在漏洞的代码集,对从数据库中提取出的漏洞数据进行预处理,将数据中的漏洞代码提取出来,去除数据中的多余信息并提取漏洞函数,对漏洞数据进行清洗,最终得到漏洞数据集;

表征单元用以对漏洞数据集中的数据进行代码表征,通过Joern工具将漏洞代码表示为抽象语法树、控制流图、程序依赖图;

合成单元用以将抽象语法树、控制流图、程序依赖图结合生成第一代码属性图,第一代码属性图中的节点代表待检测漏洞代码的组成部分,该待检测漏洞代码的组成部分包括函数、变量、控制结构,节点与节点之间的边表示待检测漏洞代码语句与待检测漏洞代码语句之间的关系,该关系包括上下文控制依赖关系、上下文数据依赖关系、控制的转换关系。

进一步的,漏洞检测模型构建模块包含向量单元、矩阵转换单元;

向量单元用以把第一代码属性图作为输入,任选一表示待检测漏洞代码语句的结点作中心结点,同相连结点共同构成一个邻域,即第一代码属性图子图,使用工具Glove及工具GRU,构建中心结点对应代码语句的特征向量,进行代码向量化,重复该过程直至为每个语句都生成特征向量;

矩阵转换单元用以把所有语句的特征向量首先通过连接层构建出第一代码属性图的特征矩阵,同时计算对称归一化拉普拉斯矩阵,将特征矩阵及对称归一化拉普拉斯矩阵共同计算卷积从而生成所检测实例的方法表示矩阵,再使用GCN图卷积网络模型传统步骤,将方法表示矩阵依次通过池化层、全连接层、两个隐藏层、一个softmax函数,最终生成所检测实例的初始预测分数作为输出结果。

进一步的,结果解释模型构建模块中,包含解释子图单元、预测分数单元、模型单元;

解释子图单元用以将第一代码属性图的特征矩阵和第一代码属性图作为输入,通过多层神经网络计算得到节点与节点之间的边分布情况的潜在变量,将边分布情况表示为二维的随机概率向量分布,根据潜在变量的数值大小对边进行排序,数值大的靠前,选择排名靠前的边作为解释子图;

预测分数单元用以从边分布中随机抽取一个解释子图输入GNN图神经网络模型得到更新预测分数;

模型单元用以根据初始预测分数和更新预测分数之间的交叉熵优化解释模型中的参数,得到漏洞解释模型。

进一步的,漏洞检测及解释模块中,包含代码预处理单元、解释单元;

代码预处理单元用以将待测漏洞代码进行代码预处理,抽取函数代码,构建第二代码属性图,第二代码属性图中的节点代表待检测漏洞代码的组成部分,该待检测漏洞代码的组成部分包括函数、变量、控制结构,节点与节点之间的边表示待检测漏洞代码语句与待检测漏洞代码语句之间的关系,该关系包括上下文控制依赖关系、上下文数据依赖关系、控制的转换关系;同样任选一表示语句的结点作中心结点,同相连结点共同构成一个邻域,即第二代码属性图子图,使用工具Glove及工具GRU,构建中心结点对应代码语句的特征向量,进行代码向量化,重复该过程直至为每个语句都生成特征向量,再将所有语句的特征向量通过连接层构建出第二代码属性图的特征矩阵,并将第二代码属性图输入到漏洞检测模型中,将漏洞检测结果输出,输出结果包括语句是否存在漏洞;

解释单元用以将检测出有漏洞的第二代码属性图和该第二代码属性图的特征矩阵输入到漏洞解释模型,利用漏洞解释模型,对检测结果进行解释,通过多层神经网络计算得到节点与节点之间的边分布情况的潜在变量,将边分布情况表示为二维的随机概率向量分布,根据潜在变量的数值大小对边进行排序,数值大的靠前,选择潜在变量排名靠前的边作为局部最优子图以表示漏洞解释结果,局部最优子图由检测到的存在漏洞的关键语句及数据依赖和控制依赖关系组成。

本发明同时提供一种上下文感知的可解释漏洞检测方法,包括以下步骤:

1)从漏洞数据库中提取漏洞代码构建漏洞数据集,并将漏洞代码构建漏洞数据集转化为第一代码属性图;

2)根据第一代码属性图构建检测模型,根据第一代码属性图构建检测模型,对待检测漏洞代码进行代码表征,检测待检测漏洞代码是否包含漏洞,同时生成漏洞预测分数;

3)根据漏洞预测分数构建解释模型;

4)构建第二代码属性图,同时对待检测代码进行漏洞检测和结果解释,最终输出检测结果和漏洞解释结果。

进一步的,步骤1)中,包含以下步骤:

1.1)从漏洞数据库NVD采集漏洞数据,包括漏洞类型等详细信息,从开源代码库GitHub中收集可能存在漏洞的代码集,对从数据库中提取出的漏洞数据进行预处理,将数据中的漏洞代码提取出来,去除数据中的多余信息并提取漏洞函数,对漏洞数据进行清洗,最终得到漏洞数据集;

1.2)对漏洞数据集中的数据进行代码表征,通过Joern工具将漏洞代码表示为抽象语法树、控制流图、程序依赖图;

1.3)将抽象语法树、控制流图、程序依赖图结合生成第一代码属性图,第一代码属性图中的节点代表待检测漏洞代码的组成部分,该待检测漏洞代码的组成部分包括函数、变量、控制结构,节点与节点之间的边表示待检测漏洞代码语句与待检测漏洞代码语句之间的关系,该关系包括上下文控制依赖关系、上下文数据依赖关系、控制的转换关系。

进一步的,步骤2)中,包含以下步骤:

2.1)把第一代码属性图作为输入,任选一表示待检测漏洞代码语句的结点作中心结点,同相连结点共同构成一个邻域,即第一代码属性图子图,使用工具Glove及工具GRU,构建中心结点对应代码语句的特征向量,进行代码向量化,重复该过程直至为每个语句都生成特征向量;

2.2)把所有语句的特征向量首先通过连接层构建出第一代码属性图的特征矩阵,同时计算对称归一化拉普拉斯矩阵,将特征矩阵及对称归一化拉普拉斯矩阵共同计算卷积从而生成所检测实例的方法表示矩阵,再使用GCN图卷积网络模型传统步骤,将方法表示矩阵依次通过池化层、全连接层、两个隐藏层、一个softmax函数,最终生成所检测实例的初始预测分数作为输出结果。

进一步的,步骤3)中,包含以下步骤:

3.1)将第一代码属性图的特征矩阵和第一代码属性图作为输入,通过多层神经网络计算得到节点与节点之间的边分布情况的潜在变量,将边分布情况表示为二维的随机概率向量分布,根据潜在变量的数值大小对边进行排序,数值大的靠前,选择排名靠前的边作为解释子图;

3.2)从边分布中随机抽取一个解释子图输入GNN图神经网络模型得到更新预测分数;

3.3)根据初始预测分数和更新预测分数之间的交叉熵优化解释模型中的参数,得到漏洞解释模型。

进一步的,步骤4)中,包含以下步骤:

4.1)将待测漏洞代码进行代码预处理,抽取函数代码,构建第二代码属性图,第二代码属性图中的节点代表待检测漏洞代码的组成部分,该待检测漏洞代码的组成部分包括函数、变量、控制结构,节点与节点之间的边表示待检测漏洞代码语句与待检测漏洞代码语句之间的关系,该关系包括上下文控制依赖关系、上下文数据依赖关系、控制的转换关系;同样任选一表示语句的结点作中心结点,同相连结点共同构成一个邻域,即第二代码属性图子图,使用工具Glove及工具GRU,构建中心结点对应代码语句的特征向量,进行代码向量化,重复该过程直至为每个语句都生成特征向量,再将所有语句的特征向量通过连接层构建出第二代码属性图的特征矩阵,并将第二代码属性图输入到漏洞检测模型中,将漏洞检测结果输出,输出结果包括语句是否存在漏洞;

4.2)将检测出有漏洞的第二代码属性图和该第二代码属性图的特征矩阵输入到漏洞解释模型,利用漏洞解释模型,对检测结果进行解释,通过多层神经网络计算得到节点与节点之间的边分布情况的潜在变量,将边分布情况表示为二维的随机概率向量分布,根据潜在变量的数值大小对边进行排序,数值大的靠前,选择潜在变量排名靠前的边作为局部最优子图以表示漏洞解释结果,局部最优子图由检测到的存在漏洞的关键语句及数据依赖和控制依赖关系组成。

有益效果:本发明与现有技术相比,其显著特点是通过开源数据库提取漏洞代码构建第一代码属性图,依据第一代码属性图构建检测模型,对漏洞代码语句进行代码表征,同时生成漏洞预测分数,依据漏洞预测分数构建解释模型,并构建第二代码属性图,依据第二代码属性图,对待检测漏洞代码进行检测,最终输出局部最优子图作为漏洞检测结果解释,解释模型采用多层神经网络对解释的生成过程进行参数化,实现对多个实例进行集体解释。

附图说明

图1是本发明的流程示意图;

图2是本发明中漏洞检测流程示意图;

图3是本发明中结果解释流程示意图。

具体实施方式

下面结合附图及具体实施例对本发明做进一步解释说明。

实施例1

请参阅图1所示,本实施例提供的一种上下文感知的可解释漏洞检测系统,包括漏洞数据预处理模块、漏洞检测模型构建模块、结果解释模型构建模块、漏洞检测及解释模块;

漏洞数据预处理模块,用以从漏洞数据库中提取漏洞代码构建漏洞数据集,并将漏洞代码构建漏洞数据集转化为第一代码属性图;

漏洞数据预处理模块包含采集单元、表征单元、合成单元:

采集单元用以从漏洞数据库NVD采集漏洞数据,包括漏洞类型等详细信息,从开源代码库GitHub中收集可能存在漏洞的代码集,对从数据库中提取出的漏洞数据进行预处理,将数据中的漏洞代码提取出来,去除数据中的多余信息并提取漏洞函数,对漏洞数据进行清洗,最终得到漏洞数据集;

表征单元用以对漏洞数据集中的数据进行代码表征,通过Joern工具将漏洞代码表示为抽象语法树AST、控制流图CFG、程序依赖图PDG;

合成单元用以将抽象语法树AST、控制流图CFG、程序依赖图PDG结合生成第一代码属性图,第一代码属性图中的节点代表待检测漏洞代码的组成部分,该待检测漏洞代码的组成部分包括函数、变量、控制结构,节点与节点之间的边表示待检测漏洞代码语句与待检测漏洞代码语句之间的关系,该关系包括上下文控制依赖关系、上下文数据依赖关系、控制的转换关系。

请参阅图2所示,漏洞检测模型构建模块,用以根据第一代码属性图构建检测模型,根据第一代码属性图构建检测模型,对待检测漏洞代码进行代码表征,检测待检测漏洞代码是否包含漏洞,同时生成漏洞预测分数;

漏洞检测模型构建模块包含向量单元、矩阵转换单元;

向量单元用以把第一代码属性图作为输入,任选一表示待检测漏洞代码语句的结点作中心结点,同相连结点共同构成一个邻域,即第一代码属性图子图,对每个邻域的中心结点对应的代码语句提取特定类型的特征,如:子标记序列、抽象语法树AST子树、变量、程序依赖图PDG,对于这些特征,使用工具Glove及工具GRU,构建中心结点对应代码语句的特征向量,进行代码向量化,重复该过程直至为每个语句都生成特征向量;

工具Glove是由于其能充分利用所有语句计算不同语句间的相关性,性能更优,能更好的进行代码表征;再使用工具GRU处理代码间远距离依赖关系,使得结果可使用性强,重复该过程可得到每个语句的特征向量F

在拥有特征F

式中F

矩阵转换单元用以将所有语句特征向量F

请参阅图3所示,结果解释模型构建模块,用以根据漏洞预测分数构建解释模型;

结果解释模型构建模块中,包含解释子图单元、预测分数单元、模型单元;

解释子图单元用以将第一代码属性图的特征矩阵和第一代码属性图作为输入,通过多层神经网络计算得到节点与节点之间的边分布情况的潜在变量,将边分布情况表示为二维的随机概率向量分布,根据潜在变量的数值大小对边进行排序,数值大的靠前,选择排名靠前的边作为解释子图;

解释子图单元中,用G=(V,ε)表示第一代码属性图,V={v

Ω=g

式中解释模型用g

通过多层神经网络MLP计算得到边分布的潜在变量,每个第一代码属性图子图作为一个实例,指定Ω=g

ω

式中ω

将边分布表示为二维的随机概率向量分布,根据潜在变量Ω选择排名靠前的边作为解释子图;

若边(i,j)在解释子图中被选中,则其相邻的边(i,k)也应在解释子图中,此连接约束用连接到同一节点的相邻边的交叉熵实现:

式中

预测分数单元用以从边分布中随机抽取一个解释子图输入GNN图神经网络模型得到更新预测分数;

从边分布中随机抽取一个图

式中

模型单元用以根据初始预测分数和更新预测分数之间的交叉熵优化解释模型中的参数,得到漏洞解释模型;

用初始预测分数Y

式中Φ表示GNN图神经网络模型中的参数,K表示采样图的总数,C表示标签的数量,

漏洞检测及解释模块,用以构建第二代码属性图,同时对待检测代码进行漏洞检测和结果解释,最终输出检测结果和漏洞解释结果;

漏洞检测及解释模块中,包含代码预处理单元、解释单元;

代码预处理单元用以将待测漏洞代码进行代码预处理,抽取函数代码,构建第二代码属性图,第二代码属性图中的节点代表待检测漏洞代码的组成部分,该待检测漏洞代码的组成部分包括函数、变量、控制结构,节点与节点之间的边表示待检测漏洞代码语句与待检测漏洞代码语句之间的关系,该关系包括上下文控制依赖关系、上下文数据依赖关系、控制的转换关系;同样任选一表示语句的结点作中心结点,同相连结点共同构成一个邻域,即第二代码属性图子图,使用工具Glove及工具GRU,构建中心结点对应代码语句的特征向量,进行代码向量化,重复该过程直至为每个语句都生成特征向量,再将所有语句的特征向量通过连接层构建出第二代码属性图的特征矩阵,并将第二代码属性图输入到漏洞检测模型中,将漏洞检测结果输出,输出结果包括语句是否存在漏洞;

解释单元用以将检测出有漏洞的第二代码属性图和该第二代码属性图的特征矩阵输入到漏洞解释模型,利用漏洞解释模型,对检测结果进行解释,通过多层神经网络计算得到节点与节点之间的边分布情况的潜在变量,将边分布情况表示为二维的随机概率向量分布,根据潜在变量的数值大小对边进行排序,数值大的靠前,选择潜在变量排名靠前的边作为局部最优子图以表示漏洞解释结果,局部最优子图由检测到的存在漏洞的关键语句及数据依赖和控制依赖关系组成。

实施例2

请参阅图1所示,对应实施例1的上下文感知的可解释漏洞检测系统,本实施例2提供一种上下文感知的可解释漏洞检测方法,包含以下步骤:

1)从漏洞数据库中提取漏洞代码构建漏洞数据集,并将漏洞代码构建漏洞数据集转化为第一代码属性图;

1.1)从漏洞数据库NVD采集漏洞数据,包括漏洞类型等详细信息,从开源代码库GitHub中收集可能存在漏洞的代码集,对从数据库中提取出的漏洞数据进行预处理,将数据中的漏洞代码提取出来,去除数据中的多余信息并提取漏洞函数,对漏洞数据进行清洗,最终得到漏洞数据集;

1.2)对漏洞数据集中的数据进行代码表征,通过Joern工具将漏洞代码表示为抽象语法树AST、控制流图CFG、程序依赖图PDG;

1.3)将抽象语法树AST、控制流图CFG、程序依赖图PDG结合生成第一代码属性图,第一代码属性图中的节点代表待检测漏洞代码的组成部分,该待检测漏洞代码的组成部分包括函数、变量、控制结构,节点与节点之间的边表示待检测漏洞代码语句与待检测漏洞代码语句之间的关系,该关系包括上下文控制依赖关系、上下文数据依赖关系、控制的转换关系。

2)请参阅图2所示,根据第一代码属性图构建检测模型,根据第一代码属性图构建检测模型,对待检测漏洞代码进行代码表征,检测待检测漏洞代码是否包含漏洞,同时生成漏洞预测分数;

2.1)把第一代码属性图作为输入,任选一表示待检测漏洞代码语句的结点作中心结点,同相连结点共同构成一个邻域,即第一代码属性图子图,对每个邻域的中心结点对应的代码语句提取特定类型的特征,如:子标记序列、抽象语法树AST子树、变量、程序依赖图PDG,对于这些特征,使用工具Glove及工具GRU,构建中心结点对应代码语句的特征向量,进行代码向量化,重复该过程直至为每个语句都生成特征向量;

工具Glove是由于其能充分利用所有语句计算不同语句间的相关性,性能更优,能更好的进行代码表征;再使用工具GRU处理代码间远距离依赖关系,使得结果可使用性强,重复该过程可得到每个语句的特征向量F

在拥有特征F

式中F

2.2)将所有语句特征向量F

3)请参阅图3所示,根据漏洞预测分数构建解释模型;

3.1)将第一代码属性图的特征矩阵和第一代码属性图作为输入,通过多层神经网络计算得到节点与节点之间的边分布情况的潜在变量,将边分布情况表示为二维的随机概率向量分布,根据潜在变量的数值大小对边进行排序,数值大的靠前,选择排名靠前的边作为解释子图;

用G=(V,ε)表示第一代码属性图,V={v

Ω=g

式中解释模型用g

通过多层神经网络MLP计算得到边分布的潜在变量,每个第一代码属性图子图作为一个实例,指定Ω=g

ω

式中ω

将边分布表示为二维的随机概率向量分布,根据潜在变量Ω选择排名靠前的边作为解释子图;

若边(i,j)在解释子图中被选中,则其相邻的边(i,k)也应在解释子图中,此连接约束用连接到同一节点的相邻边的交叉熵实现:

式中

3.2)从边分布中随机抽取一个解释子图输入GNN图神经网络模型得到更新预测分数;

从边分布中随机抽取一个图

式中

3.3)根据初始预测分数和更新预测分数之间的交叉熵优化解释模型中的参数,得到漏洞解释模型;

用初始预测分数Y

式中Φ表示GNN图神经网络模型中的参数,K表示采样图的总数,C表示标签的数量,

4)构建第二代码属性图,同时对待检测代码进行漏洞检测和结果解释,最终输出检测结果和漏洞解释结果;

4.1)将待测漏洞代码进行代码预处理,抽取函数代码,构建第二代码属性图,第二代码属性图中的节点代表待检测漏洞代码的组成部分,该待检测漏洞代码的组成部分包括函数、变量、控制结构,节点与节点之间的边表示待检测漏洞代码语句与待检测漏洞代码语句之间的关系,该关系包括上下文控制依赖关系、上下文数据依赖关系、控制的转换关系;同样任选一表示语句的结点作中心结点,同相连结点共同构成一个邻域,即第二代码属性图子图,使用工具Glove及工具GRU,构建中心结点对应代码语句的特征向量,进行代码向量化,重复该过程直至为每个语句都生成特征向量,再将所有语句的特征向量通过连接层构建出第二代码属性图的特征矩阵,并将第二代码属性图输入到漏洞检测模型中,将漏洞检测结果输出,输出结果包括语句是否存在漏洞;

4.2)将检测出有漏洞的第二代码属性图和该第二代码属性图的特征矩阵输入到漏洞解释模型,利用漏洞解释模型,对检测结果进行解释,通过多层神经网络计算得到节点与节点之间的边分布情况的潜在变量,将边分布情况表示为二维的随机概率向量分布,根据潜在变量的数值大小对边进行排序,数值大的靠前,选择潜在变量排名靠前的边作为局部最优子图以表示漏洞解释结果,局部最优子图由检测到的存在漏洞的关键语句及数据依赖和控制依赖关系组成。

相关技术
  • 一种上下文感知的可解释漏洞检测系统及方法
  • 一种视觉感知系统的漏洞检测方法和装置
技术分类

06120114714875