一种基于代码可执行路径的漏洞检测方法及装置

未命名 09-03 阅读:114 评论:0


1.本发明涉及代码漏洞检测领域,尤其涉及一种基于代码可执行路径的漏洞检测方法及装置。


背景技术:

2.计算机科学技术的发展在为人类带来便利的同时,也给恶意分子提供了犯罪的工具。软件漏洞是指软件在其生命周期(即开发、部署、执行整个过程)中存在的缺陷,而这些缺陷可能会被不法分子利用,绕过系统的访问控制,非法窃取较高的权限从而任意操纵系统,如触发特权命令、访问敏感信息、冒充身份、监听系统运行等。许多漏洞影响流行的软件,使许多使用该软件的客户面临数据泄露或供应链攻击的更高风险。近些年,随着深度学习技术的不断发展,基于深度学习的漏洞检测模型也受到人们的广泛关注,并在漏洞检测这一任务上取得了优异的性能。然而,当前常见的漏洞检测模型在检测较长的代码片段时效果有限,一方面是因为长代码包含较多与漏洞无关的信息;另一方面,现有模型受限于有限的计算资源,往往选择将长代码截断,导致部分重要信息缺失。
3.随着现有软件系统愈加复杂庞大,漏洞出现频率不断提升,急需针对漏洞检测领域开展系统的研究工作,以便高效及时地发现软件系统的漏洞,实时修补,提高软件使用的安全等级。
4.为了提高软件漏洞检测的准确率和效率,节省安全领域专家等人工劳力,更好地保证现有软件的安全性,诞生了代码漏洞智能化检测这一研究课题。顾名思义,代码漏洞检测即基于开发者实现的代码实体,由机器智能化判断其中是否包含漏洞。


技术实现要素:

