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

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

Info

Publication number
CN116738443B
CN116738443B CN202311003502.5A CN202311003502A CN116738443B CN 116738443 B CN116738443 B CN 116738443B CN 202311003502 A CN202311003502 A CN 202311003502A CN 116738443 B CN116738443 B CN 116738443B
Authority
CN
China
Prior art keywords
vector
function
level
level code
characterization
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311003502.5A
Other languages
English (en)
Other versions
CN116738443A (zh
Inventor
徐国爱
高翠芸
刘川意
廖清
顾钊铨
文昕成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Graduate School Harbin Institute of Technology
Original Assignee
Shenzhen Graduate School Harbin Institute of Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Graduate School Harbin Institute of Technology filed Critical Shenzhen Graduate School Harbin Institute of Technology
Priority to CN202311003502.5A priority Critical patent/CN116738443B/zh
Publication of CN116738443A publication Critical patent/CN116738443A/zh
Application granted granted Critical
Publication of CN116738443B publication Critical patent/CN116738443B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

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

Description

一种基于多示例感知的软件漏洞检测方法及相关设备
技术领域
本发明涉及软件漏洞检测技术领域,尤其涉及一种基于多示例感知的软件漏洞检测方法及相关设备。
背景技术
软件漏洞是软件系统中重要而常见的安全威胁,这些漏洞很容易被攻击者利用,并有可能对软件系统造成不可弥补的损失;例如,缓冲区溢出问题允许攻击者利用漏洞篡改内存数据或获得对系统的控制;因此,提升软件漏洞检测的性能有助于维护社会安全和避免经济损软件漏洞失。
但是,现有的软件漏洞检测方法,通常将一个代码文件拆分成函数级或者切片级的代码片段,并且使用代码片段作为输入单位用于代码漏洞检测,这样的处理方式导致通常只能处理512个单词以下的代码片段,对于长度更长,单词数量更多的代码片段,现有的方法无法对其进行有效的处理,只能通过截断等方式对长度较长的代码片段进行处理,导致现有的漏洞检测器无法有效的检测现实场景下的源代码文件,在工业化的场景下可用性不足。
因此,现有技术还有待于改进和发展。
发明内容
本发明的主要目的在于提供一种基于多示例感知的软件漏洞检测方法、系统、终端及计算机可读存储介质,旨在解决现有技术中难以对长段代码的漏洞进行准确推理和定位的问题。
为实现上述目的,本发明提供一种基于多示例感知的软件漏洞检测方法,所述基于多示例感知的软件漏洞检测方法包括如下步骤:
获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;
使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;
将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量;
将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;
对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;
根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。
可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量,具体包括:
使用预训练模型CodeBERT对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,所述第一表征向量/>
将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量, />
其中,和/>分别表示第1层和第L层预训练模型CodeBERT下的表征向量,/>表示预训练模型CodeBERT中表示代码语义信息的表征向量,/>表示输入的第/>个函数代码片段,/>表示预训练模型CodeBERT中所包含的特征权重,/>表示将多个向量拼接起来,/>表示函数在包级代码片段中的序号,/>表示包级代码片段内的函数总数。
可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,具体包括:
将所述包级代码片段的表征向量分别映射到线性空间Query、KeyValue中,过程表示为:;/>;/>,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量;
其中,表示线性层,/>,/>,/>分别代表所述包级代码片段的第一表征向量在第/>层注意力机制中的查询向量Query、密钥向量Key和值向量Value的线性空间,/>表示包级代码片段的第一表征向量/>在第/>层的表征向量,/>是小于线性层总层数的任意一层,/>表示包级代码片段的第一表征向量/>在第/>层的表征向量。
可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量,具体包括:
将所述查询向量和所述密钥向量输入到自注意力机制中,计算得到第层节点的包级代码片段的初始注意力得分/>,计算过程为,再通过所述值向量与所述初始注意力得分计算得到所述包级代码片段的注意力表征向量/>,计算过程为:,由/>得到所述包级代码片段的函数级代码的注意力表征向量/>
其中,是归一化指数函数,/>为输入向量的维度,/>表示划分的多头注意力头数,T表示转置操作。
可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量,具体包括:
预先设计一个可训练的函数级第一标志向量,通过公式将预定义的函数级第一标志向量/>与所述包级代码片段的函数级代码的注意力表征向量/>结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量/>
再将每个函数代码片段的第二表征向量拼接,得到第一注意力表征向量,表示为/>
其中,表示将多个向量拼接起来,/>表示所述包级代码片段的注意力表征向量中的第i个函数级代码的注意力表征向量,/>表示函数在包级代码片段中的序号。
可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,具体包括:
根据并行使用的多种维度卷积核对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,卷积操作的计算过程表示为
其中,和/>分别表示不同大小的卷积核,/>是激活函数,/>分别表示不同卷积核下的常数偏置项,/>表示卷积操作。
可选地,所述的基于多示例感知的软件漏洞检测方法,其中,所述将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量,具体包括:
将所述第二注意力表征向量通过公式进行拆分,得到函数级第二标志向量和目标表征向量;
将所述目标表征向量通过最大池化层计算得到文件级标志向量,计算过程表示为/>
其中,为函数级第二标志向量,/>为目标表征向量,/>表示将计算的向量拆分为标志向量和表征向量,/>表示Sigmoid激活函数,FC表示全连接层,Maxpool表示最大池化层。
此外,为实现上述目的,本发明还提供一种基于多示例感知的软件漏洞检测系统,其中,所述基于多示例感知的软件漏洞检测系统包括:
包级代码片段获取模块,用于获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;
表征向量获取模块,用于使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;
注意力表征向量获取模块,用于将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量;
向量合并模块,用于将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;
标志向量获取模块,用于对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;
漏洞检测结果获取模块,用于根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。
此外,为实现上述目的,本发明还提供一种终端,其中,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于多示例感知的软件漏洞检测程序,所述基于多示例感知的软件漏洞检测程序被所述处理器执行时实现如上所述的基于多示例感知的软件漏洞检测方法的步骤。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储有基于多示例感知的软件漏洞检测程序,所述基于多示例感知的软件漏洞检测程序被处理器执行时实现如上所述的基于多示例感知的软件漏洞检测方法的步骤。
本发明中,获取包级代码片段,使用预训练模型对所述包级代码片段进行训练,得到表征向量;将表征向量分别映射到不同的线性空间中,得到包级代码片段的注意力表征向量;将第一标志向量与表征向量结合,得到包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量拼接,再进行卷积和拆分操作,得到函数级第二标志向量和目标表征向量,并通过最大池化层计算得到文件级标志向量,根据函数级第二标志向量和文件级标志向量检测漏洞。本发明捕捉示例本身的局部信息和不同示例之间的全局信息,同时检测判断文件级代码和函数级代码是否包含漏洞。
附图说明
图1是本发明基于多示例感知的软件漏洞检测方法的较佳实施例的流程图;
图2是本发明基于多示例感知的软件漏洞检测系统的较佳实施例的原理图;
图3为本发明终端的较佳实施例的运行环境图。
具体实施方式
本申请提供一种基于多示例感知的软件漏洞检测方法及相关设备,为使本申请的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本申请进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
另外,若本发明实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明较佳实施例所述的基于多示例感知的软件漏洞检测方法,如图1所示,所述基于多示例感知的软件漏洞检测方法包括以下步骤:
S100、获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;
具体地,从开源场景中获取文件级代码片段,所述文件级代码片段表示为表示,其中,/>和/>分别表示文件级代码片段中的函数级代码片段和对应的序号;/>是函数级代码片段是否包含漏洞的标志,如果包含漏洞则标志为1,反之则标志为0;/>则表示所有函数以外的代码片段(例如源代码中包含的注释、预定义和宏定义等等)。
进一步地,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,只保留文件级代码片段中的函数部分,得到包级代码片段/>,其中,/>分别表示源代码中包含的函数代码片段和对应的标志;若包级代码片段中的每一个函数都不含有漏洞,则/>也不含有漏洞,标志为0;若包级代码片段中存在一个或以上的漏洞函数,则/>也含有漏洞,标志为1。
S200、使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;
CodeBERT(双峰预训练模型),是一种用于编程语言和自然语言的预训练模型,在多种编程语言上进行预训练。
具体地,使用预训练模型CodeBERT对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,所述第一表征向量/>
将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量, />
其中,和/>分别表示第1层和第L层预训练模型CodeBERT下的表征向量,/>表示预训练模型CodeBERT中表示代码语义信息的表征向量,/>表示输入的第/>个函数代码片段,/>表示预训练模型CodeBERT中所包含的特征权重,/>表示将多个向量拼接起来,/>表示函数在包级代码片段中的序号,/>表示包级代码片段内的函数总数。
因此,包级代码片段中的表征向量/>的大小为/>
可见,在本发明中,借助CodeBERT预训练模型,获得了不同层级(包级和函数级)下的表征向量,使得函数级代码表征尽可能的保留了其本身的语义信息,并通过建立函数级代码表征之间的联系来控制包级代码表征的大小,能够更好的处理源代码中的长文本情况。
S300、将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量。
具体地,为了进一步捕获不同函数代码之间的关系,同时为了更好的处理长代码片段的情况,将所述包级代码片段的表征向量分别映射到线性空间Query、KeyValue中,过程表示为:;/>;/>,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量;
其中,表示线性层,/>,/>,/>分别代表所述包级代码片段的第一表征向量在第/>层注意力机制中的查询向量Query、密钥向量Key和值向量Value的线性空间,/>表示包级代码片段的第一表征向量/>在第/>层的表征向量,/>是小于线性层总层数的任意一层,/>表示包级代码片段的第一表征向量/>在第/>层的表征向量。
进一步地,本发明设计了一个自我注意力机制,用于建立不同函数之间的关系。
将所述查询向量和所述密钥向量输入到自注意力机制中,计算得到第层节点的包级代码片段的初始注意力得分/>,计算过程为,再通过所述值向量与所述初始注意力得分计算得到所述包级代码片段的注意力表征向量/>,计算过程为:,由/>得到所述包级代码片段的函数级代码的注意力表征向量/>
其中,是归一化指数函数,/>为输入向量的维度,/>表示划分的多头注意力头数,T表示转置操作。
S400、将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;
具体地,预先设计一个可训练的函数级第一标志向量,所述函数级第一标志向量/>为每一个的函数级代码是否含有漏洞提供了初始化表示,可以直接的预测函数级代码是否含有漏洞;通过公式/>将预定义的函数级第一标志向量/>与所述包级代码片段的函数级代码的注意力表征向量/>结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量/>
再将每个函数代码片段的第二表征向量拼接,得到第一注意力表征向量,表示为/>
其中,表示将多个向量拼接起来,/>表示所述包级代码片段的注意力表征向量中的第i个函数级代码的注意力表征向量,/>表示函数在包级代码片段中的序号。
本发明将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量,捕捉了相邻函数级之间代码的联系。
S500、对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;
在捕获了函数级代码之间的全局联系后,本发明进一步捕捉了相邻函数级之间代码的联系。
具体地,根据并行使用的多种维度卷积核对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,卷积操作的计算过程表示为:
其中,和/>分别表示不同大小的卷积核,/>是激活函数,/>分别表示不同卷积核下的常数偏置项,/>表示卷积操作。
通过多种维度卷积核进行卷积操作后,每一个函数级代码表征都建立了与相邻代码表征之间的联系,可以进一步捕获文件级代码中的结构关系。
进一步地,本发明根据第二注意力表征向量,同时判断文件级代码和函数级代码是否包含漏洞。
具体地,将所述第二注意力表征向量通过公式进行拆分,得到函数级第二标志向量和目标表征向量;
将所述目标表征向量通过最大池化层计算得到文件级标志向量,计算过程表示为/>
其中,为函数级第二标志向量,/>为目标表征向量,/>表示将计算的向量拆分为标志向量和表征向量,/>表示Sigmoid激活函数,FC表示全连接层,Maxpool表示最大池化层。
S600、根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。
具体地,根据所述函数级第二标志向量的值得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,若所述第二标志向量的值为1,则说明所述第二标志向量/>对应的函数存在漏洞,若所述第二标志向量/>的值为0,则说明所述第二标志向量/>对应的函数不存在漏洞。
根据所述文件级标志向量的值得到文件级代码片段中是否含有漏洞的第二判断结果,若所述文件级标志向量的值为1,则说明所述文件级代码片段中存在漏洞,若所述文件级标志向量的值为0,则说明所述文件级代码片段中不存在漏洞。
进一步地,如图2所示,基于上述基于多示例感知的软件漏洞检测方法,本发明还相应提供了一种基于多示例感知的软件漏洞检测系统,其中,所述基于多示例感知的软件漏洞检测系统包括:
包级代码片段获取模块51,用于获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;
表征向量获取模块52,用于使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;
注意力表征向量获取模块53,用于将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量;
向量合并模块54,用于将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;
标志向量获取模块55,用于对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;
漏洞检测结果获取模块56,用于根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。
进一步地,如图3所示,基于上述基于多示例感知的软件漏洞检测方法和系统,本发明还相应提供了一种终端,所述终端包括处理器10、存储器20及显示器30。图3仅示出了终端的部分组件,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
所述存储器20在一些实施例中可以是所述终端的内部存储单元,例如终端的硬盘或内存。所述存储器20在另一些实施例中也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital, SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器20还可以既包括所述终端的内部存储单元也包括外部存储设备。所述存储器20用于存储安装于所述终端的应用软件及各类数据,例如所述安装终端的程序代码等。所述存储器20还可以用于暂时地存储已经输出或者将要输出的数据。在一实施例中,存储器20上存储有基于多示例感知的软件漏洞检测程序40,该基于多示例感知的软件漏洞检测程序40可被处理器10所执行,从而实现本申请中基于多示例感知的软件漏洞检测方法。
所述处理器10在一些实施例中可以是一中央处理器(Central Processing Unit,CPU),微处理器或其他数据处理芯片,用于运行所述存储器20中存储的程序代码或处理数据,例如执行所述基于多示例感知的软件漏洞检测方法等。
所述显示器30在一些实施例中可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。所述显示器30用于显示在所述终端的信息以及用于显示可视化的用户界面。所述终端的部件10-30通过系统总线相互通信。
在一实施例中,当处理器10执行所述存储器20中基于多示例感知的软件漏洞检测程序40时实现以下步骤:
获取文件级代码片段,将所述文件级代码片段中除函数代码片段以外的全部代码片段去除,得到包级代码片段;
使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量;
将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量;
将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量;
对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量;
根据所述函数级第二标志向量得到包级代码片段中的每个函数是否含有漏洞的第一判断结果,根据所述文件级标志向量得到文件级代码片段中是否含有漏洞的第二判断结果。
其中,所述使用预训练模型对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量,具体包括:
使用预训练模型CodeBERT对所述包级代码片段进行训练,得到所述包级代码片段中的每个函数代码片段的第一表征向量,所述第一表征向量/>为;
将每个函数代码片段的第一表征向量进行拼接,得到包级代码片段的表征向量, />
其中,和/>分别表示第1层和第L层预训练模型CodeBERT下的表征向量,/>表示预训练模型CodeBERT中表示代码语义信息的表征向量,/>表示输入的第个函数代码片段,/>表示预训练模型CodeBERT中所包含的特征权重,/>表示将多个向量拼接起来,/>表示函数在包级代码片段中的序号,/>表示包级代码片段内的函数总数。
其中,所述将所述包级代码片段的表征向量分别映射到不同的线性空间中,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量,具体包括:
将所述包级代码片段的表征向量分别映射到线性空间Query、KeyValue中,过程表示为:;/>;/>,得到所述包级代码片段在注意力机制中的查询向量、密钥向量和值向量;
其中,表示线性层,/>,/>,/>分别代表所述包级代码片段的第一表征向量在第层注意力机制中的查询向量Query、密钥向量Key和值向量Value的线性空间,/>表示包级代码片段的第一表征向量/>在第/>层的表征向量,/>是小于线性层总层数的任意一层,/>表示包级代码片段的第一表征向量/>在第/>层的表征向量。
其中,所述将所述查询向量、所述密钥向量和所述值向量输入到自注意力机制中,计算得到所述包级代码片段的函数级代码的注意力表征向量,具体包括:
将所述查询向量和所述密钥向量输入到自注意力机制中,计算得到第层节点的包级代码片段的初始注意力得分/>,计算过程为,再通过所述值向量与所述初始注意力得分计算得到所述包级代码片段的注意力表征向量/>,计算过程为:,由/>得到所述包级代码片段的函数级代码的注意力表征向量/>
其中,是归一化指数函数,/>为输入向量的维度,/>表示划分的多头注意力头数,T表示转置操作。
其中,所述将预定义的函数级第一标志向量与所述包级代码片段的函数级代码的注意力表征向量结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量进行拼接,得到第一注意力表征向量,具体包括:
预先设计一个可训练的函数级第一标志向量,通过公式将预定义的函数级第一标志向量/>与所述包级代码片段的函数级代码的注意力表征向量/>结合,得到所述包级代码片段中的每个函数代码片段的第二表征向量/>
再将每个函数代码片段的第二表征向量拼接,得到第一注意力表征向量,表示为/>
其中,表示将多个向量拼接起来,/>表示所述包级代码片段的注意力表征向量中的第i个函数级代码的注意力表征向量,/>表示函数在包级代码片段中的序号。
其中,所述对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,具体包括:
根据并行使用的多种维度卷积核对所述第一注意力表征向量进行卷积操作,得到第二注意力表征向量,卷积操作的计算过程表示为
其中,和/>分别表示不同大小的卷积核,/>是激活函数,/>分别表示不同卷积核下的常数偏置项,/>表示卷积操作。
其中,所述将所述第二注意力表征向量拆分得到函数级第二标志向量和目标表征向量,并将所述目标表征向量通过最大池化层计算得到文件级标志向量,具体包括:
将所述第二注意力表征向量通过公式进行拆分,得到函数级第二标志向量和目标表征向量;
将所述目标表征向量通过最大池化层计算得到文件级标志向量,计算过程表示为/>
其中,为函数级第二标志向量,/>为目标表征向量,/>表示将计算的向量拆分为标志向量和表征向量,/>表示Sigmoid激活函数,FC表示全连接层,Maxpool表示最大池化层。
本发明还提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储有基于多示例感知的软件漏洞检测程序,所述基于多示例感知的软件漏洞检测程序被处理器执行时实现如上所述的基于多示例感知的软件漏洞检测方法的步骤。
综上所述,本发明公开了一种基于多示例感知的软件漏洞检测方法及相关设备,所述方法包括:获取包级代码片段,使用预训练模型对所述包级代码片段进行训练,得到表征向量;将表征向量分别映射到不同的线性空间中,得到包级代码片段的注意力表征向量;将第一标志向量与表征向量结合,得到包级代码片段中的每个函数代码片段的第二表征向量,将每个函数代码片段的第二表征向量拼接,再进行卷积和拆分操作,得到函数级第二标志向量和目标表征向量,并通过最大池化层计算得到文件级标志向量,根据函数级第二标志向量和文件级标志向量检测漏洞。本发明捕捉示例本身的局部信息和不同示例之间的全局信息,同时检测判断文件级代码和函数级代码是否包含漏洞。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者终端中还存在另外的相同要素。
当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (10)

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

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311003502.5A CN116738443B (zh) 2023-08-10 2023-08-10 一种基于多示例感知的软件漏洞检测方法及相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311003502.5A CN116738443B (zh) 2023-08-10 2023-08-10 一种基于多示例感知的软件漏洞检测方法及相关设备

Publications (2)

Publication Number Publication Date
CN116738443A CN116738443A (zh) 2023-09-12
CN116738443B true CN116738443B (zh) 2023-12-26

Family

ID=87915430

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311003502.5A Active CN116738443B (zh) 2023-08-10 2023-08-10 一种基于多示例感知的软件漏洞检测方法及相关设备

Country Status (1)

Country Link
CN (1) CN116738443B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111259394A (zh) * 2020-01-15 2020-06-09 中山大学 一种基于图神经网络的细粒度源代码漏洞检测方法
WO2020252529A1 (en) * 2019-06-19 2020-12-24 Swinburne University Of Technology System for automatically detecting software vulnerability
CN112989358A (zh) * 2021-03-10 2021-06-18 华中科技大学 提高基于深度学习的源代码漏洞检测健壮性的方法及装置
CN113672931A (zh) * 2021-07-13 2021-11-19 中国人民解放军军事科学院国防科技创新研究院 一种基于预训练的软件漏洞自动检测方法及装置
WO2022096574A1 (en) * 2020-11-05 2022-05-12 Accenture Global Solutions Limited Scalable source code vulnerability remediation
CN115357909A (zh) * 2022-10-19 2022-11-18 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) 一种用于代码漏洞检测的全局信息感知图神经网络系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020252529A1 (en) * 2019-06-19 2020-12-24 Swinburne University Of Technology System for automatically detecting software vulnerability
CN111259394A (zh) * 2020-01-15 2020-06-09 中山大学 一种基于图神经网络的细粒度源代码漏洞检测方法
WO2022096574A1 (en) * 2020-11-05 2022-05-12 Accenture Global Solutions Limited Scalable source code vulnerability remediation
CN112989358A (zh) * 2021-03-10 2021-06-18 华中科技大学 提高基于深度学习的源代码漏洞检测健壮性的方法及装置
CN113672931A (zh) * 2021-07-13 2021-11-19 中国人民解放军军事科学院国防科技创新研究院 一种基于预训练的软件漏洞自动检测方法及装置
CN115357909A (zh) * 2022-10-19 2022-11-18 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) 一种用于代码漏洞检测的全局信息感知图神经网络系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
一个分布式协作的大规模网络恶意代码检测系统;吴刚;赵旭;董永苹;;大连理工大学学报(S1);全文 *

