System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种软件源代码缺陷自动定位方法及系统技术方案_技高网

一种软件源代码缺陷自动定位方法及系统技术方案

技术编号:41065487 阅读:2 留言:0更新日期:2024-04-24 11:19
本发明专利技术提出一种软件源代码缺陷自动定位方法及系统,属于代码缺陷定位技术领域。在训练阶段,数据集构建模块通过构建基于MRC的缺陷定位数据集,包含编号、上下文、问题、答案,而后经过数据增强策略进行增强数据集的构建。缺陷定位模型接受缺陷定位数据集输入,首先通过预编码模块对数据集中样本进行嵌入编码,而后通过缺陷定位模块定位缺陷位置,进行模型的训练。在测试阶段,通过缺陷定位数据集构建模块获得适用于缺陷定位任务的数据集,而后通过训练好的缺陷定位模型得到缺陷定位结果。本发明专利技术具备高效的自动化能力和高定位准确度,可以帮助安全研究人员更加准确地定位和分析潜在的安全问题,从而更好地评估软件的安全性。

【技术实现步骤摘要】

本专利技术属于代码缺陷定位,尤其涉及一种软件源代码缺陷自动定位方法及系统


技术介绍

1、源代码缺陷定位是指通过分析源代码,确定其中的安全缺陷位置和类型的过程。源代码缺陷定位对源代码缺陷分析非常重要,因为它可以帮助安全研究人员更加准确地定位和分析潜在的安全问题,从而更好地评估软件的安全性。现有的基于机器学习的缺陷检测方法的粒度大多是函数级别,它们的检测结果没有提供有意义的缺陷细节的依据,仍然需要专家来认定缺陷细节,这不能有效地帮助普通软件安全从业者。

2、此外,现有相关工作主要面向特定的编程语言的缺陷,无法满足由多种编程语言开发的项目的安全检测应用要求。因此,一个支持多编程语言的缺陷定位方法意义更为广泛。现代软件通常是使用多种编程语言开发的,支持多编程语言的缺陷定位方法可以覆盖更广泛的软件系统,并且可以更好地识别不同编程语言中的安全缺陷类型和特征。

3、机器阅读理解是一个用于评估机器的自然语言处理能力的基准任务,在最近几年已成为nlp领域的挑战性任务。首先向机器输入一系列问题,而后通过标准答案来对机器的输出进行评估,可以衡量机器对一段自然语言片段的阅读、处理、理解和回答相关问题的能力。mrc数据集中的每个实例包含一个上下文(context,c),一个关联的问题(question,q)和答案(answer,a)。mrc系统的目标就是学习预测函数f,可以通过输入的c和q来生成对应合适的答案a:

4、f:(c,q)→a

5、mrc系统的输出可以从上下文c中提取或者根据c生成,特别地,多选项mrc系统目标是通过c和q来选择最正确的答案。

6、现有技术中:(1)sysevr使用深度学习来检测函数级别的源代码缺陷。特别的,引入并定义了基于语法的缺陷候选(syvc)和基于语义的缺陷候选(sevc)的概念,其中,syvc反映了缺陷语法特征,sevc扩展了syvc来适应由数据依赖和控制依赖相关的语义信息;(2)名为devign的一种基于图神经网络(graph neural network,gnn)的缺陷检测模型以ast为骨干,对源代码函数,将不同级别的程序控制和数据依赖性明确编码为异构边的联合图形式,每种类型表示对应一种边。这种全面的表示有助于捕获尽可能丰富的缺陷类型和模式,并能够通过gnn学习更有效的节点表示;(3)名为funded的技术以源代码函数的多关系代码图(具有显式控制和数据流或语法信息)为输入,通过ggnn学习和聚合代码图中多个代码关系(包括数据流、控制流、操作顺序和操作数值等)。

7、现有的缺陷检测方法大都聚焦于函数粒度,这个粒度只能说明是否存在缺陷的事实,但是没有提供有意义的缺陷细节的依据。因此,对于进一步的缺陷分析如缺陷可利用或者缺陷修复工作来说无法提供有效的支撑。此外,现有相关工作主要面向特定的编程语言的缺陷,无法满足由多种编程语言开发的项目的应用要求。因此,一个支持多编程语言的缺陷定位方法意义更为广泛。现代软件通常是使用多种编程语言开发的,只支持单一编程语言的缺陷定位,将会导致缺陷检测的不全面和不准确。


技术实现思路

1、本专利技术要解决技术问题是:现有的基于机器学习的软件源代码缺陷自动检测方式的缺陷分析粒度粗、只支持特定的编程语言的缺陷,实现软件开发设计时的早期安全性保障。针对上述技术问题,提出一种软件源代码缺陷自动定位方案。

2、本专利技术第一方面提出一种软件源代码缺陷自动定位方法。所述方法基于软件源代码缺陷自动定位系统来进行针对软件源代码的缺陷自动定位,所述软件源代码缺陷自动定位系统包括缺陷定位数据集构建模块和缺点定位模型,所述缺陷定位数据集构建模块包括基础数据集构建模块和数据增强策略,所述缺陷定位模型包括预编码模块和缺陷定位模块;

3、所述方法包括:

4、步骤s1、调用所述缺陷定位数据集构建模块,将包含缺陷的函数代码转化为适用于缺陷定位任务的数据集;

5、其中,所述基础数据集构建模块将所述包含缺陷的函数代码转化为基于mrc格式的数据,作为基础数据集,所述基础数据集经过所述数据增强策略进行数据增强,从而得到所述适用于缺陷定位任务的数据集,所述基于mrc格式的数据包含编号id、上下文context、问题question、答案answers共4个字段;

