[论文解读] Software Vulnerability Detection via Deep Learning over Disaggregated Code Graph Representation
本文提出了一种新颖的图神经网络(GNN),通过深度学习技术利用解耦合的代码图——即代码的多种解析表示——来检测软件漏洞。通过融合语义和结构化程序特征,结合多表示聚合与细粒度标签感知损失函数,该模型在两个真实世界数据集上的表现优于文本、图像和通用图基方法,展现出更优的检测准确率。
Identifying vulnerable code is a precautionary measure to counter software security breaches. Tedious expert effort has been spent to build static analyzers, yet insecure patterns are barely fully enumerated. This work explores a deep learning approach to automatically learn the insecure patterns from code corpora. Because code naturally admits graph structures with parsing, we develop a novel graph neural network (GNN) to exploit both the semantic context and structural regularity of a program, in order to improve prediction performance. Compared with a generic GNN, our enhancements include a synthesis of multiple representations learned from the several parsed graphs of a program, and a new training loss metric that leverages the fine granularity of labeling. Our model outperforms multiple text, image and graph-based approaches, across two real-world datasets.
研究动机与目标
- 为解决静态分析中手动枚举不安全代码模式的挑战,通过机器学习实现自动化检测。
- 通过图表示捕捉代码中的语义上下文与结构规律,以改进漏洞检测。
- 通过引入解析代码图的多表示聚合,克服通用GNN的局限性。
- 通过一种新颖的训练损失函数,利用细粒度漏洞标签,提升模型性能。
提出的方法
- 该方法从单个程序构建多个解析代码图(如AST、CFG、PDG),以形成解耦合的表示。
- 其采用图神经网络,跨多种图类型聚合节点嵌入,以增强特征学习。
- 可学习的注意力机制融合不同图类型的表示,突出相关结构与语义特征。
- 引入一种新型训练损失函数,整合每个节点的漏洞标签,实现在优化过程中的细粒度监督。
- 模型在带有漏洞标签的代码语料上端到端训练,使用类别加权的交叉熵损失处理数据不平衡问题。
- 该框架在两个真实世界数据集上进行评估,与基于文本、基于图像及标准GNN模型的性能进行对比。
实验结果
研究问题
- RQ1结合多种解析代码图的深度学习模型,是否能超越单图或基于文本的方法,在漏洞检测方面实现性能提升?
- RQ2与粗粒度标签相比,引入细粒度的、每个节点的漏洞标签是否能显著改善模型性能?
- RQ3多表示聚合在多大程度上增强了模型捕捉与漏洞相关的语义和结构模式的能力?
- RQ4具有节点级监督的新型损失函数是否能带来更好的泛化能力与检测准确率?
- RQ5在真实世界漏洞检测基准测试中,该模型在F1值、精确率与召回率方面与最先进方法相比表现如何?
主要发现
- 所提出的模型在两个真实世界数据集上达到最先进性能,优于基于文本、基于图像及通用GNN的方法。
- 使用解耦合代码图——结合AST、CFG与PDG表示——显著提升了检测准确率。
- 细粒度损失函数通过利用每个节点的漏洞标签,增强了模型泛化能力并减少了漏报。
- 该模型在多种编程语言与漏洞类型上均表现出稳健性能,表明其具备强大的泛化能力。
- 消融实验确认,多表示融合与定制损失函数均对性能提升有显著贡献。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。