一种基于多层次特征深度提取的漏洞代码检测方法

文档序号:34233848发布日期:2023-05-24 17:58阅读:114来源:国知局
一种基于多层次特征深度提取的漏洞代码检测方法

本发明涉及计算机安全技术,具体涉及一种基于多层次特征深度提取的漏洞代码检测方法。


背景技术:

1、软件漏洞是指软件在其生命周期(即开发、部署、执行整个过程)中存在的缺陷,而这些缺陷可能会被不法分子利用,绕过系统的访问控制,非法窃取较高的权限从而任意操纵系统,如触发特权命令、访问敏感信息、冒充身份、监听系统运行等。随着现有软件系统愈加复杂庞大,漏洞出现频率不断提升,急需针对漏洞检测领域开展系统的研究工作,以便高效及时地发现软件系统的漏洞,实时修补,提高网络空间的安全等级。

2、对于目前软件漏洞检测研究方向主要分为传统的漏洞检测方法以及基于深度学习的漏洞检测方法。传统的漏洞检测方法大体可分为三类:(1)探索输入空间,比如黑盒模糊测试和灰盒模糊测试,但是此类方法效率低,且无法产生输入来检查程序中的所有状态;(2)分析程序的内部状态空间,如符号执行,此类方法受路径探索问题和smt求解器能力的限制,可扩展性较差;(3)基于领域专家制定的模式、规则或指标分析程序,此类方法需要耗费大量的人力,且查准率和查全率得不到保证。基于深度学习的漏洞检测方法由于免去了手工定义特征的过程以及可以自动学习易受攻击代码模式等优点逐渐替代了传统漏洞检测方法。

3、基于深度学习的漏洞挖掘方法,检测模型的精确一方面取决于模型的选择,另一方面取决于源代码的特征提取与表示;漏洞的产生通常是由可重用的代码库或共享的代码逻辑造成的,根据特种漏洞的产生具有该漏洞特征的相似性,通过代码相似性检测出可能产生漏洞的代码,以相似的代码段很可能含有相同的漏洞为核心来找出漏洞,在一定方面确定了深度学习在漏洞检测的优势,但是现有的深度学习方法主要就是漏洞代码特征提取的层次太浅,导致模型整体的精度不高。


技术实现思路

1、发明目的:本发明的目的在于解决现有技术中存在的不足,提供一种基于多层次特征深度提取的漏洞代码检测方法。

2、技术方案:本发明的一种基于多层次特征深度提取的漏洞代码检测方法,包括以下步骤:

3、步骤s1、获取漏洞代码样本数据集,该样本数据集中的漏洞类型包括漏洞代码与合法代码,漏洞代码与合法代码分别作为检测模型的训练样本和测试样本;

4、步骤s2、对漏洞代码训练样本进行切片处理和数据清洗,对清洗后的代码切片通过三个嵌入层转换为向量化表示(即嵌入向量)得到向量化代码切片;三个嵌入层依次为标记嵌入、片段嵌入和位置嵌入;

5、步骤s3、使用bert模型对向量化代码切片分别进行特征提取,得到函数级代码特征和词级代码特征;

6、提取函数级代码特征是指将bert模型的句嵌入输出,对应代码切片标识符[cls]的最后一层输出,包含代码切片的整体特征;

7、提取词级代码特征是指将bert模型的字嵌入输出,对应的是序列中的所有token的最后一层输出,可视为代码切片的词级代码特征;

8、步骤s4、对步骤s3所得词级代码特征通过lstm以及加入多头注意力机制(multi-head attention)进行深度特征的提取;

9、首先,将词级代码特征数据经过lstm神经网络处理得到包含所有时间步输出o=[o1,o2,...od]以及最后时间步d的隐藏状态hd,由于o表示代码切片中的词级代码特征,o1,o2,...od是指每个词级代码的tokens经过lstm后的向量表示,hd表示切片整体的特征;

10、然后、为体现词级代码特征对于代码切片整体的重要性,建立hd与o的自注意力关系,即建立个时间步输出ot对于hd的权重,此时由于lstm本身已经考虑的位置信息,因此不需要额外设置位置编码,直接使用transformer提出的自注意力实现方法:各时间步的输出ot经线性变换后作为key和value,将时间步的输出hd乘以矩阵wq作为query;在时间步t时,keyt,valuet,query,得分et和权重at,计算公式如下(1-5):

