System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于网络安全,具体涉及一种基于bert的混合特征漏洞挖掘方法。
技术介绍
1、漏洞挖掘技术主要包括三种:静态挖掘方法、动态挖掘方法和动静结合的方法。静态挖掘主要是指在不运行应用的前提下,对程序源代码的语法、语义、控制流及数据流进行分析,继而检测出目标程序中潜在的漏洞代码。这种方法虽然效率较高,但由于需要人工专家定义漏洞规则所以也导致检测成本较高。动态挖掘方法是在程序运行时,通过追踪程序执行路径与数据流向,借此捕捉漏洞的特征信息。但动态挖掘伴有覆盖率低和资源消耗高等缺点。动静结合方法,主要是借助动态分析的状态来校对静态分析阶段的结果,不仅可以降低静态分析阶段的高误报率和漏报率,还可以提升动态分析阶段的代码覆盖率,虽然结合了静态及动态挖掘方法的优点,但同时也会局限于这两种方法的缺陷。
2、静态挖掘方法通常与人工智能结合,从而避免人工专家定义漏洞规则成本高的问题,如何将代码转为人工智能的输入并且保存其中的信息成了关键。2019年,yongjun lee等人提出了一种挖掘汇编代码漏洞的方法,通过将汇编语料库训练word2vec,直接将代码转化为向量。该方法直接将代码当作原始数据,一方面训练量巨大,另一方面无法获得代码完整的语义和语法信息。
3、为获得代码的特征,研究者通常将源代码或选取代码的一个或某个属性进行研究。直接使用源代码提取特征效果较差,使用图特征检测由于包含的特征有限实际应用效果差。
4、2021年由zhen li等人提出了一种基于深度学习的挖掘软件漏洞的框架,其通过抽象语法树提取
5、2022年wenbo guo等人将代码属性图、抽象语法树、数据流图、代码标记通过提取特征的方法获取特征向量。虽然这些图形结构可以捕获代码的某些方面,但在提取特征时会丢失一些细节信息。特别是对于复杂的代码结构,简单地提取特征可能无法完全反映其含义。
6、为获得代码的特征,研究者通常将源代码或选取代码的一个或某个属性进行研究。直接使用源代码提取特征效果较差,使用图特征检测由于包含的特征有限实际应用效果差。
7、因此,如何避免提取特征时信息丢失是本专利技术想要解决的技术问题。
技术实现思路
1、本专利技术的目的在于提供一种基于bert的混合特征漏洞挖掘方法,以解决上述
技术介绍
中提出的问题。
2、本专利技术目的是这样实现的:一种基于bert的混合特征漏洞挖掘方法,其特征在于:该方法包括以下步骤:
3、步骤s1:收集数据集,并对数据集进行预处理;
4、步骤s2:提取代码属性图水平cpg的特征,得到cpg水平特征向量n1;
5、步骤s3:提取源代码水平的特征,得到源代码水平特征向量n2;
6、步骤s4:提取token水平的特征,得到token水平特征向量n3;
7、步骤s5:将得到的数据进行加权拼接,得到混合特征向量n;
8、步骤s6:构建bert分类模型并进行训练,得到训练后bert分类模型,采用测试数据集行测试。
9、优选的,所述步骤s1中收集数据集,并对数据集进行预处理,具体操作为:
10、步骤s1-1:从nvd和sard漏洞数据库收集漏洞数据,通过爬虫从公开数据集收集数据;
11、步骤s1-2:对收集来的数据进行预处理,将包含漏洞的函数标记为1,并将其对应的补丁标记为0;
12、步骤s1-3:将收集来的数据分为训练数据集和测试数据集,训练数据集和测试数据集相互独立,不能存在交集。
13、优选的,所述步骤s2中提取代码属性图水平cpg的特征,得到cpg水平特征向量n1,具体操作为:
14、步骤s2-1:确定危险函数,进行程序切片找出所有相关联的代码行,通过对代码块添加“{”和“}”重建程序结构;
15、步骤s2-2:通过joern生成对应函数的cpg;
16、步骤s2-3:将cpg进行节点嵌入,得到的cpg的向量表示;
17、步骤s2-4:通过门控循环单元gru对得到的节点向量进行特征提取,得到cpg水平的特征向量n1。
18、优选的,所述步骤s2-3中将cpg进行节点嵌入,得到的cpg的向量表示,具体为:
19、将提取cpg的dot形式文件通过pydot解析库进行解析得到networkx图,再将networkx图通过图神经网络dgl图对象转化为dgl图,通过dgl完成节点嵌入,得到图的向量表示。
20、优选的,所述步骤s3中提取源代码水平的特征,得到源代码水平特征向量n2,具体操作为:
21、步骤s3-1:源代码预处理,删除和程序无关的注释;
22、步骤s3-2:将语料库通过预训练后的word2vec转化为源代码特征向量,得到特征向量n2。
23、优选的,所述步骤s4中提取token水平的特征,得到token水平特征向量n3,具体操作为:
24、步骤s4-1:通过污点分析提取污点传播链,将受污染的同一传播链的变量放入队列中;
25、步骤s4-2:将记录污点传播链的队列通过预训练后的word2vec转化为对应向量;
26、步骤s4-3:使用bilstm进行对向量进行特征提取,得到token水平的特征向量n3。
27、优选的,所述步骤s6中构建bert分类模型并进行训练,具体为:
28、所述bert分类模型包括:embeddings模块、encoder模块以及pooler模块,embeddings模块即为对应词嵌入,
29、对应词嵌入在特征提取部分完成,因此只用到bert分类模型的encoder模块和pooler模块两部分;
30、所述encoder模块由若干个相同bertlayer模块串联组成,bertlayer模块包括bertattention、bertintermediate、bertoutput三个步骤;
31、所述bertattention包括一个线性变换和非线性激活;bertoutput包括一个线性变换和dropout,残差连接后进行层归一化;
32、所述pooler模块取隐藏状态hidden_states的第一个时间步,经过输出维度同为hidden_size的线性变换,经tanh非线性激活函数后输出。
33、优选的,所述步骤s6中采用测试数据集行测试,具体为:
34、所述bert分类模型采用传统的文本分类性能评价指标,即精确率precision、召回率recall和综合评价指标f1;
35、精确率precision为:
36、
37、召回率recall为:
38、
...
【技术保护点】
1.一种基于Bert的混合特征漏洞挖掘方法,其特征在于:该方法包括以下步骤:
2.根据权利要求1所述的一种基于Bert的混合特征漏洞挖掘方法,其特征在于:所述步骤S1中收集数据集,并对数据集进行预处理,具体操作为:
3.根据权利要求1所述的一种基于Bert的混合特征漏洞挖掘方法,其特征在于:所述步骤S2中提取代码属性图水平CPG的特征,得到CPG水平特征向量n1,具体操作为:
4.根据权利要求1所述的一种基于Bert的混合特征漏洞挖掘方法,其特征在于:所述步骤S2-3中将CPG进行节点嵌入,得到的CPG的向量表示,具体为:
5.根据权利要求1所述的一种基于Bert的混合特征漏洞挖掘方法,其特征在于:所述步骤S3中提取源代码水平的特征,得到源代码水平特征向量n2,具体操作为:
6.根据权利要求1所述的一种基于Bert的混合特征漏洞挖掘方法,其特征在于:所述步骤S4中提取Token水平的特征,得到Token水平特征向量n3,具体操作为:
7.根据权利要求1所述的一种基于Bert的混合特征漏洞挖掘方法,其特征在于:
8.根据权利要求1所述的一种基于Bert的混合特征漏洞挖掘方法,其特征在于:所述步骤S6中采用测试数据集行测试,具体为:
...【技术特征摘要】
1.一种基于bert的混合特征漏洞挖掘方法,其特征在于:该方法包括以下步骤:
2.根据权利要求1所述的一种基于bert的混合特征漏洞挖掘方法,其特征在于:所述步骤s1中收集数据集,并对数据集进行预处理,具体操作为:
3.根据权利要求1所述的一种基于bert的混合特征漏洞挖掘方法,其特征在于:所述步骤s2中提取代码属性图水平cpg的特征,得到cpg水平特征向量n1,具体操作为:
4.根据权利要求1所述的一种基于bert的混合特征漏洞挖掘方法,其特征在于:所述步骤s2-3中将cpg进行节点嵌入,得到的cpg的向量表示,具体为:
5.根据权利要...
【专利技术属性】
技术研发人员:季一木,张欣同,苗春雨,范渊,李玲娟,刘尚东,杜宏煜,韩红新,
申请(专利权)人:南京邮电大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。