一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种源代码漏洞检测方法、装置以及存储介质与流程

2022-09-07 23:01:32 来源:中国专利 TAG:


1.本发明主要涉及代码检测技术领域,具体涉及一种源代码漏洞检测方法、装置以及存储介质。


背景技术:

2.随着各种智能设备的持续突破和互联网的持续发展与广泛应用,网络空间促进了经济社会的繁荣进步,也正在全面改变人们的生产生活方式,深刻影响着人类社会历史的发展进程,但同时带来了新的安全风险和挑战。互联网行业竞争激烈,软件开发周期越来越短,安全问题日益突出。随着软件数量的大规模增长以及复杂性的增强,传统方案面临着严重的技术瓶颈,这给软件安全漏洞的研究带来严峻的挑战,已经无法满足网络空间安全的防护需要。


技术实现要素:

3.本发明所要解决的技术问题是针对现有技术的不足,提供一种源代码漏洞检测方法、装置以及存储介质。
4.本发明解决上述技术问题的技术方案如下:一种源代码漏洞检测方法,包括如下步骤:
5.s1:通过爬虫工具获取多个原始源代码数据,分别对各个所述原始源代码数据进行数据预处理,得到与各个所述原始源代码数据对应的预处理后源代码数据;
6.s2:按照预设比例对多个所述预处理后源代码数据进行划分,得到训练集,验证集和测试集;
7.s3:对所述训练集进行代码图的编码,得到多个代码图数据;
8.s4:构建训练模型,根据多个所述代码图数据、所述验证集和所述测试集对所述训练模型进行模型分析,得到检测模型;
9.s5:导入待检测源代码数据,通过所述检测模型对所述待检测源代码数据进行检测分析,得到检测结果。
10.本发明解决上述技术问题的另一技术方案如下:一种源代码漏洞检测装置,包括:
11.数据预处理模块,用于通过爬虫工具获取多个原始源代码数据,分别对各个所述原始源代码数据进行数据预处理,得到与各个所述原始源代码数据对应的预处理后源代码数据;
12.数据划分模块,用于按照预设比例对多个所述预处理后源代码数据进行划分,得到训练集,验证集和测试集;
13.训练集编码模块,用于对所述训练集进行代码图的编码,得到多个代码图数据;
14.模型分析模块,用于构建训练模型,根据多个所述代码图数据、所述验证集和所述测试集对所述训练模型进行模型分析,得到检测模型;
15.检测结果获得模块,用于导入待检测源代码数据,通过所述检测模型对所述待检
测源代码数据进行检测分析,得到检测结果。
16.本发明解决上述技术问题的另一技术方案如下:一种源代码漏洞检测装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,当所述处理器执行所述计算机程序时,实现如上所述的源代码漏洞检测方法。
17.本发明解决上述技术问题的另一技术方案如下:一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,实现如上所述的源代码漏洞检测方法。
18.本发明的有益效果是:通过分别对各个原始源代码数据的数据预处理得到预处理后源代码数据,按照预设比例对多个预处理后源代码数据的划分得到训练集,验证集和测试集,对训练集的代码图编码得到多个代码图数据,根据多个代码图数据、验证集和测试集对训练模型的模型分析得到检测模型,通过检测模型对待检测源代码数据的检测分析得到检测结果,实现了函数级的自动代码漏洞检测,能在源代码中快速、高效地完成代码漏洞检测任务,解决了代码静态分析工具进行漏洞检测上存在的误报率高、漏报率高的技术问题。
附图说明
19.图1为本发明实施例提供的一种源代码漏洞检测方法的流程示意图;
20.图2为本发明实施例提供的一种源代码漏洞检测装置的模块框图。
具体实施方式
21.以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
22.图1为本发明实施例提供的一种源代码漏洞检测方法的流程示意图。
23.如图1所示,一种源代码漏洞检测方法,包括如下步骤:
24.s1:通过爬虫工具获取多个原始源代码数据,分别对各个所述原始源代码数据进行数据预处理,得到与各个所述原始源代码数据对应的预处理后源代码数据;
25.s2:按照预设比例对多个所述预处理后源代码数据进行划分,得到训练集,验证集和测试集;
26.s3:对所述训练集进行代码图的编码,得到多个代码图数据;
27.s4:构建训练模型,根据多个所述代码图数据、所述验证集和所述测试集对所述训练模型进行模型分析,得到检测模型;
28.s5:导入待检测源代码数据,通过所述检测模型对所述待检测源代码数据进行检测分析,得到检测结果。
29.应理解地,通过爬虫工具从cwe官网中收集cwe-119、cwe-120、cwe-469、cwe-476以及cwe-others类型的漏洞源代码没有漏洞的源代码形成基础数据集(即所述多个原始源代码数据)。
30.具体地,对标注好的数据集代码(即所述训练集)编码成具有综合程序语义的代码图。
31.上述实施例中,通过分别对各个原始源代码数据的数据预处理得到预处理后源代码数据,按照预设比例对多个预处理后源代码数据的划分得到训练集,验证集和测试集,对
训练集的代码图编码得到多个代码图数据,根据多个代码图数据、验证集和测试集对训练模型的模型分析得到检测模型,通过检测模型对待检测源代码数据的检测分析得到检测结果,实现了函数级的自动代码漏洞检测,能在源代码中快速、高效地完成代码漏洞检测任务,解决了代码静态分析工具进行漏洞检测上存在的误报率高、漏报率高的技术问题。
32.可选地,作为本发明的一个实施例,所述步骤s1的过程包括:
33.分别对各个所述原始源代码数据进行下采样处理,得到与各个所述原始源代码数据对应的下采样后源代码数据;
34.分别对各个所述下采样后源代码数据进行标注,得到与各个所述原始源代码数据对应的预处理后源代码数据。
35.应理解地,对数据集的函数进行标注(即多个所述下采样后源代码数据),分布标为有漏洞和无漏洞。
36.应理解地,由于代码数据集中没有漏洞的函数代码占比过多,样本数据分布不均匀,因此对基础数据集中的数据(即所述原始源代码数据)进行下采样,形成下采样的代码数据集(即多个所述下采样后源代码数据)。
37.具体地,对数据集中的每一个函数代码(即多个所述下采样后源代码数据)进行标注,标注为0或者1,1代码该函数(即所述下采样后源代码数据)有漏洞,反之0代表没有漏洞,并将数据集中的所有函数代码作为样本数据(即多个所述预处理后源代码数据)。
38.上述实施例中,分别对各个原始源代码数据的下采样处理得到下采样后源代码数据,分别对各个下采样后源代码数据的标注得到预处理后源代码数据,为后续数据处理提供基础,解决了代码静态分析工具进行漏洞检测上存在的误报率高、漏报率高的技术问题。
39.可选地,作为本发明的一个实施例,所述训练集包括多个源代码训练数据,所述步骤s3的过程包括:
40.利用clang工具分别对各个所述源代码训练数据进行抽象语法树的提取,得到与各个所述源代码训练数据对应的抽象语法树;
41.分别通过各个所述抽象语法树构建代码图数据,从而得到与各个所述源代码训练数据对应的代码图数据。
42.应理解地,所述clang工具clang是c,c 和objective-c编译器,包括预处理,解析,优化,代码生成,汇编和链接操作,此外clang还提供了提取代码的抽象语法树、代码控制流图等操作。
43.具体地,使用clang编译器提取代码(即所述源代码训练数据)的抽象语法树,抽象语法树上的节点代表代码中结构,把这些结构信息以边的形式保存起来,以及保存节点的出度,结合两者形成代码图(即所述代码图数据)。
44.上述实施例中,利用clang工具分别对各个源代码训练数据的抽象语法树提取得到抽象语法树,分别通过各个抽象语法树构建代码图数据,从而得到代码图数据,为后续数据处理奠定基础,能在源代码中快速、高效地完成代码漏洞检测任务。
45.可选地,作为本发明的一个实施例,所述步骤s4的过程包括:
46.构建训练模型,根据多个所述代码图数据对所述训练模型进行训练,得到训练后的模型;
47.根据所述测试集对所述训练后的模型进行测试,得到待验证模型;
48.根据所述验证集对所述待验证模型进行参数调整,得到检测模型。
49.应理解地,使用验证集对训练好的代码漏洞检测的残差门控图卷积神经网络检测模型(即所述待验证模型)进行验证,调整模型参数。
50.应理解地,采用验证集来调整模型(即所述待验证模型)参数;并多次使用验证集,以不断调参。
51.上述实施例中,构建训练模型,根据多个代码图数据对训练模型的训练得到训练后的模型,根据测试集对训练后的模型的测试得到待验证模型,根据验证集对待验证模型的参数调整得到检测模型,实现了函数级的自动代码漏洞检测,能在源代码中快速、高效地完成代码漏洞检测任务,解决了代码静态分析工具进行漏洞检测上存在的误报率高、漏报率高的技术问题。
52.可选地,作为本发明的一个实施例,所述构建训练模型,根据多个所述代码图数据对所述训练模型进行训练,得到训练后的模型的过程包括:
53.基于残差门控图神经网络分别对各个所述代码图数据进行目标特征向量的计算,得到与各个所述源代码训练数据对应的多个目标特征向量;
54.分别对与各个所述源代码训练数据对应的多个目标特征向量进行图池化处理,得到与各个所述源代码训练数据对应的全局特征向量;
55.利用sigmoid函数分别对各个所述全局特征向量进行映射,得到与各个所述源代码训练数据对应的预测向量;
56.导入与各个所述源代码训练数据对应的真实标签向量,并对所有的预测向量和所有的真实标签向量进行损失值的分析,得到训练后的模型。
57.应理解地,使用残差门控图卷积网络(即所述残差门控图神经网络)对训练集(即所述代码图数据)进行表示学习,学习代码的特征。
58.具体地,首先将源代码的代码图(即所述代码图数据)作为网络的输入,残差门控图卷积神经网络(即所述残差门控图神经网络)每一步聚合图的邻接节点的特征信息,经过层之后聚集了整个图的邻接节点的特征信息,然后利用图池化层聚合图的全局信息,可以得到一个结合全图的特征向量(即所述全局特征向量),利用sigmoid函数将向量值映射到0-1之间。最终生成训练好的源代码漏洞检测残差门控图卷积神经网络检测模型(即所述训练后的模型)。
59.应理解地,利用sigmoid函数将预测向量值映射到0-1之间。所述sigmoid函数它可以将一个实数映射到(0,1)的区间之内。公式如下:
[0060][0061]
上述实施例中,构建训练模型,根据多个代码图数据对训练模型的训练得到训练后的模型,学习了代码的特征,聚合了图的全局信息,提高了检测的准确率。
[0062]
可选地,作为本发明的一个实施例,所述代码图数据包括多个节点以及与各个所述节点对应的原始特征向量,每个所述节点对应多个邻接节点;
[0063]
所述基于残差门控图神经网络分别对各个所述代码图数据进行目标特征向量的计算,得到与各个所述源代码训练数据对应的多个目标特征向量的过程包括:
[0064]
通过第一式分别对各个所述节点对应的原始特征向量以及与各个所述节点对应
的多个邻接节点的原始特征向量进行目标特征向量的计算,得到与各个所述节点的目标特征向量,所述第一式为:
[0065][0066]
其中,为目标特征向量,为节点i的原始特征向量,为节点i对应的所有邻接节点的原始特征向量,为预设层数,w为权重矩阵,f为映射函数。
[0067]
应理解地,将所述代码图数据作为残差门控图神经网络(即所述残差门控图神经网络)的输入,所述代码图数据包含节点、边、特征矩阵,用数学语言描述为gi(v,x,a),其中i代表索引,v代表图中节点,x代码特征矩阵,a表示图中的边关系。
[0068]
具体地,对于残差门控图神经网络(即所述残差门控图神经网络)而言,给定一个图gk(v,x,a),对于每个图中节点vi∈v都有一个初始d维向量表示为当前节点的特征向量(即所述原始特征向量),如果实值向量xi的维度小于d时,则用0填充,及则用公式描述为:
[0069][0070]
其中表示节点i的所有邻接节点的特征向量(即所述原始特征向量),f为映射函数,输入为当前节点的特征矩阵(即所述原始特征向量)和当前节点所有邻接节点的特征矩阵(即所述原始特征向量),为层数,w为权重矩阵。
[0071]
上述实施例中,通过第一式分别对各个节点对应的原始特征向量以及多个邻接节点的原始特征向量的目标特征向量计算得到目标特征向量,聚集了图的邻接节点的特征信息,提高了检测的准确率。
[0072]
可选地,作为本发明的一个实施例,所述对所有的预测向量和所有的真实标签向量进行损失值的分析,得到训练后的模型的过程包括:
[0073]
利用二分类交叉熵损失函数分别计算各个所述预测向量与所述真实标签向量的损失值,得到与各个所述源代码训练数据对应的损失值;
[0074]
对各个所述损失值进行反向传播计算,得到与所述损失值对应的梯度值;
[0075]
利用梯度下降算法将所有的梯度值输入至所述训练模型中进行参数更新,参数更新后返回步骤s1,直至达到预设迭代次数,并将参数更新后的训练模型作为训练后的模型。
[0076]
应理解地,所述梯度下降算法是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(gradient descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭
代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
[0077]
应理解地,得到所述预测向量之后与所述真实标签向量一同输入到二分类交叉熵损失函数,求得了loss值(即所述损失值),然后根据loss值(即所述损失值)进行反向传播计算得到每个参数的梯度值,最后通过梯度下降执行一步参数更新,对模型的参数进行更新,并进行若干次迭代。
[0078]
上述实施例中,对所有的预测向量和所有的真实标签向量的损失值分析得到训练后的模型,能在源代码中快速、高效地完成代码漏洞检测任务,解决了代码静态分析工具进行漏洞检测上存在的误报率高、漏报率高的技术问题,提高了检测模型的准确性。
[0079]
可选地,作为本发明的一个实施例,所述步骤s5中,通过所述检测模型对所述待检测源代码数据进行检测分析,得到检测结果的过程包括:
[0080]
将所述待检测源代码数据输入至步骤s3中,通过步骤s3得到待检测代码图数据;
[0081]
通过所述检测模型对所述待检测代码图数据进行检测,得到检测值;
[0082]
判断所述检测值是否大于或者等于预设检测阈值,若是,则将预设第一结果作为检测结果;若否,则将预设第二结果作为所述检测结果。
[0083]
优选地,所述预设检测阈值可以为0.5。
[0084]
具体地,所述检测值为0-1的值,若所述检测值大于0.5即视为1,则代表有漏洞,若所述检测值小于0.5即视为0,则代表没有漏洞。
[0085]
应理解地,对待检测源代码(即所述待检测源代码数据)进行采集,将源代码(即所述待检测源代码数据)转换成代码图(即所述待检测代码图数据)之后,输入漏洞检测的残差门控图卷积神经网络检测模型(即所述检测模型),得到检测结果。
[0086]
上述实施例中,通过检测模型对待检测源代码数据的检测分析得到检测结果,实现了函数级的自动代码漏洞检测,能在源代码中快速、高效地完成代码漏洞检测任务,解决了代码静态分析工具进行漏洞检测上存在的误报率高、漏报率高的技术问题。
[0087]
可选地,作为本发明的另一个实施例,本发明首先,将源代码(即所述原始源代码数据)转换成包含语义、语法特征信息的代码图数据,然后使用残差门控图卷积神经网络(即所述残差门控图神经网络)对图结构数据(即所述代码图数据)进行模型训练和测试,最后以此来预测代码漏洞。主要针对c/c 代码进行代码自动漏洞检测,实现了函数级的自动代码漏洞检测,并能在源代码中快速、高效地完成代码漏洞检测任务。
[0088]
可选地,作为本发明的另一个实施例,本发明使用所述测试集来测试模型,将源代码转换成代码图之后,输入漏洞检测的残差门控图卷积神经网络检测模型,得到检测结果。从而判断是否具有漏洞。
[0089]
图2为本发明实施例提供的一种源代码漏洞检测装置的模块框图。
[0090]
可选地,作为本发明的另一个实施例,如图2所示,一种源代码漏洞检测装置,包括:
[0091]
数据预处理模块,用于通过爬虫工具获取多个原始源代码数据,分别对各个所述原始源代码数据进行数据预处理,得到与各个所述原始源代码数据对应的预处理后源代码数据;
[0092]
数据划分模块,用于按照预设比例对多个所述预处理后源代码数据进行划分,得
到训练集,验证集和测试集;
[0093]
训练集编码模块,用于对所述训练集进行代码图的编码,得到多个代码图数据;
[0094]
模型分析模块,用于构建训练模型,根据多个所述代码图数据、所述验证集和所述测试集对所述训练模型进行模型分析,得到检测模型;
[0095]
检测结果获得模块,用于导入待检测源代码数据,通过所述检测模型对所述待检测源代码数据进行检测分析,得到检测结果。
[0096]
可选地,本发明的另一个实施例提供一种源代码漏洞检测装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,当所述处理器执行所述计算机程序时,实现如上所述的源代码漏洞检测方法。该装置可为计算机等装置。
[0097]
可选地,本发明的另一个实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,实现如上所述的源代码漏洞检测方法。
[0098]
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
[0099]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0100]
在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
[0101]
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
[0102]
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0103]
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0104]
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献