0 Abstract
当前基于机器学习的软件漏洞检测方法主要在功能级别进行。然而,这些方法的一个关键限制是,它们没有指示导致漏洞的特定代码行。这限制了开发人员有效检查和解释学习模型预测的能力,这对于将基于机器学习的工具集成到软件开发工作流中至关重要。基于图的模型在功能级漏洞检测方面表现出了良好的性能,但其在语句级漏洞检测中的能力尚未得到广泛探索。**虽然通过可解释的人工智能解释功能级预测是一个很有前途的方向,但我们在这里从完全监督学习的角度来考虑语句级软件漏洞检测任务。**我们提出了一种新的深度学习框架LineVD,它将语句级漏洞检测定义为节点分类任务。**LineVD利用图神经网络和基于转换器的模型对原始源代码标记进行编码,从而利用语句之间的控制和数据依赖性。**特别是,通过解决函数级和语句级信息之间的冲突输出,LineVD显著提高了函数代码在没有漏洞状态的情况下的预测性能。我们针对从多个真实世界项目中获得的大量真实世界C/C++漏洞进行了广泛的实验,并证明F1分数比当前最先进的技术提高了105%.
1 Intro or Overview
1.1 Problem and Challe ...
一.背景
现有的漏洞检测方法大部分只是根据给定代码片段,确认该片段是否包含漏洞(分类)。而并没有指出哪些statement有问题。因此作者提出了IVDetect。主要包括
用一个新的代码表示方法。作者基于PDG对代码进行表示(源代码用图结构表示),并从PDG提取不同的信息将其向量化。并使用FA-GCN(Graph Convolution Network with feature-attention)对其进行分类。
用可解释方法(GNNExplainer)对FA-GCN的分类结果进行解释。GNNExplainer基于edge-mask对输入图选取子图进行解释。作者试图找出是哪些statement决定了分类结果。
作者用三个数据集进行测试: Fan,Reveal,FFMPeg+Qemu
二.motivation
example:
下面展示了linux 4.6的ec_device_ioctl_xcmd方法。这个方法为CromeOS设备构造I/O控制命令。编号为CVE-2016-6156
123456789101112131415161718192021222324252627282930 ...
Modeling and Discovering Vulnerabilities with Code Property Graphs:S&P(A) 2014, Fabian Yamaguchi et al.
Abstract
本文提出了一种基于代码属性图CPG的源代码漏洞检测方法。代码属性图是包括抽象语法树AST、控制流图CFG和程序依赖图PDG的一个联合数据结构。本文通过图的遍历(graph traversals)来进行漏洞检测,检测的漏洞类别包括缓冲区溢出(buffer overflows),整数溢出(integer overflows),内存泄漏(memory disclosures),格式化字符串漏洞(format string vulnerabilities)。本文使用一个图数据库来实现该方案,并在Linux内核源代码中识别了18个以前未知的漏洞,证明了该方案的有效性。
Introduction
以上图为示例代码,介绍一下AST、CFG、PDG的含义。
AST
AST的全名为抽象语法树,是代码解析器或者编译器产生的一种代码的中间表示形式,是很多其它代码表示基础。 ...
Paper
MVP: Detecting Vulnerabilities using Patch-Enhanced Vulnerability Signatures:USENIX 2020,Yang Xiao et al.
Abstract
重复漏洞(Recurring Vulnerability)广泛存在于真实的系统中,这些漏洞通常由可重用的代码库或共享的代码逻辑导致,因此同样的漏洞很可能在其他地方也存在而未被发现。本文提出了一种新的方法MVP来检测具有低假阳性和低假阴性的重复漏洞,首先利用新的程序切片技术从漏洞函数及其补丁函数中提取漏洞和补丁的语法和语义特征。如果目标函数匹配漏洞特征,但不匹配补丁特征,则该目标函数会被识别为存在漏洞。
本文在10个开源系统上对MVP方法进行实验,结果表明,MVP显著优于目前的基于克隆和基于功能匹配的重复漏洞检测的SOTA方法;MVP检测到了通用的漏洞检测方法无法检测到的重复漏洞;MVP检测到97个新的漏洞,并获得了23个CVE认证。
Introduction
由于软件系统中代码库的重用或代码逻辑的共享(对不同用途的相似对象使用相似的处理逻辑),使得 ...
0 Abstract
为了获得代码的结构信息,当前的学习方法通常将程序抽象成图的形式(例如,数据流图,抽象语法树),然后基于安全和易受攻击的代码片段的(子)图来训练底层分类模型以进行漏洞预测。然而,这些模型仍然不足以精确检测缺陷,因为这些模型的目标是产生分类结果,而不是理解漏洞的语义,例如,关键的漏洞触发路径,这对于静态漏洞检测至关重要。本文提出了ContraFlow,这是一种选择性但精确的对比值流嵌入方法,用于静态检测软件漏洞。**ContraFlow的新颖之处在于使用自监督对比学习从预训练的路径嵌入模型中选择和保留可行的值流(也称为程序依赖)路径,从而显著减少了训练昂贵的下游模型进行基于路径的漏洞检测所需的标记数据量。**我们使用288个真实项目评估了ContraFlow,比较了八种最近的基于学习的方法。ContraFlow在信息度、标记度和F1得分方面的表现优于这八个基线方法,最高分别提高了334.1%、317.9%和58.3%,而在定位有缺陷的语句方面,ContraFlow的平均语句召回率、平均语句精度和平均IoU方面的改进分别最高提高了450.0%、192.3%和450.0% ...
摘要
软件漏洞检测目前为止还是一个待被解决的重要问题,因为每天都有很多新的漏洞被发现。使用深度学习方法进行代码漏洞检测是非常有效的,这种方式减轻了对于人为定义特征的要求。尽管深度学习在各个领域取得了巨大的成功,但在漏洞检测领域并没有被研究透彻。为了填补这一空白,本文提出了第一个使用深度学习在C/C++源代码上进行漏洞检测的系统性框架,框架名称叫做SySeVR,全称是“基于语法语义的向量表征”,该框架聚焦于如何获取包含语法和语义信息的代码表征以应用于漏洞检测。该方法检测出了15个没有在NVD中报告过的漏洞,验证了模型的有效性。
简介
假设软件漏洞是不可避免的,那关键的问题是如何更早的发现这些漏洞。基于源代码的静态检测方法包含有基于代码相似性的方法和基于模式的方法,基于代码相似性的方法只能检测与代码克隆相关的漏洞,而基于模式的方法则需要耗费大量的人力去定义模式。因此,最有效的方法是使用深度学习。
之前的VulDeepecker方法是在代码切片层级上进行漏洞检测的,这个方法有4个缺点:1)只能检测与API调用相关的漏洞;2)只包含了语义信息中的数据依赖;3)特征提取模块只用了BLSTM来实现 ...
0 Abstract
漏洞检测是软件开发生命周期中的关键组成部分。现有的漏洞检测器,尤其是基于深度学习(DL)模型的检测器,已经取得了很高的效果。尽管它们能够从给定的代码片段中检测到易受攻击的代码片段,但通常无法进一步定位与漏洞相关的精细信息,比如精确的漏洞触发位置。在本文中,我们提出了VULEXPLAINER,这是一个用于自动定位由DL-based检测器报告的粗略级易受攻击代码片段中的漏洞关键代码行的工具。我们的方法利用了代码结构和漏洞的语义。具体来说,我们利用程序切片来获得一组包含漏洞触发和漏洞依赖语句的关键程序路径,并对它们进行排名,以确定最重要的一个(即子图),作为与漏洞相关联的数据流。我们证明了VULEXPLAINER在四个最先进的基于图表示(GP)的漏洞检测器上表现一致良好,即它可以针对八种常见的C/C++漏洞以约90%的准确率标记漏洞触发代码语句,优于五种广泛使用的基于GNN的解释方法。实验结果证明了VULEXPLAINER的有效性,它提供了一个有前景的研究线索:整合程序切片和深度学习来解释易受攻击的代码片段。
1 Intro or Overview
1.1 Proble ...
0 Abstract
在这项工作中,我们提出将代码片段的基于语法的控制流图(CFG)分解为多个执行路径来检测漏洞。具体来说,给定一个代码片段,我们首先基于它的抽象语法树(AST)构建它的CFG,将这种CFG称为基于语法的CFG,并将CFG分解为从入口节点到出口节点的多个路径。接下来,我们采用预先训练的代码模型和卷积神经网络来学习具有路径内和路径间注意力的路径表示。路径的特征向量被组合为代码片段的表示,并被输入分类器以检测漏洞。将代码片段分解为多个路径可以过滤掉一些与漏洞无关的冗余信息,并帮助模型关注漏洞特征。此外,由于分解的路径通常比代码片段短,位于长代码尾部的信息更有可能被处理和学习。为了评估我们模型的有效性,我们构建了一个包含超过231k个代码片段的数据集,其中有24k个漏洞。实验结果表明,所提出的方法在精度、召回率和F1分数方面分别优于最先进的基线至少22.30%、42.92%和32.58%。我们的进一步分析调查了所提出的方法优越性的原因。
1 Intro or Overview
1.1 Problem and Challenge
漏洞检测对于保护软件系统至关重要。已经提出了基于 ...
Paper
VDSimilar: Vulnerability detection based on code similarity of vulnerabilities and patches,Hao Sun, Lei Cui,C&S(B)。
Abstract
现有的研究将漏洞检测视为一个分类问题,在捕获语义和语法相似性的同时需要大量的标记数据。本研究认为漏洞的相似性是漏洞检测的关键,本文准备了一个由漏洞和相关补丁组成的相对较小的数据集,并尝试比较漏洞之间的相似性、漏洞补丁之间的差异性来实现漏洞检测。为此,使用Siamese网络+BiLSTM+Attention作为检测模型。在OpenSSL和Linux的876个漏洞和补丁的数据集上,提出了模型VDSimilar,在OpenSSL的AUC值上达到了约97.17%,优于目前基于深度学习的漏洞检测SOTA方法。
Introduction
现有的基于代码相似性的漏洞检测方法普遍是基于代码段语法和语义的相似性来进行的,但是两份语法语义相似的代码很可能因为一丁点差别而一个有漏洞一个没有漏洞,因此,本文希望找到一个能从漏洞角度捕获相似性的方 ...
一.背景
漏洞检测具有重大的意义,针对DLVP(Deep Learning Vulnerability detection)任务,作者在对现有的漏洞检测方法(VulDeepecker, SyScVR)等测试时发现了一些问题。
在sard等合成数据集训练的模型用在真实场景下(FFMPeg, Qemu, Linux等)效果很差
在用解释方法(LEMNA等)来解释漏洞检测方法时经常发现模型学习到了无关的特征
训练/测试数据包含了许多重复
现有的方法没有解决样本类别不平衡问题
论文贡献
提出了新的漏洞检测方法Reveal
利用Chromium和Debian的修复commit构造数据集
二.数据集
2.1 现有数据集
针对数据集,作者统计的一些结果
有合成,半合成,真实 & 类别平衡, 真实 & 类别不平衡
合成类:包括Juliet。使用已知漏洞pattern构造。
半合成:包括SARD和NVD。它们是从软件产品中提取,并做了一定修改。
真实:从代码仓库(github)的commit中提取,来自一些bug fix版本。
2.2 Reveal数据集
从Linux De ...