首页> 中国专利> 基于补丁的漏洞检测方法、装置、存储介质和电子设备

基于补丁的漏洞检测方法、装置、存储介质和电子设备

摘要

本发明提供一种基于补丁的漏洞检测方法、装置、存储介质和电子设备,涉及信息技术和计算机软件技术领域。本发明基于待检测软件项目获取其第三方依赖组件,并对第三方依赖组件的漏洞以及漏洞的补丁进行解析,获取漏洞特征,然后对待检测软件项目进行编译构建和利用调用图对漏洞进行检测,得到对待检测软件项目产生实际影响的第三方依赖组件漏洞。本发明的技术方案能够精确定位对软件项目产生真实影响的第三方依赖组件漏洞,有效避免了对第三方依赖组件进行盲目升级带来的项目执行效率下降或版本兼容性风险,进而提升了软件的安全性和可用性。

著录项

  • 公开/公告号CN112434305A

    专利类型发明专利

  • 公开/公告日2021-03-02

    原文格式PDF

  • 申请/专利权人 北京中科微澜科技有限公司;

    申请/专利号CN202011416646.X

  • 发明设计人 杨牧天;刘梅;罗天悦;

    申请日2020-12-07

  • 分类号G06F21/57(20130101);

  • 代理机构11542 北京久诚知识产权代理事务所(特殊普通合伙);

  • 代理人翟姝红

  • 地址 100007 北京市东城区后永康胡同17号10号楼1层1037

  • 入库时间 2023-06-19 10:05:17

说明书

技术领域

本发明涉及信息技术和计算机软件技术领域,具体涉及一种基于补丁的漏洞检测方法、装置、存储介质和电子设备。

背景技术

随着开源技术的兴起,第三方依赖组件得到了广泛的应用,可以说,几乎所有的软件都在不同程度上使用开源、第三方组件或依赖项。第三方依赖组件的应用,允许开发人员通过重复使用第三方开发的软件库共享劳动成果。但在为开发人员带来便利的同时,第三方依赖组件由于其自身的安全缺陷也给项目带来了安全隐患。因为使用含有已知漏洞的第三方依赖组件会造成应用程序的破坏或数据丢失,影响软件安全,所以增强第三方依赖组件的安全,对软件项目的安全性至关重要。

目前,对第三方依赖组件进行升级是解决其安全问题的普遍做法。而在软件项目的实际应用中,并非每个第三方依赖组件的漏洞都会对项目产生影响,不经选择地对第三方依赖组件进行安全升级,会带来项目执行效率下降或版本兼容性风险。因此,检测并发现第三方依赖组件中对软件项目产生实际影响的漏洞并进行针对性的修复,对软件项目的安全性和稳定性起到重要的作用。然而,如何检测和确定第三方依赖组件中对软件项目产生实际影响的漏洞,一直是个亟待解决的问题。

实际上,人们发现,补丁文件中的漏洞修复代码信息可以为第三方依赖组件漏洞检测提供数据支持,但到目前为止,还没有基于补丁进行第三方依赖组件漏洞检测的技术,更不存在基于补丁自动化进行第三方依赖组件漏洞检测的技术。

发明内容

(一)解决的技术问题

针对现有技术的不足,本发明提供了一种基于补丁的漏洞检测方法、装置、存储介质和电子设备,解决了现有技术中无法基于补丁自动化进行第三方依赖组件漏洞检测的问题。

(二)技术方案

为实现以上目的,本发明通过以下技术方案予以实现:

第一方面,本发明提供了一种基于补丁的漏洞检测方法,所述方法包括:

基于待检测软件项目获取其第三方依赖组件;

获取所述第三方依赖组件的漏洞和所述漏洞对应的补丁,解析所述补丁获取漏洞特征;

对所述待检测软件项目进行编译构建,获得其调用图;

利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞。

优选的,获取所述第三方依赖组件的漏洞和所述漏洞对应的补丁,解析所述补丁获取漏洞特征,包括:

基于所述第三方依赖组件的名称和版本获取其漏洞,基于所述漏洞获取所述漏洞对应的补丁;

