ACM Transactions on Software Engineering and Methodology(TOSEM)
ABSTRACT
作者针对目前基于机器学习的漏洞检测方法的不足,提出了一种新的方法,即同时考虑代码中的控制流、结构化信息以及跨函数的数据流信息,此外还利用了最新的图神经网络进行嵌入表示。作者将该方法实现为DeepWuKong模型,并使用现实世界中105428个C\C++程序进行评估,实验结果表明在静态代码分析问题中将传统程序分析和深度学习进行有效结合具有广阔的应用前景。
INTRODUCTION
现有基于机器学习的静态漏洞检测方法总体思路是构建一个检测模型,通过样本训练捕获易受攻击程序与其所提取程序特征之间的相关性,随后便可利用训练好的模型检测新程序中是否存在漏洞。然而这些方法大多侧重于检测低级内存错误,例如缓冲区溢出和释放后使用。然而,针对现实世界中的复杂漏洞,现有方法仍存在以下几个问题:
- 未执行过程间程序依赖性分析,即未考虑函数间的调用关系,仅可以得到局部函数的代码特征
- 常采用Word2Vec、Doc2Vec提取浅层代码特征,如代码标记、抽象语法树,而未考虑更全面的特征代码,如控制依赖、数据依赖
- 现有方法以粗粒度的方式在函数或文件级别检测漏洞,这种粒度的检测对开发人员精确定位并修复漏洞帮助不大
作者提出了DeepWuKong,一种基于深度学习的新方法,即利用图神经网络对代码的文本和结构化信息进行嵌入表示,以此来检测常见的C\C++漏洞。实际上,该方法主要对源代码特征提取和神经网络两部分提出了创新,将传统程序分析和深度学习进行了有效结合,并结合图神经网络挖掘代码的结构化语义。与传统的静态漏洞检测器和先进的基于深