检测软件中集成或定制的开源项目漏洞的方法和装置与流程

文档序号:12272078阅读:204来源:国知局
检测软件中集成或定制的开源项目漏洞的方法和装置与流程

本发明涉及软件漏洞检测技术领域,尤其涉及一种检测软件中集成或定制的开源项目漏洞的方法和装置。



背景技术:

开源项目是被非盈利软件组织注册为认证标记,并对其进行了正式的定义,用于描述那些源码可以被公众使用的软件,开源项目的使用、修改和发行不受许可证的限制。当前,随着互联网上开源项目蓬勃发展,优秀的开源软已经被其他软件项目广泛集成或定制开发成组件,例如linux、openssl、webkit等。同时,一款软件中集成或定制的开源项目数量大大增加,如谷歌chrome浏览器集成、定制的开源软件已超过150个。但是,优秀开源项目由于代码更新、漏洞修复等非常频繁,版本更新及迭代速度较快,版本更新及迭代过程中往往伴随着开源项目的模块、接口、策略等的变化,由此很容易产生开源项目新老版本的兼容性问题,导致通过开源项目集成或定制的组件不能及时更新,忽视了大量安全问题的修补。

目前,这种现象在全球范围内普遍存在,即使是非常优秀的商业产品或开源项目。例如:使用最广泛的移动操作系统安卓(Android)的内核是linux,其在修复linux内核漏洞上表现出明显的滞后性,如Android在2016年3月才修补了linux内核一年前修补的漏洞CVE-2015-1805,该漏洞在Android上被修补之前已经在互联网上出现了利用该漏洞的攻击代码,导致谷歌公司不得不发布紧急补丁修复该漏洞。另外,由集成openssl、定制webkit等开源项目却没有及时更新安全补丁所带来的问题也数不胜数。因此,及时检测软件中集成或定制的开源项目是否存在漏洞具有重要意义。

目前对软件中集成或定制的开源项目的漏洞检测方案较少,且大都是通过组件版本比对的方法检测漏洞,即搜索软件文件中的组件名称及版本号字符串与漏洞影响的版本进行比对来判断漏洞是否存在,而集成或定制开源项目的软件为避免版本更新迭代所造成的不兼容,一般只修补存在漏洞的代码而不更新组件版本,所以,一般检测方法或工具不能准确判断存在漏洞的代码是否被修补,从而不能准确检测漏洞,另外,部分集成或定制的开源项目的软件中可能去掉组件名称及版本号字符串,所以也无法通过组件版本比对的方法检测漏洞。而一般的软件漏洞检测方法,如通过按照策略构造随机测试用例检测软件异常的fuzzing技术,通过人工阅读审计代码的代码审计等方法用于检测软件集成、定制的组件中漏洞,较为缓慢复杂,缺乏效率。可见,当前缺少快捷准确地检测软件中集成或定制的开源项目漏洞的方法。



技术实现要素:

本发明的实施例提供一种检测软件中集成或定制的开源项目漏洞的方法和装置,以现有技术中缺少快捷准确地检测软件中集成或定制的开源项目漏洞的方法的问题。

为达到上述目的,本发明采用如下技术方案:

一种检测软件中集成或定制的开源项目漏洞的方法,包括:

从预先设置的搜集库中获取开源项目的原始漏洞信息;

根据所述开源项目的原始漏洞信息,提取开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息;

根据所述开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息建立漏洞检测数据库;所述漏洞检测数据库包括以预设索引顺序排列的各检测项;

从待检测软件中提取待检测软件的代码和可执行文件;

根据所述漏洞检测数据库中的各检测项,以预设索引顺序依次匹配检测待检测软件的代码和可执行文件,以确定待检测软件集成或定制的开源项目是否存在漏洞。

具体的,从预先设置的搜集库中获取开源项目的原始漏洞信息,包括:

从预先设置的漏洞数据库中获取开源项目的原始漏洞信息,并通过所述原始漏洞信息中的漏洞参考信息的补丁链接获取开源项目的原始漏洞的修补代码;

或者,从预先设置的开源项目主页中获取关键词代码,在所述关键词代码中过滤获取开源项目的原始漏洞的修补代码。

具体的,所述漏洞描述信息包括漏洞编号信息、严重程度信息、漏洞类型信息、漏洞披露时间信息、漏洞详情信息。

具体的,所述漏洞影响的软件或组件版本信息包括漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号。