抽取每个所述补丁的待修补的文件名称、需要修改的文件位置以及修补前的漏洞代码,得到所述漏洞特征。

优选的,利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞,包括:

利用所述调用图遍历所述漏洞,并根据所述漏洞特征对所有漏洞进行特征比对,查找所述漏洞代码被所述调用图调用的漏洞,即为对软件项目产生实际影响的第三方依赖组件的漏洞。

优选的,该方法还包括:在所述利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞之后,生成检测报告;所述检测报告包括:

软件项目中第三方依赖组件列表、第三方依赖组件漏洞列表,以及第三方依赖组件中对软件项目产生实际影响的组件和漏洞列表。

第二方面,本发明提供了一种基于补丁的漏洞检测装置,该装置包括:

第三方依赖组件获取模块,用于基于待检测软件项目获取其第三方依赖组件;

漏洞特征获取模块,用于获取第三方依赖组件的漏洞和所述漏洞对应的补丁,并解析所述补丁获取漏洞特征;

编译构建模块,用于对所述待检测软件项目进行编译构建,获得其调用图;

漏洞查找模块,用于利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞。

优选的,所述漏洞特征获取模块获取第三方依赖组件的漏洞和所述漏洞对应的补丁,并解析所述补丁获取漏洞特征,包括:

基于所述第三方依赖组件的名称和版本获取其漏洞,基于所述漏洞获取所述漏洞对应的补丁;

抽取每个所述补丁的待修补的文件名称、需要修改的文件位置以及修补前的漏洞代码,得到所述漏洞特征;

优选的,所述漏洞查找模块利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞,包括:

利用所述调用图遍历所述漏洞,并根据所述漏洞特征对所有漏洞进行特征比对,查找所述漏洞代码被所述调用图调用的漏洞,即为对软件项目产生实际影响的第三方依赖组件的漏洞。

优选的,该装置还包括:检测报告生成模块,用于在漏洞查找模块利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞之后,生成检测报告;所述检测报告包括:

软件项目中第三方依赖组件列表、第三方依赖组件漏洞列表,以及第三方依赖组件中对软件项目产生实际影响的组件和漏洞列表。

第三方面,本发明提供了一种计算机可读存储介质,其存储用于基于补丁的漏洞检测的计算机程序,其中,所述计算机程序使得计算机执行如下步骤:

基于待检测软件项目获取其第三方依赖组件;

获取所述第三方依赖组件的漏洞和所述漏洞对应的补丁,解析所述补丁获取漏洞特征;

对所述待检测软件项目进行编译构建,获得其调用图;

利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞。

第四方面,本发明提供了一种电子设备,包括:

一个或多个处理器;

存储器;以及

一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述程序包括用于执行如下步骤:

基于待检测软件项目获取其第三方依赖组件;

获取所述第三方依赖组件的漏洞和所述漏洞对应的补丁,解析所述补丁获取漏洞特征;

对所述待检测软件项目进行编译构建,获得其调用图;

利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞。

(三)有益效果

本发明提供了一种基于补丁的漏洞检测方法、装置、存储介质和电子设备。与现有技术相比,具备以下有益效果:

本发明提出的一种基于补丁的漏洞检测方法,基于待检测软件项目获取其第三方依赖组件,并对第三方依赖组件的漏洞以及漏洞的补丁进行解析,获取漏洞特征,然后对待检测软件项目进行编译构建和利用调用图对漏洞进行遍历性检测,得到对待检测软件项目中产生实际影响的第三方依赖组件漏洞。本发明为软件项目第三方依赖组件漏洞的检测建立了自动化的检测体系,该体系能够自动化检测第三方依赖组件的漏洞是否对软件项目产生真实影响,然后精准定位漏洞,有效避免了对第三方依赖组件进行盲目升级带来的项目执行效率下降或版本兼容性风险,进而提升了软件的安全性和可用性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例一种基于补丁的漏洞检测方法的总体流程图;

图2为本发明实施例中获取漏洞特征的流程图;

