- A+
论文题目:BovdGFE: buffer overflow vulnerability detection based on graph feature extraction
论文链接:https://link.springer.com/article/10.1007/s10489-022-04214-8
论文来源:Applied Intelligence (APIN 2023)
1 引言
自动检测缓冲区溢出漏洞是软件安全领域的重要研究方向。现有基于深度学习的方法因代码表示过程中的信息丢失,难以学习到与漏洞相关的特征,导致假阴性率(FNR)高、精度低。为此,论文提出 BovdGFE 方法,通过构建缓冲区溢出函数样本,引入代码表征序列(CoRS),融合控制流、数据依赖和语法结构信息,减少代码表示中的信息丢失。随后利用深度学习模型学习漏洞特征并分类。实验表明,与最先进方法相比,BovdGFE 的精度和 FNR 分别提升 6.3% 和 3.9%,显著增强了漏洞检测能力。
2 研究背景与问题
缓冲区溢出漏洞是常见的安全威胁,2021 年 NVD 发布的漏洞中占比 14.04%,仅次于排名第一的漏洞类型。传统检测方法包括静态检测(规则分析、代码相似性检测、符号执行)、动态检测(模糊测试、污点分析)和混合检测,但存在人工依赖强、资源消耗大或自动化不足等问题。深度学习方法虽能自动学习特征,但现有代码表示方法(如词法序列、图结构)存在信息丢失,导致检测精度不足。
本文的核心挑战如下:
- 代码表示问题:如何融合抽象语法树(AST)、控制流图(CFG)和数据依赖图(DDG)的结构信息,避免词法序列或单一图结构的信息丢失。
- 特征提取问题:现有模型易学习到与漏洞无关的特征,需设计有效方法提取语法和语义信息。
- 数据集问题:缺乏函数级的缓冲区溢出结构化数据集,现有数据集多为程序级,包含大量无关信息。
3 BovdGFE框架
3.1 函数样本生成
从 Code Gadget Database(CGD)提取缓冲区溢出漏洞代码(BoVC),通过 Algorithm 1 按函数切片,生成良性样本(BS)和漏洞样本(VS)。具体步骤包括:解析并利用抽象语法树(AST)定位漏洞候选函数(如 strcpy、memcpy 等),通过括号匹配提取函数体语句,按函数名中的 “good” 或 “bad” 标签分类。最终生成 16,844 个函数样本,包括栈溢出、堆溢出和整数溢出类型。
代码表征序列(CoRS)构建
多图融合:使用 Joern 工具生成函数的 AST、CFG 和 DDG,将 CFG 和 DDG 转换为 JSON 文本,提取节点类型和代码信息(如操作符、变量),形成控制流序列和数据依赖序列。
序列拼接:将 AST 的语法信息序列(深度优先遍历)、控制流序列和数据依赖序列拼接为 CoRS,每个 CoRS 唯一表示一个函数,保留语法和语义信息。例如,控制流序列中的 “⟨operator⟩.assignment, data, =, NULL” 与数据依赖序列中的 “METHOD RETURN, void” 结合,完整描述变量赋值和函数返回的依赖关系。
3.2 CoRS 编码与深度学习模型
- 向量化处理:通过 Algorithm 2 去除 CoRS 中的标签、非 ASCII 字符和字符串常量(替换为 “str”),构建映射字典将单词转换为索引向量。对向量长度进行标准化:长度超过 224 的样本因含过多无关信息被剔除(仅占 2.7%),不足 224 的用零填充。
- 模型结构:采用双向门控循环单元(BGRU)结合注意力机制的模型。嵌入层压缩向量维度,BGRU 层学习时序特征,注意力层计算各时间步权重并加权求和,最终输出分类结果。
4 实验结果与分析
4.1 实验设置
- 数据集:基于 CGD 的 5,131 个 BoVC,生成 16,844 个 CoRS 样本,80% 用于训练 / 验证,20% 用于测试。
- 评估指标:假阳性率(FPR)、假阴性率(FNR)、精度(Pr)、召回率(Re)、F1 分数。
- 对比方法:传统工具(RATS、Flawfinder)、深度学习方法(CNN、LSTM、GRU、BLSTM、BGRU)、现有图结构方法(BGNN4VD、HyVulDect)等。
4.2 关键结果
模型对比:BGRU 在 FNR(10.5%)和精度(91.4%)上优于其他神经网络模型,CNN 的 FNR 为 17.1%,GRU 为 15.6%,显示双向结构对上下文信息的捕捉能力更强。
CoRS 有效性:与基于源代码、二进制代码和图结构的方法相比,BovdGFE 的 FNR 低至 7.7%,精度达 92.2%。例如,HyVulDect 的 FNR 为 9.6%,精度 89.6%,证明 CoRS 的多信息融合减少了表示损失。
消融实验:仅使用 AST 序列(As)时 FNR 为 42.2%,加入控制流(ACs)后降至 33.6%,再加入数据依赖(ACDs)进一步降至 10.5%,表明控制流和数据依赖信息对漏洞检测至关重要。
5 结论与展望
BovdGFE 通过融合 AST、CFG 和 DDG 构建 CoRS,结合 BGRU 和注意力机制,有效提升了缓冲区溢出漏洞检测的精度和召回率,降低了假阴性率。实验表明,多图特征融合和函数级细粒度检测是提升性能的关键。当前方法仅支持 C/C++ 代码的二分类检测,未来计划扩展至其他编程语言,并探索多漏洞类型的分类方法。