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

源码漏洞检测方法、装置、电子设备及存储介质

2023-01-02 14:42:57 来源:中国专利 TAG:


1.本技术涉及漏洞检测技术领域,尤其涉及一种源码漏洞检测方法、装置、电子设备及存储介质。


背景技术:

2.自动化的源码漏洞检测通过机器学习或者深度学习等方式,实现不依赖人工劳动的源码漏洞检测方法。在现实世界中有漏洞的代码块数量少,其在整个源码文件中的位置随机,这对自动化的源码漏洞检测产生了阻碍。
3.目前的自动化的源码漏洞检测方法,例如,基于cnn(convolutional neural networks,卷积神经网络)的漏洞检测、基于bi-lstm(bi-long short term memory,双向长短期记忆网络)的漏洞检测和基于图神经网络的检测等,虽然实现了自动化的源码漏洞检测,但检测时的鲁棒性差且检测结果的准确率低。


技术实现要素:

4.有鉴于此,本技术的目的在于提出一种源码漏洞检测方法、装置、电子设备及存储介质。
5.基于上述目的,本技术提供了一种源码漏洞检测方法,包括:获取源码文件;其中,所述源码文件中包含若干源码片段;提取所述源码文件中每个所述源码片段的语义信息,得到若干第一语义向量;基于预设的第一度量矩阵,更新所述第一语义向量,得到第二语义向量;提取所述第二语义向量的语义特征;将所述语义特征进行分类,得到存在漏洞的语义特征和不存在漏洞的语义特征,并将所述存在漏洞的语义特征对应的所述源码片段,确定为存在漏洞的源码片段。
6.可选地,所述提取所述源码文件中每个所述源码片段的语义信息,得到若干第一语义向量,包括:将所述源码文件转化为抽象语法树;其中,所述抽象语法树中的每个节点对应所述源码文件中的一个所述源码片段;将所述抽象语法树序列化,得到序列化抽象语法树;提取所述序列化抽象语法树中每个所述节点的语义信息,得到若干所述第一语义向量。
7.可选地,所述提取所述序列化抽象语法树中每个所述节点的语义信息,得到若干所述第一语义向量,包括:选取任一所述节点的语义信息作为中心语义信息;基于预设的上下文选取数量,得到所述中心语义信息的若干上下文语义信息;将若干所述上下文语义信息转化为向量表示,得到若干所述第一语义向量。
8.可选地,所述基于预设的第一度量矩阵,更新所述第一语义向量,得到第二语义向
量,包括:将若干所述第一语义向量进行分类,得到第一集合和第二集合;其中,所述第一集合包含属性相同且不相等的若干第一语义向量,所述第二集合包含属性不同且不相等的若干第一语义向量;将所述预设的第一度量矩阵初始化,得到第二度量矩阵;基于所述第二度量矩阵,将所述第一集合中不相等的向量两两配对,并缩小两两配对后的向量之间的距离,以得到第三度量矩阵;基于所述第三度量矩阵,将所述第二集合中不相等的向量两两配对,并扩大两两配对后的向量之间的距离,以得到第四度量矩阵;根据所述第四度量矩阵和所述第一语义向量,得到所述第二语义向量。
9.可选地,所述缩小两两配对后的向量之间的距离,以得到第三度量矩阵,包括:缩小两两配对后的向量之间的第一距离,并使所述第一距离大于第一阈值,以得到所述第三度量矩阵。
10.可选地,所述扩大两两配对后的向量之间的距离,以得到第四度量矩阵,包括:扩大两两配对后的向量之间的第二距离,并使所述第二距离不大于第二阈值,以得到所述第四度量矩阵。
11.可选地,所述提取所述第二语义向量的语义特征,包括:将所述第一语义向量作为时间序列;基于所述时间序列,根据所述第二语义向量,得到当前时刻第二语义向量和上一时刻第二语义向量的第一相关特征;基于所述时间序列,根据所述第二语义向量,得到当前时刻第二语义向量和下一时刻第二语义向量的第二相关特征;将所述第一相关特征和所述第二相关特征合并,以得到所述第二语义向量的语义特征。
12.基于上述目的,本技术还提供了一种源码漏洞检测装置,包括:获取模块,被配置为获取源码文件;其中,所述源码文件中包含若干源码片段;转换模块,被配置为提取所述源码文件中每个所述源码片段的语义信息,得到若干第一语义向量;更新模块,被配置为基于预设的第一度量矩阵,更新所述第一语义向量,得到第二语义向量;提取模块,被配置为提取所述第二语义向量的语义特征;分类模块,被配置为将所述语义特征进行分类,得到存在漏洞的语义特征和不存在漏洞的语义特征,并将所述存在漏洞的语义特征对应的所述源码片段,确定为存在漏洞的源码片段。
13.基于上述目的,本技术还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上任一实施例所述的方法。
14.基于上述目的,本技术还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行如上任一实施例所
述的方法。
15.从上面所述可以看出,本技术提供的一种源码漏洞检测方法、装置、电子设备及存储介质,通过提取所述源码文件中每个所述源码片段的语义信息,得到若干第一语义向量,并基于预设的第一度量矩阵,更新所述第一语义向量,得到第二语义向量,再提取所述第二语义向量的语义特征,最后将所述语义特征进行分类来实现高准确率和鲁棒性高且计算量低的源码漏洞检测方法。
附图说明
16.为了更清楚地说明本技术或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
17.图1示出了根据本技术实施例的示例性一种源码漏洞检测方法的流程图。
18.图2示出了根据本技术实施例的示例性一种源码漏洞检测方法的示意图。
19.图3示出了根据本技术实施例的示例性一种源码漏洞检测方法的流程图。
20.图4示出了根据本技术实施例的示例性一种源码漏洞检测方法的示意图。
21.图5示出了根据本技术实施例的示例性一种源码漏洞检测方法的示意图。
22.图6示出了根据本技术实施例的示例性一种源码漏洞检测装置的示意图。
23.图7示出了根据本技术实施例的示例性一种电子设备的示意图。
具体实施方式
24.为使本技术的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本技术进一步详细说明。
25.需要说明的是,除非另外定义,本技术实施例使用的技术术语或者科学术语应当为本技术所属领域内具有一般技能的人士所理解的通常意义。本技术实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
26.如背景技术所述,基于cnn的漏洞检测,将经过词嵌入的向量看作时间序列,用一维卷积神经网络提取其深度特征。基于bi-lstm的漏洞检测,将样本看作有上下文相关性的时间序列,利用bi-lstm提取样本的上下信息。基于图神经网络的漏洞检测,将源码文件中每一个元素看作图中的节点,利用其与周围节点的关系提取上下文信息。由此可见,已有的漏洞检测方法试图提取源码文件的元素之间的语义信息,却没有利用样本的类别对比信息,导致神经网络性能降低,预测的准确率低。并且其提取上下文信息的方式逐渐复杂化,深度特征提取器的梯度消失和梯度爆炸问题导致收敛速度慢,鲁棒性低。
27.有鉴于此,本技术实施例提供一种源码漏洞检测方法、装置、电子设备及存储介
质,通过对源码文件用抽象语法树工具处理,转化为带有上下文信息的文本文件,将处理后的文本文件用word2vec(word to vector)模型中的skip-gram算法(连续跳字算法)转换为向量,使用度量学习算法增加有漏洞于无漏洞样本之间的辨识度,使用bi-phased lstm(bi
‑ꢀ
phased long short term memory,双向周期性长短期记忆网络)网络模型提取向量中的高级特征,使用随机森林分类器对样本分类,以实现高准确率和鲁棒性高且计算量低的源码漏洞检测方法。
28.图1示出了根据本技术实施例的示例性一种源码漏洞检测方法的流程图。
29.在步骤s101,获取源码文件;其中,所述源码文件中包含若干源码片段。
30.在步骤s103,提取所述源码文件中每个所述源码片段的语义信息,得到若干第一语义向量。
31.在一些实施例中,所述提取所述源码文件中每个所述源码片段的语义信息,得到若干第一语义向量,可以进一步包括:将所述源码文件转化为抽象语法树;其中,所述抽象语法树中的每个节点对应所述源码文件中的一个所述源码片段;将所述抽象语法树序列化,得到序列化抽象语法树;提取所述序列化抽象语法树中每个所述节点的语义信息,得到若干所述第一语义向量。
32.具体地,利用抽象语法树抽取工具对源码文件进行预处理,获得带有抽象语法树的文本文件。利用其树状结构来表现编程语言的语义特性,抽象语法树中的每个节点对应源码文件中的一个源码片段。
33.可以理解的是,抽象语法树是源代码语法结构的一种抽象表示,它能高效的将源码文件转化为带有语义信息的树状结构。抽象语法树误会表示出真实语法中的每一个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有三个分支的节点来表示。抽象语法树这样的性质就是得其在抽取出源代码的语义信息的同时,还过滤掉了一些冗余的信息。
34.在一些实施例中,抽象语法树处理过后的文件为树形结构,其虽然包含了漏洞检测所需的语义信息,但其复杂的树形结构不易于神经网络提取高级特征。因此,在本实施例中,将抽象语法树提取出来的树形结构进行先根遍历,将树形结构序列化,得到序列化抽象语法树,这样就既保留了原有信息,又使其结构序列化,易于神经网络的处理。
35.在一些实施例中,所述提取所述序列化抽象语法树中每个所述节点的语义信息,得到若干所述第一语义向量,可以进一步包括:选取任一所述节点的语义信息作为中心语义信息;基于预设的上下文选取数量,得到所述中心语义信息的若干上下文语义信息;将若干所述上下文语义信息转化为向量表示,得到若干所述第一语义向量。
36.具体地,使用word2vec模型中的skip-gram算法对序列化抽象语法树中的每一个节点提取语义信息,如if-condition-then,while-condition,function等,并将其转化为向量的形式,得到若干所述第一语义向量。
37.在本实施例中,可以搜集30个github中star数大于500的代码仓库中的代码文件作为语料库,将其转化为序列化的抽象语法树文本,使用skip-gram以这些文本作为训练数据,并使用skip-gram算法进行向量的转换。skip-gram算法以某一节点的语义信息作为中心语义信息,设置选取10个上下文选取数量,以其前后共10个节点的语义信息作为上下文语义信息,再将上下文语义信息转化为向量表示。最终产生出若干长度向量为128的第一语
义向量,每一个向量代表着序列化抽象语法树中的一个节点。
38.在步骤s105,基于预设的第一度量矩阵,更新所述第一语义向量,得到第二语义向量。将经由skip-gram算法转换得到的第一语义向量作为度量学习算法的输入。度量学习算法是利用样本的标签,通过不断迭代产生一个可以将样本向量投影到高维空间中的一种度量。
39.在一些实施例中,所述基于预设的第一度量矩阵,更新所述第一语义向量,得到第二语义向量,可以进一步包括:将若干所述第一语义向量进行分类,得到第一集合和第二集合;其中,所述第一集合包含属性相同且不相等的若干第一语义向量,所述第二集合包含属性不同且不相等的若干第一语义向量;将所述预设的第一度量矩阵初始化,得到第二度量矩阵;基于所述第二度量矩阵,将所述第一集合中不相等的向量两两配对,并缩小两两配对后的向量之间的距离,以得到第三度量矩阵;基于所述第三度量矩阵,将所述第二集合中不相等的向量两两配对,并扩大两两配对后的向量之间的距离,以得到第四度量矩阵;根据所述第四度量矩阵和所述第一语义向量,得到所述第二语义向量。
40.具体地,在一些实施例中,将若干所述第一语义向量进行分类,可以将属性相同(如类别相同)且不相等的样本作为第一集合,将属性不同(如类别不同)且不相等的样本作为第二集合。利用在进行训练之前通过程序随机生成的第一度量矩阵a,将第一度量矩阵a加入高斯扰动进行初始化,得到第二度量矩阵a’。
41.进一步地,利用第二度量矩阵a’,遍历第一集合中的每一个向量后,使不相等的向量两两配对且被第二度量矩阵a’映射之后,在它们时间的第一距离在满足大于第一阈值0的条件的同时,缩小它们之间的第一距离,再将第二度量矩阵a’和第一度量矩阵a的差值最小的度量矩阵赋值给第一度量矩阵a,得到第三度量矩阵a
’’