具体的,所述漏洞检测细节特征信息包括开源项目组件识别模块特征、识别函数特征、漏洞是否修补特征。

具体的,所述以预设索引顺序排列的各检测项包括:漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征。

具体的,根据所述漏洞检测数据库中的各检测项,以预设索引顺序依次匹配检测待检测软件的代码和可执行文件,以确定待检测软件集成或定制的开源项目是否存在漏洞,包括:

依次根据漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征,对待检测软件的代码和可执行文件进行匹配检测;

若在待检测软件的代码和可执行文件中,存在与漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征其中之一的不匹配内容,则确定待检测软件集成或定制的开源项目不存在漏洞;

若待检测软件的代码和可执行文件中未存在与漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征其中之一的不匹配内容,则确定待检测软件集成或定制的开源项目存在漏洞。

一种检测软件中集成或定制的开源项目漏洞的装置,包括:

原始漏洞信息获取单元,用于从预先设置的搜集库中获取开源项目的原始漏洞信息;

信息提取单元,用于根据所述开源项目的原始漏洞信息,提取开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息;

漏洞检测数据库建立单元,用于根据所述开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息建立漏洞检测数据库;所述漏洞检测数据库包括以预设索引顺序排列的各检测项;

待检测软件提取单元,用于从待检测软件中提取待检测软件的代码和可执行文件;

匹配检测单元,用于根据所述漏洞检测数据库中的各检测项,以预设索引顺序依次匹配检测待检测软件的代码和可执行文件,以确定待检测软件集成或定制的开源项目是否存在漏洞。

此外,所述原始漏洞信息获取单元,具体用于:

从预先设置的漏洞数据库中获取开源项目的原始漏洞信息,并通过所述原始漏洞信息中的漏洞参考信息的补丁链接获取开源项目的原始漏洞的修补代码;

或者,从预先设置的开源项目主页中获取关键词代码,在所述关键词代码中过滤获取开源项目的原始漏洞的修补代码。

此外,所述信息提取单元提取的漏洞描述信息包括漏洞编号信息、严重程度信息、漏洞类型信息、漏洞披露时间信息、漏洞详情信息。

具体的,所述信息提取单元提取的漏洞影响的软件或组件版本信息包括漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号。

此外,所述信息提取单元提取的漏洞检测细节特征信息包括开源项目组件识别模块特征、识别函数特征、漏洞是否修补特征。

具体的,所述漏洞检测数据库建立单元中的以预设索引顺序排列的各检测项包括:漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征。

另外,所述匹配检测单元,具体用于:

依次根据漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征,对待检测软件的代码和可执行文件进行匹配检测;

若在待检测软件的代码和可执行文件中,存在与漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征其中之一的不匹配内容,则确定待检测软件集成或定制的开源项目不存在漏洞;

若待检测软件的代码和可执行文件中未存在与漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征其中之一的不匹配内容,则确定待检测软件集成或定制的开源项目存在漏洞。

本发明实施例提供的检测软件中集成或定制的开源项目漏洞的方法和装置,从预先设置的搜集库中获取开源项目的原始漏洞信息;根据所述开源项目的原始漏洞信息,提取开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息;根据所述开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息建立漏洞检测数据库;所述漏洞检测数据库包括以预设索引顺序排列的各检测项;从待检测软件中提取待检测软件的代码和可执行文件;根据所述漏洞检测数据库中的各检测项,以预设索引顺序依次匹配检测待检测软件的代码和可执行文件,以确定待检测软件集成或定制的开源项目是否存在漏洞。可见,本发明实施例可以通过开源项目的源代码补丁提取漏洞检测特征,即各检测项,从而通过这些检测项即可进行匹配检测,自动匹配检测较为快捷准确,避免了当前缺少快捷准确地检测软件中集成或定制的开源项目漏洞的方法。

附图说明

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

图1为本发明实施例提供的一种检测软件中集成或定制的开源项目漏洞的方法的流程图一;

图2为本发明实施例提供的一种检测软件中集成或定制的开源项目漏洞的方法的流程图二;

图3为本发明实施例提供的一种检测软件中集成或定制的开源项目漏洞的装置结构示意图。

具体实施方式

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

如图1所示,本发明实施例提供一种检测软件中集成或定制的开源项目漏洞的方法,包括:

步骤101、从预先设置的搜集库中获取开源项目的原始漏洞信息。

步骤102、根据所述开源项目的原始漏洞信息,提取开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息。