11、query=wqhd                          (1)

12、valuet=wvot                           (2)

13、keyt=wkot                            (3)

14、

15、

16、步骤s5、通过mlm和nsp对bert模型进行预训练,得到漏洞代码检测模型;

17、步骤s6、将待检测的漏洞代码送入训练好的漏洞代码检测模型进行分类,然后通过对融合函数级代码特征以及词级代码特征的综合分析,来对漏洞代码进行分类处理,从而提高漏洞代码的检测准确率。

18、进一步地,所述步骤s1中获取漏洞代码样本数据集的具体方法为:

19、通过对cwe(common weakness enumeration)数据库中的漏洞代码进行检索,对mitre公司发布的2022常见软件缺陷中重要的软件漏洞进行获取。

20、进一步地,所述步骤s2中对漏洞代码训练样本进行切片处理和数据清洗的方法为:

21、(a)、提取库函数或api函数调用和程序片段,先将库/api函数调用分为前行调用和后向调用两类;前向库/api函数调用是直接从外部输入接受一个或者多个输入的函数调用,例如命令行,程序,套接字或文件;后向库/api函数调用是不直接从程序运行的环境接受任何外部输入的函数调用;

22、(b)、移除与漏洞无关的非ascii字符和注释,将用户定义的变量映射到符号名,将用户定义的函数映射到符号名。

23、进一步地,所述步骤s2中通过三个嵌入层转换为嵌入向量的具体步骤为:

24、标记嵌入,首先对代码块进行分词,由于对代码块已经经过数据清洗,清洗后的代码块更容易进行分词处理,此处只需把分词处理后的代码切片每行合并为一行,,并去掉分号,对于每行代码的第一行增加标记[cls]用于后续的分类任务,并在每一行代码的末尾增加[sep]标记,用于标记每个句子的结尾;

25、片段嵌入,由于上一步已将代码块合并为一行,此处需给模型某种标志来区分每一个token属于哪一行代码;

26、位置嵌入,由于需要通过bert模型提取输入代码数据的位置信息,因此需要使用位置编码提供句子中标记的位置信息。

27、进一步地,所述步骤s5的具体过程为:

28、s5.1、通过mlm随机从输入的token中mask 15%,然后通过模型来预测,在实验中按照设定的比例随机对token进行mask,确定mask的token会选80%直接替换为[mask],10%的会随机替换为别的token,剩下的10%会保留原始token;具体损失函数计算公式如(6):

29、l(θ,θ1,θ2)=l1(θ,θ1)+l2(θ,θ2)                  (6)

30、其中,θ是bert中encoder部分的参数,θ1是mask-lm任务中在encoder上所接的输出层中的参数,θ2则是句子预测任务中在encoder接上的分类器参数;因此,在第一部分的损失函数中,如果被mask的词集合为m,因为它是一个词典大小|v|上的多分类问题,即:

31、

32、s5.2、通过nsp随机抽取代码段来判断代码段之间的先后关系,作用为增加代码切片代码段的相互结构性,具体损失函数公式如(8)。

33、

34、ni表示代码间是否是下一句的关系;

35、s5.3、两个任务的联合学习的损失函数如公式(9):

36、

37、mi表示被mask的单词。

38、进一步地,所述步骤s6结合函数级代码特征以及词级代码特征进行漏洞代码分类的具体方法为:

39、拼接融合函数级代码特征以及词级代码漏洞,并将融合的特征作为训练集特征,,将待检测的漏洞代码放入设计的神经网络模型中进行检测,将输出结果返回给用户。

40、有益效果:与现有技术相比,本发明具有以下优点

41、1、本发明对于代码切片特征的提取,提出了一种基于函数级,词级双层次的特征提取方法,对漏洞代码信息进行全面、高效的提取,既保留了代码切片的结构信息,又保留了代码切片丰富的语义。

42、2、本发明通过对词级代码特征针对性提出一种基于lstm与multi-headattention机制进行特征的进一步特征提取,能够提高最终的漏洞代码检测分类精度。

43、3、本发明在漏洞检测模型中引用自然语言处理的bert模型,并通过改进模型在各种漏洞检测模型中提出一种新型的漏洞检测模型,提高了漏洞检测模型的准确率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1