42.需要说明的是,以距离度量作为优化目标将同类样本之间的距离拉近。此距离的计算方式是随着样本向量的改变而改变。因此在训练数据上计算出的距离度量矩阵,在概率分布类似的测试数据上,能将测试样本向量映射到类似的高维空间,提高bi-phased lstm的特征提取精度。
43.可以理解的是,存在使被拉近距离的向量之间的距离,在映射之后大于0的约束条件。这一条件避免了产生大量重叠的向量,从而避免了大量重复数据对模型产生的过拟合现象。
44.进一步地,利用第三度量矩阵a
’’
,遍历第二集合中的每一个向量后,使不相等的向量两两配对且被第三度量矩阵a
’’
矩阵映射后,在它们之间的第二距离满足不大于第二阈值1的同时,扩大它们之间的第二距离,再将第三度量矩阵a
’’
和第二度量矩阵a’的差值最小的度量矩阵赋值给第二度量矩阵a’,得到第四度量矩阵a
’’’
。被这种度量映射之后,同类的样本之间距离缩短,不同类样本之间距离增大。
45.需要说明的是,为了让不同类样本之间更有区分度,不断扩大不同类样本之间的距离。但如果距离无限增大,将使模型收敛速度慢,预测效果差,所以约束了样本向量之间距离小于等于1。
46.进一步地,将第四度量矩阵和第一语义向量相乘,得到第二语义向量。
47.在步骤s107,提取所述第二语义向量的语义特征。
48.在一些实施例中,可以使用bi-phased lstm网络(多阶段长短期记忆网络)提取第
二语义向量中的高级特征。将第四度量矩阵a
’’’
和第一语义向量相乘,作为bi-phased lstm网络的输入。
49.在一些实施例中,将被度量矩阵映射之前的第一语义向量看作时间序列t,体现了样本原始的特征,将映射之后得到的第二语义向量看作新的样本x
t
。将t与x
t
分别作为bi-phased lstm网络的输入与隐藏状态,根据时间序列t,由顺序和逆序的方式分别经过16个phased lstm核心,分别得到当前时刻第二语义向量和上一时刻第二语义向量的第一相关特征,和得到当前时刻第二语义向量和下一时刻第二语义向量的第二相关特征。再将两个输出结果拼接,得到第二语义向量的语义特征。
50.在步骤s109,将所述语义特征进行分类,得到存在漏洞的语义特征和不存在漏洞的语义特征,并将所述存在漏洞的语义特征对应的所述源码片段,确定为存在漏洞的源码片段。
51.在一些实施例中,可以使用随机森林分类器对语义特征分类,实现自动化源码漏洞检测。为了利用不同源码文件中的特征,使用随机森林分类器对第二语义向量的高级特征分类,产生对应的语义向量的分类结果。为了最大化分类精度,使用交叉验证的方法选取随机森林的超参数,将每颗子树的最大深度设置为40,叶子节点数量设置为3,树中每一个内部节点最少有4个字节点才会分裂,整个随机森林共有8000颗子树。
52.下面通过具体实施例来对本技术进行说明。
53.在工业界中,源码文件中的有漏洞的代码块占总代码量较少,且与实现相同功能的无漏洞的代码块差别小。由于源代码文件的长度很大,在bi-lstm的训练过程中,关键特征会丢失,因为bi-lstm的单元状态在每个时间点都会更新。这使得传统基于bi-lstm的自动化的源码漏洞检测框架往往无法检测到这种样本。
54.在一些实施例中,样本预处理如图2所示,从github中搜集30个star数大于等于500的代码仓库,将其源码文件作为数据集,并按编程语言的类别分类(如图2所示,可以将编程语言分类为c 源码文件、python源码文件和java源码文件等)。对于同一类编程语言的源码文件,首先使用该类编程语言所对应的抽象语法树抽取工具对其预处理,得到树状的抽象语法结构。对此树状结构进行先根遍历,将其序列化并保存为文本文件。由于抽象语法树的性质,在抽取和序列化的过程中提取了源码文件的语义特征,并过滤无效信息,将语义无关的元素如注释符号,空格和空行去掉。
55.在一些实施例中,使用skip-gram算法将序列化的抽象语法树中的元素转化为向量表示。由于skip-gram算法是一种非监督学习的训练方法,在实施例中保留了github中搜集到的大部分源码数据,删掉了部分不含语义信息的文件,比如没有实际功能的初始化文件,只含有其他源码文件名的文件等。经过200次的迭代之后,将序列化的抽象语法树中的元素转化为了长度为128的向量表示。由于每个源码文件中所含元素数量不同,为了将一个源码文件作为一个样本处理,将所有源码文件所含有的元素统一为128。如果某一个源码文件的长度大于128将删掉多余的元素,如果小于128将补充元素值为0的向量并将其正则化。
56.在一些实施例中,使用度量学习算法以对比学习的思想将样本向量映射到新的高维空间,可以提升漏洞检测的精度。具体的训练过程如图3所示:在步骤s301:将同类样本与异类样本分别放到两个集合中并初始化度量矩阵。其中,第一度量矩阵a可以通过程序随机生成第一度量矩阵a。在本实施例中,通过程序随机生
成大小为128
×
128的第一度量矩阵a。
57.在一些实施例中,初始化两个集合,第一集合c1和第二集合c2为空集,对样本向量使用二层循环遍历,将类别相同且不相等的样本放入第一集合c1,类别不同且不相等的样本放入第二集合c2。使用期望值为0,方差为1的正态分布初始化第一度量矩阵a。
58.在步骤s303:将度量矩阵加入高斯扰动(指概率分布偏离),得到新的度量矩阵,将新的度量矩阵记作第二度量矩阵a’。
59.在步骤s305:遍历同类样本的集合。利用第二度量矩阵a’遍历同类样本的第一集合,使不相等的元素两两配对且被第二度量矩阵a’映射之后,在它们时间的距离在满足大于0的条件的同时,缩小它们之间的距离。
60.在一些实施例中,遍历第一集合c1中的每一个样本后,将第二度量矩阵a’与第一度量矩阵a的差值最小的度量矩阵赋值给第一度量矩阵,得到第三度量矩阵a
’’

