一种异构图神经网络代码漏洞检测方法技术

技术编号:39747719 阅读:10 留言:0更新日期:2023-12-17 23:45
本申请公开了一种异构图神经网络代码漏洞检测方法,其特征在于包括以下步骤:

【技术实现步骤摘要】
一种异构图神经网络代码漏洞检测方法


[0001]本申请涉及信息系统代码安全
,具体涉及一种异构图神经网络代码漏洞检测方法


技术介绍

[0002]近年来,随着信息技术的快速发展,软件安全问题逐渐受到广泛关注

为了确保软件的安全性和可靠性,对软件进行源码级的漏洞检测成为研究者和工程师的关键任务,以在软件发布之前识别并消除其中的潜在风险

传统的漏洞检测技术通常需要依赖专家的经验,耗时并需要大量人工参与,效率低下

[0003]随着技术的演进,有专利申请提出了利用人工智能技术,尤其是深度神经网络,进行源码级漏洞检测的方法

这种新的方法理论上可以大大提高漏洞检测的效率和准确性,减少对专家经验的依赖

[0004]然而,实际应用中,基于深度神经网络的漏洞检测技术仍然存在许多问题和挑战

首先,尽管许多现有的方法尝试利用深度神经网络进行漏洞检测,但它们大多只考虑了源码的序列信息或部分语义信息,难以识别复杂的软件漏洞

其次,这些方法尚未充分利用深度神经网络处理复杂数据结构的能力,模型判别容易受到非关键信息的干扰;最后,使用深度学习方法进行漏洞检测时,由于序列模型不能较好的处理代码语义图这种非欧数据,使模型学习过程中样本漏洞信息丢失

[0005]因此,如何设计一个既能充分利用源码结构和语义信息,又能有效避免误报的深度神经网络模型,成为了当前源码级漏洞检测研究的关键问


技术实现思路

[0006](

)
技术方案
[0007]本申请的一种异构图神经网络代码漏洞检测方法,包括以下步骤:
[0008]一

构建训练数据集
[0009]基于至少一个代码总量超过一百万行的开源项目源代码信息

源代码变更信息及源代码变更标注信息构建训练数据集

[0010]可以基于至少一个以下开源项目的原代码构建训练数据集:
Ffmpeg、QEMU、Linux Kernel、VLC Media Player。
[0011]可以使用
Github API
读取源代码

源代码变更信息和源代码变更标注中提示的漏洞信息

可以利用
Snyk

CVE
数据库来获取涉及所选的项目漏洞信息并将获得的漏洞信息与对应的代码关联

[0012]二

将训练数据集进行图表示
[0013]1.
生成训练数据集的图表示的节点信息
[0014]采用
CoderSurfer
工具生成训练数据集的节点信息,所述节点信息包括该节点代表的代码语句和该节点的类型;其中节点的类型由
one

hot
向量
ci
表示,节点代表的代码语
句使用
Word2vec
模型得到其向量化表示的向量
ti
,得到节点的向量表示
h
i

[t
i

ci],
i∈N

N
为节点的总数目;
[0015]2.
生成训练数据集的图表示的边信息
[0016](1)
采用
CoderSurfer
工具生成训练数据集的节点间的抽象代码树边,得到第一类边信息;
[0017](2)
采用
CoderSurfer
工具生成训练数据集的节点间的控制流边,得到第二类边信息;
[0018](3)
采用
CoderSurfer
工具生成训练数据集的节点间的数据流边,得到第三类边信息;
[0019](4)
采用
CoderSurfer
工具生成训练数据集的节点间的调用边,得到第四类边信息;
[0020]3.
生成图表示
[0021]将节点信息与节点间的四类边信息复合得到图表示,并计为
G

(v

ε
)
,其中
v
为图表示的节点的集合,
ε
为图中所有类型的边的总和,
ε
j
表示某一特定类型的边

[0022]三

将异构图表示输入图注意力网络
GAT
模型
[0023]1.
训练集图表示中加入节点级图注意力网络
GAT
模型
[0024](1)
将训练数据集中的节点信息与第一至四类边信息合并为同构子图输入图注意力网络
GAT
模型,将注意力系数归一化后再与其对应的特征进行线性组合,得到包括训练数据集节点信息的图注意力模型
GAT1。
[0025]其中在
ε
k
边路径下节点
j
对节点
i
的重要性依如下公式计算,其中
W

