当前位置: 首页 > 专利查询>安徽大学专利>正文

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

技术编号:37666192 阅读:12 留言:0更新日期:2023-05-26 04:25
本发明专利技术公开一种基于多层次特征深度提取的漏洞代码检测方法,采用代码切片的技术,利用Joern平台针对某些与漏洞相关的库函数或API函数通过数据流和控制流分析提取出节点间的具有数据依赖和控制依赖关系的切片,然后对切片进行数据清洗;对代码切片通过标记嵌入、片段嵌入、位置嵌入,将输入转化为可使用BERT模型进行特征提取的嵌入向量;通过对BERT模型的输出结果进行分类讨论,分析出基于函数级别、词级别不同层次的漏洞代码特征;对词级别特征通过LSTM与Multi

【技术实现步骤摘要】
一种基于多层次特征深度提取的漏洞代码检测方法


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

技术介绍

[0002]软件漏洞是指软件在其生命周期(即开发、部署、执行整个过程)中存在的缺陷,而这些缺陷可能会被不法分子利用,绕过系统的访问控制,非法窃取较高的权限从而任意操纵系统,如触发特权命令、访问敏感信息、冒充身份、监听系统运行等。随着现有软件系统愈加复杂庞大,漏洞出现频率不断提升,急需针对漏洞检测领域开展系统的研究工作,以便高效及时地发现软件系统的漏洞,实时修补,提高网络空间的安全等级。
[0003]对于目前软件漏洞检测研究方向主要分为传统的漏洞检测方法以及基于深度学习的漏洞检测方法。传统的漏洞检测方法大体可分为三类:(1)探索输入空间,比如黑盒模糊测试和灰盒模糊测试,但是此类方法效率低,且无法产生输入来检查程序中的所有状态;(2)分析程序的内部状态空间,如符号执行,此类方法受路径探索问题和SMT求解器能力的限制,可扩展性较差;(3)基于领域专家制定的模式、规则或指标分析程序,此类方法需要耗费大量的人力,且查准率和查全率得不到保证。基于深度学习的漏洞检测方法由于免去了手工定义特征的过程以及可以自动学习易受攻击代码模式等优点逐渐替代了传统漏洞检测方法。
[0004]基于深度学习的漏洞挖掘方法,检测模型的精确一方面取决于模型的选择,另一方面取决于源代码的特征提取与表示;漏洞的产生通常是由可重用的代码库或共享的代码逻辑造成的,根据特种漏洞的产生具有该漏洞特征的相似性,通过代码相似性检测出可能产生漏洞的代码,以相似的代码段很可能含有相同的漏洞为核心来找出漏洞,在一定方面确定了深度学习在漏洞检测的优势,但是现有的深度学习方法主要就是漏洞代码特征提取的层次太浅,导致模型整体的精度不高。

技术实现思路