6、步骤s2、调用所述缺陷定位模型对转化得到的所述适用于缺陷定位任务的数据集进行缺陷定位,以得到缺陷定位结果;

7、其中,所述预编码模块对所述适用于缺陷定位任务的数据集中的样本进行嵌入式编码得到编码数据集,所述缺陷定位模块基于所述编码数据集进行所述缺陷定位。

8、根据本专利技术第一方面的方法,在所述步骤s1中,所述基础数据集构建模块将所述包含缺陷的函数代码转化为所述基于mrc格式的数据作为基础数据集;其中:

9、id表示每个样本的索引序号;

10、context表示包含缺陷的源代码函数;

11、question表示用于询问context中是否包含从source到sink的缺陷代码流;

12、其中,source表示从外部源输入的数据来源,sink表示用于内存操作的内部函数;

13、answer包含多个候选代码流,真实的缺陷代码流作为真实标签;

14、利用codeql工具对context进行缺陷扫描,获得对应的缺陷检测报告,所述缺陷报告中的每个记录都包含context、source-sink对、一个或多个包含缺陷的代码流,其中所述一个或多个包含缺陷的代码流中的一个代码流被添加到answer中作为真实标签;

15、将context、source-sink对输入至joern工具,以提取其他候选缺陷代码流,joern工具用于从给定的source-sink对中生成所有可达代码流。

16、根据本专利技术第一方面的方法,在所述步骤s1中,所述基础数据集经过所述数据增强策略进行数据增强,从而得到所述适用于缺陷定位任务的数据集;其中:

17、所述数据增强策略通过对所述基础数据集中的候选缺陷代码流进行选择以及扩充;

18、所述候选缺陷代码流的选择策略包括:基于每个候选缺陷代码流的长度要求,从初始候选缺陷代码流中选择至少包含2行代码的代码流,该代码流至少包含source行和sink行;基于真实标签缺陷代码流的长度,确保每个候选缺陷代码流的代码行数与所述真实标签缺陷代码流的代码行数差值不超过1;

19、所述候选缺陷代码流的生成策略包括:从所述初始候选缺陷代码流中选择行数小于所述真实标签缺陷代码流的单个缺陷代码流,随机选择所述真实标签缺陷代码流中若干行,并将其添加到单个缺陷代码流中以形成新的可用候选缺陷代码流;对所有候选缺陷代码流进行简单的行顺序变换。

20、根据本专利技术第一方面的方法,在所述步骤s2中,所述缺陷定位模型由基于预训练的、具有多头注意力的unixcoder、lstm和cnn组成,所述缺陷定位模型本文档来自技高网...

【技术保护点】

1.一种软件源代码缺陷自动定位方法,其特征在于:

2.根据权利要求1所述的一种软件源代码缺陷自动定位方法,其特征在于,在所述步骤S1中,所述基础数据集构建模块将所述包含缺陷的函数代码转化为所述基于MRC格式的数据作为基础数据集;其中:

3.根据权利要求2所述的一种软件源代码缺陷自动定位方法,其特征在于,在所述步骤S1中,所述基础数据集经过所述数据增强策略进行数据增强,从而得到所述适用于缺陷定位任务的数据集;其中:

4.根据权利要求3所述的一种软件源代码缺陷自动定位方法,其特征在于,在所述步骤S2中,所述缺陷定位模型由基于预训练的、具有多头注意力的UniXcoder、LSTM和CNN组成,所述缺陷定位模型包括三层:编码层、双向匹配层和基于关键信息提取的推理层;其中:

5.根据权利要求4所述的一种软件源代码缺陷自动定位方法,其特征在于,在所述步骤S2中,对于所述编码层:

6.根据权利要求5所述的一种软件源代码缺陷自动定位方法,其特征在于,在所述步骤S2中,对于所述双向匹配层:

7.根据权利要求6所述的一种软件源代码缺陷自动定位方法,其特征在于,在所述步骤S2中,对于所述推理层:

8.一种软件源代码缺陷自动定位系统,其特征在于,所述软件源代码缺陷自动定位系统包括缺陷定位数据集构建模块和缺点定位模型,所述缺陷定位数据集构建模块包括基础数据集构建模块和数据增强策略,所述缺陷定位模型包括预编码模块和缺陷定位模块;其中:

9.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现权利要求1-7任一项所述的一种软件源代码缺陷自动定位方法。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1-7任一项所述的一种软件源代码缺陷自动定位方法。

...

【技术特征摘要】

1.一种软件源代码缺陷自动定位方法,其特征在于:

2.根据权利要求1所述的一种软件源代码缺陷自动定位方法,其特征在于,在所述步骤s1中,所述基础数据集构建模块将所述包含缺陷的函数代码转化为所述基于mrc格式的数据作为基础数据集;其中:

3.根据权利要求2所述的一种软件源代码缺陷自动定位方法,其特征在于,在所述步骤s1中,所述基础数据集经过所述数据增强策略进行数据增强,从而得到所述适用于缺陷定位任务的数据集;其中:

4.根据权利要求3所述的一种软件源代码缺陷自动定位方法,其特征在于,在所述步骤s2中,所述缺陷定位模型由基于预训练的、具有多头注意力的unixcoder、lstm和cnn组成,所述缺陷定位模型包括三层:编码层、双向匹配层和基于关键信息提取的推理层;其中:

5.根据权利要求4所述的一种软件源代码缺陷自动定位方法,其特征在于,在所述步骤s2中,对于所述编码层:

6.根据权利...

【专利技术属性】
技术研发人员:杨林张龙唐盖盖杨峰
申请(专利权)人:中国人民解放军军事科学院系统工程研究院
类型:发明
国别省市:

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

1