图3为本发明实施例中查找产生实际影响的第三方依赖组件漏洞的流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请实施例通过提供一种基于补丁的漏洞检测方法、装置、存储介质和电子设备,解决了现有技术中无法基于补丁自动化进行第三方依赖组件漏洞检测的问题,实现了提升软件安全性和可用性的目的。

本申请实施例中的技术方案为解决上述技术问题,总体思路如下:

由于补丁中保存了漏洞的出现的文件、函数和代码信息,且补丁文件中的漏洞修复代码信息为第三方依赖组件漏洞检测提供了数据支持,所以从补丁中可以获取漏洞的特征,然后再结合软件项目的依赖关系和调用关系,可以确定软件项目是否受此漏洞的影响。由此可以建立一种基于补丁的第三方依赖组件漏洞检测方法,用于有效检测并发现第三方依赖组件中对软件项目的产生实际影响的漏洞,从而降低软件安全性和兼容性风险,进而提升软件的可用性。

为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。

补丁(Patch)是文件之间的一系列差异,这些差异能够通过diff命令应用于源代码树,用来修复源代码的漏洞,进而修复产品的缺陷。补丁中保存了漏洞出现的文件、函数和代码信息,特别是补丁文件中的漏洞修复代码信息为第三方依赖组件漏洞检测提供了数据支持。

实施例1:

第一方面,本发明实施例首先提出了一种基于补丁的漏洞检测方法,参见图1,该方法包括:

S1、基于待检测软件项目获取其第三方依赖组件;

S2、获取上述第三方依赖组件的漏洞和上述漏洞对应的补丁,解析上述补丁获取漏洞特征;

S3、对上述待检测软件项目进行编译构建,获得其调用图;

S4、利用上述调用图遍历上述漏洞,并根据上述漏洞特征查找对上述待检测软件项目产生实际影响的第三方依赖组件漏洞。

可见,本发明提出的一种基于补丁的漏洞检测方法,基于待检测软件项目获取其第三方依赖组件,并对第三方依赖组件的漏洞以及漏洞的补丁进行解析,获取漏洞特征,然后对待检测软件项目进行编译构建和利用调用图对漏洞进行遍历性检测,得到对待检测软件项目中产生实际影响的第三方依赖组件漏洞。本发明为软件项目第三方依赖组件漏洞的检测建立了自动化的检测体系,该体系能够自动化检测第三方依赖组件的漏洞是否对软件项目产生真实影响,然后精准定位漏洞,有效避免了对第三方依赖组件进行盲目升级带来的项目执行效率下降或版本兼容性风险,进而提升了软件的安全性和可用性。

在本发明的实施例中,获取第三方依赖组件的漏洞和漏洞对应的补丁,解析补丁获取漏洞特征,包括:基于所述第三方依赖组件的名称和版本获取其漏洞,基于所述漏洞获取所述漏洞对应的补丁;抽取每个所述补丁的待修补的文件名称、需要修改的文件位置以及修补前的漏洞代码,得到所述漏洞特征。

实际中,为了更加全面、精准定位对待检测软件项目产生实际影响的第三方依赖组件漏洞,一种较佳的实现方式是,利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞,包括:

利用所述调用图遍历所述漏洞,并根据所述漏洞特征对所有漏洞进行特征比对,查找所述漏洞代码被所述调用图调用的漏洞,即为对软件项目产生实际影响的第三方依赖组件的漏洞。

另外,为了方便开发人员参考,一种较佳的处理方式是,该方法还包括:在所述利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞之后,生成检测报告;所述检测报告包括:软件项目中第三方依赖组件列表、第三方依赖组件漏洞列表,以及第三方依赖组件中对软件项目产生实际影响的组件和漏洞列表。

下面结合对每个步骤的阐述,来详细说明本发明一个实施例的实现过程:

图1为本发明一种基于补丁的漏洞检测方法的总体流程图,参见图1,具体过程包括:

S1、基于待检测软件项目获取其第三方依赖组件。

