一种基于二元组的漏洞克隆检测系统及方法技术方案

技术编号:35460554 阅读:22 留言:0更新日期:2022-11-03 12:27
本发明专利技术涉及一种基于二元组的漏洞克隆检测系统及方法,包括:漏洞特征库的生成模块,漏洞克隆检测模块和结果过滤生成模块;漏洞特征库的生成模块,从漏洞函数以及打补丁函数中获取与漏洞有关的语句,这些语句经过标准化以及抽象表示之后,成为特定漏洞的特征;漏洞克隆检测阶段,将被测项目进行抽象处理,与漏洞特征库进行匹配,得到检测出的漏洞;结果过滤生成模块,采用过滤器,以CVE为单元,对检测出的漏洞进一步分析处理,如果结果中包含所有的漏洞函数,则判定是一个与所述CVE一样的漏洞,如果包含部分,则是一个不确定的结果。本发明专利技术减少信息冗余同时降低检测的误报率;同时,进一步准确判断检测结果是否是一个完整的漏洞。步准确判断检测结果是否是一个完整的漏洞。步准确判断检测结果是否是一个完整的漏洞。

【技术实现步骤摘要】
一种基于二元组的漏洞克隆检测系统及方法


[0001]本专利技术涉及一种基于二元组的漏洞克隆检测系统及方法,属于漏洞检测


技术介绍

[0002]开源软件的漏洞克隆检测一直以来都是软件分析领域的热点研究问题之一。随着互联网技术的不断推进发展,网络信息安全成为了人们越来越关注的问题。但与此同时,互联网中暴露出来的漏洞数量也呈现逐年增加的趋势。另外,在计算机领域,许多企业利用开源软件形成了独有的商业模式,据统计,有99%的企业在其IT系统中使用了开源软件。开源成为了如今计算机发展的大趋势。开源软件的不断流行壮大的同时,与开源软件相关的漏洞数量也在增长壮大。这主要是因为,在开源代码的克隆复用时,可能会将那些漏洞代码带到正在开发的系统中。这就导致了一个漏洞的隐蔽的广泛传播。从攻击者的角度来看,开源软件安全漏洞很容易从互联网中获得,这导致了攻击者可以根据官方发布的补丁细节进行有针对性的攻击设计。可以看到,尽可能的认识开源软件的漏洞克隆不仅可以提高软件自身的安全性,而且还可以控制漏洞在开源软件代码重用时的传播。所以开发漏洞克隆检测系统快速准确的检测出系统中存在的已知漏洞是应对软件安全风险,减少由漏洞造成的各种损失的有效措施。
[0003]目前,依据漏洞的分析方法,软件漏洞检测可以分为基于模式匹配的方法和基于代码相似性匹配的方法。开源软件对于源码的获取具有天然的便利性,所以本系统主要是针对源码的漏洞检测。
[0004]在早期的研究中,一些算法寻求在找出特定类型漏洞的独特模式,在被测代码中找到匹配这个模式的部分,即判定为存在漏洞。但是这种检测方法,首先时漏洞模式的产生,主要依据安全专家的经验,因此主观性强。针对每种类型的抖动,都需要设计不同的检测模式,设计复杂。规则的不完善也会导致检测的不准确。另一种检测算法就是根据与漏洞相似的代码很有可能也含有漏洞这一思想,设计出一种方法能比较出来代码的相似性。
[0005]针对开源软件的漏洞检测问题,有一些基于代码相似性的方法来处理这个问题。ReDeBug能够迅速发现操作系统规模代码库中未打补丁的漏洞代码。它使用特征散列法编码位向量中的n个标记,使ReDeBug以十分高效的方式执行相似性检测。SecureSync采用扩展的抽象语法树(xAST)来表征漏洞代码段,用于复制源码的再现漏洞检测。CBCD用子图同构匹配来确定缺陷代码的PDG是否是软件系统PDG的子图,并提供了4种PDG查询的优化方法。Vuddy将函数作为基本检测粒度,对漏洞函数中的类型名、变量名、函数名进行统一替换来确保对于漏洞代码克隆的检测。Song等人采用程序切片的方式,提取与漏洞有关的语句块进行匹配。
[0006]现有的基于代码相似性的源码漏洞克隆检测中,由于抽象语法树,数据流图,控制流图,程序依赖图对于代码的抽象不够全面,因此找到的漏洞特征不够完整。所以根据以上几种方案设计的检测方法,对漏洞的检测性能不高。而代码属性图结合了以上几种抽象结
构,所以能够获取到足够多的代码结构特征。但是由于获取的抽象信息过多,会有很多的冗余,因此检测的速度包括准确率都不够高。
[0007]还有就是现有的检测方法,都是以函数为单位进行报告。但是,一个漏洞往往涉及多个函数,仅仅只有部分漏洞函数被匹配上,也不能判定其是一个漏洞。
[0008]总之,当前漏洞克隆检测方法中,基于文本的方法只需要对代码进行词法分析,文本所包含的代码信息过少。抽象语法树虽然能获得比文本表示更多的代码结构信息,但是抽象语法树的结构复杂,进行大规模软件的漏洞检测成本很高。代码属性图所包含的代码结构信息相较于抽象语法树来说更加的完整,但图相似的计算同样复杂,本专利技术首次使用二元组将代码属性图中的信息表示出来,将子图匹配问题转化为二元组匹配问题,极大简化了计算过程,提高检测效率,使其能够应用在较大规模软件。
[0009]另外,当前的漏洞检测是以函数为单位报告检测结果,但是一个漏洞形成原因是复杂的,漏洞的修复往往涉及多个函数。当一个CVE涉及到多个函数时,可能在被测项目中只能匹配到该CVE包含的一部分漏洞函数。虽然包含了一部分漏洞代码,但是这部分函数的漏洞性已经消失了,也即不存在漏洞。那报告出来的这个函数检测结果也就是没有意义的。因此我们需要对检测结果一个一个检查筛选,确定报告的结果是否一定包含一个漏洞。所以针对于一个漏洞涉及多个函数的情况,本方法在检测过程中,增加一个面向CVE的漏洞分析整合过程。
[0010][1]JANG J,AGRAWAL A,BRUMLEY D.ReDeBug:finding un

