一种基于机器学习的代码漏洞检测方法技术

技术编号:38399562 阅读:10 留言:0更新日期:2023-08-07 11:12
本发明专利技术提供一种基于机器学习的代码漏洞检测方法,属于数据处理技术领域,具体包括:获取源代码,并对所述源代码中的标识符进行识别,并对所述标识符进行标准化处理得到标准化源代码;基于所述标准化源代码,采用文本向量转换算法,将所述标准化源代码转化为智能算法所能识别的向量样本;基于所述向量样本,采用基于智能算法的漏洞识别模型,得到所述源代码的漏洞,从而进一步提升了大规模软件的漏洞识别的效率和准确性。别的效率和准确性。别的效率和准确性。

【技术实现步骤摘要】
一种基于机器学习的代码漏洞检测方法


[0001]本专利技术属于数据处理
,具体涉及一种基于机器学习的代码漏洞检测方法。

技术介绍

[0002]信息化的推进使得软件系统功能愈加复杂,而由设计缺陷和实现错误引起的软件漏洞不可避免。频发的软件安全事件和持续增长的披露漏洞数表明软件安全形势仍然十分严峻。源代码漏洞检测是提升软件质量与安全性,以及减少漏洞数和降低漏洞修复成本的重要手段。静态分析在不运行软件的情况下对源代码进行分析来检测代码缺陷,但依赖于专家制定规则,存在主观性较强,规则不完善等问题。动态测试执行目标程序并监控其运行状况来挖掘漏洞,但其存在分析效率低和代码覆盖率低导致的漏报率高、资源消耗大、复杂漏洞难以发现等问题。
[0003]为了实现对代码漏洞的检测,在授权专利技术专利授权公告号CN111259394B《一种基于图神经网络的细粒度源代码漏洞检测方法》中通过使用图注意力网络抽取代码特征,对所有语句进行处理得到最终的数据集;训练漏洞检测模型,通过测试集上的效果确定最终的模型,从而具有更高的自动化程度,减少对领域专家知识的依赖,大大节约代码审计的成本,提高代码审计的效率,但是却存在一下技术问题:
[0004]1、上述的漏洞检测方法一般仅适用于小规模软件,在面对大规模且复杂度较高的软件系统时,通常无法满足安全性分析需求。
[0005]2、未能将源代码标准化表示,因为程序员个人编码习惯不同而有所区别的标识符,如变量名、函数名等,如果直接使用未经标准化处理的源代码,那么可能会导致除了命名方式上有区别的源代码,其得到的图节点信息不同,最终导致编码得到的特征矩阵不同。这一误差导致传入后续模型中的数据中含有大量噪声信息,可能会给最终的判断结果带来干扰。此外,当代码数量增长时,相应的标识符词汇数量成指数增长,给词向量化模型带来巨大挑战。
[0006]基于上述技术问题,需要设计及一种基于机器学习的代码漏洞检测方法。

技术实现思路

[0007]本专利技术的目的是提供一种基于机器学习的代码漏洞检测方法。
[0008]为了解决上述技术问题,本专利技术第一方面提供了一种基于机器学习的代码漏洞检测方法,包括:
[0009]S11获取源代码,并对所述源代码中的标识符进行识别,并对所述标识符进行标准化处理得到标准化源代码;
[0010]S12基于所述标准化源代码,采用文本向量转换算法,将所述标准化源代码转化为智能算法所能识别的向量样本;
[0011]S13基于所述向量样本,采用基于智能算法的漏洞识别模型,得到所述源代码的漏
洞。
[0012]通过对标识符进行标准化处理,从而避免了识别误差导致传入后续模型中的数据中含有大量噪声信息,可能会给最终的判断结果带来干扰的技术问题的出现,特别是当代码数量增长时,相应的标识符词汇数量成指数增长,给词向量化模型带来巨大挑战,这也为进行大规模且复杂度较高的软件系统的漏洞准确高效的识别奠定了基础。
[0013]通过进行向量样本的识别,从而可以使得源代码的识别变得更加准确高效,特别是对于大规模且复杂度较高的软件系统,能够更加准确高效的实现对代码的转化,从而提升了识别的准确性和效率。
[0014]进一步的技术方案在于,所述标识符至少包括变量名、函数名。
[0015]进一步的技术方案在于,得到标准化源代码的具体步骤为:
[0016]S21获取源代码的编程人员,获取所述编程人员在进行编程操作过程中的历史标识符;
[0017]S22获取所述源代码中的声明的标识符,并将其作为声明标识符;
[0018]S23基于所述声明标识符和所述历史标识符为基础,构建标准化映射表,将所述声明标识符和所述历史标识符转化为标准化命名标识符,基于所述标准化映射表,对所述源代码进行标准化处理,得到标准化源代码。
[0019]通过同时考虑声明标识符和历史标识符,从而使得标准化映射表能够充分实现对标识符的识别,防止某些没有进行全局声明或者未能准确识别得到声明导致的标准化不够彻底或者准确的技术问题,从而进一步保证了最终的漏洞识别结果的准确性。
[0020]进一步的技术方案在于,在基于智能算法的漏洞识别模型对所述向量样本进行漏洞识别之前,需要对所述向量样本进行批量归一化处理得到归一化向量样本。
[0021]通过进行批量归一化处理,从而具有加快网络的训练和收敛的速度、控制梯度爆炸并防止梯度消失以及防止发生过拟合这三个作用。与一般的归一化不同,批量归一化是嵌入在深度神经网络内部层之间的一种运算,通常用于激活函数前,使得梯度传递更加通畅。批量归一化通过规范化层输入来解决内部协变量移位问题。
[0022]进一步的技术方案在于,使用注意力模块对所述归一化向量样本进行注意力增强操作。
[0023]进一步的技术方案在于,进行注意力增强操作的具体步骤为:
[0024]S31对所述归一化向量样本进行挤压操作,使用全局平均池化将一个通道的整个空间特征转换为一个全局空间特征作为该通道的表示;
[0025]S32采用基于两个全连接层的神经网络结构的注意力增强操作算法,首先采用第一个全连接层对所述全局空间特征进行降维操作得到降维全局空间特征,然后采用第二个全连接层对所述降维全局空间特征进行操作,恢复至原始的维度得到处理全局空间特征;
[0026]S33引入Sigmoid形式的门控机制,基于各个通道间的非线性关系,得到0至1之间的权重值,对原始的每个归一化向量样本乘以对应通道的权重,得到加权归一化向量样本。
[0027]通过注意力模块的增加,从而可以准确的根据不同归一化向量样本的不同情况实现不同的识别方式,在不增加算法的复杂度的前提下,提升了识别的效率和准确性,同时也为解决大规模的软件的漏洞识别奠定了基础。
[0028]进一步的技术方案在于,所述智能算法采用改进型YOLO

