a山东省计算机网络重点实验室,山东省计算机科学中心(济南国家超级计算机中心),齐鲁工业大学(山东科学院),济南250014,中国b北京邮电大学网络空间安全学院,北京100876,中国c公共大数据国家重点实验室,贵州大学计算机科学与技术学院,贵阳550025
0 Abstract
漏洞检测是维护网络空间安全的有效手段。机器学习方法由于其准确性和自动化的优势,在软件安全领域引起了人们的广泛关注。然而,目前的研究主要集中在训练数据和测试数据属于同一域的域内漏洞检测上。由于应用场景、编码习惯等因素,不同软件项目中的漏洞可能服从不同的概率分布。当机器学习方法应用于一个全新的项目时,这种差异会影响它们的性能。为了解决这个冷启动问题,我们提出了一个使用图嵌入和深度域自适应(VulGDA)的跨域漏洞检测框架。它以多种跨域方式工作,包括零样本方式,即目标域中没有标记数据可用于训练。将VulGDA分解为图嵌入和域自适应。在图嵌入阶段,我们将源代码中的样本转换为图表示,其中元素根据其语法和语义关系直接连接。然后,我们将来自图中定义的邻居和边的信息聚合为实值向量。通过图形嵌入,VulGDA提取了全面的漏洞特征 ...
0 Abstract
代码漏洞检测对于软件安全预防至关重要。大规模软件代码中的漏洞注释非常繁琐且具有挑战性,这需要领域专家花费大量时间进行注释。这项工作提供了CPVD,这是一种跨域漏洞检测方法**,基于“学习使用一个具有丰富漏洞标签的项目快速预测另一个项目的漏洞标签”的挑战CPVD使用代码属性图来表示代码,并使用图注意力网络和卷积池网络来提取图特征向量。**在跨域漏洞检测的域自适应表示学习阶段,它减少了源域和目标域数据之间的分布。在本文中,我们在不同的真实世界项目代码上相互测试。与没有域自适应的方法和基于自然语言处理的域自适应方法相比,CPVD更通用,在跨域漏洞检测任务中表现更好。具体而言,对于chr_deb、qemu、libav和sard这四个数据集,它们的F1得分分别为70.2%、81.1%、59.7%和78.1%,AUC分别为88.4%、86.3%、85.2%和88.6%。
代码属性图,跨域漏洞检测,域自适应表示学习,图注意力网络。
1 Intro or Overview
1.1 Problem and Challenge
在代码漏洞检测任务中,VulDeePecker、μVul ...
0 Abstract
许多研究者已开始应用深度学习算法来检测源代码的漏洞。然而,现有方法的检测结果仍然不够准确。大多数这些方法将程序源代码直接视为自然语言。这些方法可能会忽略特定于程序代码的结构信息,而这些信息是代码构成语义的关键部分。在本文中,我们提出了一种名为CEVulDet的新型漏洞检测方法。**首先,我们采用中心性分析来从PDG中去除不重要的节点,以获得保留程序重要部分的新图。其次,我们提出了一种新的程序语义提取方法,该方法获取特征向量以表示程序代码和图边信息的语义信息。它可以借助模型解释技术定位漏洞触发路径。**最后,我们的方法提取的向量被输入到CNN中训练漏洞检测器。在我们的实验中,我们评价了CEVulDet在一个包含33,360个函数的数据集上的性能,其中包括12,303个有漏洞的函数和21,057个无漏洞的函数。实验结果表明,CEVulDet远远优于基于规则的检测器,并超越了最先进的基于深度学习的检测器。CEVulDet在准确率、精确度、召回率和F1指标方面分别提高了3.2%、3.4%、5.1%和4.2%。
1 Intro or Overview
1.1 Problem ...
Devign: Effective Vulnerability Identification by Learning Comprehensive Program Semantics via Graph Neural Networks:NIPS(A) 2019,Yaqin Zhou et al.
0 Abstract
本文提出了Devign模型,一个基于GNN的源代码漏洞检测模型,使用GNN学习丰富的代码语义信息。该模型包括一个Conv模块,其功能是提取有用的特征来进行graph-level的分类。该模型在4个大型开源C项目上进行训练和测试,结果表明Devign明显优于现有技术,平均提高了10.51%的准确率和8.68%的F1值。
1 Intro or Overview
1.1 Problem and Challenge
1.2 Motivation
1.3 Contribution
本文提出了一种基于复合代码表示的图神经网络模型Devign,可以对程序语义信息进行完整的提取,用以各种捕捉漏洞特征。在复合代码表示中,以AST为中心,将不同级别的数据依赖和控制依赖编码为联合图,其中不同类型 ...
0 Abstract
软件漏洞的爆炸性增长对系统安全构成了严重威胁,已成为当今亟待解决的问题之一。然而,现有的漏洞检测方法在达到检测准确性、效率和适用性之间的平衡方面仍然面临局限性。遵循分而治之的策略,本文提出了TrVD(基于抽象语法树分解的漏洞检测器)来揭示源代码片段中隐含的指示语义,以实现准确高效的漏洞检测。为了便于捕捉细微的语义特征,TrVD使用一种新的分解算法将代码片段的AST转换为大小和深度受限的有序子树集。因此,通过精心设计的树结构神经网络,可以有效地收集每个子树的语义。最后,使用Transformer风格的编码器将所有子树的长程上下文语义聚合到一个特定于漏洞的向量中,以表示目标代码片段。在由不同的真实世界和合成漏洞样本组成的五个大型数据集上进行的广泛实验证明了TrVD在检测漏洞存在和确定漏洞类型方面相对于SOTA方法的性能优势。消融研究也证实了TrVD核心设计的有效性。
1 Intro or Overview
1.1 Problem and Challenge
可用性
其他被广泛采用的代码表示包括CFG、PDG和各种基于图形的变体。这些表示更明确地描述了代码元素之间的控制 ...
0 Abstract
包括深度学习(DL)在内的机器学习(ML)的进步使几种方法能够隐式学习易受攻击的代码模式,从而自动检测软件漏洞。最近的一项研究表明,尽管取得了成功,但现有的基于ML/DL的漏洞检测(VD)模型在区分两类漏洞和良性代码方面的能力有限。我们提出了DEEPVD,这是一种基于图的神经网络VD模型,强调漏洞和良性代码之间的类分离特征。DEEPVD在不同的抽象级别上利用了三种类型的类分离功能:**语句类型(类似于词性标记)、后支配树(涵盖常规执行流)和异常流图(涵盖异常和错误处理流)。**我们使用13130种易受攻击的方法,在303个项目的真实世界漏洞数据集中进行了几个实验来评估DEEPVD。我们的研究结果表明,与最先进的基于ML/DL的VD相比,DEEPVD的准确率相对提高了13%–29.6%,召回率为15.6%–28.9%,F评分为16.4%–25.8%。我们的消融研究证实,我们设计的功能和组件有助于DEEPVD实现漏洞和良性代码的高度可分离性。
1 Intro or Overview
1.1 Problem and Challenge
提出了DEEPVD,这是一种基于图 ...
0 Abstract
提出了一个基于混合语义的图神经网络漏洞挖掘系统HyVulDect,该系统基于漏洞的原因构建了一个复合语义代码属性图用于代码表示。使用门控图神经网络来提取深层语义信息。由于大多数漏洞都与数据流相关,我们使用污点分析来提取污点传播链,使用BiLSTM模型来提取上下文的令牌级特征,最后使用分类器对融合特征进行分类。我们引入了一种双重关注机制,使模型能够专注于与漏洞相关的代码,使其更适合于漏洞挖掘任务。实验结果表明,HyVulDect优于现有的最先进的方法,在基准数据集上可以实现92%的准确率。与基于规则的静态挖掘工具Flawfinder、RATS和Cppcheck相比,它具有更好的性能,可以有效地检测实际的CVE源代码漏洞。
1 Intro or Overview
1.1 Problem and Challenge
现有的软件往往是大规模和复杂的,项目的代码量急剧增加。简单使用手动审计代码的成本非常高,而且很难发现触发条件复杂的漏洞。机器学习和深度学习的发展也被广泛用于软件漏洞挖掘。基于传统机器学习的方法需要手动提取漏洞的特征,并依赖于大量的专家知识。基于深度学习方法, ...
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的全名为抽象语法树,是代码解析器或者编译器产生的一种代码的中间表示形式,是很多其它代码表示基础。 ...