System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种多视角特征融合的代码漏洞检测方法技术_技高网
当前位置: 首页 > 专利查询>四川大学专利>正文

一种多视角特征融合的代码漏洞检测方法技术

技术编号:40554212 阅读:12 留言:0更新日期:2024-03-05 19:14
本发明专利技术提供了一种多视角特征融合的代码漏洞检测方法,涉及计算机程序分析及网络安全技术领域。该方法包括预处理源代码函数,在代码序列、词法和语法关系视角得到序列化AST的初始令牌序列,在图结构视角得到节点初始化表示;将序列化AST的初始令牌序列输入嵌入层,并依次经具有Bi‑LSTM层、Attention层、Flatten层、全连接层和Dropout层,得到序列化AST的特征向量;按边类型提取CPG的四种子图,更新并聚合节点表示到CPG,以读出图结构表示;串联序列化AST的特征向量和图表示获得融合特征向量,通过多层感知器、接入的Dropout层的MLP分类器对源代码函数进行分类检测。该方法可实现不同IRC的信息互补,具有更强的代码漏洞信息捕获和语义信息细粒度提取能力,并可更有效地聚焦漏洞代码。

【技术实现步骤摘要】

本专利技术涉及计算机程序分析及网络安全,特别是涉及一种多视角特征融合的代码漏洞检测方法


技术介绍

1、随着软件供应链迅猛发展,开源软件在软件研发中发挥着越来越重要的作用。在如此背景下,开发者更容易在不经意间引入代码漏洞。代码漏洞不仅会为不法分子提供可乘之机攻击脆弱的供应链,在威胁个人和企业信息安全的同时,也会对国家安全产生巨大威胁。因此,在软件开发周期内对源代码进行安全检测,可从源头上减少软件中的漏洞,有助于增强软件安全,提高软件供应链的安全性。

2、现有技术阶段中,安全研究人员在代码漏洞检测中投入了大量的时间和精力。大量的技术被应用在漏洞检测中,如软件静态分析、污点传播分析、符号执行、模糊测试等,并开发了各种漏洞检测工具。通常情况下,针对源代码的漏洞检测方法可以分为基于模式的、基于代码克隆的和基于深度学习的。

3、目前,各种检测方法及工具或多或少存在各种技术问题。基于模式的方法成本很高且很难发现触发条件更复杂的漏洞,误报率很高;基于代码克隆的方法漏报率很高,对未学习过的克隆代码漏洞模式性能较差。

4、基于深度学习的方法中,若将代码看作自然序列,则通常会忽略代码的结构性和丢失漏洞触发的语义信息,且无法充分提取到词法和语法信息;若将代码表示为代码关系图作为irc(intermediate representation ofcode,代码中间表示),会丢失漏洞触发的上下文信息以及关键的词法和语法信息。同时,不同的漏洞触发模式有可能隐藏在不同子图的语义信息中,现有技术中,该类方法大多将代码图视为特征信息在不区分子图的节点之间传递的图结构,没有充分考虑图的异构特性,因此存在无法发现漏洞的风险。


技术实现思路

1、为解决现有技术中存在的上述技术问题,本专利技术提供了一种多视角特征融合的代码漏洞检测方法,具体包括:

2、预处理源代码函数,从代码序列、词法和语法关系、图结构三个视角提取ast(abstract syntax tree,抽象语法树)、cpg(code property graph,代码属性图)作为代码中间表示,并将ast转换为序列化ast。

3、在代码序列、词法和语法关系视角,聚合序列化ast的所有令牌表示得到序列化ast的初始令牌序列;在图结构视角,通过词法分析器提取cpg节点中代码段的所有令牌,聚合所有令牌表示得到cpg节点的初始向量,编码节点类型并串联到初始向量后作为节点初始化表示。

4、将序列化ast的初始令牌序列输入嵌入层,得到序列化ast的初始化表示特征向量,

5、

6、式中,s为序列化ast,为s中第i个令牌的向量,j为s中令牌的数量。

7、在代码序列、词法和语法关系视角,将s输入bi-lstm(bi-directional longshort-term memory,双向长短期记忆网络)捕获其中的代码信息,得到t和t'时刻的输出和并输入attention层:

8、通过mlp(multilayer perceptron,多层感知器)获取隐含表示ft,t',

9、

10、式中,wq、wk分别为关键参数和关注参数,b为偏置参数。

11、将ft,t′经sigmoid函数进行激活,得到输出gt,t′,

