原文标题:SEVulDet: A Semantics-Enhanced Learnable Vulnerability Detector
原文作者:Tang Z, Hu Q, Hu Y, et al.
原文链接:https://jiongyichen.github.io/pubs/DSN_22.pdf
发表会议:2022 52nd Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN)
笔记作者:[email protected]
笔记小编:[email protected]
近年来越来越多的工作采用基于深度学习的漏洞识别框架来对漏洞模式进行识别。然而,不能全面地对源码中的语义进行捕获或是采用适当的神经网络设计仍是大多数现有工作存在的问题。在此之上作者提出了SEVulDet,其具备两个特点:(1)SEVulDet采用了一种路径敏感的代码切片方法来提取足够的路径语义和控制流逻辑至code gadget;(2)同时在结合多层注意力机制的CNN网络中插入一层中空间金字塔池化层,使得SEVulDet能够处理变长的code gadget语义,避免由传统方法(截断或填充)所导致的代码语义缺失。
针对现有深度学习框架中存在的影响漏洞识别主要缺陷——语义缺失,作者采用一个例子对其进行了描述。
为了更好地描述,作者做了以下的一些定义:
接着作者指出了此前的两项同领域工作[1][2]在提取code gadget时存在的问题,即路径不敏感(path insensitive)。
根据code gadget的的定义,我们首先找到special token——strncpy,然后再分别提取strncpy数据依赖的三个记号(dest,data,n),提取记号相应前序与后序的代码切片,结果如step II所示,最终根据这些代码在文件中的位置与调用顺序组合形成code gadget。然而此时存在漏洞的代码与不存在漏洞的代码提取结果是一致的,当模型的输入不发生改变时,其输出也不会发生改变,这也就意味着当模型对这些代码进行分类时,其准确率是不会改变的。
为了解决上述的问题,作者从两个方向出发:
在此基础上作者给出了path-sensitive code gadget的定义:
下图展示了SEVulDet的训练阶段与检测阶段,训练阶段相较于检测阶段多了打标签这一环节。整体上可分为两个步骤:(1)从源代码中提取必需的语法语义至路径敏感的 code gadget;(2)使用模型学习潜在的漏洞模式。
code gadget 的生成大体分为如下几个步骤:
作者在CNN中设计了多层注意力机制与一个空间金字塔池化层,后者消除了RNN中对于code gadget预定义长度的限制。
作者首先使用word2vec将token进行向量化,然后设计token注意力来学习哪些token是对检测有帮助的。
在多层注意力机制的第二部分作者采用了[3]的Channel Attention和Spatial Attention,并将二者进行了串联。然后便是采用了空间金字塔池化层进行变长优化。
作者在验证时采用了两组通用的数据集Software Assurance Reference Dataset (SARD)和Nation Vulnerability Dataset (NVD)。
作者设计以下研究问题并作出了解答:
变长路径敏感code gadget带来的额外语义信息是否对于漏洞识别有帮助?
作者采用了定长的网络结构进行对比,并且设置了不同的条件:(1)仅提取数据与控制依赖的code gadget——CG;(2)在CG的基础上加上了路径语义——PS-CG。
多层注意力机制是否使得SEVulDet更加有效?
模型已开源:https://github.com/SEVulDet/SEVulDet
参考文献:
[1]Li Z, Zou D, Xu S, et al. Vuldeepecker: A deep learning-based system for vulnerability detection[J]. arXiv preprint arXiv:1801.01681, 2018.
[2]Zou D, Wang S, Xu S, et al. μ VulDeePecker: A Deep Learning-Based System for Multiclass Vulnerability Detection[J]. IEEE Transactions on Dependable and Secure Computing, 2019, 18(5): 2224-2236.
[3]Woo S, Park J, Lee J Y, et al. Cbam: Convolutional block attention module[C]//Proceedings of the European conference on computer vision (ECCV). 2018: 3-19.