1.本发明涉及漏洞检测技术领域,尤其涉及一种基于补丁比对和污点分析的漏洞检测方法、设备及介质。
背景技术:
2.软件漏洞是存在于系统或者应用软件中,可导致攻击者在未授权情况下访问或破坏系统的安全缺陷。软件漏洞形成的原因具有多样性,包括开发人员疏忽及水平受限、编译器安全缺陷、程序功能逻辑复杂、程序测试不充分等因素。新的信息环境下,软件规模越来越大,软件复杂度越来越高,涉及代码规模、功能组成、多线程并发、数据资源共享等复杂机制。
3.同时,现有的一些针对软件源代码的漏洞检测工具往往具有较高的误报率和漏报率。即使是经验丰富的安全分析员也需要耗费大量的时间去确认每一个漏洞相关信息,以致严重阻碍了软件源代码漏洞检测的效率。
4.手动漏洞分析方法主要存在人工经验依赖度强且难以满足软件规模需求等问题,尤其是随着软件规模的不断提升,该过程往往需要配合程序分析工具进行。而诸如抽象语法树(ast)、控制流图(cfg)、程序依赖图(pdg)等传统源代码分析工具的效果较为初级,直接用于表征漏洞模式效果不佳。随着程序分析技术的不断发展,尤其是污点分析技术不断成热,当前已有多个基于污点分析进行漏洞检测的研究及成果,如avgerinos等提出的aeg,shih-kun huang提出的crax、shellphish提出的angr等。但这些方法都存在人工干预过多、误报率高、不能精确定位等问题。
技术实现要素:
5.为了解决上述问题,本发明提出一种基于补丁比对和污点分析的漏洞检测方法、设备及介质,通过提取漏洞代码信息中污点数据的注入点(source)到关键的程序敏感点(sink)之间的数据流切片,将软件漏洞补丁信息和污点分析方法相结合生产漏洞规则,利用漏洞规则匹配检测出软件源代码中的漏洞点位。
6.本发明采用的技术方案如下:
7.一种基于补丁比对和污点分析的漏洞检测方法,包括:
8.漏洞代码片段获取:获取与漏洞类型相关的漏洞补丁信息,通过对漏洞补丁文件进行分析获取漏洞代码片段;
9.污点分析:对漏洞代码片段进行污点分析确定污点数据的来源source点和漏洞触发位置的sink点,并对从source点到sink点的污点路径进行污点传播分析,生成相应的漏洞规则,并加入到漏洞规则库中;
10.漏洞检测:利用漏洞规则库中的漏洞规则,对目标代码项目编译后的代码工程进行扫描,匹配到与其类型相匹配的漏洞,并输出漏洞代码位置和路径。
11.进一步地,针对公开漏洞库、代码仓库以及漏洞代码管理平台,分别采用不同的自
动化方法来采集漏洞补丁信息:
12.针对代码仓库,先后通过commit id分析、文本过滤筛选和命令行调用引擎获取漏洞补丁文件;
13.针对公开漏洞库,先后通过提取reference链接、url过滤筛选和爬虫引擎获取漏洞补丁文件;
14.针对漏洞代码管理平台,先后通过提取reference链接、url过滤筛选和爬虫引擎获取漏洞补丁文件,或直接通过爬虫引擎获取漏洞补丁文件。
15.进一步地,针对漏洞数据集中的某一种漏洞类型,对漏洞补丁文件进行分析,通过漏洞补丁diff文件中的commit id,基于命令行调用从对应软件的代码仓库中获取漏洞修补前/后代码,然后通过diff文件的+/-行,定位到漏洞修补前/后代码中的漏洞代码片段。
16.进一步地,漏洞补丁文件包括漏洞diff文件,即软件漏洞修复前后差异比对文件。
17.进一步地,代码仓库包括github仓库和svn仓库。
18.进一步地,漏洞代码管理平台包括bugzilla和issues report。
19.进一步地,污点分析包括以下步骤:
20.s201.选取漏洞类型;
21.s202.获取漏洞代码片段;
22.s203.确定漏洞source点相关变量与应用程序接口api;
23.s204.进行污点传播分析,判断source点是否依赖其他变量或条件,若是,则递归分析其他变量或条件,再执行步骤s203;否则,执行下一步;
24.s205.确定漏洞sink点相关api;
25.s206.判断是否分析完所有漏洞代码片段,若是,则生成当前漏洞类型的(source,sink)集合,结束;否则,重复执行步骤s202~s205。
26.进一步地,漏洞检测包括以下步骤:
27.s301.获取目标软件源代码;
28.s302.基于漏洞规则对目标软件源代码进行扫描;
29.s303.进行控制流分析,判断目标软件源代码中是否有与漏洞规则相匹配的漏洞,若是,则定位到具体的漏洞行和漏洞语句,执行下一步;否则,直接进行下一步;
30.s304.判断是否检测完所有源代码文件,若是,则结束;否则,分析下一个源代码文件,重复执行步骤s302~s303。
31.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,述处理器执行所述计算机程序时实现上述基于补丁比对和污点分析的漏洞检测方法的步骤。
32.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述基于补丁比对和污点分析的漏洞检测方法的步骤。
33.本发明的有益效果在于:
34.本发明以基于补丁比对和污点分析的源代码漏洞自动检测为驱动,综合利用公开漏洞信息库的信息进行查询推导分析,提取漏洞代码信息中污点数据的注入点(source)到关键的程序敏感点(sink)之间的数据流切片,将软件漏洞补丁信息和污点分析方法相结合生产漏洞规则,利用漏洞规则匹配检测出软件源代码中的漏洞点位。自动判断并定位目标
软件代码中疑似存在的诸如sql注入、跨站脚本、恶意执行、隐私泄露等漏洞,可极大减少漏洞检测中的人工介入,达到提升目标软件漏洞检测效率的目的。有益效果具体包括:
35.1、本发明可以基于多源异构漏洞信息库获取的信息,自动得到漏洞补丁信息和漏洞代码片段。
36.2、本发明通过对漏洞补丁信息使用污点分析方法,完成漏洞代码片段的污点传播上下文分析,可自动生成漏洞规则(污点传播路径)。
37.3、本发明还可以根据自动生成的漏洞规则,对软件源代码进行检测,自动判断出代码中是否含有可疑漏洞,并明确漏洞代码位置,这样可以极大减少人工审查的工作量,提升整个漏洞检测过程的效率。
附图说明
38.图1是本发明实施例1的基于补丁比对和污点分析的漏洞检测方法的流程图。
39.图2是本发明实施例1的漏洞补丁信息获取流程图。
40.图3是本发明实施例1的漏洞代码片段抽取流程图。
41.图4是本发明实施例1的污点分析流程图。
42.图5是本发明实施例1的漏洞检测流程图。
具体实施方式
43.为了对本发明的技术特征、目的和效果有更加清楚的理解,现说明本发明的具体实施方式。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
44.实施例1
45.本实施例提供了一种基于补丁比对和污点分析的漏洞检测方法,通过提取漏洞代码信息中污点数据的注入点(source)到关键的程序敏感点(sink)之间的数据流切片,将软件漏洞补丁信息和污点分析方法相结合生产漏洞规则,利用漏洞规则匹配检测出软件源代码中的漏洞点位。如图1所示,包括以下步骤:
46.漏洞代码片段获取:获取与漏洞类型相关的漏洞补丁信息,通过对漏洞补丁文件进行分析获取漏洞代码片段;
47.污点分析:对漏洞代码片段进行污点分析确定污点数据的来源source点和漏洞触发位置的sink点,并对从source点到sink点的污点路径进行污点传播分析,生成相应的漏洞规则,并加入到漏洞规则库中;
48.漏洞检测:利用漏洞规则库中的漏洞规则,对目标代码项目编译后的代码工程进行扫描,匹配到与其类型相匹配的漏洞,并输出漏洞代码位置和路径。
49.(1)漏洞代码片段获取
50.漏洞补丁对于分析漏洞成因、总结漏洞规则以及检测源代码漏洞具有重要的意义。漏洞补丁主要表现为漏洞diff文件(软件漏洞修复前后差异比对文件),包含了导致漏洞的api或方法,以及漏洞如何修复的方法。但是,漏洞补丁信息具有来源少、难收集等特
点,很难用统一的自动化方法来搜集。
51.因此,本实施例针对公开漏洞库、代码仓库(例如github仓库和svn仓库)以及漏洞代码管理平台(例如bugzilla和issues report),分别采用不同的自动化方法来采集漏洞补丁信息。如图2所示,针对代码仓库,先后通过commit id分析、文本过滤筛选和命令行调用引擎获取漏洞补丁文件;针对公开漏洞库,先后通过提取reference链接、url过滤筛选和爬虫引擎获取漏洞补丁文件;针对漏洞代码管理平台,先后通过提取reference链接、url过滤筛选和爬虫引擎获取漏洞补丁文件,或直接通过爬虫引擎获取漏洞补丁文件。
52.然后,针对漏洞数据集中的某一种漏洞类型,对漏洞补丁文件进行分析。如图3所示,通过漏洞补丁diff文件中的commit id,基于命令行调用从对应软件的代码仓库中获取漏洞修补前/后代码,然后通过diff文件的+/-行,定位到漏洞修补前/后代码中的漏洞代码片段。
53.(2)污点分析
54.对漏洞补丁代码片段进行污点传播上下文分析,找到与漏洞相关的source点和sink点,对一种漏洞类型的所有的漏洞代码分析完后,可以得到该类型漏洞的(source,sink)集合。如图4所示,污点分析包括以下步骤:
55.s201.选取漏洞类型;
56.s202.获取漏洞代码片段;
57.s203.确定漏洞source点相关变量与应用程序接口api;
58.s204.进行污点传播分析,判断source点是否依赖其他变量或条件,若是,则递归分析其他变量或条件,再执行步骤s203;否则,执行下一步;
59.s205.确定漏洞sink点相关api;
60.s206.判断是否分析完所有漏洞代码片段,若是,则生成当前漏洞类型的(source,sink)集合,结束;否则,重复执行步骤s202~s205。
61.(3)漏洞检测
62.基于对漏洞补丁代码片段污点分析的输出结果,生成该漏洞类型对应的漏洞规则,并将该漏洞规则加入到漏洞规则库中。利用漏洞代码规则可检测出目标软件源代码中与漏洞规则相匹配的漏洞,并定位到具体的漏洞行和漏洞语句。如图5所示,漏洞检测包括以下步骤:
63.s301.获取目标软件源代码;
64.s302.基于漏洞规则对目标软件源代码进行扫描;
65.s303.进行控制流分析,判断目标软件源代码中是否有与漏洞规则相匹配的漏洞,若是,则定位到具体的漏洞行和漏洞语句,执行下一步;否则,直接进行下一步;
66.s304.判断是否检测完所有源代码文件,若是,则结束;否则,分析下一个源代码文件,重复执行步骤s302~s303。
67.本实施例的漏洞检测方法以基于补丁比对和污点分析的源代码漏洞自动检测为驱动,综合利用公开漏洞信息库的信息进行查询推导分析,提取漏洞代码信息中污点数据的注入点(source)到关键的程序敏感点(sink)之间的数据流切片,将软件漏洞补丁信息和污点分析方法相结合生产漏洞规则,利用漏洞规则匹配检测出软件源代码中的漏洞点位。可自动判断并定位目标软件代码中疑似存在的诸如sql注入、跨站脚本、恶意执行、隐私泄
露等漏洞,极大减少漏洞检测中的人工介入,达到提升目标软件漏洞检测效率的目的。
68.需要说明的是,对于本方法实施例,为了简便描述,故将其表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本技术所必须的。
69.实施例2
70.本实施例在实施例1的基础上:
71.本实施例提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行该计算机程序时实现实施例1的基于补丁比对和污点分析的漏洞检测方法的步骤。其中,计算机程序可以为源代码形式、对象代码形式、可执行文件或者某些中间形式等。
72.实施例3
73.本实施例在实施例1的基础上:
74.本实施例提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现实施例1的基于补丁比对和污点分析的漏洞检测方法的步骤。其中,计算机程序可以为源代码形式、对象代码形式、可执行文件或者某些中间形式等。存储介质包括:能够携带计算机程序代码的任何实体或装置、记录介质、计算机存储器、只读存储器(rom)、随机存取存储器(ram)、电载波信号、电信信号以及软件分发介质等。需要说明的是,存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,存储介质不包括电载波信号和电信信号。
技术特征:
1.一种基于补丁比对和污点分析的漏洞检测方法,其特征在于,包括:漏洞代码片段获取:获取与漏洞类型相关的漏洞补丁信息,通过对漏洞补丁文件进行分析获取漏洞代码片段;污点分析:对漏洞代码片段进行污点分析确定污点数据的来源source点和漏洞触发位置的sink点,并对从source点到sink点的污点路径进行污点传播分析,生成相应的漏洞规则,并加入到漏洞规则库中;漏洞检测:利用漏洞规则库中的漏洞规则,对目标代码项目编译后的代码工程进行扫描,匹配到与其类型相匹配的漏洞,并输出漏洞代码位置和路径。2.根据权利要求1所述的基于补丁比对和污点分析的漏洞检测方法,其特征在于,针对公开漏洞库、代码仓库以及漏洞代码管理平台,分别采用不同的自动化方法来采集漏洞补丁信息:针对代码仓库,先后通过commit id分析、文本过滤筛选和命令行调用引擎获取漏洞补丁文件;针对公开漏洞库,先后通过提取reference链接、url过滤筛选和爬虫引擎获取漏洞补丁文件;针对漏洞代码管理平台,先后通过提取reference链接、url过滤筛选和爬虫引擎获取漏洞补丁文件,或直接通过爬虫引擎获取漏洞补丁文件。3.根据权利要求2所述的基于补丁比对和污点分析的漏洞检测方法,其特征在于,针对漏洞数据集中的某一种漏洞类型,对漏洞补丁文件进行分析,通过漏洞补丁diff文件中的commit id,基于命令行调用从对应软件的代码仓库中获取漏洞修补前/后代码,然后通过diff文件的+/-行,定位到漏洞修补前/后代码中的漏洞代码片段。4.根据权利要求2所述的基于补丁比对和污点分析的漏洞检测方法,其特征在于,漏洞补丁文件包括漏洞diff文件,即软件漏洞修复前后差异比对文件。5.根据权利要求2所述的基于补丁比对和污点分析的漏洞检测方法,其特征在于,代码仓库包括github仓库和svn仓库。6.根据权利要求2所述的基于补丁比对和污点分析的漏洞检测方法,其特征在于,漏洞代码管理平台包括bugzilla和issues report。7.根据权利要求1所述的基于补丁比对和污点分析的漏洞检测方法,其特征在于,污点分析包括以下步骤:s201.选取漏洞类型;s202.获取漏洞代码片段;s203.确定漏洞source点相关变量与应用程序接口api;s204.进行污点传播分析,判断source点是否依赖其他变量或条件,若是,则递归分析其他变量或条件,再执行步骤s203;否则,执行下一步;s205.确定漏洞sink点相关api;s206.判断是否分析完所有漏洞代码片段,若是,则生成当前漏洞类型的(source,sink)集合,结束;否则,重复执行步骤s202~s205。8.根据权利要求1所述的基于补丁比对和污点分析的漏洞检测方法,其特征在于,漏洞检测包括以下步骤:
s301.获取目标软件源代码;s302.基于漏洞规则对目标软件源代码进行扫描;s303.进行控制流分析,判断目标软件源代码中是否有与漏洞规则相匹配的漏洞,若是,则定位到具体的漏洞行和漏洞语句,执行下一步;否则,直接进行下一步;s304.判断是否检测完所有源代码文件,若是,则结束;否则,分析下一个源代码文件,重复执行步骤s302~s303。9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1-8任一项所述的基于补丁比对和污点分析的漏洞检测方法的步骤。10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-8任一项所述的基于补丁比对和污点分析的漏洞检测方法的步骤。
技术总结
本发明公开了一种基于补丁比对和污点分析的漏洞检测方法、设备及介质,其中漏洞检测方法包括:漏洞代码片段获取:获取与漏洞类型相关的漏洞补丁信息,通过对漏洞补丁文件进行分析获取漏洞代码片段;污点分析:对漏洞代码片段进行污点分析确定污点数据的来源source点和漏洞触发位置的sink点,并对从source点到sink点的污点路径进行污点传播分析,生成相应的漏洞规则,并加入到漏洞规则库中;漏洞检测:利用漏洞规则库中的漏洞规则,对目标代码项目编译后的代码工程进行扫描,匹配到与其类型相匹配的漏洞,并输出漏洞代码位置和路径。本发明可自动判断并定位目标软件代码中的漏洞,极大减少漏洞检测中的人工介入。大减少漏洞检测中的人工介入。大减少漏洞检测中的人工介入。
技术研发人员:刘杰 饶志宏 毛得明 和达 王一凡
受保护的技术使用者:中国电子科技网络信息安全有限公司
技术研发日:2021.11.11
技术公布日:2022/3/8