摘要

日益增长的软件脆弱性对网络与信息安全产生了极大的威胁,而脆弱性的根源在于软件源代码。现有的传统静态检测工具和基于深度学习的检测方法没有完整地表示代码特征,并且简单地使用词嵌入方法转换代码表示。所以它们的检测结果准确率低,同时有高误报率或高漏报率。为此,提出了一种基于混合代码表示的源代码脆弱性检测方法来解决代码表示不完整的问题,同时提升检测性能。首先将源代码编译为中间表示,提取程序依赖图后再基于数据流和控制流分析进行程序切片,得到结构化的特征,与此同时使用doc2vec嵌入节点语句得到非结构化的特征;接着使用图神经网络对混合特征进行学习;最后使用训练好的图神经网络进行预测和分类。为了验证所提方法的有效性,在软件保证参考数据集和真实世界数据集上进行了实验评估,检测结果的F1值分别达到了95.3%和89.6%。实验结果表明,所提方法有较好的脆弱性检测能力。