技术特征:
1.基于超图卷积的源代码过程间漏洞检测方法,其特征在于,该检测方法具体包括以下步骤:s1、使用基于分离逻辑的工具对待检测源代码进行过程间分析,并利用基于分离逻辑的工具对待检测源代码中存在的可疑漏洞进行初步定位;s2、根据s1步骤中基于分离逻辑的工具初步定位到的可疑漏洞对应代码的trace重构弱过程间控制流图;s3、将s2步骤重构的弱过程间控制流图中节点代码中所具有的初始特征信息进行向量化表示;具体的,提取节点代码初始的语义信息,并向量化节点代码的语法信息,将节点代码初始的语义信息和语法信息拼接,形成初始化的弱过程间控制流图节点特征信息的向量化表示;s4、首先在s3步骤初始化后的弱过程间控制流图上,进行简单图卷积操作,以捕获过程内代码的特征;然后在s3步骤初始化后的弱过程间控制流图上运用超图卷积以捕获过程间代码的特征,以实现对弱过程间控制流图中多级信息的细粒度捕获;s5、读出经s4步骤卷积操作更新后的弱过程间控制流图的嵌入作为整个图的特征表示,然后将获得的特征表示输入到多层全连接层构建的检测器中进行检测,根据检测器输出的检测结果判断是否存在漏洞。2.如权利要求1所述的基于超图卷积的源代码过程间漏洞检测方法,其特征在于:s2步骤中,重构弱过程间控制流图具体包括以下子步骤:s201、根据s1步骤中基于分离逻辑的工具初步定位到的可疑漏洞对应代码的trace,定位代码涉及的每一个执行过程,并重构每一个过程的控制流图;s202、根据trace中的代码执行顺序,确定过程间的调用点,然后依据确定的调用点位置在每个调用点增加调入和调出两条连边,将多个过程的控制流图连接起来形成弱过程间控制流图。3.如权利要求1或2所述的基于超图卷积的源代码过程间漏洞检测方法,其特征在于:s3步骤中,将s2步骤重构的弱过程间控制流图中节点代码中所具有的初始特征信息进行向量化表示,具体包括:s301、使用词法分析器抽取节点代码中的基本单元,并对基本单元中存在的变量名和函数名进行符号化处理;s302、对符号化处理后的基本单元,使用预先训练好的word2vec模型抽取对应的初始嵌入,捕获代码初始的语义信息;将节点代码中存在的多个基本单元对应的嵌入按相同维度计算平均值,形成节点代码初始的语义嵌入;s303、对节点代码抽取规范的llvm语法树基本单元,每个节点对应的多个规范基本单元构成一个集合;s304、统计每个节点对应的llvm基本单元集合中不同类型基本单元的数量,对每一类基本单元的数量进行归一化处理,然后按特定的基本单元类型顺序进行one-hot编码,形成节点初始的语法嵌入;s305、将s302步骤中获取的节点代码初始的语义嵌入和s304步骤中获取的节点初始的语法嵌入拼接,形成节点初始的特征表示,即初始化的弱过程间控制流图节点特征信息的向量化表示。
4.如权利要求3所述的基于超图卷积的源代码过程间漏洞检测方法,其特征在于:s4步骤具体包括以下子步骤:s401、将s3步骤初始化后的弱过程间控制流图视为简单图g=(v,e),其中,v表示节点集,e表示边集;初始化后的弱过程间控制流图中所有节点的初始嵌入表示为其中d表示词嵌入向量的维度,表示是实数集,其维度为|v|
×
|d|;对于节点v
i
,初始的嵌入表示为k-1次卷积后节点v
i
的特征嵌入表示为因此节点v
i
在k次卷积后的特征嵌入表示为具体地,在简单图上进行卷积操作由以下公式计算:式中,n(i)表示节点v
i
邻居节点的集合,表示对节点v
i
的任意邻居节点v
j
,其k-1次卷积后的特征嵌入表示为m(
·
)为聚合均值聚合函数,w表示可训练的权重,σ(.)表示激活函数;初始化后的弱过程间控制流图在进行简单图卷积后的特征嵌入表示为x
simple
;s402、在上述s401步骤的基础上,将弱过程间控制流图视为超图g
h
=(v,e
h
),其中e
h
表示超边的集合,对于一条超边e∈e
h
,e={v1,...,v
p
},v
i
∈v,2≤p≤|v|,v
i
表示节点集合v中的第i个节点,v
p
表示节点集合v中的第p个节点;超图上的共现矩阵表示节点集合v中的第p个节点;超图上的共现矩阵表示是实数集,其维度为|v|
×
|e
h
|,且每个共现矩阵的元素h
(v,e)
定义由以下公式确定:s403、简单图的度矩阵d
s
是一个对角矩阵是一个对角矩阵表示实数集且其维度为|v|
×
|v|,每个对角元素由以下公式计算:s404、超图的度矩阵d
h
也是一个对角矩阵也是一个对角矩阵表示实数集且其维度为|e
h
|
×
|e
h
|,每个对角元素由以下公式计算:d
h
(v,v)=∑
v∈v
h(v,e);s405、在弱过程间控制流图上进行超图卷积,由以下公式计算:其中,v
t
表示h的转置,令上述公式可简化为:式中,k表示在超图上进行k次卷积,x表示节点特征表示的集合,当k=0时,x0=x
simple
;经以上多级图卷积更新后的节点特征表示为x
′
。5.如权利要求1或2所述的基于超图卷积的源代码过程间漏洞检测方法,其特征在于:所述s5具体包括:s501、读出经s4步骤卷积操作更新后的弱过程间控制流图的嵌入作为整个图的特征表示,按对应维度选用最大值读出方式,具体由以下公式计算:r=max({x
′1,x
′1,
…
,x
′
i
}),x
′
i
∈x
′
,其中,r表示整个弱过程间控制流图的特征表示;s502、将获取的特征表示r输入到一个多层全连接网络中进行检测,具体由以下公式计
算:式中,表示最终的检测结果,mlp表示多层全连接网络,使用sigmoid函数输出最后的检测结果。6.如权利要求1或2所述的基于超图卷积的源代码过程间漏洞检测方法,其特征在于:所述s1步骤中,利用基于分离逻辑的工具infer对待检测源代码进行初步的过程间分析,基于infer输出的结果初步筛选出潜在的漏洞,初步定位漏洞涉及的范围。7.基于超图卷积的源代码过程间漏洞检测装置,其特征在于,该装置包括:潜在漏洞定位模块,所述潜在漏洞定位模块使用基于分离逻辑的工具对待检测源代码进行过程间分析,并利用基于分离逻辑的工具对待检测源代码中存在的可疑漏洞进行初步定位;重构弱过程间控制流图模块,根据潜在漏洞定位模块初步定位到的可疑漏洞对应代码的trace重构弱过程间控制流图;初始化特征表示模块,用于提取节点代码初始的语义信息,并向量化节点代码的语法信息,将节点代码初始的语义信息和语法信息拼接,形成初始化的弱过程间控制流图节点特征信息的向量化表示;多阶段卷积模块,用于对初始化后的弱过程间控制流图,依次进行简单图卷积操作和超图卷积操作,实现对弱过程间控制流图中多级信息的细粒度捕获;读出检测模块,读出经多阶段卷积模块更新后的弱过程间控制流图的嵌入作为整个图的特征表示,然后将获得的特征表示输入到多层全连接网络构建的检测器中进行漏洞检测。
技术总结
本发明公开了一种基于超图卷积的源代码过程间漏洞检测方法和装置,涉及软件分析领域。本发明包括潜在漏洞定位、重构弱过程间控制流图、初始化特征表示、多阶段卷积和读出检测;本发明针对软件项目中跨越多个函数的过程间漏洞,利用多阶段的图卷积网络捕获代码过程内和过程间的语法语义特征,来实现对代码过程间漏洞的检测识别;本发明不仅能合理地界定过程间漏洞涉及的代码范围,而且能充分地抽取代码初始的语法语义信息,并且运用多阶段的图卷积操作实现对跨越多函数的过程内和过程间高阶信息的有效捕获,进而可增强过程间漏洞检测的效果;本发明可应对开源代码过程间漏洞的检测需求,实现对代码过程间漏洞检测效果的提升。升。升。
技术研发人员:王俊峰 宋紫华 王继刚 王诗蕊 张哲宇
受保护的技术使用者:四川大学
技术研发日:2022.09.23
技术公布日:2022/12/9