System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于软件漏洞检测领域,具体涉及基于复合程序表示的源代码漏洞检测方法。
技术介绍
1、计算机软件在现代社会无处不在,并且人们的生活在很大程度上依赖各种各样的软件。不同形式的软件在不同平台上运行,包括手持移动设备上的简单应用程序,以及复杂的分布式企业软件系统。这些软件基于不同的技术和方法开发,每种技术都有自己的优点和局限性。
2、然而,在这个庞大的软件产业和计算机安全领域中,一个重要的问题是软件安全漏洞。软件漏洞是指在软件中存在的错误或缺陷,这些漏洞可能被恶意攻击者利用,导致系统的安全和稳定性受到威胁。
3、软件漏洞的原因通常是人为错误,表现为代码中的缺陷。对于易受攻击的软件来说,普通的执行操作可能不会违反安全策略,只有当有漏洞的代码遇到特定数据(即漏洞利用代码)或满足特定条件的随机数据时,才可能违反安全策略。
4、软件漏洞检测技术可以分为静态、动态和混合三类。静态技术主要依赖对代码进行分析,包括基于漏洞规则的、基于代码相似性的和基于符号执行的方法。动态技术涉及模糊测试、污点分析等方法。混合方法结合了静态和动态技术,但在实际操作中效率较低。
5、近年来,随着机器学习和人工智能的发展,数据驱动的漏洞检测方法得到了广泛应用。这些方法利用模式识别和机器学习技术,学习漏洞代码的特征,提高了漏洞检测的泛化能力。目前,基于机器学习的方法主要针对源代码进行分析,利用深度学习技术提取高维特征,具有较强的泛化能力。
6、从漏洞检测的发展趋势来看,较早的研究进行漏洞检测时需要专家对漏
技术实现思路
1、本专利技术提出了一种基于复合程序表示的源代码漏洞检测方法,通过融合ast、cfg、pdg程序表示来全面地表示代码的结构信息和语义信息,挖掘程序潜在的漏洞,充分利用漏洞代码的局部和全局上下文结构和语义信息,去除漏洞无关的语句的影响,降低误报和漏报。
2、基于复合程序表示的源代码漏洞检测方法,包含以下步骤:
3、s1、从源代码中提取抽象语法树、代码流程图、程序依赖图,分别提取抽象语法树、代码流程图、程序依赖图对应的路径;
4、s2、从提取的路径中移除额外的标记并构建路径序列,拼接所有的路径序列得到源代码的复合程序表示,根据源代码的复合程序表示构建训练语料库;
5、s3、根据构建的训练语料使用doc2vec模型进行训练,得到代码嵌入模型;
6、s4、通过代码嵌入模型得到源代码的嵌入向量,构建训练漏洞检测模型的数据集,将数据集划分训练集、测试集和验证集;
7、s5、基于多层感知机模型结合正则化损失和四元组损失函数,使用训练集训练得到漏洞检测模型;
8、s6、使用漏洞检测模型检测源代码是否包含漏洞,输出检测结果。
9、具体地,所述步骤s1包括:
10、构建一个数据集,数据集包含不同的代码文件,每个代码文件都对应一个标签;使用代码分析工具joern来提取数据集中所有代码文件的中间表示,中间表示包括抽象语法树、代码流程图以及程序依赖图;
11、分别从抽象语法树、代码流程图、程序依赖图提取ast路径、cfg路径和pdg路径。
12、具体地,所述步骤s2包括:
13、对于ast路径、cfg路径和pdg路径进行移除括号标记、移除节点的移动方向、节点之间以空格作为分隔符的处理;
14、分别将ast路径、cfg路径和pdg路径按提取顺序依次拼接,得到抽象语法树路径序列、代码流程图路径序列、程序依赖图路径序列;
15、对抽象语法树路径序列、代码流程图路径序列、程序依赖图路径序列进行组合得到复合的源代码表示,根据源代码的复合程序表示构建语料库。
16、具体地,所述步骤s3包括:
17、使用语料库中的源代码的复合程序表示作为词列表构建taggeddocumnet对象;
18、通过gensim库创建一个doc2vec模型,设置上下文窗口大小值和最小词频值,经过训练后得到的代码向量;
19、将所有的taggeddocument对象的列表作为输入构建出doc2vec的词汇表
20、设定模型训练参数,利用所有的taggeddocument对象以及词汇表训练doc2vec模型,得到代码嵌入模型并保存。
21、具体地,所述步骤s4包括步骤:
22、将数据集中的源代码转为源代码的复合程序表示,通过代码嵌入模型将源代码的复合程序表示转为嵌入向量;将嵌入向量与复合程序表示对应的标签构成训练漏洞检测模型的数据集;
23、将训练漏洞检测模型的数据集分别按照6:2:2的比例划分为训练集、测试集、验证集,在训练集上采用smote方法,生成合成样本来增加少数类样本的数量,平衡不同类别之间的样本分布。
24、具体地,所述步骤s5包括以下步骤:
25、通过dropout方法得到两个不同的概率分布,将两个不同的概率分布结合kl散度计算正则化损失;
26、根据原始输入样本构建获取正样本和负样本,根据原始输入样本、正样本、负样本构建四元组,计算四元组损失;
27、结合正则化损失和四元组损失计算得到最终的损失函数,训练得到漏洞检测模型。
28、本专利技术具有以下技术特点:
29、1、本专利技术提出了一种基于复合程序表示的源代码漏洞检测方法,通过引入ast、cfg和pdg的路径表示方法,构建复合程序表示,充分捕捉了代码的语法和语义信息,实现了更准确的检测结果,解决了现有方法基于单一特定的表示,忽视不同表示之间的互补关系,对代码的语义和语法信息表示不足的问题。
30、2、利用doc2vec对联合路径表示进行预训练,通过构建函数库,并持续引入新数据,使得该方法具有可扩展性。采用了分类损失和四元组损失的组合损失函数,该方法在分类过程中扩大了正负样本之间的距离,并充分利用了向量特征;采用r-drop的思想,使用kl散度避免过拟合增强模型泛化性。
本文档来自技高网...【技术保护点】
1.基于复合程序表示的源代码漏洞检测方法,其特征在于,包含以下步骤:
2.根据权利要求1所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述步骤S1包括:
3.根据权利要求2所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述AST路径,用于表示了代码中不同语句和表达式之间的层次结构和关系;所述CFG路径,用于表示了代码中不同控制流程之间的顺序和依赖关系;所述PDG路径,用于表示了代码中不同变量和函数之间的依赖关系和数据流动。
4.根据权利要求1所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述步骤S2包括:
5.根据权利要求1所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述步骤S3包括:
6.根据权利要求5所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述设定模型训练参数包括:指定模型所见的总训练样本数,将total_examples参数设置为语料库中复合程序表示的数目;指定训练的轮数,将epochs参数设置为若干次。
7.根据权利要求1所述基于复合程序表示的源代码漏洞
8.根据权利要求1所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述步骤S5包括步骤:
9.根据权利要求8所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述正则化损失的计算公式为:
10.根据权利要求8所述基于复合程序表示的源代码漏洞检测方法,其特征在于,结合正则化损失和四元组损失计算得到最终的损失函数,训练得到漏洞检测模型,包括:
...【技术特征摘要】
1.基于复合程序表示的源代码漏洞检测方法,其特征在于,包含以下步骤:
2.根据权利要求1所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述步骤s1包括:
3.根据权利要求2所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述ast路径,用于表示了代码中不同语句和表达式之间的层次结构和关系;所述cfg路径,用于表示了代码中不同控制流程之间的顺序和依赖关系;所述pdg路径,用于表示了代码中不同变量和函数之间的依赖关系和数据流动。
4.根据权利要求1所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述步骤s2包括:
5.根据权利要求1所述基于复合程序表示的源代码漏洞检测方法,其特征在于,所述步骤s3包括:
6.根据权利要求5所述基于...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。