System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于代码边的源代码漏洞检测方法及系统技术方案_技高网

一种基于代码边的源代码漏洞检测方法及系统技术方案

技术编号:41123484 阅读:2 留言:0更新日期:2024-04-30 17:50
本发明专利技术公开了一种基于代码边的源代码漏洞检测方法,首先使用中心性分析删除程序依赖图中不重要的节点从而得到程序依赖子图,程序依赖子图能够更好的表示与漏洞相关的语义信息,其次从程序依赖子图中提取代码边的信息以得到源代码的逻辑结构信息,最终利用卷积和池化技术构建源代码漏洞分类器,实现源代码的漏洞检测,并且定位触发漏洞的边,本发明专利技术对应提供一种基于代码边的源代码漏洞检测系统,相比其他的漏洞检测方法显著降低了漏洞误报率和漏报率并且能够定位触发漏洞的边,能够更好的帮助开发人员修复漏洞。

【技术实现步骤摘要】

本专利技术涉及源代码安全领域,尤其是一种基于代码边的源代码漏洞检测方法及系统


技术介绍

1、软件中的隐藏缺陷可能导致安全漏洞,潜在地允许攻击者破坏系统和应用程序。每年有数千个这样的漏洞被公开,还有更多的漏洞是在内部专有代码中发现并修补的。各类网络攻击表明,这些安全漏洞可能会在经济和社会方面产生灾难性的影响。这些漏洞通常是由程序员犯下的细微错误引起的,并且由于开源软件和代码重用的使用,这些漏洞得以迅速传播。因此在软件开发时能找到潜在的漏洞是非常有必要的。

2、现有的源代码程序分析工具通常只能基于预定义的规则检测有限的可能的漏洞,这些规则的设置非常依赖安全专家的经验,对于未设置代码漏洞匹配规则的漏洞存在高误报率和漏报率。这使得这类源代码程序分析工具的工作效率低,大量的时间被消耗在规则的设置和漏洞误报的排查上,并且难以对漏洞的触发过程进行定位,对修复漏洞提供的帮助不足。


技术实现思路

1、专利技术目的:本专利技术的目的在于提供一种基于代码边的源代码漏洞检测方法及系统,实现了低误报率和低漏报率的需求,同时通过代码边的提取获得漏洞代码的逻辑语义信息,充分提取了漏洞代码行之间的依赖关系,并利用热力图可视化卷积层参数实现了定位触发漏洞的边的需求。

2、技术方案:本专利技术提供的一种基于代码边的源代码漏洞检测方法,包含一下步骤:

3、1)收集漏洞数据库sard中的漏洞数据构建漏洞数据训练集和测试集;

4、2)对收集到的漏洞数据集进行静态分析和中心性分析,提取每一个漏洞数据对应的程序依赖子图;

5、3)利用程序依赖子图生成对应的代码边集合,并对代码边集合进行嵌入转换得到对应的特征矩阵;

6、4)构建源代码漏洞检测器,并利用已经转换为特征矩阵的训练集进行训练;

7、5)将已转换为特征矩阵的测试训练集输入到已训练好的源代码漏洞检测器中,得到漏洞检测结果并利用热力图可视化分析定位触发漏洞的边。

8、进一步的,步骤1)中,收集漏洞数据集并进行训练集和测试集的构建,包含如下步骤:

9、1.1)收集漏洞数据库sard中的漏洞数据,从漏洞文件中提取所有的漏洞函数代码并给每一个函数代码标记为1,从已打补丁的文件中提取所有的函数代码并为每一个函数代码标记为0;

10、1.2)对所有的函数代码进行正则化处理,对用户定义的变量名以及用户定义的函数名进行重命名,按照出现顺序进行构建,具体格式为变量名加编号;

11、1.3)分别从被标记为1的函数代码和被标记为0的函数代码中提取80%的函数代码构成训练集,剩下的函数代码将构成测试集。

12、进一步的,步骤2)具体包含以下步骤:

13、2.1)对漏洞数据集中的每一个函数代码进行静态分析,通过joern工具分析得到函数代码的程序依赖图;

14、2.2)对每一个函数代码的程序依赖图进行degree中心性分析、closeness中心性分析和pagerank中心性分析,得到程序依赖图中每一个节点的三种重要度值,然后将这三种重要度值相加并以此作为每个节点最终的重要度值;

15、2.3)对函数代码的程序依赖图中每一个节点按其重要度值进行降序排序,在程序依赖图中删除排在后面25%的节点,得到程序依赖子图。

16、进一步的,步骤3)具体包含以下步骤:

17、3.1)对程序依赖子图进行遍历,提取每一条边开头节点和结束节点,然后将开头节点与结束节点进行首尾拼接,称为代码边并以此利用两个有序的节点表示一条有向边;

18、3.2)程序依赖图中的每一个节点的具体内容是函数代码中对应的一行代码语句,使用sent2vec模型将代码边中的每行代码转换成统一长度的向量形式;

19、3.3)对得到的代码行向量组成函数代码的特征矩阵,并对特征矩阵的行数进行统一处,超过的进行尾部删除,少于的在尾部进行0向量填充,最终以这个特征矩阵表示函数代码。

20、进一步的,步骤4)具体处理过程包括:根据经过代码边转换得到的特征矩阵训练集输入到源代码漏洞检测器中,将检测器的结果与数据的标签结果进行比较并更新参数值。

21、进一步的,检测器的处理过程包括:以函数代码的特征矩作为输入,通过一个多核卷积层,再经过一个平均池化层,最后经过一个线性层,得到函数代码有漏洞的分数和无漏洞的分数,当有漏洞的分数大于无漏洞的分数,检测器就认为这个函数代码是有漏洞,否则无漏洞。

