一种基于多示例感知的软件漏洞检测方法及相关设备

未命名 09-16 阅读:71 评论:0


1.本发明涉及软件漏洞检测技术领域,尤其涉及一种基于多示例感知的软件漏洞检测方法及相关设备。


背景技术:

2.软件漏洞是软件系统中重要而常见的安全威胁,这些漏洞很容易被攻击者利用,并有可能对软件系统造成不可弥补的损失;例如,缓冲区溢出问题允许攻击者利用漏洞篡改内存数据或获得对系统的控制;因此,提升软件漏洞检测的性能有助于维护社会安全和避免经济损软件漏洞失。
3.但是,现有的软件漏洞检测方法,通常将一个代码文件拆分成函数级或者切片级的代码片段,并且使用代码片段作为输入单位用于代码漏洞检测,这样的处理方式导致通常只能处理512个单词以下的代码片段,对于长度更长,单词数量更多的代码片段,现有的方法无法对其进行有效的处理,只能通过截断等方式对长度较长的代码片段进行处理,导致现有的漏洞检测器无法有效的检测现实场景下的源代码文件,在工业化的场景下可用性不足。
4.因此,现有技术还有待于改进和发展。


技术实现要素:

5.本发明的主要目的在于提供一种基于多示例感知的软件漏洞检测方法、系统、终端及计算机可读存储介质,旨在解决现有技术中难以对长段代码的漏洞进行准确推理和定位的问题。
6.为实现上述目的,本发明提供一种基于多示例感知的软件漏洞检测方法,所述基于多示例感知的软件漏洞检测方法包括如下步骤:获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量;将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第
二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。
7.可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量,具体包括:使用预训练模型codebert对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,所述第一表征向量为;将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量, ;其中,和分别表示第1层和第l层预训练模型codebert下的表征向量,表示预训练模型codebert中表示代码语义信息的表征向量,表示输入的第个函数代码片段,表示预训练模型codebert中所包含的特征权重,表示将多个向量拼接起来,表示函数在包级代码片段中的序号,表示包级代码片段内的函数总数。
8.可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,具体包括:将所述包级代码片段的表征向量分别映射到线性空间query、key和value中,过程表示为:;;,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量;其中,表示线性层,,,分别代表所述包级代码片段的第一表征向量在第层注意力机制中的查询向量query、密钥向量key和值向量value的线性空间,表示包级代码片段的第一表征向量在第层的表征向量,是小于线性层总层数的任意一层,表示包级代码片段的第一表征向量在第层的表征向量。
9.可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量,具体包括:将所述查询向量和所述密钥向量输入到自注意力机制中,计算得到第层节点的包级代码片段的初始注意力得分,计算过程为,再通过所述值向量与所述初始注意力得
分计算得到所述包级代码片段的注意力表征向量,计算过程为:,由得到所述包级代码片段的函数级代码的注意力表征向量;其中,是归一化指数函数,为输入向量的维度,表示划分的多头注意力头数,t表示转置操作。
10.可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量,具体包括:预先设计一个可训练的函数级第一标志向量,通过公式将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量;再将每个函数代码片段的第二表征向量拼接,得到第一注意力表征向量,表示为;其中,表示将多个向量拼接起来,表示所述包级代码片段的注意力表征向量中的第i个函数级代码的注意力表征向量,表示函数在包级代码片段中的序号。
11.可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,具体包括:根据并行使用的多种维度卷积核对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,卷积操作的计算过程表示为;其中,和分别表示不同大小的卷积核,是激活函数,和分别表示不同卷积核下的常数偏置项,表示卷积操作。
12.可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量,具体包括:将所述第二注意力表征向量通过公式进行拆分,得到函数级第二标志向量和目标表征向量;将所述目标表征向量通过最大池化层计算得到文件级标志向量,计算过程表示为;
其中,为函数级第二标志向量,为目标表征向量,表示将计算的向量拆分为标志向量和表征向量,表示sigmoid激活函数,fc表示全连接层,maxpool表示最大池化层。
13.此外,为实现上述目的,本发明还提供一种基于多示例感知的软件漏洞检测系统,其中,所述基于多示例感知的软件漏洞检测系统包括:包级代码片段获取模块,用于获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;表征向量获取模块,用于使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;注意力表征向量获取模块,用于将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量;向量合并模块,用于将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;标志向量获取模块,用于对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;漏洞检测结果获取模块,用于根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。
14.此外,为实现上述目的,本发明还提供一种终端,其中,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于多示例感知的软件漏洞检测程序,所述基于多示例感知的软件漏洞检测程序被所述处理器执行时实现如上所述的基于多示例感知的软件漏洞检测方法的步骤。
15.此外,为实现上述目的,本发明还提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储有基于多示例感知的软件漏洞检测程序,所述基于多示例感知的软件漏洞检测程序被处理器执行时实现如上所述的基于多示例感知的软件漏洞检测方法的步骤。
16.本发明中,获取包级代码片段,使用预训练模型对所述包级代码片段进行训练,得到表征向量;将表征向量分别映射到不同的线性空间中,得到包级代码片段的注意力表征向量;将第一标志向量与表征向量结合,得到包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量拼接,再进行卷积和拆分操作,得到函数级第二标志向量和目标表征向量,并通过最大池化层计算得到文件级标志向量,根据函数级第二标志向量和文件级标志向量检测漏洞。本发明捕捉示例本身的局部信息和不同示例之间的全局信息,同时检测判断文件级代码和函数级代码是否包含漏洞。
附图说明
17.图1是本发明基于多示例感知的软件漏洞检测方法的较佳实施例的流程图;图2是本发明基于多示例感知的软件漏洞检测系统的较佳实施例的原理图;图3为本发明终端的较佳实施例的运行环境图。
具体实施方式
18.本技术提供一种基于多示例感知的软件漏洞检测方法及相关设备,为使本技术的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本技术进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本技术,并不用于限定本技术。
19.本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本技术所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
20.另外,若本发明实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
21.本发明较佳实施例所述的基于多示例感知的软件漏洞检测方法,如图1所示,所述基于多示例感知的软件漏洞检测方法包括以下步骤:s100、获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;具体地,从开源场景中获取文件级代码片段,所述文件级代码片段表示为表示,其中,和分别表示文件级代码片段中的函数级代码片段和对应的序号;是函数级代码片段是否包含漏洞的标志,如果包含漏洞则标志为1,反之则标志为0;则表示所有函数以外的代码片段(例如源代码中包含的注释、预定义和宏定义等等)。
22.进一步地,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,只保留文件级代码片段中的函数部分,得到包级代码片段,其中,和分别表示源代码中包含的函数代码片段和对应的标志;若包级代码片段中的每一个函数都不含有漏洞,则也不含有漏洞,标志为0;若包级代码片段中存在一个或以上的漏洞函数,则也含有漏洞,标志为1。
23.s200、使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得
到包级代码片段的表征向量;codebert(双峰预训练模型),是一种用于编程语言和自然语言的预训练模型,在多种编程语言上进行预训练。
24.具体地,使用预训练模型codebert对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,所述第一表征向量为;将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量, ;其中,和分别表示第1层和第l层预训练模型codebert下的表征向量,表示预训练模型codebert中表示代码语义信息的表征向量,表示输入的第个函数代码片段,表示预训练模型codebert中所包含的特征权重,表示将多个向量拼接起来,表示函数在包级代码片段中的序号,表示包级代码片段内的函数总数。
25.因此,包级代码片段中的表征向量的大小为。
26.可见,在本发明中,借助codebert预训练模型,获得了不同层级(包级和函数级)下的表征向量,使得函数级代码表征尽可能的保留了其本身的语义信息,并通过建立函数级代码表征之间的联系来控制包级代码表征的大小,能够更好的处理源代码中的长文本情况。
27.s300、将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量。
28.具体地,为了进一步捕获不同函数代码之间的关系,同时为了更好的处理长代码片段的情况,将所述包级代码片段的表征向量分别映射到线性空间query、key和value中,过程表示为:;;,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量;其中,表示线性层,,,分别代表所述包级代码片段的第一表征向量在第层注意力机制中的查询向量query、密钥向量key和值向量value的线性空间,表示包级代码片段的第一表征向量在第层的表征向量,是小于线性层总层数的任意一层,表示包级代码片段的第一表征向量在第层的表征向量。
29.进一步地,本发明设计了一个自我注意力机制,用于建立不同函数之间的关系。
30.将所述查询向量和所述密钥向量输入到自注意力机制中,计算得到第层节点的包级代码片段的初始注意力得分,计算过程为,再通过所述值向量与所述初始注意力得分计算得到所述包级代码片段的注意力表征向量
,计算过程为:,由得到所述包级代码片段的函数级代码的注意力表征向量。
31.其中,是归一化指数函数,为输入向量的维度,表示划分的多头注意力头数,t表示转置操作。
32.s400、将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;具体地,预先设计一个可训练的函数级第一标志向量,所述函数级第一标志向量为每一个的函数级代码是否含有漏洞提供了初始化表示,可以直接的预测函数级代码是否含有漏洞;通过公式将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量;再将每个函数代码片段的第二表征向量拼接,得到第一注意力表征向量,表示为;其中,表示将多个向量拼接起来,表示所述包级代码片段的注意力表征向量中的第i个函数级代码的注意力表征向量,表示函数在包级代码片段中的序号。
33.本发明将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量,捕捉了相邻函数级之间代码的联系。
34.s500、对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;在捕获了函数级代码之间的全局联系后,本发明进一步捕捉了相邻函数级之间代码的联系。
35.具体地,根据并行使用的多种维度卷积核对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,卷积操作的计算过程表示为:;其中,和分别表示不同大小的卷积核,是激活函数,和分别表示不同卷积核下的常数偏置项,表示卷积操作。
36.通过多种维度卷积核进行卷积操作后,每一个函数级代码表征都建立了与相邻代码表征之间的联系,可以进一步捕获文件级代码中的结构关系。
37.进一步地,本发明根据第二注意力表征向量,同时判断文件级代码和函数级代码是否包含漏洞。
38.具体地,将所述第二注意力表征向量通过公式进行拆分,得到函数级第二标志向量和目标表征向量;将所述目标表征向量通过最大池化层计算得到文件级标志向量,计算过程表示为;其中,为函数级第二标志向量,为目标表征向量,表示将计算的向量拆分为标志向量和表征向量,表示sigmoid激活函数,fc表示全连接层,maxpool表示最大池化层。
39.s600、根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。
40.具体地,根据所述函数级第二标志向量的值得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,若所述第二标志向量的值为1,则说明所述第二标志向量对应的函数存在漏洞,若所述第二标志向量的值为0,则说明所述第二标志向量对应的函数不存在漏洞。
41.根据所述文件级标志向量的值得到文件级代码片段中是否含有漏洞的第二判断结果,若所述文件级标志向量的值为1,则说明所述文件级代码片段中存在漏洞,若所述文件级标志向量的值为0,则说明所述文件级代码片段中不存在漏洞。
42.进一步地,如图2所示,基于上述基于多示例感知的软件漏洞检测方法,本发明还相应提供了一种基于多示例感知的软件漏洞检测系统,其中,所述基于多示例感知的软件漏洞检测系统包括:包级代码片段获取模块51,用于获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;表征向量获取模块52,用于使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;注意力表征向量获取模块53,用于将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量;向量合并模块54,用于将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;标志向量获取模块55,用于对所述第一注意力表征向量进行卷积操作,得到第二
注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;漏洞检测结果获取模块56,用于根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。
43.进一步地,如图3所示,基于上述基于多示例感知的软件漏洞检测方法和系统,本发明还相应提供了一种终端,所述终端包括处理器10、存储器20及显示器30。图3仅示出了终端的部分组件,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
44.所述存储器20在一些实施例中可以是所述终端的内部存储单元,例如终端的硬盘或内存。所述存储器20在另一些实施例中也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital, sd)卡,闪存卡(flash card)等。进一步地,所述存储器20还可以既包括所述终端的内部存储单元也包括外部存储设备。所述存储器20用于存储安装于所述终端的应用软件及各类数据,例如所述安装终端的程序代码等。所述存储器20还可以用于暂时地存储已经输出或者将要输出的数据。在一实施例中,存储器20上存储有基于多示例感知的软件漏洞检测程序40,该基于多示例感知的软件漏洞检测程序40可被处理器10所执行,从而实现本技术中基于多示例感知的软件漏洞检测方法。
45.所述处理器10在一些实施例中可以是一中央处理器(central processing unit,cpu),微处理器或其他数据处理芯片,用于运行所述存储器20中存储的程序代码或处理数据,例如执行所述基于多示例感知的软件漏洞检测方法等。
46.所述显示器30在一些实施例中可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organic light-emitting diode,有机发光二极管)触摸器等。所述显示器30用于显示在所述终端的信息以及用于显示可视化的用户界面。所述终端的部件10-30通过系统总线相互通信。
47.在一实施例中,当处理器10执行所述存储器20中基于多示例感知的软件漏洞检测程序40时实现以下步骤:获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量;将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;
对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。
48.其中,所述使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量,具体包括:使用预训练模型codebert对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,所述第一表征向量为;;将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量, ;其中,和分别表示第1层和第l层预训练模型codebert下的表征向量,表示预训练模型codebert中表示代码语义信息的表征向量,表示输入的第个函数代码片段,表示预训练模型codebert中所包含的特征权重,表示将多个向量拼接起来,表示函数在包级代码片段中的序号,表示包级代码片段内的函数总数。
49.其中,所述将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,具体包括:将所述包级代码片段的表征向量分别映射到线性空间query、key和value中,过程表示为:;;,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量;其中,表示线性层,,,分别代表所述包级代码片段的第一表征向量在第层注意力机制中的查询向量query、密钥向量key和值向量value的线性空间,表示包级代码片段的第一表征向量在第层的表征向量,是小于线性层总层数的任意一层,表示包级代码片段的第一表征向量在第层的表征向量。
50.其中,所述将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量,具体包括:将所述查询向量和所述密钥向量输入到自注意力机制中,计算得到第层节点的包级代码片段的初始注意力得分,计算过程为,再通过所述值向量与所述初始注意力得分计算得到所述包级代码片段的注意力表征向量,计算过程为:,
由得到所述包级代码片段的函数级代码的注意力表征向量;其中,是归一化指数函数,为输入向量的维度,表示划分的多头注意力头数,t表示转置操作。
51.其中,所述将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量,具体包括:预先设计一个可训练的函数级第一标志向量,通过公式将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量;再将每个函数代码片段的第二表征向量拼接,得到第一注意力表征向量,表示为;其中,表示将多个向量拼接起来,表示所述包级代码片段的注意力表征向量中的第i个函数级代码的注意力表征向量,表示函数在包级代码片段中的序号。
52.其中,所述对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,具体包括:根据并行使用的多种维度卷积核对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,卷积操作的计算过程表示为;其中,和分别表示不同大小的卷积核,是激活函数,和分别表示不同卷积核下的常数偏置项,表示卷积操作。
53.其中,所述将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量,具体包括:将所述第二注意力表征向量通过公式进行拆分,得到函数级第二标志向量和目标表征向量;将所述目标表征向量通过最大池化层计算得到文件级标志向量,计算过程表示为;其中,为函数级第二标志向量,为目标表征向量,表示将计算的向量拆分为标志向量和表征向量,表示sigmoid激活函数,fc表示全连接层,maxpool表示最大池化层。
54.本发明还提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储有
基于多示例感知的软件漏洞检测程序,所述基于多示例感知的软件漏洞检测程序被处理器执行时实现如上所述的基于多示例感知的软件漏洞检测方法的步骤。
55.综上所述,本发明公开了一种基于多示例感知的软件漏洞检测方法及相关设备,所述方法包括:获取包级代码片段,使用预训练模型对所述包级代码片段进行训练,得到表征向量;将表征向量分别映射到不同的线性空间中,得到包级代码片段的注意力表征向量;将第一标志向量与表征向量结合,得到包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量拼接,再进行卷积和拆分操作,得到函数级第二标志向量和目标表征向量,并通过最大池化层计算得到文件级标志向量,根据函数级第二标志向量和文件级标志向量检测漏洞。本发明捕捉示例本身的局部信息和不同示例之间的全局信息,同时检测判断文件级代码和函数级代码是否包含漏洞。
56.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者终端中还存在另外的相同要素。
57.当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
58.应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

