0
点赞
收藏
分享

微信扫一扫

基于关系图卷积网络的源代码漏洞检测

文章结构

1. 引言

1.1 漏洞现状

1.2 漏洞检测方法

1.2.1 传统方法:动态静态

1.2.2 机器学习方法

1.2.2.1 基于软件度量
1.2.2.2 基于模式学习

1.2.2 深度学习方法

2. 背景介绍

2.1 各种图

2.2 图深度学习模型

3. 方法介绍

3.1 基本过程

3.2 生成图

3.3 图转向量

3.4 训练模型

4. 实验设计和评估

3.1 数据集

3.2 参数设置

3.3 评估指标

3.4 结果分析

实验设置

数据集

  • 本文选用的数据集是 Zhou 等人[28]收集和标注的真实世界漏洞数据集,包含了2 个流行且多样化的基于C/C++的开源库FFmpeg 和Qemu。

基本过程

  • 首先将程序源代码转换为包含语法、语义特征信息的代码属性图;然后使用关系图卷积网络对图结构进行表示学习;最后训练神经网络模型预测程序源代码中的漏洞。为验证所提方法的有效性,在真实的软件漏洞样本上开展了实验验证,漏洞检测结果的召回率和F1 值分别达到了80. 27%和63. 78%。与Flawfinder、Vuldeepecker 和图卷积网络(GCN)相比,所提方法的F1 值分别提高了182%,12% 和55%。

参数设置

基于漏洞函数数据集生成图并编码生成实验样本,因为正负样本数量接近无需作平衡处理,随机打乱样本并保持相同的正负样本比例,并按照8:1:1 的大小将样本划分成训练集、验证集和测试集,选择在验证集上具有最高F1 值的模型为最佳模型。学习率设置为0. 001,dropout 设置为 0. 2 防止过拟合,batch size 设置为128,最大epoch 次数为50,patience设置为10,即如果连续10 次训练迭代中验证集上的 F1 分数都没有增加,则停止训练过程。选用Adam 优化器(Adaptive Moment Estimation)和交叉熵损失函数进行有监督学习训练模型。

实验评估

  • 基于深度学习的漏洞检测方法的效果都明显优于Flawfinder 的静态分析方法。
  • 在孔等人[20]的图编码方法生成的样本集上,RGCN 模型的F1 值高出GCN 模型的34%;在本文的图编码方法生成的样本集上,RGCN 模型的F1 值高出GCN 模型
  • 的39%。可见RGCN 在对不同语义边分别学习后能有效提高漏洞检测结果。
    对于图生成方法,本文的图编码方法在 GCN 和RGCN 两种模型上的F1 值分别高出孔等人方法11%和16%,可见本文图编码方法的有效性。本文图编码方法关注的节点是语句节点和对语句具有依赖的变量节点,关注的边是语句之间的依赖边和语句与变量之间的依赖边。
  • 孔等人[20]提出的方法包含了AST 上的所有分支节点和叶子节点,保留了AST 上的所有语法边,考虑的语义边是变量之间的依赖关系。尽管该方法的分析粒度更细,但可能包含过多冗余的语法信息,反而不利于模型对于漏洞模式的学习。

文章创新点

套用新模型RGCN

使用CPG图表示方法

编码方式类型+内容 one-hot + word2vec

举报

相关推荐

0 条评论