22、进一步的,多核卷积层的处理过程包括:以不同长度的卷积核分别对同一个特征矩阵进行卷积处理,得到长度不一的特征向量。

23、进一步的,平均池化层的处理过程包括:对不同长度的特征向量分别做平均池化处理并以relu作为激活函数,得到每个特征向量的特征值,最后将这些特征首尾拼接得到一个新特征向量。

24、进一步的,步骤5)具体处理过程包括:使用已经训练好的检测器对已进行特征矩阵转换的函数代码进行检测,在检测器进行检测时记录卷积层的参数,然后以热力图的形式显示,参数值越大说明检测器认为这个部分与漏洞的相关性越大,其对应的颜色在热力图中越亮,由此可以找到其对应的代码边,最终能够定位到触发漏洞的边。

25、有益效果:本专利技术与现有技术相比,其显著特点是通过对程序依赖子图中边信息的提取,生成函数代码对应的代码边集合,这些代码边集合能够很好的表示出漏洞代码的逻辑语义信息,充分提取了漏洞代码行之间的依赖关系,实现了高效低误报率和低漏报率的需求,并利用热力图可视化卷积层参数实现了定位漏洞的边的需求。

本文档来自技高网...

【技术保护点】

1.一种基于代码边的源代码漏洞检测方法,其特征在于,包含以下步骤:

2.根据权利要求1所述的基于代码边的源代码漏洞检测方法,其特征在于所述步骤1)中,具体包含如下步骤:

3.根据权利要求2所述的基于代码边的源代码漏洞检测方法,其特征在于所述步骤2)中,具体包含如下步骤:

4.根据权利要求3所述的基于代码边的源代码漏洞检测方法,其特征在于所述步骤3)中,具体包含如下步骤:

5.根据权利要求4所述的基于代码边的源代码漏洞检测方法,其特征在于所述步骤4)中,具体处理过程包括:根据经过代码边转换得到的特征矩阵训练集输入到源代码漏洞检测器中,将检测器的结果与数据的标签结果进行比较并更新参数值。

6.根据权利要求1所述的基于代码边的源代码漏洞检测方法,其特征在于,检测器的处理过程包括:以函数代码的特征矩作为输入,通过一个多核卷积层,再经过一个平均池化层,最后经过一个线性层,得到函数代码有漏洞的分数和无漏洞的分数,当有漏洞的分数大于无漏洞的分数,检测器就认为这个函数代码是有漏洞,否则无漏洞。

7.根据权利要求6所述的基于代码边的源代码漏洞检测方法,其特征在于,多核卷积层的处理过程包括:以不同长度的卷积核分别对同一个特征矩阵进行卷积处理,得到长度不一的特征向量。

8.根据权利要求6所述的基于代码边的源代码漏洞检测方法,其特征在于,平均池化层的处理过程包括:对不同长度的特征向量分别做平均池化处理并以relu作为激活函数,得到每个特征向量的特征值,最后将这些特征首尾拼接得到一个新特征向量。

9.根据权利要求1所述的基于代码边的源代码漏洞检测方法,其特征在于,所述步骤5)中,其处理过程包括:使用已经训练好的检测器对已进行特征矩阵转换的函数代码进行分类,在检测器进行分类时记录卷积层的参数,然后以热力图的形式显示,参数值越大说明检测器认为这个部分与漏洞的相关性越大,其对应的颜色在热力图中越亮,由此可以找到其对应的代码边,最终能够定位到触发漏洞的边。

10.基于代码边的源代码漏洞检测系统,所述基于代码边的源代码漏洞检测系统用于实现权利要求1-9中任一的基于代码边的源代码漏洞检测方法,其特征在于,该基于代码边的源代码漏洞检测系统包括依次连接的源代码正则化模块(1)、程序依赖子图提取模块(2)、代码边提取模块(3)、代码边向量转换模块(4)、漏洞检测器训练模块(5)以及漏洞定位模块(6);

...

【技术特征摘要】

1.一种基于代码边的源代码漏洞检测方法,其特征在于,包含以下步骤:

2.根据权利要求1所述的基于代码边的源代码漏洞检测方法,其特征在于所述步骤1)中,具体包含如下步骤:

3.根据权利要求2所述的基于代码边的源代码漏洞检测方法,其特征在于所述步骤2)中,具体包含如下步骤:

4.根据权利要求3所述的基于代码边的源代码漏洞检测方法,其特征在于所述步骤3)中,具体包含如下步骤:

5.根据权利要求4所述的基于代码边的源代码漏洞检测方法,其特征在于所述步骤4)中,具体处理过程包括:根据经过代码边转换得到的特征矩阵训练集输入到源代码漏洞检测器中,将检测器的结果与数据的标签结果进行比较并更新参数值。

6.根据权利要求1所述的基于代码边的源代码漏洞检测方法,其特征在于,检测器的处理过程包括:以函数代码的特征矩作为输入,通过一个多核卷积层,再经过一个平均池化层,最后经过一个线性层,得到函数代码有漏洞的分数和无漏洞的分数,当有漏洞的分数大于无漏洞的分数,检测器就认为这个函数代码是有漏洞,否则无漏洞。

7.根据权利要求6所述的基于代码边的源代码漏洞检测方法,其特征在于,多核卷积层的处理过...

【专利技术属性】
技术研发人员:彭碧涛张金荣刘珍苏鹏程
申请(专利权)人:广东外语外贸大学
类型:发明
国别省市:

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

1