type
status
date
slug
summary
tags
category
icon
password
Property
Sep 24, 2024 08:49 AM
论文题目:VulGAI: vulnerability detection based on graphs and images
论文作者:Chunyong Zhang ,Yang Xin
发表会议/期刊:Computers & Security(CCFB 、SCIQ1)
发布时间:2023年
Part 1研究方向
- 基于深度学习的漏洞检测方法大多将其视为二元分类问题,基于自然语言处理的方法“treat code slices as text”,不能反映代码的逻辑和结构。
- 一些研究致力于提取代码属性图,然后利用GGNN(Gated Graph Sequence Neural Network,门控图序列神经网络)等提取图的向量表示并进行漏洞检测,但其可扩展性比基于NLP的方法差,且只关注函数是否包含漏洞,不关注漏洞代码的位置。
- VulCNN利用节点中心性将代码函数转换为图像进行漏洞检测,但存在一些问题,如katz centrality不能区分节点,katz centrality和closeness centrality有重复,以及CNN模型计算成本高等。
Part 2 思路和方法
文中要解决的问题:
- 应该选择哪个节点中心性来保存程序的有效信息?
- 如何设计高效的CNN模型来提高漏洞检测性能?
选择合适的节点中心性:
分析了 VulCNN 中使用的五种中心性(degree centrality、closeness centrality、second_order centrality、katz centrality 和 PageRank):
(1)a和b中黑线(卡茨中心性)和绿线(接近中心性)几乎重合
(2)许多节点的 katz中心性和PageRank之间的差异非常小(黑线和紫线),因此,katz中心性不适合区分节点。
(3)每个节点的度中心性和second_order中心性差异很大,可以完全区分节点的重要性。
因此,选择 closeness centrality、degree centrality 和 second_order centrality 来分析节点在整个程序依赖图中的贡献,并将其用于生成 RGB 图像,从三个方面保留程序的细节。
设计高效的 CNN 模型来提高漏洞检测性能:
Graph Generation(图生成):从源代码中提取出程序依赖图。使用Joern解析C/C++函数,得到包含数据依赖和控制依赖的程序依赖图,图中的节点对应代码中的语句,边包含数据流和控制流。
Node Embedding(节点嵌入):使用 Sent2vec对节点进行无监督嵌入,获得节点的向量表示,即固定长度为128的向量v_i。
Image Generation(图像生成):在节点嵌入阶段后,得到了带有节点向量的程序依赖图。通过公式计算得到节点的 degree、closeness 和 second_order,分别对应图像的 R、G、B 三个通道,从而生成图像。这样可以从三个角度计算程序依赖图中节点的重要性。
Vulnerability Detection(漏洞检测):经过前面的阶段获得了RGB图像,即代码的图像表示。最终通过训练这个模型来进行漏洞检测的二元分类。
Vulnerability detection模块
- 模型结构上更高效:使用二维卷积神经网络(具有跳跃结构)、一维卷积神经网络和全连接层来构建模型。在二维卷积神经网络中,包括四个CPR2d(Conv2d + ZeroPand2d + ReLU)模块,利用跳跃结构保留图像在上层网络中的特征信息。
- 输入处理优化:CNN 需输入固定大小图像,而源代码行数不固定。测试数据集发现,97.6%的函数代码在120行内,99% 在200行内。实验表明,行阈值为120时漏洞检测性能稳定。因此,超过120行的代码会去除冗余向量,少于120行的会在向量末尾添加0。最终图像大小为3×120×128,其中3表示3个通道,128对应节点向量长度,120对应行阈值。
Part 3 实验
实验需要解决的问题
RQ1:VulGAI的漏洞检测性能如何?
RQ2:线阈值、CPR2d层数和节点嵌入方法对VulGAI有何影响?
RQ3:VulGAI在现实世界中的漏洞检测性能如何?
RQ1:VulGAI的漏洞检测性能如何?
实验1:(1)与先进的深度学习漏洞检测方法进行比较,包括 VulDePecker、SySeVR、Devign 和 VulCNN,记录漏洞检测结果(Accuracy、TPR 和 F1 - Score 值)
VulGAI 在所有指标上均表现最佳,比 VulCNN 高约2个百分点。在计算性能上,VulGAI 的计算参数比 VulCNN 少8.77倍;在时间性能上,VulGAI比VulCNN 快约 3.9 倍
RQ2:线阈值、CPR2d层数和节点嵌入方法对VulGAI有何影响?
RQ3:VulGAI 在现实世界中的漏洞检测性能
实现对存在漏洞代码的可视化:
(6)以 Buffer Overflow 漏洞为例,通过 Grad - CAM++ 可视化发现,当 “fgets” 从 “stdin” 读取超过 “SIZE” 时,可能触发漏洞,并且图像中 if (fgets (inVuf, SIZE, stdin)!= NULL) 代码行的颜色最深,意味着该代码行可能是漏洞语句,这与分析结果一致,说明 VulGAI 的检测结果具有可解释性。
Part4 总结
文章的主要工作
(1)基于 VulCNN 的启发,提出了一种函数级漏洞检测方法 VulGAI。通过分析了卡茨中心性的缺乏,利用接近中心性、度中心性和second_order中心性来生成图像,从而区分节点重要性。
(2)从代码行的角度保留程序细节和可视化说明。设计了一种更高效的CNN模型,减少了计算开销,提高了检测性能,并在 40657 个函数上评估了六种方法(VulDePecker、SySeVR、Devign、VulCNN、mVulPreter 和 VulGAI)
未来工作方向
考虑从漏洞声明和触发路径中发掘更细粒度的解释。研究如何使漏洞检测模型能够在不同项目之间进行有效的迁移和泛化,减少对特定项目的依赖,提高模型的通用性和适用性,使其能够快速应用于新的代码项目中。
上一篇
03-论文阅读——Multiclass Classification of Software Vulnerabilities with Deep Learning
下一篇
01论文阅读——VUDENC: Vulnerability Detection with Deep Learning on a Natural Codebase for Python
- 作者:百川🌊
- 链接:https://www.baichuanweb.cn/article/example-78
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。