步骤103、根据所述开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息建立漏洞检测数据库。

其中,所述漏洞检测数据库包括以预设索引顺序排列的各检测项。

步骤104、从待检测软件中提取待检测软件的代码和可执行文件。

步骤105、根据所述漏洞检测数据库中的各检测项,以预设索引顺序依次匹配检测待检测软件的代码和可执行文件,以确定待检测软件集成或定制的开源项目是否存在漏洞。

本发明实施例提供的检测软件中集成或定制的开源项目漏洞的方法,从预先设置的搜集库中获取开源项目的原始漏洞信息;根据所述开源项目的原始漏洞信息,提取开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息;根据所述开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息建立漏洞检测数据库;所述漏洞检测数据库包括以预设索引顺序排列的各检测项;从待检测软件中提取待检测软件的代码和可执行文件;根据所述漏洞检测数据库中的各检测项,以预设索引顺序依次匹配检测待检测软件的代码和可执行文件,以确定待检测软件集成或定制的开源项目是否存在漏洞。可见,本发明实施例可以通过开源项目的源代码补丁提取漏洞检测特征,即各检测项,从而通过这些检测项即可进行匹配检测,自动匹配检测较为快捷准确,避免了当前缺少快捷准确地检测软件中集成或定制的开源项目漏洞的方法。

为了使本领域的技术人员更好的了解本发明,下面结合具体的实例,对本发明做进一步的说明,如图2所示,本发明实施例提供一种检测软件中集成或定制的开源项目漏洞的方法,包括:

步骤201、从预先设置的漏洞数据库中获取开源项目的原始漏洞信息,并通过所述原始漏洞信息中的漏洞参考信息的补丁链接获取开源项目的原始漏洞的修补代码;或者,从预先设置的开源项目主页中,搜索开发者提交的代码描述及注释,从而获取关键词代码,在所述关键词代码中过滤获取开源项目的原始漏洞的修补代码。

上述的漏洞数据库可以是CVE(公共漏洞和暴露,Common Vulnerabilities&Exposures)等漏洞数据库。此处的开源项目可以为linux、openssl等流行的开源软件。上述的关键词代码可以为vulnerability,crash,bug,OOB等关键词代码。

步骤202、根据所述开源项目的原始漏洞信息,提取开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息。

此处,所述漏洞描述信息包括漏洞编号信息、严重程度信息、漏洞类型信息、漏洞披露时间信息、漏洞详情信息。

此处,所述漏洞影响的软件或组件版本信息包括漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号,例如组件名称和版本号为linux kernel 3.10.12~3.14.15。

此处,所述漏洞检测细节特征信息包括开源项目组件识别模块特征、识别函数特征、漏洞是否修补特征。

对于上述开源项目组件识别模块特征,首先可以提取开源项目组件模块编译好后的库(如文件xx.so或xx.lib)的特征;然后提取库组件模块中特殊的字符串(如“MD5part of OPENSSL 1.0.2a”)等信息形成开源项目组件识别模块特征。

另外,上述的识别函数特征可通过函数中如下具有特征的指令来形成,例如:操作常量运算指令(如mov eax,0x1234,注:本发明实施例以x86二进制文件反汇编指令举例,其他架构及语言同理)、库函数调用的指令(如call write)、对特征字符串的操作指令(如lea esi,“0123456789”)。

对于上述的漏洞是否修改特征,其主要是通过补丁代码中增加或删除的可区分代码不同的特征序列是否存在,从而可判断漏洞是否已修补。例如几种类型的特征:

判断大小等改变程序执行路径分支的指令序列(如“cmp eax,16;ja xxxx”);

给新变量赋值的指令序列(如“mov eax,0x123;mov[esp],eax”);

字符串操作的相关指令。

步骤203、根据所述开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息建立漏洞检测数据库;所述漏洞检测数据库包括以预设索引顺序排列的各检测项。

具体的,所述以预设索引顺序排列的各检测项包括:漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征。

步骤204、从待检测软件中提取待检测软件的代码和可执行文件。

步骤205、依次根据漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征,对待检测软件的代码和可执行文件进行匹配检测。

在步骤205之后,执行步骤206或者步骤207。

步骤206、若在待检测软件的代码和可执行文件中,存在与漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征其中之一的不匹配内容,则确定待检测软件集成或定制的开源项目不存在漏洞。

步骤207、若待检测软件的代码和可执行文件中未存在与漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征其中之一的不匹配内容,则确定待检测软件集成或定制的开源项目存在漏洞。