针对待检测的软件项目,分析其项目类型(项目类型根据编程语言不同而不同,如Java代码编写的Java项目、Python代码编写的Python项目,C、C++代码编写的项目等),然后针对不同的项目类型,选择不同方法(不同的项目编程语言和不同的构建管理工具,对应的查找方式也不同)对软件项目的模型文件、物料清单、规范文件等进行分析,最终获得第三方依赖组件名称和版本。以Java项目为例,若其构建管理工具为maven,则读取pom.xml即可得到其引入的第三方依赖组件的名称和版本。

S2、获取上述第三方依赖组件的漏洞和上述漏洞对应的补丁,解析上述补丁获取漏洞特征。

参见图2,针对S1中得到的每个第三方依赖组件,根据其名称和版本,在美国国家漏洞数据库(NVD)中查找其漏洞,然后针对每个漏洞,在美国国家漏洞数据库(NVD)以及第三方依赖组件厂商安全公告中查找各个漏洞对应的补丁并保存,再对每个漏洞补丁进行处理:抽取待修补的文件名称、需要修改的文件位置,然后保留补丁中删除的代码行和不需要修改的代码行,得到修补前的漏洞代码,最终获取第三方依赖组件的漏洞特征信息进行保存。漏洞的特征信息包括待修补的文件名称、需要修改的文件位置、修补前的漏洞代码,漏洞编号,以及漏洞所属的第三方依赖组件软件库的名称等。

S3、对上述待检测软件项目进行编译构建,获得其调用图。

对待检测的软件项目进行编译构建(代码中引入的那些与实际执行无关的第三方依赖组件软件库不会被编译),获得待检测的软件项目的调用图(即控制流图),这时第三方依赖组件软件库中的代码只有实际会被执行的那部分代码会出现该在调用图。

S4、利用上述调用图遍历上述漏洞,并根据上述漏洞特征查找对上述待检测软件项目产生实际影响的第三方依赖组件漏洞。

这个过程实际上就是一个查找比对的过程。参见图3,具体查找比对过程为:对所有漏洞进行遍历,即对每个漏洞都进行分析。判断待检测软件项目的调用图是否调用了漏洞的漏洞代码,若调用了某个漏洞的漏洞代码,则说明此第三方依赖组件软件库在该软件项目工程中确实被引入了,而且此漏洞代码确实被调用了,由此可以判断这个漏洞实际上影响了该软件项目工程,该漏洞即为对软件项目产生实际影响的第三方依赖组件的漏洞。

实际运用中,可根据实际需要选择生成最终的漏洞检测报告供软件开发人员参考。该检测报告包括:待检测软件项目中的第三方依赖组件列表、第三方依赖组件漏洞列表,以及第三方依赖组件漏洞中对软件项目产生实际影响的组件和漏洞列表。

实施例2:

第二方面,本发明提供了一种基于补丁的漏洞检测装置,该装置包括:

第三方依赖组件获取模块,用于基于待检测软件项目获取其第三方依赖组件;

漏洞特征获取模块,用于获取第三方依赖组件的漏洞和所述漏洞对应的补丁,并解析所述补丁获取漏洞特征;

编译构建模块,用于对所述待检测软件项目进行编译构建,获得其调用图;

漏洞查找模块,用于利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞。

优选的,所述漏洞特征获取模块获取第三方依赖组件的漏洞和所述漏洞对应的补丁,并解析所述补丁获取漏洞特征,包括:

基于所述第三方依赖组件的名称和版本获取其漏洞,基于所述漏洞获取所述漏洞对应的补丁;

抽取每个所述补丁的待修补的文件名称、需要修改的文件位置以及修补前的漏洞代码,得到所述漏洞特征;

优选的,所述漏洞查找模块利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞,包括:

利用所述调用图遍历所述漏洞,并根据所述漏洞特征对所有漏洞进行特征比对,查找所述漏洞代码被所述调用图调用的漏洞,即为对软件项目产生实际影响的第三方依赖组件的漏洞。

优选的,该装置还包括:检测报告生成模块,用于在漏洞查找模块利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞之后,生成检测报告;所述检测报告包括:

