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

基于超图卷积的源代码过程间漏洞检测方法和装置制造方法及图纸

技术编号:35920566 阅读:55 留言:0更新日期:2022-12-10 11:04
本发明专利技术公开了一种基于超图卷积的源代码过程间漏洞检测方法和装置,涉及软件分析领域。本发明专利技术包括潜在漏洞定位、重构弱过程间控制流图、初始化特征表示、多阶段卷积和读出检测;本发明专利技术针对软件项目中跨越多个函数的过程间漏洞,利用多阶段的图卷积网络捕获代码过程内和过程间的语法语义特征,来实现对代码过程间漏洞的检测识别;本发明专利技术不仅能合理地界定过程间漏洞涉及的代码范围,而且能充分地抽取代码初始的语法语义信息,并且运用多阶段的图卷积操作实现对跨越多函数的过程内和过程间高阶信息的有效捕获,进而可增强过程间漏洞检测的效果;本发明专利技术可应对开源代码过程间漏洞的检测需求,实现对代码过程间漏洞检测效果的提升。升。升。

【技术实现步骤摘要】
基于超图卷积的源代码过程间漏洞检测方法和装置


[0001]本专利技术涉及软件分析领域,尤其涉及到软件源代码漏洞检测
,更具体地说涉及一种基于超图卷积的源代码过程间漏洞检测方法和装置。

技术介绍

[0002]软件程序规模的爆炸式增长,是对软件安全提出的严峻挑战。一方面,软件开发人员话费超过50%的时间检测代码缺陷,他们依靠自动化代码审计工具,通过检测和修复代码漏洞来提高软件代码的安全性和可靠性;另一方面,软件供应链攻击以650%的速率增加。此类攻击通常具有广泛的影响并且难以检测,因为攻击者将漏洞或恶意代码注入受信任供应商的软件源代码中。因此,尽早识别源代码漏洞以确保软件安全至关重要。静态检测已被证明是漏洞或错误检测的有效措施。它可以轻松应用于漏洞检测,因为不需要执行代码,其可以覆盖更广泛的代码错误。尽管已经存在用于代码漏洞检测的静态方法,但目前的静态检测方法误报率仍普遍较高,因为这些方法为了确保检测的性能和扩展能力通常只分析较小范围的漏洞相关代码,这使得检测结果不准确进而无助于提高软件安全性。
[0003]根据触发漏洞的代码范围软件漏洞可分为过程内漏洞和过程间漏洞。过程内漏洞是代码的交互仅涉及单个程序。由于此类漏洞的相关代码仅在一个过程内,并且处理边界相对简单,因此大量研究集中在处理此类漏洞上,针对此类漏洞已有多个研究成果。然而,一些统计数据表明,过程间漏洞也值得关注。
[0004]Meta公司统计了5个漏洞类型的近100次修复,其中49.9%是跨过程代码漏洞。另一项研究使用Infer分析了OpenSSL项目的4002次提交,发现在359192个潜在漏洞中,只有13437个涉及单个过程,而96.26%的漏洞是由多个执行过程引起。这些数据表明,在实际的软件项目中,过程间漏洞不容忽视,其严重威胁着软件的安全。
[0005]过程间漏洞涉及多个过程,这些过程可能涵盖单个文件中的不同函数,或甚至跨越多个文件中的多个执行函数。因此,在检测过程间漏洞时需要检测模型具有协同分析多个执行过程的能力。但这会带来两个严峻的挑战,挑战1:合理界定漏洞代码涉及的范围很复杂。实际程序通常具有跨越多个执行过程的多个执行路径,而与漏洞相关的代码仅涉及执行路径的一部分,因此很难合理地界定漏洞代码涉及的范围。挑战2:融合分析在多个过程中传递的句法语义信息具有挑战性。直观上一个执行过程内的代码间有很强的关系,多个执行过程的相互交互可以传达更丰富的语义信息。
[0006]对于挑战1,一种常见的方法是使用与漏洞相关的关键词对程序进行切片,但这在很大程度上取决于关键词库的大小和质量,使得其不能有效界定漏洞所涉及的代码。分离逻辑具有对程序进行过程间分析的特性。基于分离逻辑的漏洞检测器Infer可以更好地定位过程间漏洞代码的轨迹,但是其误报率通常较高。
[0007]对于挑战2,普遍的思路是训练一个有效的模型来捕捉软件代码的语法语义特征。一些工作通过挖掘漏洞代码模式或测试可疑代码与漏洞代码的相似性来检测代码漏洞。
[0008]然而,这两种方法都只能以粗粒度捕获代码的语法特性,无法达到代码语义的理
解,且其难以应对过程检测分析。另一些工作使用深度学习技术来学习源代码的抽象语法语义信息。输入数据的形态和深度学习模型的选择是这类工作的关键,部分工作抽取代码的执行序列作为输入并配合不同的循环神经网络模型来学习代码的语法语义特性,但是由于代码复杂的特性这类方法通常无法充分地获取代码的语义信息。代码语句之间本身具有复杂的关系,因此一些工作使用图神经网络从更具表现力的代码图结构中学习高阶的代码语法语义特性,但是目前的方法不能有效地处理多个执行过程间交换的信息。总之,有效地界定过程间漏洞涉及的代码范围并准确捕获跨过程的语法语义信息是一项具有挑战的任务,现有的方法不能有效地应对过程间漏洞的检测。

