由于深度学习(DL)可以自动从源代码中学习特征,因此已被广泛用于源代码漏洞检测。为了实现可扩展的漏洞扫描,一些先前的研究打算通过将源代码视为文本来直接处理源代码。为了实现准确的漏洞检测,其他方法考虑将程序语义提炼成图形表示,并使用它们来检测漏洞。在实践中,基于文本的技术是可扩展的,但由于缺乏程序语义而不准确。基于图的方法很准确,但不可扩展,因为图分析通常很耗时。
在本文中,我们的目标是在扫描大规模源代码漏洞时实现可扩展性和准确性。受现有基于深度学习的图像分类的启发,该分类能够准确分析数百万张图像,我们更喜欢使用这些技术来实现我们的目的。具体来说,
我们提出了一个新颖的想法,可以在保留程序细节的同时有效地将函数的源代码转换为图像。我们实现了 VulCNN,并在 13,687 个易受攻击的函数和 26,970 个非易受攻击的函数的数据集上对其进行了评估。实验结果表明,VulCNN的准确率高于8种最先进的漏洞检测器(即Checkmarx、FlawFinder、RATS、TokenCNN、VulDeePecker、SySeVR、VulDeeLocator和Devign)。至于可扩展性,VulCNN 比 VulDeePecker 和 SySeVR 快四倍,比 VulDeeLocator 快 15 倍,比 Devign 快六倍。此外,我们还对一个超过2500万行代码的案例进行了研究,结果表明VulCNN可以检测到大规模漏洞。通过扫描报告,我们终于发现了 73 个 NVD 中未报告的漏洞。