当前位置: 首页 > 专利查询>中山大学专利>正文

一种基于图神经网络的细粒度源代码漏洞检测方法技术

技术编号:24457014 阅读:43 留言:0更新日期:2020-06-10 15:51
本发明专利技术公开了一种基于图神经网络的细粒度源代码漏洞检测方法,包括以下:A,对于一个软件的所有源代码,抽取源代码中函数的代码属性图,将代码属性图进行向量化表示,向量化表示包括节点属性、图结构的向量化表示;B,使用图注意力网络抽取代码特征,对所有语句进行处理得到最终的数据集;C,训练漏洞检测模型,通过测试集上的效果确定最终的模型。本发明专利技术所提的源代码漏洞检测方法具有更高的自动化程度,减少对领域专家知识的依赖,大大节约代码审计的成本,提高代码审计的效率,更好地保留源代码中地语法和语义信息,同时使用图注意网络能更有目的性地学习语句的向量化表示,实现更细粒度的语句级别的漏洞检测。

A fine-grained source code vulnerability detection method based on graph neural network

【技术实现步骤摘要】
一种基于图神经网络的细粒度源代码漏洞检测方法
本专利技术涉及网络安全
,尤其涉及一种基于图神经网络的细粒度源代码漏洞检测方法。
技术介绍
软件作为信息化社会中不可或缺的一部分发挥着越来越重要的作用,它不仅和个人的日常生活密不可分也和社会的发展息息相关。然而软件是一把双刃剑,它在为个人和社会提供便利的服务的同时,软件中潜在的漏洞也可能会对个人和社会造成极大的损失。软件中的漏洞往往是不可避免地,一方面是由于软件在设计、开发、部署过程中很难做到不存在问题,另一方面则是由于商业效益原因软件开发周期不能太长,进一步增加了软件存在漏洞的风险。为了减少软件中漏洞,提高软件质量,软件漏洞检测技术应运而生。漏洞检测技术就是通过检查软件的源代码或者软件的执行过程,根据经验、已知的漏洞模式、软件的执行结果等判断软件是否存在漏洞。现有的漏洞检测技术按照是否需要执行软件分为静态的方法和动态的方法。静态的漏洞检测方法无需运行软件,通过分析软件的源代码或二进制文件,寻找软件中的漏洞,成熟的方法主要有污点分析、安全规则检查等。静态分析的方法通常需要很强的专家知识,费时费力,漏报率高。以污点分析为例,污点分析首先需要确定软件中的污点(外部输入、安全敏感的数据),通过跟踪污点在数据流和控制流中的目的地,判断污点是否会产生问题,整个过程相当依赖检测人员的领域知识,检测效率自然因人而异。动态的漏洞检测方法则需要运行软件,通过分析软件的执行结果判断软件是否存在漏洞,成熟的方法主要有模糊测试、符号执行等。模糊测试通过构造随机、非预期的程序输入,根据程序执行过程中的异常,定位可能的漏洞,但往往不能够覆盖程序的所有执行路径,漏报率较高;符号执行则通过将程序输入符号化、程序执行公式化,理论上能够计算并测试所有的执行路径,但是由于求解开销大的问题,难以在日常开发中普及。除了上述较为成熟的漏洞检测方法,基于机器学习、深度学习的检测方法也逐渐走向实际应用中。针对源代码中的漏洞检测,现有的基于机器学习的方法一方面需要依赖领域专家提取特征,另一方面则是检测漏洞通常在文件级别和函数级别,检测的粒度还需细化;而现有的基于深度学习的方法的检测粒度同样仍需细化,此外源代码还需要转化成合适的中间表示以便于使用深度学习算法进行学习。
技术实现思路
有鉴于现有技术的上述缺陷,本专利技术所要解决的技术问题是提供一种基于图神经网络的细粒度源代码漏洞检测方法,以代码属性图作为源代码的中间表示,使用图注意力网络学习语句的向量表示,最终结合深度神经网络实现语句级别的细粒度漏洞检测,解决了现有漏洞检测方法漏报率高、严重依赖领域专家知识、检测粒度过大、源代码欠缺合适中间表示的问题。为实现上述目的,本专利技术提供了一种基于图神经网络的细粒度源代码漏洞检测方法,包括以下步骤:步骤A,对于一个软件的所有源代码,抽取源代码中函数的代码属性图,将代码属性图进行向量化表示,向量化表示包括节点属性、图结构的向量化表示;步骤B,使用图注意力网络抽取代码特征,将向量化表示的代码属性图输入到图注意力网络中,学习得到节点的抽象向量表示,从节点向量表示中提取函数中每一语句的向量表示x,根据语句是否存在漏洞,为语句添加标签y,对所有语句进行处理得到最终的数据集;步骤C,训练漏洞检测模型,将数据集分为训练集、测试集,将训练集的数据输入到一个卷积神经网络中进行训练,通过在测试集上的效果进行网络参数的调整,确定最终的模型。进一步地,所述步骤A具体为:步骤A-1),将代码属性图的节点进行向量化表示。代码属性图的节点属性包含代码和类型两个属性;代码属性的内容为标志序列,以所有的标志的集合作为词库,使用词嵌入模型将标志转换成数值向量表示,进一步将代码属性表示成标志向量的均值Vcode;类型属性表示节点的类型,使用一位热编码将其表示成数值向量Vtype,最终节点属性Vnode由Vcode和Vtype拼接而成;步骤A-2),将代码属性图的图结构进行向量化表示。代码属性图的图结构由邻接矩阵A表示,代码属性图中边的类型包括抽象语法树的边EAST、控制流图的边ECFG,在邻接矩阵中用1表示EAST,用2表示ECFG,最终一个函数的代码属性图表示为为G(V,A),V为图中所有的节点向量列表,A为图的邻接矩阵。进一步地,所述步骤B中图注意力网络采用监督学习方法训练得到,具体为:步骤B-1),首先根据漏洞数据库的信息标记函数是否存在漏洞,其次将函数代码属性图的向量化表示G(V,A)进行标准化处理,根据所有函数代码属性图节点数的分布,选择合适的数值作为标准节点数,对过大的代码属性图进行裁剪,对过小的代码属性图添加孤立的无属性节点,得到标准化表示G′(V′,A′);步骤B-2),最后将G′(V′,A′)和相应的标签输入到图注意力网络中,使用n次k折交叉验证方法评估训练的效果,当训练模型在测试集上的F1值达到一个相对平稳值后,从图注意网络的最后一个图注意卷积层输出节点的向量化表示;步骤B-3),进一步从节点向量表示中提取函数中每一语句的向量表示x,根据漏洞数据的信息确定语句是否存在漏洞,为语句添加标签y,对所有语句进行处理得到最终的数据集。进一步地,所述步骤B-2中训练模型在测试集上的F1值由以下公式计算得到:其中,TP、FP、TN、FN分别表示真正例(TruePositive)、假正例(FalsePositive)、真反例(TrueNegative)、假反例(FalseNegative);在函数级别的漏洞检测中,真正例表示测试样本实际为含漏洞函数,预测结果为含漏洞函数;假正例表示测试样本实际为不含漏洞函数,预测结果为含漏洞函数;真反例表示测试样本实际为不含漏洞函数,预测结果亦为不含漏洞函数;假反例表示测试样本实际为含漏洞函数,预测结果为不含漏洞函数。进一步地,所述步骤B-3中y为0表示语句没有漏洞,为1则表示语句存在漏洞。进一步地,所述卷积神经网络由一个输入层、数个卷积层和全局池化层、数个全连接层、一个输出层组成,网络参数的由具体的数据集确定,具体需要调试的参数包括卷积层和最大池化层的层数、全连接层的层数、各层的单元数、卷积核的大小、学习率、训练批次的大小、激活函数的选择、epoch值。本专利技术的有益效果是:本专利技术所提的源代码漏洞检测方法具有更高的自动化程度,减少对领域专家知识的依赖,大大节约代码审计的成本,提高代码审计的效率。而相较于其它使用深度学习进行漏洞检测的方法,本方法基于代码属性图能更好地保留源代码中地语法和语义信息,同时使用图注意网络能更有目的性地学习语句的向量化表示,实现更细粒度的语句级别的漏洞检测。以下将结合附图对本专利技术的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本专利技术的目的、特征和效果。附图说明图1是本专利技术实施例的总体框架图。图2是本专利技术实施例的示例函数图。图3是本专利技术实施例的示例函数代码属性图。图4是本专利技术实施例的节点本文档来自技高网
...

