Automated Vulnerability Detection in Source Code Using Deep Representation Learning
作者: C. Seas, G. Fitzpatrick, J. A. Hamilton, M. C. Carlisle
分类: cs.CR, cs.AI
发布日期: 2026-02-26
期刊: 2024 IEEE 14th Annual Computing and Communication Workshop and Conference (CCWC), Las Vegas, NV, USA, 2024, pp. 0484-0490
DOI: 10.1109/CCWC60891.2024.10427574
💡 一句话要点
提出基于卷积神经网络的源代码漏洞自动检测方法,提升C语言漏洞检测召回率。
🎯 匹配领域: 支柱二:RL算法与架构 (RL & Architecture)
关键词: 源代码漏洞检测 卷积神经网络 深度学习 C语言 软件安全
📋 核心要点
- 现有软件漏洞检测方法面临挑战,静态分析器误报率高,人工审核成本高昂。
- 提出基于卷积神经网络的深度学习方法,自动学习代码特征,进行漏洞检测。
- 实验结果表明,该方法在C语言漏洞检测中,相较于现有方法,提高了召回率并降低了误报率。
📝 摘要(中文)
本文提出了一种基于卷积神经网络的源代码漏洞自动检测模型,用于识别C代码中的漏洞。该模型使用两个互补的数据集进行训练:一个是Draper Labs使用三个静态分析器生成的机器标记数据集,另一个是NIST SATE Juliet人工标记数据集。与Russell等人先前的工作不同,本文专注于C程序,从而能够针对该语言专门化和优化检测技术。在去除重复数据后,输入被标记化为91个token类别,类别值被转换为二进制向量以节省内存。第一层卷积层被设计为完整地呈现token的编码给滤波器。使用两个卷积和池化层,然后是两个全连接层,将程序分类到常见的弱点枚举类别或“干净”类别。在保持高精度的情况下,本文获得了比Russell等人先前工作更高的召回率。此外,在自定义的Linux内核数据集上,证明了该模型能够以较低的误报率发现复杂代码中的真实漏洞。
🔬 方法详解
问题定义:现有源代码漏洞检测方法,如静态分析器,存在误报率高的问题,导致人工审核成本居高不下。深度学习方法在漏洞检测领域具有潜力,但现有工作在C语言上的优化不足,且在复杂代码(如Linux内核)上的表现有待提升。
核心思路:利用卷积神经网络(CNN)自动学习C代码的特征表示,从而实现高效的漏洞检测。通过专门针对C语言的token化和网络结构设计,优化模型在C代码上的性能。
技术框架:该模型主要包含以下几个阶段:1) 数据预处理:去除重复数据,将C代码token化为91个类别,并将类别值转换为二进制向量。2) 卷积层:使用两层卷积层提取代码特征。第一层卷积层被设计为完整地呈现token的编码给滤波器。3) 池化层:在每个卷积层后使用池化层,降低特征维度。4) 全连接层:使用两个全连接层进行分类,将程序分类到常见的弱点枚举类别或“干净”类别。
关键创新:该方法专注于C语言,并针对C语言的特性进行了优化,包括token化方式和网络结构设计。与先前工作相比,该方法在C语言漏洞检测上取得了更高的召回率,同时保持了较高的精度。此外,该方法在复杂代码(如Linux内核)上的表现也得到了验证。
关键设计:1) Token化:将C代码token化为91个类别,并转换为二进制向量,以节省内存。2) 卷积核大小:第一层卷积层被设计为完整地呈现token的编码给滤波器,这意味着卷积核的大小与token的编码长度相匹配。3) 数据集:使用两个互补的数据集进行训练,包括机器标记数据集和人工标记数据集,以提高模型的泛化能力。4) 损失函数和优化器:论文中未明确说明,属于未知信息。
🖼️ 关键图片
📊 实验亮点
实验结果表明,该方法在C语言漏洞检测中,在保持高精度的情况下,获得了比Russell等人先前工作更高的召回率。此外,在自定义的Linux内核数据集上,该方法能够以较低的误报率发现复杂代码中的真实漏洞。具体性能提升数据未在摘要中给出,属于未知信息。
🎯 应用场景
该研究成果可应用于软件安全领域,用于自动化源代码漏洞检测,降低人工审核成本,提高软件安全性。该技术可集成到软件开发生命周期中,在代码提交前进行自动扫描,及时发现和修复潜在漏洞,减少安全风险。未来可扩展到其他编程语言和更复杂的漏洞类型。
📄 摘要(原文)
Each year, software vulnerabilities are discovered, which pose significant risks of exploitation and system compromise. We present a convolutional neural network model that can successfully identify bugs in C code. We trained our model using two complementary datasets: a machine-labeled dataset created by Draper Labs using three static analyzers and the NIST SATE Juliet human-labeled dataset designed for testing static analyzers. In contrast with the work of Russell et al. on these datasets, we focus on C programs, enabling us to specialize and optimize our detection techniques for this language. After removing duplicates from the dataset, we tokenize the input into 91 token categories. The category values are converted to a binary vector to save memory. Our first convolution layer is chosen so that the entire encoding of the token is presented to the filter. We use two convolution and pooling layers followed by two fully connected layers to classify programs into either a common weakness enumeration category or as ``clean.'' We obtain higher recall than prior work by Russell et al. on this dataset when requiring high precision. We also demonstrate on a custom Linux kernel dataset that we are able to find real vulnerabilities in complex code with a low false-positive rate.