GAT
模型训练中得到的权重矩阵:
[0026][0027](2)
将注意力系数归一化后再与其对应的特征进行线性组合,得到节点特征为:
[0028][0029]2.
训练集图表示中加入路径级注意力网络
GAT
模型
[0030]根据边的类型将训练集图表示划分为不同的子图,并对各子图应用节点级注意力机制;针对在多个子图中重合的节点,综合其在各子图中学习到的特征;通过路径级注意力机制将各子图学习到的特征表示聚合,作为节点的终端表示形式,其中对于与漏洞检测高度相关的子图中学习到的节点特征,赋予更高的权重,得到在节点级注意力网络模型
GAT1
中加入路径级注意力网络模型
GAT2。
[0031]具体计算方式如下:
[0032][0033]其中:
[0034][0035]其中:
[0036][0037]其中,为加权后的节点特征表示,是第
k
条特定类型的边的特征表示,为第
k
条特定类型的边的注意力权重,
K
为此种特定类型的边的总数,
q
为查询向量,
i
为节点序数,
b
为偏置向量,为第
i
个节点对于边
ε
k
的嵌入

[0038]四

检测样本初始化
[0039]检测源代码中的漏洞通常需要对代码进行一系列的预处理步骤

这些预处理步骤确保代码以合适的格式和结构被提供给后续的分析工本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种异构图神经网络代码漏洞检测方法,其特征在于包括以下步骤:
S1、
将训练数据集进行图表示
S1

1.
生成训练数据集的图表示的节点信息
S1

2.
生成训练数据集的图表示的边信息
(1)
采用
CoderSurfer
工具生成训练数据集的节点间的抽象代码树边,得到第一类边信息;
(2)
采用
CoderSurfer
工具生成训练数据集的节点间的控制流边,得到第二类边信息;
(3)
采用
CoderSurfer
工具生成训练数据集的节点间的数据流边,得到第三类边信息;
(4)
采用
CoderSurfer
工具生成训练数据集的节点间的调用边,得到第四类边信息;
S1

3.
生成训练数据集异构图表示将节点信息与节点间的四类边信息复合得到图表示,并计为
G

(
ν
,
ε
),
其中
ν
为图表示的节点的集合,
ε
为图中所有类型的边的总和,
ε
j
表示某一特定类型的边;
S2、
将训练数据集异构图表示输入图注意力网络
GAT
模型
S2

1.
将训练数据集中的节点信息与第一至四类边信息合并为同构子图输入图注意力网络
GAT
模型,将注意力系数归一化后再与其对应的特征进行线性组合,得到包括训练数据集节点信息的图注意力模型
GAT1

S2

2.
根据边的类型将训练集图表示划分为不同的子图,并对各子图应用节点级注意力机制;针对在多个子图中重合的节点,综合其在各子图中学习到的特征;通过路径级注意力机制将各子图学习到的特征表示聚合,作为节点的终端表示形式,其中对于与漏洞检测高度相关的子图中学习到的节点特征,赋予更高的权重,得到在节点级注意力网络模型
GAT1
中加入路径级注意力网络模型
GAT2

S3、
检测样本初始化
S3

1.
数据清洗及切片
S3

2.
图初始化
(1)
采用
CoderSurfer
工具生成检测样本的节点信息,所述节点信息包括该节点代表的代码语句和该节点的类型;
(2)
生成训练数据集的图表示的边信息,采用
CoderSurfer
工具生成检测样本的节点间的抽象代码树边

控制流边

数据流边

调用边;得到检测样本的图表示;
S4、
使用分类器模块对
GAT2
模型对检测样本的图表示运算结果降维输出将
GAT2
模型中训练得到的训练集图表示节点信息
h
i
与检测样本的图表示节点信息
H
i
连接并输入两个卷种层中进行卷积处理,每一个卷积层的后面都代入
Relu
激活函数并进行最大池化操作,获得与漏洞更相关的高级特征,然后再将该高级特征输入到
MLP
模型中进行二分类,得到漏洞检测结果
。2.
根据权利要求1所述的一种异构图神经网络代码漏洞检测方法,其特征在于:在
S1
...

【专利技术属性】
技术研发人员:谢成李楠林华李勇魏特刘勤蔡佳旺
申请(专利权)人:北京远禾科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1