技术实现思路

[0009]为了克服上述现有技术中存在的缺陷和不足,本专利技术提供了一种基于超图卷积的源代码过程间漏洞检测方法和装置。本专利技术的专利技术目的在于提供一种基于超图卷积的源代码过程间漏洞检测方法(A Code Inter

procedural Vulnerabilities Detection Method based on Hypergraph Convolution简称为HGIVul),用于针对软件系统中代码跨过程的漏洞进行检测,以更好地满足代码中复杂漏洞检测的需求,扩展代码漏洞检测的范围,提高源代码漏洞检测的效果,进而为增强代码软件系统的安全提供支撑。
[0010]为了解决上述现有技术中存在的问题,本专利技术是通过下述技术方案实现的。
[0011]本专利技术第一方面提供了一种基于超图卷积的源代码过程间漏洞检测方法,该检测方法具体包括以下步骤:
[0012]S1、使用基于分离逻辑的工具对待检测源代码进行过程间分析,并利用基于分离逻辑的工具对待检测源代码中存在的可疑漏洞进行初步定位;
[0013]S2、根据S1步骤中基于分离逻辑的工具初步定位到的可疑漏洞对应代码的Trace重构弱过程间控制流图;
[0014]S3、将S2步骤重构的弱过程间控制流图中节点代码中所具有的初始特征信息进行向量化表示;具体的,提取节点代码初始的语义信息,并向量化节点代码的语法信息,将节点代码初始的语义信息和语法信息拼接,形成初始化的弱过程间控制流图节点特征信息的向量化表示;
[0015]S4、首先在S3步骤初始化后的弱过程间控制流图上,进行简单图卷积操作,以捕获过程内代码的特征;然后在S3步骤初始化后的弱过程间控制流图上运用超图卷积以捕获过程间代码的特征,以实现对弱过程间控制流图中多级信息的细粒度捕获;
[0016]S5、读出经S4步骤卷积操作更新后的弱过程间控制流图的嵌入作为整个图的特征表示,然后将获得的特征表示输入到多层全连接层构建的检测器中进行检测,根据检测器输出的检测结果判断是否存在漏洞。
[0017]进一步的,S2步骤中,重构弱过程间控制流图具体包括以下子步骤:
[0018]S201、根据S1步骤中基于分离逻辑的工具初步定位到的可疑漏洞对应代码的Trace,定位代码涉及的每一个执行过程,并重构每一个过程的控制流图;
[0019]S202、根据Trace中的代码执行顺序,确定过程间的调用点,然后依据确定的调用点位置在每个调用点增加调入和调出两条连边,将多个过程的控制流图连接起来形成弱过程间控制流图。
[0020]进一步的,S3步骤中,将S2步骤重构的弱过程间控制流图中节点代码中所具有的初始特征信息进行向量化表示,具体包括:
[0021]S301、使用词法分析器抽取节点代码中的基本单元,并对基本单元中存在的变量名和函数名进行符号化处理;
[0022]S302、对符号化处理后的基本单元,使用预先训练好的Word2vec模型抽取对应的初始嵌入,捕获代码初始的语义信息;将节点代码中存在的多个基本单元对应的嵌入按相同维度计算平均值,形成节点代码初始的语义嵌入;...

【技术保护点】

【技术特征摘要】
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表示可训练的权重,σ(.)表示激活函数;初始化后的弱过程间控制流图在进行...

【专利技术属性】
技术研发人员:王俊峰宋紫华王继刚王诗蕊张哲宇
申请(专利权)人:四川大学
类型:发明
国别省市:

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

1