软件源代码缺陷检测方法及装置与流程

文档序号:29801473发布日期:2022-04-23 20:18阅读:208来源:国知局
软件源代码缺陷检测方法及装置与流程

1.本技术属于软件测试技术领域,具体涉及一种软件源代码缺陷检测方法及装置。


背景技术:

2.由于软件用户的大量增加和软件功能的日益丰富,软件的复杂性急剧增加,不可避免地增加了软件系统的安全风险。然而,即使对于具有专门安全专业知识的开发人员来说,检测漏洞也是具有挑战性的。因此,源代码中漏洞的自动检测引起了极大的研究关注。传统的软件代码检测方法如静态分析、动态分析、符号执行等传统技术依赖专家知识,人工成本高且误报率高,在实际生产中不能令人满意。相关技术中,基于深度神经网络的特征挖掘和表示能力也为自动检测软件漏洞提供了有效的技术途径,然而,由于基于深度神经网络的软件检测方法专注于学习源代码整个图结构的嵌入表示,表示为平面序列或属性图,而漏洞往往隐藏在特定的程序路径中,例如控制流路径或数据流路径。在处理过程中,会受到大部分无关的代码信息的影响,影响检测效率和检测结果的准确性。


技术实现要素:

3.为至少在一定程度上克服相关技术中,基于深度神经网络的软件代码检测方法存在的检测效率低、检测结果准确性差的问题,本技术提供一种软件源代码缺陷检测方法及装置。
4.第一方面,本技术提供一种软件源代码缺陷检测方法,包括:获取源软件代码;根据所述源软件代码构造代码属性图;将所述代码属性图输入预设基于图神经网络的源代码缺陷检测模型,所述预设基于图神经网络的源代码缺陷检测模型用于生成自适应接收路径,并根据所述自适应接收路径输出检测结果。
5.进一步的,所述根据所述源软件代码构造代码属性图,包括:根据所述源软件代码生成函数代码的字符特征、语句特征以及控制流信息图;根据所述函数代码的字符特征、语句特征以及控制流信息图得到函数对应代码的控制依赖图信息、数据依赖图信息;根据所述控制依赖图信息、数据依赖图信息和代码的自身语义信息,构造出代码属性图。
6.进一步的,所述将所述代码属性图输入预设基于图神经网络模型的源代码缺陷检测模型,包括:对所述代码属性图进行节点向量化表示,所述节点向量化表示包括代码向量化和类型向量化;将所述类型向量化输入预设基于图神经网络模型的源代码缺陷检测模型中门控图神经网络层,将代码属性图的所有节点信息表示为一个函数的图表征信息;
对所述预设基于图神经网络模型的源代码缺陷检测模型进行参数优化得到所述自适应接收路径;将所述图表征信息输入预设基于图神经网络模型的源代码缺陷检测模型中的所述自适应接收路径得到函数的图表征信息的分类结果,所述分类结果为对应函数代码是否为漏洞。
7.进一步的,所述对所述代码属性图进行向量化表示,包括:使用word2vec模型在源代码语料库上进行预训练;预训练好的word2vec模型对代码属性图的代码进行向量化得到节点代码向量化;对代码属性图的类型用进行标签编码得到节点类型向量化;将所述节点代码向量化和节点类型向量化进行拼接作为初始节点向量化表示。
8.进一步的,所述对所述预设基于图神经网络模型的源代码缺陷检测模型进行参数优化得到所述自适应接收路径,包括:将基于图表征信息的训练数据输入密集层函数投影到潜在空间;在潜在空间中通过三元组损失函数优化所述预设基于图神经网络模型的源代码缺陷检测模型的参数;根据优化后参数得到所述自适应接收路径。
9.进一步的,所述将所述类型向量化输入预设基于图神经网络模型的源代码缺陷检测模型中门控图神经网络层,将代码属性图的所有节点信息表示为一个函数的图表征信息,包括:构建带有自适应路径层的图神经网络模型;在自适应路径层中选择图神经网络的感受野;构建自适应广度函数和自适应深度函数通过所述自适应广度函数和自适应深度函数,得到每一张代码属性图对应的函数的图表征信息。
10.进一步的,所述自适应深度函数包括:通过门控层提取当前层的记忆信息,并结合前一层的记忆信息生成当前层的记忆信息表示。
11.进一步的,还包括:在检测结果为存在漏洞时,基于自适应广度函数中节点的注意力值计算出边的权重值;判断所述边的权重值是否超出预设阈值;若是,将超出预设阈值的边的权重值对应的边的集合作为与漏洞关联的代码语句和路径。
12.进一步的,所述基于自适应广度函数中节点的注意力值计算出边的权重值,包括:使用注意力机制来分配每个节点1阶邻居的重要性,并聚合每个1阶邻居的信息:通过注意力机制获取每个节点1阶邻居的权重,并通过加权平均后进行非线性变换得到节点对应边的权重值。
13.第二方面,本技术提供一种软件源代码缺陷检测装置,包括:获取模块,用于获取源软件代码;
构造模块,用于根据所述源软件代码构造代码属性图;输出模块,用于将所述代码属性图输入预设基于图神经网络的源代码缺陷检测模型,所述预设基于图神经网络的源代码缺陷检测模型用于生成自适应接收路径,并根据所述自适应接收路径输出检测结果。
14.本技术的实施例提供的技术方案可以包括以下有益效果:本发明实施例提供的软件源代码缺陷检测方法及装置,通过获取源软件代码,根据源软件代码构造代码属性图,将代码属性图输入预设基于图神经网络的源代码缺陷检测模型,预设基于图神经网络的源代码缺陷检测模型用于生成自适应接收路径,并根据自适应接收路径输出检测结果,可以减少无关代码信息的影响,提高代码漏洞检测的效率。
15.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
16.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
17.图1为本技术一个实施例提供的一种软件源代码缺陷检测方法的流程图。
18.图2为本技术另一个实施例提供的一种软件源代码缺陷检测方法的流程图。
19.图3为本技术一个实施例提供的一种软件源代码缺陷检测方法中自适应接收路径示意图。
20.图4为本技术另一个实施例提供的一种软件源代码缺陷检测方法的流程图。
21.图5为本技术一个实施例提供的一种软件源代码缺陷检测方法深度函数和广度函数流程示意图。
22.图6为本技术一个实施例提供的一种软件源代码缺陷检测方法的一个代码片段实例图。
23.图7为本技术一个实施例提供的一种软件源代码缺陷检测方法中代码片段通过自适应路径得到边的权重值示意图。
24.图8为本技术一个实施例提供的一种软件源代码缺陷检测方法的整体框架示意图。
25.图9为本技术一个实施例提供的一种软件源代码缺陷检测装置的功能结构图。
具体实施方式
26.为使本技术的目的、技术方案和优点更加清楚,下面将对本技术的技术方案进行详细的描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本技术所保护的范围。
27.图1为本技术一个实施例提供的软件源代码缺陷检测方法的流程图,如图1所示,该软件源代码缺陷检测方法,包括:s11:获取源软件代码;s12:根据源软件代码构造代码属性图;
s13:将代码属性图输入预设基于图神经网络的源代码缺陷检测模型,预设基于图神经网络的源代码缺陷检测模型用于生成自适应接收路径,并根据自适应接收路径输出检测结果。
28.传统基于深度神经网络的软件检测方法专注于学习源代码整个图结构的嵌入表示,表示为平面序列或属性图,而漏洞往往隐藏在特定的程序路径中,例如控制流路径或数据流路径。在处理过程中,会受到大部分无关的代码信息的影响,影响检测效率和检测结果的准确性。
29.本实施例中,通过获取源软件代码,根据源软件代码构造代码属性图,将代码属性图输入预设基于图神经网络的源代码缺陷检测模型,预设基于图神经网络的源代码缺陷检测模型用于生成自适应接收路径,并根据自适应接收路径输出检测结果,可以减少无关代码信息的影响,提高代码漏洞检测的效率。
30.图2为本技术另一个实施例提供的一种软件源代码缺陷检测方法的流程图,如图2所示,该软件源代码缺陷检测方法,包括:s21:根据源软件代码生成函数代码的字符特征、语句特征以及控制流信息图;s22:根据函数代码的字符特征、语句特征以及控制流信息图得到函数对应代码的控制依赖图信息、数据依赖图信息;s23:根据控制依赖图信息、数据依赖图信息和代码的自身语义信息,构造出代码属性图;根据所提供的函数级源代码缺陷数据集,构建并生成函数代码的字符特征、语句特征以及控制流信息图,进而得到函数对应代码的控制依赖图信息、数据依赖图信息,结合代码的自身语义信息,最终得到代码属性图信息。代码属性图信息将控制流依赖、数据流依赖、def-use依赖等与ast结合起来,获得代码的语法和语义特征,包含了整个代码的结构信息。
31.s24:对代码属性图进行节点向量化表示,节点向量化表示包括代码向量化和类型向量化;本实施例中,对代码属性图进行向量化表示,包括:s241:使用word2vec模型在源代码语料库上进行预训练;s242:预训练好的word2vec模型对代码属性图的代码进行向量化得到节点代码向量化;s243:对代码属性图的类型用进行标签编码得到节点类型向量化;s244:将节点代码向量化和节点类型向量化进行拼接作为初始节点向量化表示。
32.例如,对于节点i,使用one-hot将节点的类型编码为ti,使用word2vec将源代码段编码为ci,ci 是通过将代码段中所有标记的向量相加来计算的。节点 i 的最终表示表示为 h (0) i = [ti ||ci ],其中 || 表示连接操作。代码属性图进行向量化用于初始化图神经网络的节点。
[0033]
s25:将类型向量化输入预设基于图神经网络模型的源代码缺陷检测模型中门控图神经网络层,将代码属性图的所有节点信息表示为一个函数的图表征信息;s26:对预设基于图神经网络模型的源代码缺陷检测模型进行参数优化得到自适应接收路径;
本实施例中,对预设基于图神经网络模型的源代码缺陷检测模型进行参数优化得到自适应接收路径,包括:s261:将基于图表征信息的训练数据输入密集层函数投影到潜在空间;s262:在潜在空间中通过三元组损失函数优化预设基于图神经网络模型的源代码缺陷检测模型的参数;s263:根据优化后参数得到自适应接收路径。
[0034]
在用于学习代码图表示的图神经网络中,节点通常平等地接收其 t 阶邻居的所有信息。自适应路径中所有节点根据其不同的角色产生不同的接收路径。如图3所示,目标节点的接收路径是虚线区域内那些重要节点连接的路径,称为自适应接收路径。
[0035]
s27:将图表征信息输入预设基于图神经网络模型的源代码缺陷检测模型中的自适应接收路径得到函数的图表征信息的分类结果,分类结果为对应函数代码是否为漏洞。
[0036]
根据代码属性图的图结构信息,构建并实现了一个结合了卷积层的门控图神经网络模型来进行图建模与图分类,首先用word2vec在大型的源代码语料库上进行预训练。并用预训练好的模型对代码属性图的代码进行向量化,代码属性图的类型用label encoding 向量化处理,之后将节点代码和节点类型进行拼接作为节点的初始向量表示;将获取的节点embedding输入接下来的门控图神经网络层将图的所有节点信息表示为一个函数的图表征信息,之后将图表征输入接下来的conv模块,该模块通过卷积、relu和max-pooling等步骤完成图表征的分类任务,并获得函数代码是否为漏洞的信息。
[0037]
本实施例中,开发者可以使用本发明所述的方法借助模型判断哪些函数存在漏洞的可能性高从而针对性检查,而不必花费大量的时间与精力人工遍历全部的代码,同时可以将代码漏洞判断路径可视化,辅助开发者进行漏洞判断。
[0038]
图4为本技术另一个实施例提供的一种软件源代码缺陷检测方法的流程图,如图4所示,在上一实施例基础上,s25可进一步包括:s41:构建带有自适应路径层的图神经网络模型;s42:在自适应路径层中选择图神经网络的感受野;s43:构建自适应广度函数和自适应深度函数;本实施例中,自适应深度函数包括:通过门控层提取当前层的记忆信息,并结合前一层的记忆信息生成当前层的记忆信息表示。
[0039]
s44:通过自适应广度函数和自适应深度函数,得到每一张代码属性图对应的函数的图表征信息。
[0040]
s45:在检测结果为存在漏洞时,基于自适应广度函数中节点的注意力值计算出边的权重值;本实施例中,基于自适应广度函数中节点的注意力值计算出边的权重值,包括:s451:使用注意力机制来分配每个节点1阶邻居的重要性,并聚合每个1阶邻居的信息:s452:通过注意力机制获取每个节点1阶邻居的权重,并通过加权平均后进行非线性变换得到节点对应边的权重值。
[0041]
s46:判断边的权重值是否超出预设阈值;
s47:若是,将超出预设阈值的边的权重值对应的边的集合作为与漏洞关联的代码语句和路径。
[0042]
构建带有自适应路径层的图神经网络模型,用于图级分类,其中自适应路径层可以选择图神经网络的感受野。为了学习自适应接收路径,构建自适应广度函数和自适应深度函数的两个模块探索接收路径的广度和深度。
[0043]
自适应广度函数使用注意力机制来分配每个 1 阶邻居的重要性,并相应地聚合1阶邻居的信息。形式上,在第 t 层(t = 0, 1, ..., t),节点 i 的潜在特征为:,α为使用leakyrelu未激活函数的图softmax公式。
[0044]
本实施例中,自适应深度函数从门控图神经网络迭代的每一步提取过滤聚合信息,如图5所示。具体表示为对于每一层的隐层表示,将该表示通过一个门控层提取隐层表示在该层的记忆信息,并结合前一层的记忆信息生成本层的记忆信息表示。通过自适应深度函数和自适应广度函数,最终每一张代码图都会有一个图表征信息。
[0045]
如图6所述,数据集中的一个易受攻击的样本,突出显示的行是要修复的语句。图7显示了基于自适应路径的模型生成的自适应接收路径。边缘厚度表示在第一层中估计的边缘 (i, j) 的重要性 α(hi , hj )。 每条边的重要性用颜色区分。可以观察到,从 env && level 到 cpu(ppc env get cpu(env)) 的路径以及从它们到 exit 的路径在自适应路径模型中具有更大的注意力权重,因此判定这部分代码与漏洞有关。软件源代码缺陷检测方法整体框架如图8所示。
[0046]
通过图神经网络计算的注意力定位可能与漏洞密切相关的代码语句和路径,基于自适应路径的模型中节点之间可以通过节点的注意力值计算出边的权重值,并通过边的权重值分布获得一条超过指定阈值的边的集合,这个边的集合可以作为模型判定的这个代码片段是否为漏洞的路径判断依据,可以形象化的表示出模型判断代码漏洞的依据。自适应路径可以学习更多的语义信息并识别可疑的易受攻击语句。
[0047]
本实施例中,通过注意力机制可以区分的对待代码图中的节点信息,减少了出现最终结果收到大部分无关的代码信息的影响的情况,提高了代码漏洞检测的效率。通过节点之间的注意力信息可以直接推出边的注意力信息,然后通过设定一个阈值来筛选出高相关度的边从而形成自适应路径,基于自适应路径的模型中节点之间可以通过节点的注意力值计算出边的权重值,并通过边的权重值分布获得一条超过指定阈值的边的集合,这个边的集合可以作为模型判定的这个代码函数是否为漏洞的路径判断依据,可以形象化的表示出模型判断代码漏洞的依据。
[0048]
本发明实施例提供一种软件源代码缺陷检测装置,如图9所示的功能结构图,该软件源代码缺陷检测装置包括:获取模块91,用于获取源软件代码;构造模块92,用于根据源软件代码构造代码属性图;输出模块93,用于将代码属性图输入预设基于图神经网络的源代码缺陷检测模型,预设基于图神经网络的源代码缺陷检测模型用于学习目标节点接收路径,并根据所述目标节点接收路径输出检测结果。
[0049]
一些实施例中,还包括:定位模块94,用于在检测结果为存在漏洞时,基于自适应广度函数中节点的注意力值计算出边的权重值;判断边的权重值是否超出预设阈值;若是,将超出预设阈值的边的权重值对应的边的集合作为与漏洞关联的代码语句和路径。
[0050]
本实施例中,通过获取模块获取源软件代码,构造模块根据源软件代码构造代码属性图,输出模块将代码属性图输入预设基于图神经网络的源代码缺陷检测模型,预设基于图神经网络的源代码缺陷检测模型用于学习目标节点接收路径,并根据目标节点接收路径输出检测结果,可以减少无关代码信息的影响,提高代码漏洞检测的效率,并且通过定位模块可以形象化的表示出模型判断代码漏洞的依据。
[0051]
可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。
[0052]
需要说明的是,在本技术的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本技术的描述中,除非另有说明,“多个”的含义是指至少两个。
[0053]
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本技术的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本技术的实施例所属技术领域的技术人员所理解。
[0054]
应当理解,本技术的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
[0055]
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0056]
此外,在本技术各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能组件的形式实现。所述集成的模块如果以软件功能组件的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
[0057]
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0058]
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本技术的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0059]
尽管上面已经示出和描述了本技术的实施例,可以理解的是,上述实施例是示例
性的,不能理解为对本技术的限制,本领域的普通技术人员在本技术的范围内可以对上述实施例进行变化、修改、替换和变型。
[0060]
需要说明的是,本发明不局限于上述最佳实施方式,本领域技术人员在本发明的启示下都可得出其他各种形式的产品,但不论在其形状或结构上作任何变化,凡是具有与本技术相同或相近似的技术方案,均落在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1