System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及软件检测,尤其涉及一种基于漏洞补丁的代码克隆漏洞检测方法及系统。
技术介绍
1、随着软件业务越来越复杂,开发者在软件开发的过程中复制或者重用现有代码的现象也变得很普遍。这种复制相似或者完全相同的现有代码的行为称为“代码克隆”。如果被复用的代码段中含有漏洞,代码克隆无疑会导致漏洞扩散问题。往往在漏洞补丁发布时代码克隆问题会被忽视,这样就导致了已经发布的漏洞因为代码克隆而发生扩散并且得不到修补。而攻击者就可以根据已经发布的补丁来挖掘代码克隆导致的漏洞,并对整个系统造成影响。
2、代码克隆漏洞检测方法,本质是比较软件源代码与漏洞代码的相似性。代码克隆可以细分为四大类:type-1:去除空格、空行和注释后,完全相同;type-2:除了对一些唯一标识(函数名、类名、变量名)重命名外,完全相同;type-3:片段部分被修改,如添加或删除了部分代码片段,或是重新排序了部分代码片段;type-4:语义相似,但句法不相似。
3、现有redebug是一种基于文本比较的代码克隆检测方法。它通过源代码为每个处理单元设置一个窗口,并为每个窗口应用三个不同的散列函数。通过布隆过滤器中的成员资格检查来检测文件之间的代码克隆,该过滤器存储每个窗口的散列值。这种方式找不到稍作改动的软件克隆(例如,修改变量名),因此会导致对行代码克隆引起的代码漏洞检测准确率下降。
4、deckard为每个代码文件构建ast,然后从ast中提取特征向量。在使用基于欧几里德距离进行的聚类向量之后,欧几里德空间内彼此接近的向量被识别为代
5、ccsharp是一个基于pdg(program dependence graph,程序依赖图)的代码克隆检测方法,该方法对pdg生成工具产生的pdg图进行结构优化,采取去除节点和合并节点的方式来降低pdg图规模,从而减少pdg同构判定的时间消耗;设计了一种pdg特征向量过滤算法来去除掉非克隆的pdg对以降低候选pdg对数。该方法能够检测所有四个类别的克隆。但是,pdg是由程序代码中的数据流程图和控制依赖图组合而成的,而漏洞补丁代码有限和不完整,无法构建为pdg。
6、因此,现有的基于代码克隆的漏洞检测算法中,基于文本比较的代码克隆算法虽然支持漏洞补丁数据集,但是这些算法检测能力较低,只能检测出type-1的代码克隆;基于语法和语义分析的代码克隆检测算法检测能力较高,除了type-1外,也能检测出type-2、type-3和type-4的代码克隆,但是这些算法需要完整的代码片段来进行语法或语义分析,不适用于漏洞补丁。
技术实现思路
1、鉴于上述的分析,本专利技术实施例旨在提供一种基于漏洞补丁的代码克隆漏洞检测方法及系统,用以解决现有漏洞检测不适用于漏洞补丁且检测类型深度和广度均不足的问题。
2、一方面,本专利技术实施例提供了一种基于漏洞补丁的代码克隆漏洞检测方法,包括以下步骤:
3、提取漏洞补丁信息,根据其中的软件项目名称,同步软件项目各版本的代码至软件代码库;
4、基于软件代码库,获取各漏洞补丁对应的源文件,并对源文件进行切片,获取包含漏洞的基本代码片段;
5、获取待检测代码,根据哈希算法,获取软件代码库中与待检测代码最相似的版本;根据最相似的版本和漏洞补丁的发布时间,计算各漏洞补丁的权重;
6、计算待检测代码与各个包含漏洞的基本代码片段的相似度,根据相似度和各漏洞补丁的权重,获取待检测代码的漏洞检测结果。
7、基于上述方法的进一步改进,方法还包括:
8、对软件代码库中的代码进行规范化处理;
9、根据哈希算法,将软件代码库中每个版本的每行代码生成一个哈希值,与对应的版本、源文件和行号作为一条代码行哈希记录;将相同哈希值的代码行哈希记录进行合并,构建软件哈希库。
10、基于上述方法的进一步改进,提取漏洞补丁信息,包括:
11、从公开的漏洞数据库中提取出漏洞参考链接,根据漏洞参考链接,获取第一漏洞补丁及其信息;
12、从开源软件的官方网站和软件项目托管平台抓取各软件补丁及其信息,当软件补丁的信息中包含预置的漏洞关键字,则将该软件补丁作为第二漏洞补丁;
13、根据软件项目名称和版本,对第一漏洞补丁和第二漏洞补丁规范化处理后,去重合并,得到漏洞补丁信息,包括:漏洞补丁代码、软件项目名称、发布时间、版本、源文件、函数名和漏洞起始行号。
14、基于上述方法的进一步改进,基于软件代码库,获取各漏洞补丁对应的源文件,包括:
15、如果漏洞补丁的版本为空,则根据哈希算法,获取漏洞补丁在软件代码库中匹配的版本,作为待检索版本,否则,将漏洞补丁的版本,作为待检索版本;
16、根据漏洞补丁的软件项目名称和源文件,从软件代码库中获取该软件项目的待检索版本下的源文件。
17、基于上述方法的进一步改进,根据哈希算法,获取漏洞补丁在软件代码库中匹配的版本,作为待检索版本,包括:
18、根据哈希算法,将非“+”开头的每行漏洞补丁代码生成一个哈希值,并根据漏洞补丁代码的漏洞起始行号,得到每行漏洞补丁代码对应的行号;将哈希值、漏洞补丁代码的源文件和行号组成一条漏洞哈希记录;
19、根据每条漏洞哈希记录,检索软件哈希库中的代码行哈希记录,获取与每条漏洞哈希记录都一致的代码行哈希记录中的版本,作为待检索版本。
20、基于上述方法的进一步改进,对源文件进行切片,获取包含漏洞的基本代码片段,包括:
21、对源文件进行词法分析,获取漏洞补丁对应的完整函数片段;
22、对完整函数片段进行语法分析,生成抽象语法树;
23、根据漏洞补丁代码在抽象语法树中对应的漏洞节点,获取包含漏洞节点的漏洞树;
24、根据“-”开头的漏洞补丁代码及其依赖关系,保留漏洞树中的节点,对其它节点进行剪枝,得到漏洞补丁对应的漏洞最小子树;
25、将漏洞最小子树还原为代码,得到包含漏洞的基本代码片段。
26、基于上述方法的进一步改进,获取待检测代码,根据哈希算法,获取软件代码库中与待检测代码最相似的版本,包括:
27、对待检测代码进行规范化处理;
28、根据哈希算法,将每行待检测代码生成一个哈希值,并检索软件哈希库中具有相同哈希值的代码行哈希记录,将代码行哈希记录中的版本计数加1;
29、统计各版本的计数,取计数最大的版本作为与待检测代码最相似的版本。
30、基于上述方法的进一步改进,根据最相似的版本和漏洞补丁的发布时间,计算各漏洞补丁的权重,包括:
31、获取各漏洞补丁的版本,如果其属于待检测代码最相似的版本,则设置其对应的漏洞补丁的第一本文档来自技高网...
【技术保护点】
1.一种基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述方法还包括:
3.根据权利要求2所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述提取漏洞补丁信息,包括:
4.根据权利要求3所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述基于软件代码库,获取各漏洞补丁对应的源文件,包括:
5.根据权利要求3所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述根据哈希算法,获取漏洞补丁在软件代码库中匹配的版本,作为待检索版本,包括:
6.根据权利要求1所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述对源文件进行切片,获取包含漏洞的基本代码片段,包括:
7.根据权利要求2所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述获取待检测代码,根据哈希算法,获取软件代码库中与待检测代码最相似的版本,包括:
8.根据权利要求7所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述根据
9.根据权利要求6所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述计算待检测代码与各个包含漏洞的基本代码片段的相似度,包括:
10.一种基于漏洞补丁的代码克隆漏洞检测系统,其特征在于,包括:
...【技术特征摘要】
1.一种基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述方法还包括:
3.根据权利要求2所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述提取漏洞补丁信息,包括:
4.根据权利要求3所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述基于软件代码库,获取各漏洞补丁对应的源文件,包括:
5.根据权利要求3所述的基于漏洞补丁的代码克隆漏洞检测方法,其特征在于,所述根据哈希算法,获取漏洞补丁在软件代码库中匹配的版本,作为待检索版本,包括:
6.根据权利要求1所述的基于漏洞补丁的...
【专利技术属性】
技术研发人员:卢延云,郭昶,李振锋,
申请(专利权)人:中国科学院微电子研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。