赞
踩
文章信息
会议/期刊:2022 IEEE/ACM 44th International Conference on Software Engineering (ICSE) —— CCF-A
团队:华中科技大学 Deqing Zou
分类:漏洞检测;CNN;Image
参考链接:
https://wu-yueming.github.io/
https://wu-yueming.github.io/Files/ICSE2022_VulCNN.pdf
https://github.com/CGCL-codes/VulCNN
基于代码相似性的方法 (code-similarity-based methods)
该方法主要用于检测代码克隆引起的漏洞,当检测不是由于代码克隆引起的漏洞时,会有很高的误报率
代码克隆(code clone):是指存在于代码库中两个及两个以上相同或相似的源代码片段
PDG是程序的一种graph representation,它包含源代码的数据流(data-flow)和控制流(control-flow)细节。PDG中的每个节点对应于函数中的一行代码
如何找到函数中不同代码对程序语义的贡献?
以下面的代码为例进行说明
作者指出:
VulCNN的四个步骤:Graph Extraction;Sentence Embedding;Image Generation;Classification
应用静态分析将源代码的程序语义提取到Graph表示
Degree centrality:是它所连接的节点的分数。Degree centrality通过除以图中的最大可能度来归一化。
Katz centrality:基于其邻居的中心性计算节点的中心性。
Closeness centrality:表示一个节点与网络中所有其他节点的接近程度。是节点到图中每个其他节点的最短路径长度的平均值。节点的平均最短距离越小,节点的closeness centrality越大 。
如算法1和图5所示:
background:在图像处理领域,卷积神经网络(CNN)一直是焦点,因为它不仅不需要手动预处理图像,而且还可以利用其独特的细粒度特征提取达到接近人类的水平。
不同函数中的代码行数不同,而CNN需要相同大小的图像作为输入。因此,需要确定一个阈值来将图像大小固定。图6显示了函数中代码行数的累积分布情况,可以看出超过99%的函数代码在200行以下。作者选择100行作为阈值(在4.2说明)
图7展示了CNN模型:
VulCNN中使用的参数描述如表1所示:
图10展示使用Grad-CAM++来可视化易受攻击的代码行。Grad-CAM++是一种分类判别定位技术,可以为任何基于CNN的网络生成可视化解释,而无需更改架构或重新训练。根据热图中颜色的强度,我们可以知道哪些代码行可能更容易受到攻击。
在本节,旨在回答以下问题:
显卡:1080Ti
图8实验了代码行数的不同阈值来检测漏洞
图9对比试验:
包括一种商业静态漏洞检测工具(即,Checkmarx [5]),两个开源静态分析工具(即,Flawfall [6]和RATS [12]),以及五种基于深度学习的漏洞检测方法(即,TokenCNN3 [47],VulDeePecker [41],SySeVR [40],VulDeePecker [38]和Devign [56])
构造图像的目的是便于使用基于图像的模型(即,CNN)进行漏洞检测,同时保留程序细节。因此,我们的函数图像有三层(与常规图像相同的格式),但在常规图像中的三种颜色和函数图像中的三种中心性度量之间没有严格的对应关系。
对于基于相似性的方法,可以从不同的方面来测量相似性,例如基于字符串[27,32],基于树[29,46],基于标记[30,48],基于图[37]以及它们的混合[39]。但是,它们只能检测克隆的漏洞,并且不能检测新的漏洞[41]。为了应对这一挑战,设计了基于模式的技术。
根据自动化程度,基于模式的工作可以分为三个子类别。
例如,VulDeePecker [41]首先通过切片程序收集代码小工具,然后将它们转换为相应的向量表示。最后,它使用这些向量来训练双向长短期记忆(BLSTM)模型来检测漏洞。muVulDeePecker [57]使用VulDeePecker [41]中的程序处理方法,并添加了代码注意以检测多类漏洞。Devign [56]应用一般的图神经网络来检测漏洞。它包含一个新的卷积模块,可以有效地从学习的富节点表示中提取有用的特征,用于图级分类。DeepWukong [22]将程序语义提炼为程序依赖图,并根据程序兴趣点将其拆分为多个子图。然后将这些子图输入到图神经网络中训练漏洞检测器。
在本文中,我们提出了一个新的想法,可以有效地将一个函数的源代码转换成图像,同时保持程序的语义。由此,我们设计了一个可扩展的基于图的漏洞检测系统(即,VulCNN)。对13,687个脆弱函数和26,970个非脆弱函数的数据集的评估结果表明,VulCNN上级8个最先进的脆弱性检测器(即,[5],[6],[12],[14],[15],[16],[17],[18],[19],[1为了验证VulCNN在大规模漏洞扫描方面的能力,我们对超过2500万行代码进行了案例研究。通过扫描结果,我们发现了73个未在NVD中报告的漏洞。我们已经向他们的供应商报告了这些问题,希望他们能尽快修复。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。