时间:2024-05-04
王苏苏 徐阳
摘 要: 常规的漏洞检测方法通过激活函数的方式,标识出存在漏洞的代码,少有对代码中的词义进行分析,导致检测效果不佳。因此,设计了基于图神经网络的软件源码漏洞检测方法。提取软件源码漏洞特征,针对漏洞特征进行词义分析。利用图神经网络构建软件源码漏洞检测模型,对源码漏洞做二次检测,去掉重读的源码,得到正确的代码。采用对比实验,验证了该方法的检测效果更佳。
关键词: 图神经网络; 源码; 漏洞; 检测方法
中图分类号:TN919.31 文献标识码:A 文章编号:1006-8228(2023)06-29-04
Software source code vulnerability detection method based on graph neural network
Wang Susu, Xu Yang
(Jiangsu Shipping College, Nantong, Jiangsu 226009, China)
Abstract: The conventional methods of vulnerability detection identify the code with vulnerability by means of activation function, and seldom analyze the meaning of the words in the code, which results in poor detection results. Therefore, a software source code vulnerability detection method based on graph neural network is designed. The software source code vulnerability features are extracted and their word meaning is analyzed. The software source code vulnerability detection model is constructed using graph neural network, and the source code vulnerability is detected twice to remove the reread source code and get the correct code. Comparison experiments are used to verify that the method has better detection results.
Key words: graph neural network; source code; vulnerability; detection method
0 引言
软件源码漏洞是目前亟待解决的数据安全问题,设计相应的检测方法势在必行。在源码出现漏洞时,应用程序受到源码漏洞的影响,可以使攻击者在不与用户作出任何交互的条件下自行应答,从而出现信息泄露的问题。
针对软件源码漏洞问题,研究人员设计了多种解决方案。其中,基于CNN-GAP[1]可解释性模型的方法和基于关系图卷积网络的方法应用较为广泛。基于CNN-GAP可解释性模型的方法主要是通过CAM类的激活函数,对代码存在的漏洞情况进行标记,并利用CNN-GAP(卷积神经网络-全局平均池化)模型,对已经标记漏洞进行检测,检测完成之后将正确代码输出,将存在漏洞的代码进行处理,保证漏洞检测的精准度。基于关系图卷积网络的方法主要是利用RGCN(关系图卷积网络)模型[2],通过训练预测源码中的漏洞,在真实的代码漏洞上进行测试,由此提高漏洞检测精准度。以上两种方法虽然在一定程度上提高了漏洞检测的精准度,但是CNN-GAP模型并未对其他代码进行检测,相关语义特征与漏洞特征存在混淆,影响了检测效果;RGCN模型训练的漏洞虽然较为准确,但是其训练时间较长,无法适应源码漏洞检测环境,导致检测效果不佳。
图神经网络是一种拓扑图结构的数据,能够深入挖掘数据特征,其对于网络数据安全检测具有重要作用。因此,本文利用了图神经网络,设计了软件源码漏洞检测方法。
1 软件源码漏洞的图神经网络检测方法设计
1.1 提取软件源码漏洞特征
漏洞存在于计算机系统中,硬件、软件、协议等方面的漏洞,均会导致系统存在安全缺陷。源码作为程序语言,可以通过词语映射实数向量,将所有语义反映到连续向量空间中,由此检测出源码中存在的语义漏洞。由于程序语言的词向量与普通词向量不同,本文将源码中的语言利用向量化表示。本文从源码的上下文考量,量化源码输入路径,同时增加与漏洞检测相关的数据信息,利用注意力机制,将上下文源码数据融合到一起,用一个单一的向量表示,从而提取出源码漏洞特征。对于每条源码输入路径,将其转化为图神经网络作为输入数值。输入路径中的每一个节点都存在一个源码词语映射,由此构成了一个大型的节点源码语料库。在源码语料库上进行向量表示,得到词语与其对应向量的映射关系,公式如下:
[Li=min1ij=1ik-logHNodeMk|NodeMj] ⑴
式⑴中,[Li]为源码词语与向量之间的关系表达式;[NodeMk]为源码输入路径的第k个词向量;[NodeMj]为源码输入路径的第j个词向量;[H{NodeMk|NodeMj}]為节点损失函数。为了将源码中存在的漏洞检测出来,本文将源码输入路径中的漏洞信息整合到图神经网络中。任意一条源码输入路径中,通过一个或多个漏洞源码信息,则增加该条路径的漏洞权重。路径中任意一个词向量P={NodeMi,NodeMi+1,…,NodeMn},经过漏洞代码存在的漏洞节点之后,相同的权重赋予多个漏洞节点上,而这条路径上并未赋予任何权重,通过是否增加权重来判别漏洞源码输入路径与正常源码输入路径。从漏洞源码输入路径中,对每一个向量元素进行特征提取,通过图神经网络更新路径中涉及的每个权重参数,组成一个完整的漏洞特征,其表达式如下:
[Ti=?(K?Xij+n-1+B)] ⑵
[Ti1=tanh (K?Ti)] ⑶
式⑵~式⑶中,[Ti]为漏洞源码输入路径中每一个漏洞的特征参数;[?]为激活函数;[K]为权重的权值矩阵;[Xij+n-1]为漏洞源码输入路径的向量元素;[B]为偏置因子;[Ti1]为通过图神经网络重新组成的漏洞特征;[tanh]为非线性激活函数。在源码语言领域中,漏洞特征的提取,使源码漏洞词向量更加明显,将漏洞特征输入到检测模型中,模型能够对漏洞词向量进行专注检测,更有利于提高检测效果。
1.2 基于图神经网络构建软件源码漏洞检测模型
使用本文设计的检测方法,主要利用程序语言词向量来提取源码漏洞特征。此种特征提取与传统方法漏洞特征提取不同,受到主观性因素的影响,出现上下文丢失的现象。本文将漏洞特征提取精确到每个源码路径的每个词向量上,漏洞特征提取效果更佳。将漏洞特征提取之后,本文选择图神经网络检测模型来检测程序漏洞。图神经网络分类情况如图1所示。
如图1所示,本文选用的图神经网络中包括了时空网络、注意力网络、生成网络、卷积网络等内容。上文中已经利用图注意力网络,对漏洞特征进行针对性提取。在此基础上,本文随机选取了一个漏洞特征向量,随机游走在源码输入路径中,步长为5,测试次数为100。游走的过程中,碰到的其他漏洞特征向量节点定义为“邻居”。对“邻居”进行随机采集,采集到的“邻居”节点的特征向量值小于随机漏洞特征向量值,则重新采集,否则将其与随机漏洞特征向量进行聚合。聚合公式如下:
[Skj←?K?MEANSk-1jSk-1j,?j∈bj] ⑷
式⑷中,[Skj]为聚合后的漏洞信息;[MEAN]为聚合器聚合算法;[Sk-1j]为“邻居”的漏洞信息;[bj]为“邻居”的特征向量size值。将融合后的漏洞信息在图神经网络上游走,图节点不断更新直至稳定的过程中,根据递归函数施加相应的检测约束,并将实时更新的图节点进行卷积层堆叠表示[3]。在新的漏洞信息不变,图节点达到稳定的状态下,获取到了图中更高阶的邻域数据,将此数据作为图神经网络检测模型的检测数据,则构建出的检测模型表达式如下:
[Sk+1j=εjebjij1SijvKkSkj] ⑸
式⑸中,[Sk+1j]为漏洞检测模型表达式;[Sij]为节点i在j层的特征信息;[ν]为归一化因子;[Kk]为节点k的直接权重;[ε]为激活函数。通过该检测模型的训练,每个漏洞特征节点将自身的特征信息传递给邻域节点,从而将漏洞特征进一步聚合并融合。再通过激活函数,将图神经网络中的漏洞节点信息进行变换,增强模型的检测能力。无论漏洞节点与邻域节点如何变化,最终的节点中心长度保持一致。在多级权重实时更新的条件下,聚合的信息特征也逐一采集到图节点中,由此获取的表征数据更加真实,最大限度地提高了源码漏洞检测效果。
2 实验
为了验证本文设计的检测方法是否具有实用价值,本文对上述方法进行了实验分析。最终的实验结果以基于CNN-GAP可解释性模型的方法、基于关系图卷积网络的方法,以及本文设计的基于图神经网络的方法进行对比的形式呈現。具体实验过程及实验结果如下所示。
2.1 实验过程
在进行实验之前,本文选择GeForce1080GPU的实验平台[4],对本文设计的检测模型进行训练。模型训练过程中,将源码向量化,每个代码的维度为100,最长代码为200个词。本文随机选取了X源码数据集,该数据集中包含了多个代码,存在漏洞的代码较多,漏洞类型较多,更符合实验环境。为了保证实验的真实性,本文针对每一类型的漏洞进行轮流多次训练,将稳定输出的数据作为最终的实验结果。其中,X源码数据集中的CAD源码较为特殊,分隔符样式不同,检测较为困难,本文将CAD源码进行归一化处理,处理完成的代码形式如图2、图3所示。
如图2、图3所示,源码初始格式较为复杂,很难进行漏洞检测,经过处理之后,格式相对简单,可以与其他源码进行同时检测,保证检测效率。源码检测流程如图4所示。
如图4所示,在进行源码漏洞检测的过程中,经过三次检测,分别为源码检测、二次检测、词法检测,能够将源码中存在的漏洞有效地检测出来。检测完成的代码中存在的重复代码进行清除,保留下来的代码即为正确代码。本次实验引进[Precision]、[Recall]、[F1-score]等指标,对漏洞检测效果进行判定。[Precision]、[Recall]、[F1-score]等指标的计算公式如下:
[Precision=TPTP+FPRecall=TPTP+dnF1-score=2×(Precision×Recall)Precision+Recall] ⑹
式⑹中,[Precision]为漏洞检测精准度指标;[TP]为源码中没有漏洞的代码数量;[FP]为源码中存在漏洞的代码数量;[Recall]为漏洞查全指标;[DN]为[TP]中检测出的没有漏洞的代码数量;[F1-score]为[Precision]与[Recall]的平均值,该值越趋近于100%,漏洞检测的效果越好。本文将[Precision]、[Recall]、[F1-score]等值进行计算,对检测方法的检测效果进行综合判定。
2.2 实验结果
在上述实验条件下,本文随机选取了三种软件源码,分别为CAD、Hide、Show[5,6]。将三种软件源码利用检测模型进行漏洞检测。其中,[Precision]为查准率指标,[Recall]为查全率指标。[Precision]与[Recall]取平均值即为[F1-score],该值越高,软件源码漏洞检测效果越趋近于完美。在其他条件均一致的情况下,将基于CNN-GAP可解释性模型的[F1-score]值、基于关系图卷积网络的[F1-score]值,以及本文设计的基于图神经网络[F1-score]值进行对比。实验结果如表1所示。
如表1所示,CAD、Hide、Show等三种软件源码中的漏洞源码数量不同,漏洞检测效果取决于[F1-score]值的大小,当[F1-score]值=100%时,证明该检测方法的检测精准度与召回率均为100%,能够完美地检测出源码中的漏洞。在其他条件均一致的情况下,基于CNN-GAP可解释性模型方法的[F1-score]值相对较低,在85.70%~87.70%的范围内变化,主要原因在于源码的语法信息、结构信息的语义特征与漏洞特征混合在了一起,无法准确地辨别源码漏洞,导致检测效果不佳,亟需进一步改进。基于关系图卷积网络方法的[F1-score]值有所提升,在90.16%~91.90%范围内变化,主要原因在于源码中的代码数据存在注意力依赖,虽然能够找出源码存在的漏洞,但是检测时间相应增加,在相同的时间内无法找出对应的漏洞。而本文设计的基于图神经网络方法的[F1-score]值相对较高,在99.34%~100.00%的范围内变化,Show源码的漏洞检测[F1-score]值达到了100%的指标,漏洞检测效果趋近于完美,符合本文研究目的。
3 结束语
本文在图神经网络下,设计了软件源码漏洞检测方法。本文设计的检测方法主要从源码漏洞特征的角度考虑,利用[F1-score]值提高了检测效果。与其他检测方法相同的是,均利用了漏洞特征与检测模型,不同的是本文设计的方法能够对源代码进行归一化处理,更加准确地找出存在漏洞的代码,对于网络技术的发展具有重要意义。
参考文献(References):
[1] 邹权臣,张涛,吴润浦,等.从自动化到智能化:软件漏洞挖掘
技术进展[J].清华大学学报(自然科学版),2018,58(12):1079-1094
[2] 朱丽娜,马铭芮,朱东昭.基于图神经网络和通用漏洞分析框
架的C类语言漏洞检测方法[J].信息网络安全,2022,22(10):59-68
[3] 李元诚,崔亚奇,吕俊峰,等.开源软件漏洞检测的混合深度
学习方法[J].计算机工程与应用,2019,55(11):52-59
[4] LIN Guanjun, ZHANG Jun, LUO Wei, et al. POSTER:
Vulnerability discovery with function representation learning from unlabeled projects[C].The 2017 ACMSIGSAC Conference on Computer and Communications Security, New York, USA,2017:2539-2541
[5] 宋子韜,胡勇.基于图神经网络的源码漏洞检测方法研究[J].
通信技术,2022,55(5):640-645
[6] 段旭,吴敬征,罗天悦,等.基于代码属性图及注意力双向
LSTM的漏洞挖掘方法[J].软件学报,2020,31(11):3404-3420
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!