[0005]专利技术目的:本专利技术的目的在于解决现有技术中存在的不足,提供一种基于多层次特征深度提取的漏洞代码检测方法。
[0006]技术方案:本专利技术的一种基于多层次特征深度提取的漏洞代码检测方法,包括以下步骤:
[0007]步骤S1、获取漏洞代码样本数据集,该样本数据集中的漏洞类型包括漏洞代码与合法代码,漏洞代码与合法代码分别作为检测模型的训练样本和测试样本;
[0008]步骤S2、对漏洞代码训练样本进行切片处理和数据清洗,对清洗后的代码切片通过三个嵌入层转换为向量化表示(即嵌入向量)得到向量化代码切片;三个嵌入层依次为标记嵌入、片段嵌入和位置嵌入;
[0009]步骤S3、使用BERT模型对向量化代码切片分别进行特征提取,得到函数级代码特
征和词级代码特征;
[0010]提取函数级代码特征是指将BERT模型的句嵌入输出,对应代码切片标识符[CLS]的最后一层输出,包含代码切片的整体特征;
[0011]提取词级代码特征是指将BERT模型的字嵌入输出,对应的是序列中的所有token的最后一层输出,可视为代码切片的词级代码特征;
[0012]步骤S4、对步骤S3所得词级代码特征通过LSTM以及加入多头注意力机制(Multi

Head Attention)进行深度特征的提取;
[0013]首先,将词级代码特征数据经过LSTM神经网络处理得到包含所有时间步输出O=[O1,O2,...O
D
]以及最后时间步D的隐藏状态H
D
,由于O表示代码切片中的词级代码特征,O1,O2,...O
D
是指每个词级代码的tokens经过LSTM后的向量表示,H
D
表示切片整体的特征;
[0014]然后、为体现词级代码特征对于代码切片整体的重要性,建立H
D
与O的自注意力关系,即建立个时间步输出O
t
对于H
D
的权重,此时由于LSTM本身已经考虑的位置信息,因此不需要额外设置位置编码,直接使用Transformer提出的自注意力实现方法:各时间步的输出O
t
经线性变换后作为key和Value,将时间步的输出H
D
乘以矩阵w
Q
作为Query;在时间步t时,key
t
,Value
t
,Query,得分e
t
和权重a
t
,计算公式如下(1

5):
[0015]Query=w
Q
H
D
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
[0016]Value
t
=w
V
O
t
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0017]key
t
=w
K
O
t
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)
[0018][0019][0020]步骤S5、通过MLM和NSP对BERT模型进行预训练,得到漏洞代码检测模型;
[0021]步骤S6、将待检测的漏洞代码送入训练好的漏洞代码检测模型进行分类,然后通过对融合函数级代码特征以及词级代码特征的综合分析,来对漏洞代码进行分类处理,从而提高漏洞代码的检测准确率。
[0022]进一步地,所述步骤S1中获取漏洞代码样本数据集的具体方法为:
[0023]通过对CWE(Common Weakness Enumeration)数据库中的漏洞代码进行检索,对MITRE公司发布的2022常见软件缺陷中重要的软件漏洞进行获取。
[0024]进一步地,所述步骤S2中对漏洞代码训练样本进行切片处理和数据清洗的方法为:
[0025](a)、提取库函数或API函数调用和程序片段,先将库/API函数调用分为前行调用和后向调用两类;前向库/API函数调用是直接从外部输入接受一个或者多个输入的函数调用,例如命令行,程序,套接字或文件;后向库/API函数调用是不直接从程序运行的环境接受任何外部输入的函数调用;
[0026](b)、移除与漏洞无关的非ASCII字符和注释,将用户定义的变量映射到符号名,将用户定义的函数映射到符号名。
[0027]进一步地,所述步骤S2中通过三个嵌入层转换为嵌入向量的具体步骤为:
[0028]标记嵌入,首先对代码块进行分词,由于对代码块已经经过数据清洗,清洗后的代码块更容易进行分词处理,此处只需把分词处理后的代码切片每行合并为一行,,并去掉分
号,对于每行代码的第一行增加标记[CLS]用于后续的分类任务,并在每一行代码的末尾增加[SEP]标记,用于标记每个句子的结尾;
[0029]片段嵌入,由于上一步已将代码块合并为一行,此处需给模型某种标志来区分每一个token属于哪一行代码;
[0030]位置嵌入本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于多层次特征深度提取的漏洞代码检测方法,其特征在于:包括以下步骤:步骤S1、获取漏洞代码样本数据集,该样本数据集中的漏洞类型包括漏洞代码与合法代码,漏洞代码与合法代码分别作为检测模型的训练样本和测试样本;步骤S2、对漏洞代码训练样本进行切片处理和数据清洗,对清洗后的代码切片通过三个嵌入层转换为向量化表示得到向量化代码切片;三个嵌入层依次为标记嵌入、片段嵌入和位置嵌入;步骤S3、使用BERT模型对向量化代码切片分别进行特征提取,得到函数级代码特征和词级代码特征;将BERT模型的句嵌入输出,对应代码切片标识符[CLS]的最后一层输出作为函数级代码特征;将BERT模型的字嵌入输出中所有token的最后一层输出作为词级代码特征;步骤S4、对步骤S3所得词级代码特征通过LSTM以及多头注意力机制进行深度特征的提取;首先、将词级代码特征数据经过LSTM神经网络处理得到包含所有时间步输出O=[O1,O2,...O
D
]以及最后时间步D的隐藏状态H
D
,O表示代码切片中的词级代码特征,O1,O2,...O
D
是指每个词级代码的tokens经过LSTM后的向量表示,H
D
表示切片整体的特征;然后、建立H
D
与O的自注意力关系,即建立个时间步输出O
t
对于H
D
的权重:各时间步的输出O
t
经线性变换后作为key和Value,将时间步的输出H
D
乘以矩阵w
Q
作为Query;在时间步t时,key
t
,Value
t
,Query,得分e
t
和权重a
t
,计算公式如下(1

5):Query=w
Q
H
D
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)Value
t
=w
V
O
t
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)key
t
=w
K
O
t
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)(3)步骤S5、通过MLM和NSP对BERT模型进行预训练,得到漏洞代码检测模型;步骤S6、将待检测的漏洞代码送入训练好的漏洞代码检测模型进行分类,然后通过对融合函数级代码特征以及词级代码特征的综合分析,...

【专利技术属性】
技术研发人员:朱二周李智超
申请(专利权)人:安徽大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1