12、gt,t′=σ(waft,t′+b′)

13、式中,wa为注意力参数,b'偏置参数。

14、对gt,t′进行softmax函数处理,得到自注意力值ut,t′,

15、ut,t′=soft max(gt,t′)

16、基于ut,t′,计算attention层的输出l,

17、

18、将l输入flatten层映射为一维数据后依次接入全连接层和dropout层,并通过relu函数激活神经元,得到s的特征向量hsast。

19、在图结构视角,按边类型提取cpg的四种子图ast:0、cfg:1、cdg(controldependence graph,控制依赖图):2和ddg(data dependence graph,数据依赖图):3;

20、将cpg表示为:

21、

22、式中,e=(e1,e2,...,en)为cpg中边e的集合,为e对应的子图。

23、通过聚合第m个节点vm的邻居节点在k时刻的状态得到在k时刻的状态

24、

25、式中,nm,e为vm在中的邻居节点的集合。

26、通过attention机制来区分邻居节点的重要性,即计算vm与邻居节点vn的相关系数

27、

28、式中,w为共享参数矩阵,“m(·)”表示将高维嵌入映射到一个实际数,“•||•”表示合并vm与vn的高维特征,分别为k-1时刻vm和vn的状态。

29、计算vm对vn的注意力系数

30、

31、式中,σ为激活函数。

32、通过多头注意力机制更新vm的表示,

33、

34、式中,为的第z个头,wz为对应w的第z个头。其中,多头注意力(multi-headattention)即利用多个查询向量并行地从输入信息中选取多组信息。在查询过程中,每个查询向量将会关注输入信息的不同部分,即从不同的角度上去分析当前的输入信息,类似于卷积神经网络中的多通道,可学习更全面的特征。

35、更新四种子图中的节点表示,并通过平均法将节点表示聚合到cpg中,

36、

37、式中,h′m为聚合结果,hm,e为vm的节点表示。

38、通过平均法将cpg中所有节点表示读出图表示hgraph,

39、

40、式中,m为cpg中节点的集合。

41、串联特征向量和图表示获得融合特征向量,通过多层感知器对融合特征向量进行线性变换,提取出源代码函数的抽象特征;在dropout层接入的mlp分类器使用sigmoid函数对源代码函数进行分类,得到源代码函数存在漏洞的概率

42、

43、若达到预设值,则判定源代码函数存在漏洞。

44、优选地,预处理的具体方法包括:移除注释片段,替换自定义的变量名与函数名。

45、优选的,将ast转换为序列化ast,包括根据ast的节点所处深度、节点之间的父子关系,通过深度优先遍历算法提取序列化ast。

46、优选地,聚合序列化ast的所有令牌表示得到序列化ast的初始令牌序列,包括:通过预训练的word2vec(word to vector,词向量)模型将所有令牌映射到向量空间,并聚合所有令牌表示得到序列化ast的初始令牌序列。

47、优选地,聚合所有令牌表示得到初始节点表示,编码节点类型并串联到初始节点表示后作为节点初始化表示,包括:通过预训练的word2vec模型将所有令本文档来自技高网...

【技术保护点】

1.一种多视角特征融合的代码漏洞检测方法,其特征在于,包括:

2.如权利要求1所述的一种多视角特征融合的代码漏洞检测方法,其特征在于,所述预处理包括:

3.如权利要求1所述的一种多视角特征融合的代码漏洞检测方法,其特征在于,所述将AST转换为序列化AST,包括:

4.如权利要求1所述的一种多视角特征融合的代码漏洞检测方法,其特征在于,所述聚合序列化AST的所有令牌表示得到序列化AST的初始令牌序列,包括:

5.如权利要求1所述的一种多视角特征融合的代码漏洞检测方法,其特征在于,所述聚合所有令牌表示得到CPG节点的初始向量,编码节点类型并串联到初始向量后作为节点初始化表示,包括:

【技术特征摘要】

1.一种多视角特征融合的代码漏洞检测方法,其特征在于,包括:

2.如权利要求1所述的一种多视角特征融合的代码漏洞检测方法,其特征在于,所述预处理包括:

3.如权利要求1所述的一种多视角特征融合的代码漏洞检测方法,其特征在于,所述将ast转换为序列化ast,包括:

4.如权利要求1...

【专利技术属性】
技术研发人员:王俊峰曹先省刘明星马权
申请(专利权)人:四川大学
类型:发明
国别省市:

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

1