软件项目中第三方依赖组件列表、第三方依赖组件漏洞列表,以及第三方依赖组件中对软件项目产生实际影响的组件和漏洞列表。

可理解的是,本发明实施例提供的一种基于补丁的漏洞检测装置与上述一种基于补丁的漏洞检测方法相对应,其有关内容的解释、举例、有益效果等部分可以参考一种基于补丁的漏洞检测方法中的相应内容,此处不再赘述。

实施例3:

第三方面,本发明提供了一种计算机可读存储介质,其存储用于基于补丁的漏洞检测的计算机程序,其中,所述计算机程序使得计算机执行以下步骤:

基于待检测软件项目获取其第三方依赖组件;

获取所述第三方依赖组件的漏洞和所述漏洞对应的补丁,解析所述补丁获取漏洞特征;

对所述待检测软件项目进行编译构建,获得其调用图;

利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞。

可选的,获取所述第三方依赖组件的漏洞和所述漏洞对应的补丁,解析所述补丁获取漏洞特征,包括:

基于所述第三方依赖组件的名称和版本获取其漏洞,基于所述漏洞获取所述漏洞对应的补丁;

抽取每个所述补丁的待修补的文件名称、需要修改的文件位置以及修补前的漏洞代码,得到所述漏洞特征。

可选的,利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞,包括:

利用所述调用图遍历所述漏洞,并根据所述漏洞特征对所有漏洞进行特征比对,查找所述漏洞代码被所述调用图调用的漏洞,即为对软件项目产生实际影响的第三方依赖组件的漏洞。

可选的,该方法还包括:在所述利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞之后,生成检测报告;所述检测报告包括:

软件项目中第三方依赖组件列表、第三方依赖组件漏洞列表,以及第三方依赖组件中对软件项目产生实际影响的组件和漏洞列表。

实施例4:

第四方面,本发明提供了一种电子设备,包括:

一个或多个处理器;

存储器;以及

一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述程序包括用于执行如下步骤:

基于待检测软件项目获取其第三方依赖组件;

获取所述第三方依赖组件的漏洞和所述漏洞对应的补丁,解析所述补丁获取漏洞特征;

对所述待检测软件项目进行编译构建,获得其调用图;

利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞。

可选的,获取所述第三方依赖组件的漏洞和所述漏洞对应的补丁,解析所述补丁获取漏洞特征,包括:

基于所述第三方依赖组件的名称和版本获取其漏洞,基于所述漏洞获取所述漏洞对应的补丁;

抽取每个所述补丁的待修补的文件名称、需要修改的文件位置以及修补前的漏洞代码,得到所述漏洞特征。

可选的,利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞,包括:

利用所述调用图遍历所述漏洞,并根据所述漏洞特征对所有漏洞进行特征比对,查找所述漏洞代码被所述调用图调用的漏洞,即为对软件项目产生实际影响的第三方依赖组件的漏洞。

可选的,该方法还包括:在所述利用所述调用图遍历所述漏洞,并根据所述漏洞特征查找对所述待检测软件项目产生实际影响的第三方依赖组件漏洞之后,生成检测报告;所述检测报告包括:

软件项目中第三方依赖组件列表、第三方依赖组件漏洞列表,以及第三方依赖组件中对软件项目产生实际影响的组件和漏洞列表。

综上所述,与现有技术相比,具备以下有益效果:

本发明提出的一种基于补丁的漏洞检测方法,基于待检测软件项目获取其第三方依赖组件,并对第三方依赖组件的漏洞以及漏洞的补丁进行解析,获取漏洞特征,然后对待检测软件项目进行编译构建和利用调用图对漏洞进行遍历性检测,得到对待检测软件项目中产生实际影响的第三方依赖组件漏洞。本发明为软件项目第三方依赖组件漏洞的检测建立了自动化的检测体系,该体系能够自动化检测第三方依赖组件的漏洞是否对软件项目产生真实影响,然后精准定位漏洞,有效避免了对第三方依赖组件进行盲目升级带来的项目执行效率下降或版本兼容性风险,进而提升了软件的安全性和可用性。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号