一种基于跨模态代码表示融合的函数级漏洞检测方法及系统
本发明涉及一种基于跨模态代码表示融合的函数级漏洞检测方法及系统,属于软件安全与人工智能。
背景技术:
1、软件漏洞是影响软件系统安全性和可靠性的关键因素,可能导致信息泄露、权限提升、拒绝服务以及远程代码执行等安全后果。函数级漏洞检测以单个函数的源码为检测对象,能够在保留局部程序上下文的同时提供较细粒度的漏洞判断结果,因此被广泛应用于软件开发、代码审计和安全测试过程。
2、现有自动化漏洞检测技术主要包括规则匹配、静态分析、动态分析和符号执行等方法。此类方法通常依赖人工构建的安全规则、测试用例或路径约束,面对复杂程序时可能出现规则覆盖不足、测试路径不完整、路径爆炸以及较高误报率或漏报率等问题。深度学习方法能够从大量代码样本中自动学习漏洞相关特征,已成为函数级漏洞检测的重要技术路线。
3、现有深度学习漏洞检测方法通常采用源码序列表示或程序图结构表示。基于源码序列的方法能够学习标识符、操作符、应用程序接口调用和局部上下文语义,但难以显式表示变量定义与使用、控制路径和数据传播关系;基于程序图结构的方法能够表示抽象语法、控制流和数据流等显式程序关系,但对大规模预训练代码模型中蕴含的源码上下文语义知识利用不足。单独依赖任一种代码表示均可能造成漏洞相关信息表达不完整。
4、部分现有多表示漏洞检测方法通过简单拼接、固定加权或节点与token之间的细粒度交互融合不同代码表示。然而,简单拼接或固定加权难以充分建模不同模态之间的作用关系;节点与token之间通常不存在稳定的一一对应关系,且容易受到代码图简化、源码分词差异和跨粒度关联噪声的影响。因此,需要一种在函数级表示空间内联合利用显式程序结构信息与源码上下文语义信息的漏洞检测方法,以提高结构—语义融合的有效性及检测结果的稳定性。
技术实现思路
1、本发明的目的是提供一种基于跨模态代码表示融合的函数级漏洞检测方法及系统,通过分别提取函数级结构表示与语义表示,以结构为查询、语义为键值执行多头参数化变换生成增强表示,并拼接为融合表示进行分类,以联合利用结构与语义信息、避免跨粒度对齐噪声,提高漏洞检测性能和稳定性。
2、为达到上述目的,本发明是采用下述技术方案实现的。
3、一方面,本发明提供一种基于跨模态代码表示融合的函数级漏洞检测方法,包括:
4、获取待检测函数源码;
5、根据所述待检测函数源码,分别构建结构输入和语义输入;其中,所述结构输入为基于所述待检测函数源码的程序结构生成的简化代码图,所述简化代码图包含图结构和节点特征;所述语义输入为基于同一个所述待检测函数源码的源码文本生成的源码token序列及有效token掩码;
6、提取并聚合所述简化代码图中各节点的程序关系邻域信息,并根据聚合后的程序关系邻域信息更新各节点的隐藏状态,再对更新后的各节点的隐藏状态进行图级汇聚,得到函数级结构表示;其中,所述程序关系包括语法关系、控制流关系和数据流关系;
7、提取所述源码token序列的上下文语义编码,并根据所述有效token掩码对所述上下文语义编码进行汇聚,得到函数级语义表示;
8、将所述函数级结构表示和函数级语义表示分别投影至维度相同的统一隐空间,得到投影后结构表示和投影后语义表示;
9、以所述投影后结构表示作为查询侧输入,以所述投影后语义表示作为键侧输入和值侧输入,执行多头参数化变换,生成语义参数化增强表示;
10、通过将所述投影后结构表示、投影后语义表示和语义参数化增强表示进行拼接,得到跨模态融合表示;
11、将所述跨模态融合表示输入漏洞分类器,获得待检测函数的漏洞概率,将所述漏洞概率与预设分类阈值进行比较,输出所述待检测函数存在漏洞或不存在漏洞的检测结果。
12、进一步地,所述简化代码图的生成过程包括:
13、对所述待检测函数源码进行程序解析,从所述待检测函数源码提取语句、变量、表达式、操作符和函数调用对应的节点,并提取所述节点之间的抽象语法关系、控制流关系和数据依赖关系,构建初始代码结构图;
14、对所述初始代码结构图进行图简化操作,得到简化后的初始代码结构图;其中,所述图简化操作包括:去除所述初始代码结构图中的辅助节点,对局部抽象语法子树进行剪枝或压缩,并合并表示同一变量或同一代码语义单元的冗余节点;
15、保留所述简化后的初始代码结构图中的抽象语法边、控制流边和数据依赖边,并按照所述待检测函数源码中的代码单元排列顺序补充自然序列边,并为各节点补充自环边,得到简化图结构;
16、将所述简化图结构中各节点对应的代码文本拆分为子词单元,将所述子词单元映射为词向量,并对属于同一节点的词向量进行平均池化,得到各节点的固定维度节点特征,由所述简化图结构和固定维度节点特征构成所述简化代码图。
17、进一步地,所述源码token序列及有效token掩码生成过程包括:
18、利用预训练代码模型所对应的分词器对所述同一函数源码的源码文本分词,得到初始token序列;
19、在所述初始token序列中加入预设的序列标记,并计算加入标记后的token数量;
20、当所述token数量超过预设最大序列长度时执行截断,当所述token数量小于预设最大序列长度时执行填充,生成所述源码token序列;
21、将所述源码token序列中有效token位置的掩码值设置为1,将填充token位置的掩码值设置为0,生成所述有效token掩码。
22、进一步地,通过结构表示提取模块执行所述简化代码图中各节点的程序关系邻域信息的提取与聚合、各节点隐藏状态的更新以及图级汇聚,所述结构表示提取模块包括多类型程序关系编码单元、节点状态更新单元、节点特征序列处理单元、图级特征汇聚单元和结构特征投影层,具体包括:
23、所述多类型程序关系编码单元依据所述简化代码图中边的关系类型计算相邻节点之间的信息权重并聚合邻域信息;
24、所述节点状态更新单元根据聚合后的程序关系邻域信息更新各节点的隐藏状态;
25、所述节点特征序列处理单元对更新后的各节点的隐藏状态进行局部与长距离特征处理,得到有效节点隐藏状态;
26、所述图级特征汇聚单元对所述有效节点隐藏状态进行汇聚,得到函数级图表示;
27、所述结构特征投影层将所述函数级图表示映射至统一隐空间,得到投影后的所述函数级结构表示。
28、进一步地,所述多类型程序关系编码单元在第l层编码时计算节点v的邻域聚合信息的表达式如下:
29、(1),
30、式中,r表示程序关系类型集合r的索引,u表示第r类程序关系与节点v相邻的邻居节点集合的索引,表示第l层中邻居节点u和节点v在第r类程序关系下的信息权重,表示第l层中第r类程序关系对应的可训练变换矩阵,表示邻居节点u在第l层的隐藏状态;
31、所述节点状态更新单元确定更新后的节点隐藏状态的表达式如下:
32、(2),
33、式中,表示节点v在第l+1层更新后的节点隐藏状态;表示非线性激活函数,表示第l层的节点自循环对应的可训练变换矩阵,表示节点v在第l层更新后的节点隐藏状态。
34、进一步地,通过语义表示提取模块提取所述源码token序列的上下文语义编码,并根据所述有效token掩码对所述上下文语义编码进行汇聚,得到函数级语义表示,所述语义表示提取模块包括token嵌入层、位置编码层、多层上下文语义编码单元、有效token掩码处理单元、语义特征池化单元和语义特征投影层;
35、所述token嵌入层和位置编码层将所述源码token序列转换为带有位置信息的token向量序列;
36、所述多层上下文语义编码单元根据所述token向量序列生成各token的上下文隐藏状态;
37、所述有效token掩码处理单元根据所述有效token掩码,从各token的上下文隐藏状态中筛选出有效token位置的上下文隐藏状态,并过滤填充token位置的上下文隐藏状态;
38、所述语义特征池化单元根据所述有效token掩码聚合所述有效token位置的上下文隐藏状态,得到函数级源码语义表示;
39、所述语义特征投影层将所述函数级源码语义表示映射至统一隐空间,得到投影后的所述函数级语义表示。
40、进一步地,投影后的所述函数级语义表示的表达式如下:
41、(3),
42、式中,表示可训练的语义投影矩阵,表示偏置项;s表示函数级源码语义表示,,表示预设最大序列长度,表示第j个token的上下文隐藏状态,表示第j个位置是否为有效token,,时表示第j个位置是填充位置,时表示第j个位置是有效token;表示用于避免分母为零的预设常数。
43、进一步地,所述跨模态融合表示的表达式如下所示:
44、(4),
45、式中,表示投影后结构表示,表示投影后语义表示;
46、表示语义参数化增强表示,,表示输出投影层的可训练权重矩阵,表示输出投影层的偏置项,m表示多头参数化变换中的头数量;
47、表示第i个参数化头的输出,,,表示第i个参数化头中以查询向量、键向量和值向量为输入的参数化变换函数,、以及分别表示第i个参数化头的查询向量、键向量以及值向量;
48、,、以及分别表示第i个参数化头中用于将映射为查询向量、将映射为键向量和值向量的可训练投影矩阵。
49、进一步地,所述漏洞分类器包括第一线性层、非线性激活层、随机失活层和输出层;
50、将所述跨模态融合表示输入至所述第一线性层,并经所述非线性激活层以及随机失活层处理后,经由所述输出层输出漏洞预测值,并通过概率映射函数将所述漏洞预测值转换为待检测函数的漏洞概率,所述待检测函数的漏洞概率的表达式如下:
51、(5),
52、式中,表示待检测函数的漏洞概率;
53、表示漏洞预测值,,表示第一线性层的权重矩阵,表示第一线性层的偏置项,表示输出层的权重矩阵,表示输出层的偏置项,表示随机失活函数,表示非线性激活函数;
54、将所述漏洞概率与预设分类阈值进行比较,当时,输出所述待检测函数存在漏洞;当时,输出所述待检测函数不存在漏洞。
55、另一方面,本发明还提供一种基于跨模态代码表示融合的函数级漏洞检测系统,包括:
56、获取模块,被配置为:获取待检测函数源码;
57、输入构建模块,被配置为:根据所述待检测函数源码,分别构建结构输入和语义输入;其中,所述结构输入为基于所述待检测函数源码的程序结构生成的简化代码图,所述简化代码图包含图结构和节点特征;所述语义输入为基于同一个所述待检测函数源码的源码文本生成的源码token序列及有效token掩码;
58、结构表示提取模块,被配置为:提取并聚合所述简化代码图中各节点的程序关系邻域信息,并根据聚合后的邻域信息更新各节点的隐藏状态,再对更新后的各节点的隐藏状态进行图级汇聚,得到函数级结构表示;其中,所述程序关系包括语法关系、控制流关系和数据流关系;
59、语义表示提取模块,被配置为:提取所述源码token序列的上下文语义编码,并根据所述有效token掩码对所述上下文语义编码进行汇聚,得到函数级语义表示;
60、投影模块,被配置为:将所述函数级结构表示和函数级语义表示分别投影至维度相同的统一隐空间,得到投影后结构表示和投影后语义表示;
61、语义增强模块,被配置为:以所述投影后结构表示作为查询侧输入,以所述投影后语义表示作为键侧输入和值侧输入,执行多头参数化变换,生成语义参数化增强表示;
62、跨模态融合模块,被配置为:通过将所述投影后结构表示、投影后语义表示和语义参数化增强表示进行拼接,得到跨模态融合表示;
63、分类输出模块,被配置为:将所述跨模态融合表示输入漏洞分类器,获得待检测函数的漏洞概率,将所述漏洞概率与预设分类阈值进行比较,输出所述待检测函数存在漏洞或不存在漏洞的检测结果。
64、与现有技术相比,本发明所达到的有益效果:
65、1.现有基于源码序列的方法虽能学习标识符含义和上下文语义,但难以显式表示变量定义与使用、控制路径和数据传播关系;因此本发明同时对同一函数源码构建结构图和源码序列两类输入,使后续的漏洞检测模型能够从程序结构和源码语义两个维度获取互补的漏洞相关线索,从而避免单一代码表示造成的信息缺失;
66、2.现有简单拼接或固定加权的融合方式难以充分建模不同模态之间的作用关系,本发明将两类表示投影至统一隐空间后,以结构表示作为查询、语义表示同时作为键和值进行多头参数化变换,生成一个语义参数化增强表示;相比于简单拼接,这种变换能够通过多头可学习投影对函数级语义表示进行参数化变换,并与原结构表示、原语义表示拼接,以联合利用两类表示;
67、3.本发明通过在函数级表示空间完成融合,避免建立节点与token之间的逐项对应关系,同时保留投影后结构表示、投影后语义表示以及对投影后语义表示进行多头参数化变换得到的增强表示三类表示,使漏洞分类器能够联合利用程序结构特征、预训练语义特征和语义参数化增强特征进行决策。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com