61.在步骤s307:遍历异类样本的集合。利用第三度量矩阵a
’’
遍历异类样本的第二集合,使不相等的元素两两配对且被第三度量矩阵a
’’
矩阵映射后,在它们之间的距离满足小于等于1的同时,扩大它们之间的距离。
62.在一些实施例中,遍历第二集合c2中的每一个样本后,将第三度量矩阵a
’’
与第二度量矩阵a’的差值最小的度量矩阵赋值给第二度量矩阵a’,得到第四度量矩阵a
’’’

63.在步骤s309:在误差降低到阈值之前,不断更新度量矩阵。在第三度量矩阵a
’’
和第四度量矩阵a
’’’
之间的差值降低到阈值之前,不断更新度量矩阵。在一些实施例中,阈值可设置为10-3

64.在一些实施例中,通过迭代产生出大小为128
×
128的第四度量矩阵,与任意一个长度为128的第二样本向量相乘后,得到新的长度为128的第一样本向量。
65.在一些实施例中,将序列化的抽象语法树文本文件转化为样本向量之后,为了易于分类,需要将样本向量投影到新的特征空间。由于在进行词嵌入操作之前的样本向量保留了原始样本的信息,所以将其作为bi-phased lstm的时间戳标志t,将词嵌入之后的样本向量作为bi-phased lstm的输入样本x
t
。使用度量学习算法,将输入样本x
t
使用度量学习矩阵映射到新的特征空间。
66.在一些实施例中,为了使度量学习矩阵所对应的空间对于分类器线性可分,使用了不断迭代并投影的的计算误差的方式。在每一次迭代中,将迭代后的度量矩阵和样本向量的乘积作为bi-phased lstm的输入,固定其他参数不变,对度量矩阵的参数求导,并将导数向量投影到第一集合c1和第二集合c2的交集上。将所得投影向量乘以超参数0.2后与用于映射的度量矩阵相加,赋值给用于映射的度量矩阵,得到新的度量矩阵。
67.在一些实施例中,使用phased lstm单元替换传统的lstm单元,提升了漏洞检测的鲁棒性。phased lstm为了解决lstm训练过程中的梯度消失问题,在核心状态和隐藏状态之前加入了时间门,使梯度只在时间门开启的阶段更新网络的参数。如图4所示,输入样本x
t
在被传输到phased lstm cell后,经过激活函数的变换与被输入门i
t
处理后的输入样本x
t
相乘,结果记为c
t’。为了过滤掉极大或者极小的梯度值,控制梯度爆炸或梯度消失问题,将遗忘门f
t
处理后的输入样本与c
t’相乘。将c
t’作为输入输送到由t控制的时间门k
t
处理,得到最终核心状态c
t
。为了得到隐藏状态,将c
t
使用激活函数激活后,与经过输出门o
t
处理之后的输入样本相乘,经过第二道时间门k
t
处理之后得到隐藏状态h
t

68.被度量学习矩阵映射之后,同一类别(如,都为有漏洞或都为无漏洞)的输入样本x
t
之间距离缩小,不同类别(如,有漏洞与无漏洞)的输入样本x
t
之间的距离扩大。将x
t
于与t合并输入到bi-phased lstm中提取高级特征。为了同时获取某一元素之前和之后的元素信息,使用两个结构相同的phased lstm。前向phased lstm的传播方式为顺序传播,计算每一个元素与其之后元素的相关性,如图5中从左到右的箭头指示的多个phased lstm(phased lstmn)。将x
t
和t作为输入,与之相对的反向phased lstm为逆序传播,计算每一个元素与其之前元素的相关性,最后将正反两个phased lstm(图中phased lstm 1和phased lstm 2)的结果合并,作为最终的输出向量。两个phased lstm虽然结构相同,但经过迭代最后有着不同的参数,所输出的结果向量也不同。在bi
‑ꢀ
phased lstm的基础上,还加入了最大池化层,激活函数和线性层的处理才得到最终提取的高级特征。
69.本技术实施例可以应用在智能合约领域进行源码漏洞检测,也应属于本技术的保护范围。应用在智能合约领域进行源码漏洞检测的方法具有上述相应的方法实施例的有益效果,在此不再赘述。
70.需要说明的是,本技术实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本技术实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
71.需要说明的是,上述对本技术的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
72.基于同一技术构思,与上述任意实施例方法相对应的,本技术还提供了一种源码漏洞检测装置。
73.参考图6,所述源码漏洞检测装置,包括:获取模块601,被配置为获取源码文件;其中,所述源码文件中包含若干源码片段。
74.转换模块602,被配置为提取所述源码文件中每个所述源码片段的语义信息,得到若干第一语义向量。
75.在一些实施例中,转换模块602,进一步被配置为将所述源码文件转化为抽象语法树,其中,所述抽象语法树中的每个节点对应所述源码文件中的一个所述源码片段,将所述抽象语法树序列化,得到序列化抽象语法树,提取所述序列化抽象语法树中每个所述节点的语义信息,得到若干所述第一语义向量。
76.在一些实施例中,转换模块602,进一步被配置为选取任一所述节点的语义信息作为中心语义信息,基于预设的上下文选取数量,得到所述中心语义信息的若干上下文语义信息,将若干所述上下文语义信息转化为向量表示,得到若干所述第一语义向量。
77.更新模块603,被配置为基于预设的第一度量矩阵,更新所述第一语义向量,得到第二语义向量。
78.在一些实施例中,更新模块603,进一步被配置为将若干所述第一语义向量进行分类,得到第一集合和第二集合,其中,所述第一集合包含属性相同且不相等的若干第一语义
向量,所述第二集合包含属性不同且不相等的若干第一语义向量,将所述预设的第一度量矩阵初始化,得到第二度量矩阵,基于所述第二度量矩阵,将所述第一集合中不相等的向量两两配对,并缩小两两配对后的向量之间的距离,以得到第三度量矩阵,基于所述第三度量矩阵,将所述第二集合中不相等的向量两两配对,并扩大两两配对后的向量之间的距离,以得到第四度量矩阵,根据所述第四度量矩阵和所述第一语义向量,得到所述第二语义向量。
79.在一些实施例中,更新模块603,进一步被配置为缩小两两配对后的向量之间的第一距离,并使所述第一距离大于第一阈值,以得到所述第三度量矩阵。
80.在一些实施例中,更新模块603,进一步被配置为扩大两两配对后的向量之间的第二距离,并使所述第二距离不大于第二阈值,以得到所述第四度量矩阵。
81.提取模块604,被配置为提取所述第二语义向量的语义特征。
82.在一些实施例中,提取模块604,进一步被配置为将所述第一语义向量作为时间序列,基于所述时间序列,根据所述第二语义向量,得到当前时刻第二语义向量和上一时刻第二语义向量的第一相关特征,基于所述时间序列,根据所述第二语义向量,得到当前时刻第二语义向量和下一时刻第二语义向量的第二相关特征,将所述第一相关特征和所述第二相关特征合并,以得到所述第二语义向量的语义特征。
83.分类模块605,被配置为将所述语义特征进行分类,得到存在漏洞的语义特征和不存在漏洞的语义特征,并将所述存在漏洞的语义特征对应的所述源码片段,确定为存在漏洞的源码片段。
84.为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本技术时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
85.上述实施例的装置用于实现前述任一实施例中相应的源码漏洞检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
86.基于同一技术构思,与上述任意实施例方法相对应的,本技术还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上任意一实施例所述的源码漏洞检测方法。
87.图7示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
88.处理器1010可以采用通用的cpu(central processing unit,中央处理器)、微处理器、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
89.存储器1020可以采用rom(read only memory,只读存储器)、ram(random access memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
90.输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入/输出模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中
输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
91.通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。
92.总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
93.需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
94.上述实施例的电子设备用于实现前述任一实施例中相应的源码漏洞检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
95.基于同一技术构思,与上述任意实施例方法相对应的,本技术还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的源码漏洞检测方法。
96.本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
97.上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的源码漏洞检测方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
98.所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本技术的范围(包括权利要求)被限于这些例子;在本技术的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本技术实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
99.另外,为简化说明和讨论,并且为了不会使本技术实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(ic)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本技术实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本技术实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本技术的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本技术实施例。因此,这些描述应被认为是说明性的而不是限制性的。
100.尽管已经结合了本技术的具体实施例对本技术进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例
如,其它存储器架构(例如,动态ram(dram))可以使用所讨论的实施例。
101.本技术实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本技术实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本技术的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献