论文部分内容阅读
计算机软件应用于各行各业,已经成为社会发展的支柱性产业之一,在国计民生中占据着重要的地位。一旦软件系统遭受到攻击,就会给社会带来巨大的损失。如何及时发现软件程序中的潜在漏洞,尽早修复,以避免造成更大的损失,这对于保护软件提供商和用户的权益至关重要。在软件生命的早期阶段,对软件源代码进行漏洞检测,就可以及早的发现潜在漏洞。目前已有的源代码漏洞检测方案主要分为基于规则的检测和基于学习的检测方法,前者由于规则覆盖不全往往导致误报率较高;而后者由于目前机器学习的编码方式对程序语义表达欠缺致使准确率结果提升有限。为了解决以上方法存在的缺陷,进一步提升源代码漏洞检测的准确率,本文提出一种基于图神经网络的源代码漏洞检测方法Graph VDS,该方法借助图结构充分表达源代码语义关系,通过训练图卷积网络模型,检测源代码图是否含有漏洞。本文的主要研究内容如下:(1)本文系统的对当前主流的源代码漏洞检测机制进行分析,详细介绍了已有方法的基本原理、技术特点和存在的缺陷。总结了目前源代码漏洞检测普遍存在的漏洞规则覆盖不全、程序语义表达欠缺的问题,并针对性提出了一种基于图神经网络的源代码漏洞检测方案。(2)针对传统机器学习中程序语义表达欠缺,致使准确率不高的问题,本文研究如何设计源代码的图表示方案。通过构造语法图、数据流图、控制流图、函数调用图,精确表达漏洞代码的语义关系,为训练模型提供准确的数据输入。(3)在准确获得漏洞代码语义表达的基础上,本文探讨了如何构造准确的图神经网络模型进行源代码漏洞检测,围绕源代码中可能导致漏洞的Sink函数调用模块,提取与Sink函数调用相关的代码子图,将代码图输入图神经网络,进行网络模型的训练或漏洞的检测。(4)针对本文提出的方法设计并实现原型系统Graph VDS,Graph VDS系统对Java和C/C++编程语言的多个数据集进行实验评估,实验结果表明,利用图网络模型,将F1值提高7.36%;为了验证系统在真实环境中的检测能力,系统在node-0.7.4-release上进行实验,发现了三个已披露漏洞和一个未披露漏洞。