【技术实现步骤摘要】
一种基于二元组的漏洞克隆检测系统及方法
[0001]本专利技术涉及一种基于二元组的漏洞克隆检测系统及方法,属于漏洞检测
技术介绍
[0002]开源软件的漏洞克隆检测一直以来都是软件分析领域的热点研究问题之一。随着互联网技术的不断推进发展,网络信息安全成为了人们越来越关注的问题。但与此同时,互联网中暴露出来的漏洞数量也呈现逐年增加的趋势。另外,在计算机领域,许多企业利用开源软件形成了独有的商业模式,据统计,有99%的企业在其IT系统中使用了开源软件。开源成为了如今计算机发展的大趋势。开源软件的不断流行壮大的同时,与开源软件相关的漏洞数量也在增长壮大。这主要是因为,在开源代码的克隆复用时,可能会将那些漏洞代码带到正在开发的系统中。这就导致了一个漏洞的隐蔽的广泛传播。从攻击者的角度来看,开源软件安全漏洞很容易从互联网中获得,这导致了攻击者可以根据官方发布的补丁细节进行有针对性的攻击设计。可以看到,尽可能的认识开源软件的漏洞克隆不仅可以提高软件自身的安全性,而且还可以控制漏洞在开源软件代码重用时的传播。所以开发漏洞克隆检测系统快速准确的检测出系统中存在的已知漏洞是应对软件安全风险,减少由漏洞造成的各种损失的有效措施。
[0003]目前,依据漏洞的分析方法,软件漏洞检测可以分为基于模式匹配的方法和基于代码相似性匹配的方法。开源软件对于源码的获取具有天然的便利性,所以本系统主要是针对源码的漏洞检测。
[0004]在早期的研究中,一些算法寻求在找出特定类型漏洞的独特模式,在被测代码中找到匹配这个模式的部分 ...
【技术保护点】
【技术特征摘要】
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)将被测函数提取保...
【专利技术属性】
技术研发人员:孟丹,于爱民,牛李明,刘湿润,白鑫,马建刚,
申请(专利权)人:中国科学院信息工程研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。