本发明实施例提供的检测软件中集成或定制的开源项目漏洞的方法,从预先设置的搜集库中获取开源项目的原始漏洞信息;根据所述开源项目的原始漏洞信息,提取开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息;根据所述开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息建立漏洞检测数据库;所述漏洞检测数据库包括以预设索引顺序排列的各检测项;从待检测软件中提取待检测软件的代码和可执行文件;根据所述漏洞检测数据库中的各检测项,以预设索引顺序依次匹配检测待检测软件的代码和可执行文件,以确定待检测软件集成或定制的开源项目是否存在漏洞。可见,本发明实施例可以通过开源项目的源代码补丁提取漏洞检测特征,即各检测项,从而通过这些检测项即可进行匹配检测,自动匹配检测较为快捷准确,避免了当前缺少快捷准确地检测软件中集成或定制的开源项目漏洞的方法。

如图3所示,本发明实施例提供一种检测软件中集成或定制的开源项目漏洞的装置,包括:

原始漏洞信息获取单元301,可以从预先设置的搜集库中获取开源项目的原始漏洞信息。

信息提取单元302,可以根据所述开源项目的原始漏洞信息,提取开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息。

漏洞检测数据库建立单元303,可以根据所述开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息建立漏洞检测数据库;所述漏洞检测数据库包括以预设索引顺序排列的各检测项。

待检测软件提取单元304,可以从待检测软件中提取待检测软件的代码和可执行文件。

匹配检测单元305,可以根据所述漏洞检测数据库中的各检测项,以预设索引顺序依次匹配检测待检测软件的代码和可执行文件,以确定待检测软件集成或定制的开源项目是否存在漏洞。

此外,所述原始漏洞信息获取单元301,具体可以:

从预先设置的漏洞数据库中获取开源项目的原始漏洞信息,并通过所述原始漏洞信息中的漏洞参考信息的补丁链接获取开源项目的原始漏洞的修补代码。

或者,从预先设置的开源项目主页中获取关键词代码,在所述关键词代码中过滤获取开源项目的原始漏洞的修补代码。

此外,所述信息提取单元302提取的漏洞描述信息包括漏洞编号信息、严重程度信息、漏洞类型信息、漏洞披露时间信息、漏洞详情信息。

具体的,所述信息提取单元302提取的漏洞影响的软件或组件版本信息包括漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号。

此外,所述信息提取单元302提取的漏洞检测细节特征信息包括开源项目组件识别模块特征、识别函数特征、漏洞是否修补特征。

具体的,所述漏洞检测数据库建立单元303中的以预设索引顺序排列的各检测项包括:漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征。

另外,所述匹配检测单元305,具体用于:

依次根据漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征,对待检测软件的代码和可执行文件进行匹配检测。

若在待检测软件的代码和可执行文件中,存在与漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征其中之一的不匹配内容,则确定待检测软件集成或定制的开源项目不存在漏洞。

若待检测软件的代码和可执行文件中未存在与漏洞影响的软件或组件名称、漏洞影响的软件或组件的版本号、开源项目组件识别模块特征、识别函数特征以及漏洞是否修补特征其中之一的不匹配内容,则确定待检测软件集成或定制的开源项目存在漏洞。

值得说明的是,本发明实施例提供的检测软件中集成或定制的开源项目漏洞的装置的具体实现方式可以参见上述图1和图2对应的方法实施例,此处不再赘述。

本发明实施例提供的检测软件中集成或定制的开源项目漏洞的装置,从预先设置的搜集库中获取开源项目的原始漏洞信息;根据所述开源项目的原始漏洞信息,提取开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息;根据所述开源项目的漏洞描述信息、漏洞影响的软件或组件版本信息以及漏洞检测细节特征信息建立漏洞检测数据库;所述漏洞检测数据库包括以预设索引顺序排列的各检测项;从待检测软件中提取待检测软件的代码和可执行文件;根据所述漏洞检测数据库中的各检测项,以预设索引顺序依次匹配检测待检测软件的代码和可执行文件,以确定待检测软件集成或定制的开源项目是否存在漏洞。可见,本发明实施例可以通过开源项目的源代码补丁提取漏洞检测特征,即各检测项,从而通过这些检测项即可进行匹配检测,自动匹配检测较为快捷准确,避免了当前缺少快捷准确地检测软件中集成或定制的开源项目漏洞的方法。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1