Also Published As

Publication number Publication date
CN116738443A (zh) 2023-09-12

Similar Documents

Publication Publication Date Title
US11709823B2 (en) Real time visual validation of digital content using a distributed ledger
CN107239666B (zh) 一种对医疗影像数据进行脱敏处理的方法及系统
CN108111489B (zh) Url攻击检测方法、装置以及电子设备
US8856937B1 (en) Methods and systems for identifying fraudulent websites
Carrier A hypothesis-based approach to digital forensic investigations
US8224848B2 (en) System and method for entropy-based near-match analysis
US10133568B2 (en) Embedding code anchors in software documentation
KR20170087007A (ko) 악성 코드 분석을 위한 전자 장치 및 이의 방법
US8176555B1 (en) Systems and methods for detecting malicious processes by analyzing process names and process characteristics
RU2018145499A (ru) Автоматизация проверки достоверности изображения
US8601594B2 (en) Automatically classifying an input from field with respect to sensitivity of information it is designed to hold
US11783072B1 (en) Filter for sensitive data
D'Orazio et al. Forensic collection and analysis of thumbnails in android
CN116738443B (zh) 一种基于多示例感知的软件漏洞检测方法及相关设备
CN113378118A (zh) 处理图像数据的方法、装置、电子设备和计算机存储介质
CN111161044A (zh) 一种自动截屏方法、装置、计算机设备及可读存储介质
CN115018608A (zh) 风险预测方法、装置、计算机设备
CN108197495A (zh) 应用程序中敏感信息的保护方法及装置
CN115310082A (zh) 信息处理方法、装置、电子设备及存储介质
CN111368164A (zh) 一种爬虫识别模型训练、爬虫识别方法、装置、系统、设备及介质
CN116611057B (zh) 数据安全检测方法及其系统
CN113052711B (zh) 基于区块链的保险保全风险控制方法和装置
CN111695441B (zh) 图像文档处理方法、装置及计算机可读存储介质
US20230027977A1 (en) Electronic device and control method thereof
US20230306134A1 (en) Managing implementation of data controls for computing systems

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant