- A+
摘要
针对智能化漏洞检测,从源代码程序依赖图中根据漏洞特征提取图结构源代码切片,将图结构切片信息表征后利用图神经网络模型进行漏洞检测工作。实现了切片级的漏洞检测,并在代码行级预测漏洞行位置。为了验证系统的有效性,分别与静态漏洞检测系统、基于序列化文本信息和基于图结构化信息的漏洞检测系统做比较,实验结果表明,所提系统在漏洞检测能力上有较高准确性,并且在漏洞代码行预测工作上有较好表现。
主要贡献
构建了一个基于图结构化源代码切片的智能化漏洞检测系统。采用代码切片技术减少无关信息以提高系统高效性和准确性;在切片级别预测源代码漏洞并在代码行级定位漏洞位置,实现细粒度的源代码漏洞预测。
整体架构
获取图结构化切片
1.获取源代码的程序依赖图(PDG)。
2.获取漏洞候选图结构切片。
根据4种漏洞语法特征(库/API 函数调用、数组使用、指针使用和表达式定义)确定PDG的候选漏洞节点,从PDG中截取与该节点存在控制依赖或数据依赖的节点及相应的边,构成图结构切片(即PDG子图)。
3.在图结构切片中标记漏洞信息。
如果存在节点对应的代码行有标注的漏洞触发代码行,则这个节点标注为漏洞触发节点,节点所属的切片标注为存在漏洞的代码切片。
神经网络模型
1.表征图结构切片
- 替换人工定义的符号;(如自定义的变量,函数名等)。
- 将代码表征为向量;
- 表征图结构切片:
输入模型的数据包含多个图和其对应的许多节点,需要对每一个节点进行唯一标识。节点之间的关系标识采用邻接矩阵的稀疏矩阵的简单表示形式。每一个图结构切片有唯一的键值,标识为"2"代表对应的图结构切片中存在漏洞节点,标识为"1"代表对应的图结构切片中没有漏洞节点。
2.模型训练
实验结果
相较于采用序列化结构源代码切片信息的深度学习漏洞检测系统SySeVR,F1 值提高0.4%,精度相比提高8.2%。IoU值相较于SySeVR系统提高5.5%,|V|则由13.3降至4.7,可以在更精确位置定位漏洞,提供更加有效的漏洞预测信息。
为了确定本文系统相较于其他基于图神经网络模型的漏洞检测系统是否有更好的漏洞检测性能,设计了本文系统和 Devign 系统比较。本文系统相较于 Devign 系统,精度 和 F1 值分别提高 56.7% 和 36.6%,主要原因是本文在数据预处理阶段,会根据 4 类漏洞特征提取源代码切片,而 Devign 系统中输入图神经网络模型的数据是以函数单位。
本文系统相较于对比实验中结果较好的静态代码分析工具 Checkmarx,精度 和 召回率分别提高 61.9% 和43.6%,这是因为静态漏洞检测系统主要是基于规则和重复性的漏洞检测器,由于定义规则的不完整性,系统会产生较高的假阳率和假阴率。