v5算法,在原始的YOLO

v5网络输出三个检测层的基础上,增加第四个检测层,继续对第三层输出的76
×
76特征向量进行上采样处理。
[0029]通过在改进后的网络增加了第四个检测层,继续对第三层输出的76
×
76特征向量进行上采样等处理,使得特征向量继续扩大,同时将获得的76
×
76特征向量与骨干网络中的第三层特征向量进行级联融合,以此获取更大的特征向量进行小目标检测,提高对小目标的检测精度。
[0030]进一步的技术方案在于,当所述源代码的漏洞的检测结果为零时,进一步结合所述源代码的编程人员对所述源代码进行综合评价得到综合评价的结果,根据综合评价的结果判断是否进行再次检测,其中进行综合评价的具体步骤为:
[0031]S41获取所述源代码的编程人员的平均编程年限、最高编程年限、历史每万行代码平均漏洞数量、历史每万行代码最高漏洞数量,并基于所述编程人员的平均编程年限、最高编程年限、历史每万行代码平均漏洞数量、历史每万行代码本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于机器学习的代码漏洞检测方法,其特征在于,具体包括:S11获取源代码,并对所述源代码中的标识符进行识别,并对所述标识符进行标准化处理得到标准化源代码;S12基于所述标准化源代码,采用文本向量转换算法,将所述标准化源代码转化为智能算法所能识别的向量样本;S13基于所述向量样本,采用基于智能算法的漏洞识别模型,得到所述源代码的漏洞。2.如权利要求1所述的代码漏洞检测方法,其特征在于,所述标识符至少包括变量名、函数名。3.如权利要求1所述的代码漏洞检测方法,其特征在于,得到标准化源代码的具体步骤为:S21获取源代码的编程人员,获取所述编程人员在进行编程操作过程中的历史标识符;S22获取所述源代码中的声明的标识符,并将其作为声明标识符;S23基于所述声明标识符和所述历史标识符为基础,构建标准化映射表,将所述声明标识符和所述历史标识符转化为标准化命名标识符,基于所述标准化映射表,对所述源代码进行标准化处理,得到标准化源代码。4.如权利要求1所述的代码漏洞检测方法,其特征在于,在基于智能算法的漏洞识别模型对所述向量样本进行漏洞识别之前,需要对所述向量样本进行批量归一化处理得到归一化向量样本。5.如权利要求4所述的代码漏洞检测方法,其特征在于,使用注意力模块对所述归一化向量样本进行注意力增强操作。6.如权利要求5所述的代码漏洞检测方法,其特征在于,进行注意力增强操作的具体步骤为:S31对所述归一化向量样本进行挤压操作,使用全局平均池化将一个通道的整个空间特征转换为一个全局空间特征作为该通道的表示;S32采用基于两个全连接层的神经网络结构的注意力增强操作算法,首先采用第一个全连接层对所述全局空间特征进行降维操作得到降维全局空间特征,然后采用第二个全连接层对所述降维全局空间特征进行操作...

【专利技术属性】
技术研发人员:陈刚魏力杨为意伊尚丰
申请(专利权)人:八维通科技有限公司
类型:发明
国别省市:

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

1