5.本发明的目的在于针对现有技术的不足,为代码漏洞的自动检测提供了一种基于代码可执行路径的漏洞检测方法及装置,以检测结构复杂、长度较长的代码片段中是否包含漏洞。当前研究依托深度学习已能进行一定程度的漏洞智能化检测,但是检测效果还有很大提升空间,本发明方法通过分解代码片段控制流图生成多条可执行路径,并融合已有代码预训练表示模型和卷积神经网络以进一步提高检测效果的方法,即,分解代码片段,使原有片段中与漏洞无关的信息被筛除,代码特征学习的更加精确,检测能力得到进一步强化。
6.本发明是通过以下技术方案来实现的:
7.根据本说明书的第一方面,提供一种基于代码可执行路径的漏洞检测方法,该方法包含以下步骤:
8.s1,获得代码-标签对数据,构建数据集,将数据集划分为训练集和测试集;
9.s2,基于训练集代码的抽象语法树构建基于语法的控制流图,
10.s3,进行基于贪心算法的可执行路径抽取,初始化所有边的权重和节点;持续抽取从初始节点到退出节点中权重最小路径,每抽取一条路径则增加该路径中节点连边的权重
并将该路径中所有节点标记为已被访问节点,抽取的路径中,每条路径至少包含一个未被访问节点且权重相同时优先选择未被访问节点最多的路径;当路径数量达到预设的抽取阈值时,选择最后一条路径为一条未被访问节点数量最多的路径,若路径中未被访问节点数量相同,则选择权重最小的路径;
11.s4,将抽取的路径输入漏洞检测模型学习路径中的特征向量和不同代码字符间权重,得到代码的预测结果;所述漏洞检测模型包括代码预训练模型、卷积神经网络和多层感知机;
12.s5、使用测试集对代码的预测结果进行测试并进行调参,得到模型最优参数;
13.s6,将待检测的代码输入训练好的漏洞检测模型中,得到代码预测结果。
14.进一步地,所述s1中的数据集为采用多个公开的漏洞数据集进行融合得到的数据集。
15.进一步地,s2抽象语法树的构造具体为,首先去除代码中的空行和注释信息,然后对代码中每一行语句所在行数进行标注,接着,通过静态分析器得到代码对应的抽象语法树,采用广度优先搜索算法遍历抽象语法树,针对抽象语法树中存在的控制分支结构,构建基于语法的控制流图。
16.进一步地,基于语法的控制流图构建过程具体为:如果控制流图中的节点为简单的陈述语句,且它的下一个同级语句存在于抽象语法树中,则将其连接到该同级语句;
17.如果节点为循环语句,则首先将该语句与其循环结构内的第一个子语句添加连边;如果该语句在循环结构外的语句存在,则两者之间添加连边;遍历循环语句所在的循环结构,如果该循环结构内的最后一个子语句是break语句,则该子语句到循环结构外的第一个语句添加连边。如果最后一个子语句为continue语句,则将该子语句与循环语句相连;
18.若语句类型是break语句,则将其与所在最近的循环结构外的第一个语句添加连边;
19.若语句类型是continue语句,则将其与所在最近的循环结构的循环语句之间添加连边;
20.若语句类型是判断语句,则首先将其与判断结构外的第一个语句相连,并将判断结构内的最后一个子语句与结构外的第一个语句相连;如果判断结构存在于循环结构内,则将判断语句和循环语句相连,判断结构内的最后一个子语句也与循环语句相连;对判断结构内的语句进行遍历,增加判断语句与判断结构内第一个子语句的连边;如果判断结构中包含分支语句,则增加判断语句与分支语句之间的连边,删除判断语句与循环结构外的第一个语句之间的连边,增加分支语句与循环结构外的第一个语句之间的连边;然后遍历分支结构,连接分支语句与分支结构内的第一个子语句,增加分支结构中最后一个子语句与分支外的第一个语句之间的连边;如果判断结构或分支结构中的最后一个子语句是break语句、continue语句、返回语句或异常语句,则将其与下一句可能被执行的语句相连。
21.若语句类型是开关语句,则首先将其与开关结构内的第一个分支语句相连。对于开关结构内的每一个分支结构,工具将每个分支语句与其下一个分支结构的分支语句相连,如果分支结构内的最后一个语句是break语句、continue语句、返回语句或异常语句,则将其与下一句可能被执行的语句相连;最后,将分支语句与该分支结构内的第一个子语句相连,并遍历每个分支结构中的语句;
22.对于其他语句,则将其与第一个子语句相连,并将其结构中的最后一个子语句与开关结构外的第一个语句相连。
23.若语句类型是异常处理语句,则将异常处理语句与其异常处理结构的第一个子语句相连,将异常处理结构中的最后一个语句与catch语句相连。对于每一个catch语句,我们将其与catch结构内的第一个子语句相连,与下一个catch语句相连;对于异常处理结构中的最后一个语句,将其与结构外的第一个语句相连。
24.进一步地,所述s4中代码预训练模型为基于transformer模型的codebert模型。
25.进一步地,所述s4具体步骤为:代码预训练模型学习每条路径的特征向量,学习路径中每个代码字符之间的权重,并利用卷积神经网络为不同的路径特征向量分配不同的权重,学习代码的结构信息,融合多条路径的特征向量生成代码的特征向量;将代码的特征向量输入到多层感知机网络中得到代码的预测标签。
26.进一步地,所述s4在生成代码的特征向量过程中,完成代码从单词到token的转化,头尾均加入《bos》和《eos》对应的token以标识序列的开始与结束。
27.进一步地,s4中,使用交叉熵损失函数计算多层感知机网络得到的预测标签与真实标签的损失,并进行梯度传递优化网络;优化器使用adamw。
28.进一步地,所述s5中,使用f1值作为评估指标评估检测模型的检测效果,在测试集上进行评估。
29.根据本发明说明书的第二方面,提供了一种基于代码可执行路径的漏洞检测装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,用于实现基于代码可执行路径的漏洞检测方法。
30.本发明的有益效果:当前虽然有各种代码漏洞检测方法,但都检测效果有限,且目前没有将代码片段分解为多条可执行路径后通过代码预训练模型学习路径的特征向量,融合多条路径特征向量后生成代码片段的特征向量用于漏洞检测的模型,本发明在这一方面做了开创性尝试,并证实了可以在当前已有的代码漏洞智能化检测方法的基础上进一步提升生成效果。具体来说,本发明采用三个公开数据集(reveal,big-vul和devign)合并后的数据集用于验证所提出的模型是否可以提高漏洞检测的性能,尤其在检测较长的代码片段时效果有明显的提升。为此,本发明统计了测试数据集中代码序列长度大于400的代码片段,用本发明检测代码序列长度大于400的代码片段,识别其中漏洞代码。对比现有先进的漏洞检测模型codebert,本发明分别在准确率(precision),召回率(recall)和f1值提升了22.56%,10.05%,16.17%。
31.本发明通过基于抽象语法树构建代码的控制流图,将其分解为多条可执行路径后,利用代码预训练模型和卷积神经网络学习代码的特征表示,使漏洞检测效果进一步提高。可以防止一系列安全事件,包括黑客勒索、信息泄漏或僵尸网络攻击等,提高软件使用的安全等级。
32.本发明在利用代码预训练模型和卷积神经网络学习代码的特征表示时,同时考虑了每条路径中不同字符之间的权重以及不同路径之间的权重,使得本方法的预测准确度更高。
附图说明
33.图1是本发明的漏洞检测算法框架图;
34.图2是本发明的源代码示例图;
35.图3是本发明的源代码转化控制流图示例图;
36.图4是本发明的可执行路径抽取方法算法图;
37.图5是本发明的基于代码可执行路径的漏洞检测装置结构图。
具体实施方式
38.下面结合本实施例中的附图,对本实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本实施例一部分实施例,而不是全部的实施例。基于本实施例的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本实施例的保护范围。
39.第一方面,本实施例中一种基于代码可执行路径的漏洞检测方法步骤如下:
40.s1,获得代码-标签对数据,构建数据集,将数据集划分为训练集和测试集;
41.本实施例使用了3个公开数据集(reveal,big-vul和devign),并将其融合在一起,形成一个新的针对代码漏洞检测任务的数据集,该数据集包含24241条有漏洞代码片段,207059条无漏洞的代码片段,共计231300条代码片段,将该数据集划分为185040条片段的训练集和46260条数据的测试集,并针对测试集中可能同时出现在训练集中的代码进行删除。此外,针对漏洞检测任务的特性进行针对性的数据清洗,具体清洗过程为:删除代码中的空行和注释,同时对代码片段中的语句及其所在的行号进行标记。
42.本实施例漏洞检测的算法框架如图1所示,包括以下步骤:
43.s2,基于代码的抽象语法树构建输入代码片段的基于语法的控制流图:采用广度优先搜索算法遍历抽象语法树,针对抽象语法树中存在的控制分支结构,构建基于语法的控制流图;
44.基于抽象语法树构建控制流图,将作为输入的代码控制流图表示为
45.g=(v,ε),其中,v表示图的节点,ε表示图的边,即代码中每行语句之间的控制流。
46.常见的用于构建代码的控制流图需要对代码所在项目进行编译,然而,编译大型项目需要消耗大量的资源,此外,现有数据集中提供的代码片段通常是无法编译甚至是不完整的。因此,基于编译的控制流图构建并不适用于漏洞检测任务场景。为此,本实施例采用基于抽象语法树的控制流图构建,如图2所示,经静态分析器处理后可以得到抽象语法树,进一步根据抽象语法树得到图3所示的代码控制流图。
47.具体连接过程为:如果控制流图中的节点为简单的陈述语句,且它的下一个同级语句存在于抽象语法树中,则将其连接到该同级语句。如果节点为循环语句,则首先将该语句与其循环结构内的第一个子语句添加连边。如果该语句在循环结构外的语句存在,则两者之间添加连边。遍历循环语句所在的循环结构,如果该循环结构内的最后一个子语句是break语句,则该子语句到循环结构外的第一个语句添加连边。如果最后一个子语句为continue语句,则将该子语句与循环语句相连。
48.若语句类型是break语句,则将其与所在最近的循环结构外的第一个语句添加连边。
49.若语句类型是continue语句,则将其与所在最近的循环结构的循环语句之间添加连边。
50.若语句类型是判断语句(if_statement),则首先将其与判断结构外的第一个语句相连,并将判断结构内的最后一个子语句与结构外的第一个语句相连。如果判断结构存在于循环结构内,则将判断语句和循环语句相连,判断结构内的最后一个子语句也与循环语句相连。然后,对判断结构内的语句进行遍历,增加判断语句与判断结构内第一个子语句的连边。如果判断结构中包含分支语句(如else_statement),则增加判断语句与分支语句之间的连边,删除判断语句与循环结构外的第一个语句之间的连边,增加分支语句与循环结构外的第一个语句之间的连边。然后遍历分支结构,连接分支语句与分支结构内的第一个子语句,增加分支结构中最后一个子语句与分支外的第一个语句之间的连边。如果判断结构或分支结构中的最后一个子语句是break语句、continue语句、返回语句或异常语句,则将其与下一句可能被执行的语句相连。
51.若语句类型是开关语句(switch_statement),则首先将其与开关结构内的第一个分支语句(case_statement)相连。对于开关结构内的每一个分支结构,工具将每个分支语句与其下一个分支结构的分支语句相连(case_statement或default_statement),如果分支结构内的最后一个语句是break语句、continue语句、返回语句或异常语句,则将其与下一句可能被执行的语句相连。最后,将分支语句与该分支结构内的第一个子语句相连,并遍历每个分支结构中的语句。对于其他语句(default_statement),则将其与第一个子语句相连,并将其结构中的最后一个子语句与开关结构外的第一个语句相连。
52.若语句类型是异常处理语句(try_statement),则将异常处理语句与其异常处理结构的第一个子语句相连,将异常处理结构中的最后一个语句与catch语句相连。对于每一个catch语句,我们将其与catch结构内的第一个子语句相连,与下一个catch语句相连。此外,对于异常处理结构中的最后一个语句,将其与结构外的第一个语句相连。
53.s3,基于贪心算法的可执行路径抽取针对基于抽象语法树的控制流图,从中抽取多条可执行路径。
54.一个代码可以被视为其所有可执行路径的组合。但是,如果代码包含循环结构,则会导致无限的可执行路径,进而需要许多计算资源来对代码的所有可执行路径进行编码。因此,在控制流图中对所有可执行路径进行编码以学习相应代码片段的表示是不切实际的,只能选择从控制流图中抽取有限的可执行路径。为了避免抽取的路径中丢失代码中的重要信息,所选路径应覆盖尽可能多的代码行,另一方面,为了减轻模型训练的负担,需要所选的路径尽可能短。为此,本实施例采用基于贪心的可执行路径抽取方法,选择并编码几条代表性的可执行路径来表示相应的代码。具体抽取过程为:如图4所示,将每条路径表示为p=(n1,n2,

nk),其中nk表示控制流图中的节点,即代码中的语句,对于路径中的任意两个节点,其中间一定存在一条控制流边。
55.假设从控制流图中选择m条路径,首先将控制流图中所有边的初始权重设置为1,并将控制流图中的所有节点标记为未被访问。然后,对于前m-1条路径,依次遍历控制流图中的退出节点,选择从初始节点到退出节点的一条权重最小路径,同时保证每条路径中至少包含一个未被访问的节点。如果存在多条权重相同的路径,则从中选择一条未被访问节点数量最多的路径。接着,将被选择的路径中的节点标记为已被访问,并增加该路径中节点
连边的权重,以此奖励对新未被访问节点和路径的探索。重复上述步骤选择m-1条路径。最后,对于最后一条路径,算法选择一条未被访问节点数量最多的路径,如果存在多条未被访问节点数量相同的路径,则从中选择一条权重最小的路径。
56.s4,以代码的每条可执行路径作为输入学习,采用代码预训练模型学习每条路径的特征向量,学习路径中每个代码字符之间的权重,并利用卷积神经网络为不同的路径特征向量分配不同的权重,学习代码的结构信息,融合多条路径的特征向量生成代码的特征向量。该过程同时考虑了每条路径中不同字符之间的权重以及不同路径之间的权重。将代码的特征向量输入到多层感知机网络中,使其代码的预测标签;
57.常见的用于学习代码特征的深度学习模型有lstm模型、图神经网络模型和预训练模型三种,本实施例选择采用三者中被认为效果更好的预训练模型生成可执行路径的特征向量。本实施例利用基于transformer模型的codebert模型学习每条路径的特征向量,将多条路径的特征向量作为卷积神经网络的输入,卷积层采用多个不同大小的卷积核,多维度提取多条路径的特征,为不同路径之间分配不同权重,将多条路径的特征向量连接起来作为输入代码的整体特征,输入relu激活函数;激活后,又经池化操作,最后通过多层感知机网络层得到二分类的结果。
58.对结果进行一次softmax处理,最终输出给出两个类别各自的概率,若为真的概率更高,则说明漏洞检测模型认为该代码中包含漏洞,若为假的概率更高,则说明漏洞检测模型认为该代码中不包含漏洞;最后通过与数据标签对比计算本轮次的损失,进一步传递梯度训练漏洞检测模型。优化器使用adamw。
59.s5,评估指标评估检测模型的检测效果,在测试集上进行评估,根据评估结果对预训练模型、卷积神经网络和多层感知机网络进行调参,找到能使模型检测性能最好的参数,达到最佳检测效果;
60.针对漏洞检测效果的评估指标,常用的有准确率、召回率、精确率和f1值,由于漏洞检测任务中的数据集为不平衡数据集,即不包含漏洞的代码数据集数量要远远多于包含漏洞的代码数据集,如果采用准确率,则会让模型更容易学习到不包含漏洞的代码的特征,因此本实施例采用f1值作为评估指标。
61.为了更好地达到漏洞检测效果,使漏洞检测的效果稳步提升,经一定实验后,发现设置预训练模型的步长为28,轮次为5,卷积核的大小为128,卷积核的窗口为128。
62.s6,将待检测的代码输入训练好的漏洞检测模型中,得到代码预测结果。
63.另一方面,与前述基于代码可执行路径的漏洞方法的实施例相对应,本实施例还提供了基于代码可执行路径的漏洞检测装置的实施例。
64.参见图5,本发明实施例提供的一种基于代码可执行路径的漏洞检测装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,用于实现上述实施例中的基于代码可执行路径的漏洞检测方法。
65.本实施例基于代码可执行路径的漏洞检测装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,
如图5所示,为本实施例基于代码可执行路径的漏洞检测装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图5所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
66.上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
67.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
68.本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的基于代码可执行路径的漏洞检测方法。
69.所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(smart media card,smc)、sd卡、闪存卡(flash card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
70.以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

技术特征:
1.一种基于代码可执行路径的漏洞检测方法,其特征在于,该方法包含以下步骤:s1,获得代码-标签对数据,构建数据集,将数据集划分为训练集和测试集;s2,基于训练集代码的抽象语法树构建基于语法的控制流图;s3,进行基于贪心算法的可执行路径抽取,初始化所有边的权重和节点;持续抽取从初始节点到退出节点中权重最小路径,每抽取一条路径则增加该路径中节点连边的权重并将该路径中所有节点标记为已被访问节点,抽取的路径中每条路径至少包含一个未被访问节点,权重相同时优先选择未被访问节点最多的路径;当路径数量达到预设的抽取阈值时,选择最后一条路径为一条未被访问节点数量最多的路径,若路径中未被访问节点数量相同,则选择权重最小的路径;s4,将抽取的路径输入漏洞检测模型学习路径中的特征向量和不同代码字符间权重,得到代码的预测结果;所述漏洞检测模型包括代码预训练模型、卷积神经网络和多层感知机;s5、使用测试集对代码的预测结果进行评估并进行调参,得到模型最优参数;s6,将待检测的代码输入训练好的漏洞检测模型中,得到代码预测结果。2.根据权利要求1所述的基于代码可执行路径的漏洞检测方法,其特征在于,所述s1中的数据集为采用多个公开的漏洞数据集进行融合得到的数据集。3.根据权利要求1所述的基于代码可执行路径的漏洞检测方法,其特征在于,s2抽象语法树的构建具体为:首先去除代码中的空行和注释信息,然后对代码中每一行语句所在行数进行标注,接着通过静态分析器得到代码对应的抽象语法树,采用广度优先搜索算法遍历抽象语法树,针对抽象语法树中存在的控制分支结构,构建基于语法的控制流图。4.根据权利要求3所述的基于代码可执行路径的漏洞检测方法,其特征在于,基于语法的控制流图构建过程具体为:如果控制流图中的节点为陈述语句,且它的下一个同级语句存在于抽象语法树中,则将其连接到该同级语句;如果节点为循环语句,则首先将该语句与其循环结构内的第一个子语句添加连边;如果该语句在循环结构外的语句存在,则两者之间添加连边;遍历循环语句所在的循环结构,如果该循环结构内的最后一个子语句是break语句,则该子语句到循环结构外的第一个语句添加连边;如果最后一个子语句为continue语句,则将该子语句与循环语句相连;若语句类型是break语句,则将其与所在最近的循环结构外的第一个语句添加连边;若语句类型是continue语句,则将其与所在最近的循环结构的循环语句之间添加连边;若语句类型是判断语句,则首先将其与判断结构外的第一个语句相连,并将判断结构内的最后一个子语句与结构外的第一个语句相连;如果判断结构存在于循环结构内,则将判断语句和循环语句相连,判断结构内的最后一个子语句也与循环语句相连;对判断结构内的语句进行遍历,增加判断语句与判断结构内第一个子语句的连边;如果判断结构中包含分支语句,则增加判断语句与分支语句之间的连边,删除判断语句与循环结构外的第一个语句之间的连边,增加分支语句与循环结构外的第一个语句之间的连边;然后遍历分支结构,连接分支语句与分支结构内的第一个子语句,增加分支结构中最后一个子语句与分支外的第一个语句之间的连边;如果判断结构或分支结构中的最后一个子语句是break语句、continue语句、返回语句或异常语句,则将其与下一句被执行的语句相连;
若语句类型是开关语句,则首先将其与开关结构内的第一个分支语句相连;对于开关结构内的每一个分支结构,将每个分支语句与其下一个分支结构的分支语句相连,如果分支结构内的最后一个语句是break语句、continue语句、返回语句或异常语句,则将其与下一句被执行的语句相连;最后,将分支语句与该分支结构内的第一个子语句相连,并遍历每个分支结构中的语句;对于其他语句,则将其与第一个子语句相连,并将其结构中的最后一个子语句与开关结构外的第一个语句相连;若语句类型是异常处理语句,则将异常处理语句与其异常处理结构的第一个子语句相连,将异常处理结构中的最后一个语句与catch语句相连;对于每一个catch语句,我们将其与catch结构内的第一个子语句相连,与下一个catch语句相连;对于异常处理结构中的最后一个语句,将其与结构外的第一个语句相连。5.根据权利要求1所述的基于代码可执行路径的漏洞检测方法,其特征在于,所述s4中代码预训练模型为基于transformer模型的codebert模型。6.根据权利要求1所述的基于代码可执行路径的漏洞检测方法,其特征在于,所述s4具体步骤为:代码预训练模型学习每条路径的特征向量,学习路径中每个代码字符之间的权重,并利用卷积神经网络为不同的路径特征向量分配不同的权重,学习代码的结构信息,融合多条路径的特征向量生成代码的特征向量;将代码的特征向量输入到多层感知机网络中得到代码的预测标签。7.根据权利要求6所述的基于代码可执行路径的漏洞检测方法,其特征在于,所述s4在生成代码的特征向量过程中,完成代码从单词到token的转化,头尾均加入<bos>和<eos>对应的token以标识序列的开始与结束。8.根据权利要求6所述的基于代码可执行路径的漏洞检测方法,其特征在于,s4中,使用交叉熵损失函数计算多层感知机网络得到的预测标签与真实标签的损失,并进行梯度传递优化网络;优化器使用adamw。9.根据权利要求1所述的基于代码可执行路径的漏洞检测方法,其特征在于,所述s5中,使用f1值作为评估指标评,在测试集上进行评估。10.一种基于代码可执行路径的漏洞检测装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,其特征在于,所述处理器执行所述可执行代码时,用于实现如权利要求1-9中任一项所述的基于代码可执行路径的漏洞检测方法。

技术总结
本发明公开了一种基于代码可执行路径的漏洞检测方法及装置,本发明基于抽象语法树构建输入代码的控制流图,设计基于贪心算法的路径选择算法,从控制流图中抽取多条可执行路径,然后利用预训练模型学习每条路径的特征向量,采用卷积神经网络融合路径的特征向量生成代码的特征向量,学习每条路径中不同字符之间的权重以及不同路径之间的权重,最后通过多层感知机判断输入代码片段中是否包含漏洞。本发明使漏洞检测效果进一步提高,提高了软件使用的安全等级。证实了根据控制流图分解为多条可执行路径可以在当前已有的代码漏洞智能化检测方法的基础上进一步提升生成效果。测方法的基础上进一步提升生成效果。测方法的基础上进一步提升生成效果。


技术研发人员:胡星 刘忠鑫 张峻伟 夏鑫 李善平
受保护的技术使用者:浙江大学
技术研发日:2023.06.19
技术公布日:2023/8/31
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