技术特征:
1.一种基于多示例感知的软件漏洞检测方法,其特征在于,所述的基于多示例感知的软件漏洞检测方法包括:获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量;将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。2.根据权利要求1所述的基于多示例感知的软件漏洞检测方法,其特征在于,所述使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量,具体包括:使用预训练模型codebert对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,所述第一表征向量为;将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量, ;其中,和分别表示第1层和第l层预训练模型codebert下的表征向量,表示预训练模型codebert中表示代码语义信息的表征向量,表示输入的第个函数代码片段,表示预训练模型codebert中所包含的特征权重,表示将多个向量拼接起来,表示函数在包级代码片段中的序号,表示包级代码片段内的函数总数。3.根据权利要求1所述的基于多示例感知的软件漏洞检测方法,其特征在于,所述将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,具体包括:将所述包级代码片段的表征向量分别映射到线性空间query、key和value中,过程表示
为:;;,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量;其中,表示线性层,,,分别代表所述包级代码片段的第一表征向量在第层注意力机制中的查询向量query、密钥向量key和值向量value的线性空间,表示包级代码片段的第一表征向量在第层的表征向量,是小于线性层总层数的任意一层,表示包级代码片段的第一表征向量在第层的表征向量。4.根据权利要求3所述的基于多示例感知的软件漏洞检测方法,其特征在于,所述将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量,具体包括:将所述查询向量和所述密钥向量输入到自注意力机制中,计算得到第层节点的包级代码片段的初始注意力得分,计算过程为,再通过所述值向量与所述初始注意力得分计算得到所述包级代码片段的注意力表征向量,计算过程为:,由得到所述包级代码片段的函数级代码的注意力表征向量;其中,是归一化指数函数,为输入向量的维度,表示划分的多头注意力头数,t表示转置操作。5.根据权利要求4所述的基于多示例感知的软件漏洞检测方法,其特征在于,所述将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量,具体包括:预先设计一个可训练的函数级第一标志向量,通过公式将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量;再将每个函数代码片段的第二表征向量拼接,得到第一注意力表征向量,表示为;其中,表示将多个向量拼接起来,表示所述包级代码片段的注意力表征向量中的第i个函数级代码的注意力表征向量,表示函数在包级代码片段中的序号。6.根据权利要求5所述的基于多示例感知的软件漏洞检测方法,其特征在于,所述对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,具体包括:根据并行使用的多种维度卷积核对所述第一注意力表征向量进行卷积操作,得到第二
注意力表征向量,卷积操作的计算过程表示为;其中,和分别表示不同大小的卷积核,是激活函数,和分别表示不同卷积核下的常数偏置项,表示卷积操作。7.根据权利要求6所述的基于多示例感知的软件漏洞检测方法,其特征在于,所述将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量,具体包括:将所述第二注意力表征向量通过公式进行拆分,得到函数级第二标志向量和目标表征向量;将所述目标表征向量通过最大池化层计算得到文件级标志向量,计算过程表示为;其中,为函数级第二标志向量,为目标表征向量,表示将计算的向量拆分为标志向量和表征向量,表示sigmoid激活函数,fc表示全连接层,maxpool表示最大池化层。8.一种基于多示例感知的软件漏洞检测系统,其特征在于,所述基于多示例感知的软件漏洞检测系统包括:包级代码片段获取模块,用于获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;表征向量获取模块,用于使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;注意力表征向量获取模块,用于将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量;向量合并模块,用于将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;标志向量获取模块,用于对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;漏洞检测结果获取模块,用于根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。9.一种终端,其特征在于,所述终端包括:存储器、处理器及存储在所述存储器上并可
在所述处理器上运行的基于多示例感知的软件漏洞检测程序,所述基于多示例感知的软件漏洞检测程序被所述处理器执行时实现如权利要求1-7任一项所述的基于多示例感知的软件漏洞检测方法的步骤。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有基于多示例感知的软件漏洞检测程序,所述基于多示例感知的软件漏洞检测程序被处理器执行时实现如权利要求1-7任一项所述的基于多示例感知的软件漏洞检测方法的步骤。

技术总结
本发明公开了一种基于多示例感知的软件漏洞检测方法及相关设备,所述方法包括:获取包级代码片段,使用预训练模型对所述包级代码片段进行训练,得到表征向量;将表征向量分别映射到不同的线性空间中,得到包级代码片段的注意力表征向量;将第一标志向量与表征向量结合,得到包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量拼接,再进行卷积和拆分操作,得到函数级第二标志向量和目标表征向量,并通过最大池化层计算得到文件级标志向量,根据函数级第二标志向量和文件级标志向量检测漏洞。本发明捕捉示例本身的局部信息和不同示例之间的全局信息,同时检测判断文件级代码和函数级代码是否包含漏洞。包含漏洞。包含漏洞。


技术研发人员:徐国爱 高翠芸 刘川意 廖清 顾钊铨 文昕成
受保护的技术使用者:哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院)
技术研发日:2023.08.10
技术公布日:2023/9/13
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