patched code clones in entire OS distributions[C]//2012IEEE Symposium on Security and Privacy(S&P).2012:48

62.
[0011][2]李赞,边攀,石文昌,等.一种利用补丁的未知漏洞发现方法[J].软件学报,2018,29(5):1199

1212.LI Z,BIAN P,SHI W C,et al.Approach of leveraging patches todiscover unknown vulnerabilities[J].Journal of Software,2018,29(5):1199

1212.
[0012][3]Kim S,Woo S,Lee H,et al.VUDDY:A Scalable Approach for Vulnerable Code Clone Discovery[C]//2017IEEE Symposium on Security and Privacy(SP).IEEE,2017.
[0013][4]Song X,Yu A,Yu H,et al.Program Slice Based Vulnerable Code Clone Detection[C]//2020IEEE 19th International Conference on Trust,Security and Privacy in Computing and Communications(TrustCom).IEEE,2020.

技术实现思路

[0014]本专利技术技术解决问题:克服现有技术的不足,提供一种基于二元组的漏洞克隆检测系统及方法,减少信息冗余同时降低检测的误报率;同时,进一步准确判断检测结果是否是一个完整的漏洞。
[0015]本专利技术技术解决方案:一种基于二元组的漏洞克隆检测系统,包括:漏洞特征库的生成模块,漏洞克隆检测模块和结果过滤生成模块;
[0016]漏洞特征库的生成模块,首先根据漏洞函数和打补丁后的函数分别生成代码属性图,然后根据代码属性图,获取与漏洞有关的语句,这些语句经过标准化以及抽象表示之
后,得到漏洞特征信息,最终形成漏洞特征库;
[0017]漏洞本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于二元组的漏洞克隆检测系统,其特征在于,包括:漏洞特征库的生成模块,漏洞克隆检测模块和结果过滤生成模块;漏洞特征库的生成模块,首先根据漏洞函数和打补丁后的函数分别生成代码属性图,然后根据代码属性图,获取与漏洞有关的语句,这些语句经过标准化以及抽象表示之后,得到漏洞特征信息,最终形成漏洞特征库;漏洞克隆检测阶段,将被测项目进行抽象处理,首先获取被测项目中的函数,然后对函数进行处理,生成代码属性图,对代码属性图进一步抽象表示,最后与漏洞特征库进行匹配,得到检测出的漏洞;结果过滤生成模块,采用过滤器,以CVE为单元,对检测出的漏洞进一步判断,如果检测出的漏洞的结果中包含一个漏洞编CVE_ID中所涉及的所有的漏洞函数,则判定被测项目中存在一个与所述CVE_ID一样的漏洞,如果包含部分漏洞函数,则是一个不确定的结果。2.根据权利要求1所述的基于二元组的漏洞克隆检测系统,其特征在于:所述漏洞特征库的生成模块具体实现如下:(1)首先,获取通用漏洞披露的CVE给出的漏洞对应的漏洞函数和打补丁函数;在NVD网站上,对于每一个CVE公布其相关资源网址,在NVD网站上获取json格式的CVE数据集,然后处理数据集,筛选出CVE信息;筛选出来的CVE信息包含着CVE编号,补丁网址,描述信息;根据补丁网址,去获取对应的补丁,以及漏洞函数;根据补丁以及漏洞函数,将漏洞函数进行修改,最终获取打补丁函数;在获取到漏洞函数和打补丁函数之后,分别对两个函数进行标记;在两个函数标记完之后,处理获得两个函数的代码属性图;(2)对获取到漏洞函数BadFunc和打补丁函数GoodFunc进行处理,获取两个函数代码属性图,具体为:使用joern对函数进行扫描,然后漏洞函数和打补丁函数经过处理之后均得到两个文件,即节点文件和边文件;节点文件中包括节点关键字,节点信息,节点类型;边文件中包括两个节点之间的边类型,包含FLOW_TO,USE八种类型;根据这两个文件,将两个函数分别抽象为两个二元组表示集合,二元组定义如下:[Code1_out,Code2_in],二元组中的两个语句顺利不能改变,因为其中隐含着其控制流或者数据流关系;(3)在漏洞函数BadFunc和打补丁函数GoodFunc中获取以标记“+”和标记
“‑”
为核心的语句的所有相关的二元组表示,这一过程被称之为切片,整合获取的所有二元组,漏洞函数中获取的二元组表示集合称为漏洞函数切片集合,打补丁函数中获取的二元组表示集合称为补丁函数切片集合,对这两个集合再次进行分类,分类规则如下:C
c
=Vul
s
∩Pat
s
B
c
=C
c
∩Vul
s
G
c
=C
c
∩Pat
s
其中,C_c指既出现在漏洞函数切片的集合中,也出现在打补丁函数的切片集合中的二元组,B_c指只出现在漏洞函数的切片集合中的二元组,G_c指只出现在打补丁函数的切片集合中的二元组;(4)对每个集合中的二元组进行标准化处理,将二元组表示为一个32位的哈希值,对于每个漏洞函数,漏洞特征有以下五部分组成:{CVE_ID#Funcname,Funchash,C_c_hash,B_c_hash,G_c_hash})其中,CVE_ID#funcname指的是CVE漏洞的函数名,Funchash指的是漏洞函数进行hash
之后的函数体hash值,C_c_hash指的是C_c进行hash后的二元组hash值,B_c_hash指的是B_c进行hash后的二元组hash值,G_c_hash指的是G_c进行hash后的二元组hash值;(5)最终,针对每个漏洞函数提取的各种特征,采用JSON数据格式进行存储,以函数为单位,组织漏洞特征,一个函数对应一条记录,存储最终得到的漏洞特征信息,从而形成漏洞特征库。3.根据权利要求1所述的基于二元组的漏洞克隆检测系统,其特征在于:所述漏洞克隆检测阶段模块具体实现如下:(1)首先是对被测项目进行处理,获取被测项目中的被测函数,提取被测函数的过程包括:解析提取出文件名,函数名,函数中的变量列表,参数名列表,数据类型列表包括用户自定义的变量类型,函数调用列表和函数体;将解析提取的被测函数保存为以函数为单位的文件,文件名命名格式如下:文件路径#~文件名$~函数名$函数在文件中范围;(2)将被测函数提取保...

【专利技术属性】
技术研发人员:孟丹于爱民牛李明刘湿润白鑫马建刚
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:

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

1