【技术保护点】
1.一种基于图神经网络的细粒度源代码漏洞检测方法,其特征在于,包括以下步骤:/n步骤A,对于一个软件的所有源代码,抽取源代码中函数的代码属性图,将代码属性图进行向量化表示,向量化表示包括节点属性、图结构的向量化表示;/n步骤B,使用图注意力网络抽取代码特征,将向量化表示的代码属性图输入到图注意力网络中,学习得到节点的抽象向量表示,从节点向量表示中提取函数中每一语句的向量表示x,根据语句是否存在漏洞,为语句添加标签y,对所有语句进行处理得到最终的数据集;/n步骤C,训练漏洞检测模型,将数据集分为训练集、测试集,将训练集的数据输入到一个卷积神经网络中进行训练,通过在测试集上的效果进行网络参数的调整,通过测试集上的效果确定最终的模型。/n

【技术特征摘要】
1.一种基于图神经网络的细粒度源代码漏洞检测方法,其特征在于,包括以下步骤:
步骤A,对于一个软件的所有源代码,抽取源代码中函数的代码属性图,将代码属性图进行向量化表示,向量化表示包括节点属性、图结构的向量化表示;
步骤B,使用图注意力网络抽取代码特征,将向量化表示的代码属性图输入到图注意力网络中,学习得到节点的抽象向量表示,从节点向量表示中提取函数中每一语句的向量表示x,根据语句是否存在漏洞,为语句添加标签y,对所有语句进行处理得到最终的数据集;
步骤C,训练漏洞检测模型,将数据集分为训练集、测试集,将训练集的数据输入到一个卷积神经网络中进行训练,通过在测试集上的效果进行网络参数的调整,通过测试集上的效果确定最终的模型。


2.如权利要求1所述的一种基于图神经网络的细粒度源代码漏洞检测方法,其特征在于,所述步骤A具体为:
步骤A-1),将代码属性图的节点进行向量化表示,代码属性图的节点属性包含代码和类型两个属性;代码属性的内容为标志序列,以所有的标志的集合作为词库,使用词嵌入模型将标志转换成数值向量表示,进一步将代码属性表示成标志向量的均值Vcode;类型属性表示节点的类型,使用一位热编码将其表示成数值向量Vtype,最终节点属性Vnode由Vcode和Vtype拼接而成;
步骤A-2),将代码属性图的图结构进行向量化表示,CPG图结构由邻接矩阵A表示,代码属性图中边的类型包括抽象语法树的边EAST、控制流图的边ECFG,在邻接矩阵中用1表示EAST,用...

【专利技术属性】
技术研发人员:金舒原吴跃隆
申请(专利权)人:中山大学
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1