基于依赖注意力的语句级漏洞定位方法、系统及存储介质

专利2026-02-14  18


本发明主要涉及到软件程序漏洞定位,特指一种基于依赖注意力的语句级漏洞定位方法、系统及存储介质。


背景技术:

1、随着软件规模不断增大,软件的漏洞变得不可避免。软件漏洞定位技术是软件调试活动中非常重要的任务和研究课题。准确的漏洞定位可以减轻开发人员的工作负担,帮助开发人员进一步理解漏洞的根因和危害。

2、目前,有从业者提出了各种技术方式或技术路线来进行软件漏洞检测,主要可以分为两类:(1)基于程序分析的方法;(2)基于深度学习(dl)的方法。其中,基于程序分析的方法是使用手动预定义的漏洞模板来检测特定类型的漏洞,如越界写入、跨站脚本和使用后释放等。然而,由于软件漏洞的多样性和复杂性,为每种漏洞定义准确和全面的模板是不可行的。因此,基于深度学习的方法越来越多地被提出来识别广泛的漏洞,无需人工劳动。在现有技术中,典型的基于深度学习的方法为:首先利用代码表示学习来隐式捕捉源代码中的漏洞模式,然后通过分类器模型检测漏洞。

3、最近,为了为开发人员提供更精确的检测结果,另有从业者提出了一些基于语句级别的深度学习漏洞检测方法,即:用于识别函数内的易受攻击语句。具体而言,一些方法将源代码表示为多个视图,如数据流图(dfg)、代码属性图(cpg)和程序依赖图(pdg),然后利用各种图神经网络(gnns)预测对应于易受攻击语句的可疑节点。另外还有一些方法直接将源代码转换为标记序列,并利用基于序列的深度学习模型,如循环神经网络(rnn)和transformer,捕获语句的语法特征和语义信息。

4、尽管transformer已经被证明在捕捉源代码的语法和语义特征方面表现优越,但是现有的基于transformer的方法存在一个局限性:它们简单地将源代码视为一组顺序的代码语句,直接输入到transformer中。因此,transformer中的自注意机制将代码语句视为完全连接的关系,忽略了源代码的内在结构信息(例如数据或控制依赖关系)。这种疏漏可能导致模型学习到的漏洞特征与代码的底层语义之间存在差距,潜在地影响漏洞检测的性能及检测的精度。


技术实现思路

1、本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种原理简单、适用范围广、检测精度高、检测性能好的基于依赖注意力的语句级漏洞定位方法、系统及存储介质。

2、为解决上述技术问题,本发明采用以下技术方案:

3、一种基于依赖注意力的语句级漏洞定位方法,其包括:

4、步骤s1:训练数据预处理:对大量的漏洞数据进行预处理,获取满足模型要求的训练数据;对于训练数据集中的每个函数,使用joern程序分析工具来提取函数的程序依赖图;

5、步骤s2:模型训练:将所述函数和对应的程序依赖图作为训练数据,即使用步骤s1获得的训练数据对模型进行训练,获取神经网络模型;

6、步骤s3:漏洞语句定位:对于一个给定的缺陷函数,使用步骤s2中训练好的模型,来预测出具体的漏洞语句行号。

7、作为本发明方法的进一步改进:所述步骤s2包括:

8、步骤s21:使用预训练模型得到函数中每个语句的嵌入向量[x_1^v,x_2^v,…,x_n^v],其中x_i^v表示每个语句的嵌入向量;

9、步骤s22:在得到每个语句的嵌入向量[x_1^v,x_2^v,…,x_n^v],使用注意力掩盖矩阵和transformer编码器提取语句之间的数据/控制依赖关系,计算得到基于依赖的语句表示向量[s_1^v,s_2^v,…,s_n^v],其中s_i^v是基于依赖的语句表示向量;

10、步骤s23:在得到基于依赖信息的语句表示向量[s_1^v,s_2^v,…,s_n^v],使用transformer编码器得到函数表示向量;

11、步骤s24:模型训练;使用交叉熵损失函数对模型进行训练。

12、作为本发明方法的进一步改进:所述步骤s21中,得到函数中每个语句的嵌入向量的流程包括:

13、步骤s211:将函数源代码按行切分得到,并对每行源代码进行分词,在分词后的token序列第一位插入额外的token;

14、步骤s212:使用预训练模型得到token序列的嵌入向量,取出每个序列的第一个嵌入向量作为每行语句的嵌入向量。

15、作为本发明方法的进一步改进:所述步骤s22中,计算基于依赖的语句表示向量的流程包括:

16、步骤s221:基于程序依赖图构建注意力掩盖矩阵;假定注意力掩盖矩阵m大小为n*n,如果两行语句之间存在数据/控制依赖,注意力掩盖矩阵对应的元素大小为负无穷,如果两行语句之间不存在数据/控制依赖,注意力掩盖矩阵对应的元素大小为0;

17、步骤s222:使用注意力掩盖矩阵和transformer编码器提取语句之间的数据/控制依赖关系,计算得到基于依赖的语句表示向量。

18、作为本发明方法的进一步改进:所述步骤s222中包括:将注意力掩盖矩阵与原有的transformer编码器中的注意力矩阵进行相加,得到基于依赖的注意力矩阵,然后使用softmax得到每个元素的注意力权重,具体过程为:

19、

20、

21、其中,aij为注意力矩阵中的(i,j)位置的元素,,为第i个语句和第j个语句的嵌入向量,为第

转载请注明原文地址:https://xbbs.6miu.com/read-29750.html