一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法

2022-06-16 06:01:55 来源:中国专利 TAG:

基于java函数调用序列的高精度第三方库漏洞模块检测方法
技术领域
1.本发明属于程序项目开发技术领域,特别涉及一种基于java函数调用序列的高精度第三方库漏洞模块检测方法。


背景技术:

2.目前,程序开发人员会经常调用第三方库(third party library)中的功能模块来帮助自身程序项目的开发,以节省时间和精力,然而却忽略了第三方库中可能存在的漏洞,使得程序处于不安全的环境中。尽管第三方库会随着发现漏洞而不断进行补丁修复,但由于程序在从第三方库中调用后,在程序项目中并不会实时将其更新到最新版本,并且也不会显示引入库的当前版本号,因此被程序项目引入的第三方库在没有被及时更新的情况下依然是可能存在漏洞的。另外,在多数情况下,漏洞往往仅由一个或几个函数引入到第三方库中。因此,也就可能存在以下情况:虽然程序开发人员使用了具有漏洞的第三方库,但如果没有直接/间接使用到该库的引入漏洞的函数时,即使在第三方库中的漏洞没有被修复的情况下,该程序项目也是不存在该漏洞的。
3.现有识别第三方库的方法主要分有以下几类:
4.1)基于权限和程序接口模块(api)等特性,采用机器学习算法,由训练分类器来区分广告库和非广告库,但该技术是个二分类的解决方案,仅限于识别第三方库是否为广告库,无法识别库的详细信息,因此也就无法识别出其他类型的库,比如:开发辅助工具、ui插件等。
5.2)基于聚类算法来识别第三方库,但该方法可能会发现不完整的第三方库,并且或多或少依赖包名和包结构,然而包名与包结构很容易被现有的混淆器混淆;此外,该方法由于是通过现有的库进行聚类后来分析,所以只能识别出常用的库,无法识别出新出现的库,并且无法精确识别出库的版本信息。因而更加无法确定第三方库的漏洞情况以及含有漏洞的模块情况。
6.3)基于包依赖图(package dependency graph,pdg)来分离第三方库,但它不能识别特定的库,只是将第三方库解耦到宿主应用程序的不同部分;往往是作为其他第三方库识别的步骤之一来进行进一步的识别。
7.4)基于相似度匹配对第三方库进行检测,利用类依赖作为代码特性,将其散列作为唯一标识查找第三方库,使用模糊类匹配方法将其与构建的数据库中的库进行比较。当待测库与数据库中的库相似度超过一定的阈值时,则认为该库与数据库中存储的库相同。然而,此比较过程一般是两两比较,很耗时。虽然目前最高效的方法能识别出程序项目使用的第三方库是否包含漏洞,但是无法细粒度识别出是否使用了含有漏洞的模块。
8.总之,尽管上述方法已实现了对第三方库的识别以及第三方库中是否具有漏洞的检测,但不足之处在于,其对第三方库中是否具有漏洞的检测是粗粒度的,以至于无法判断程序项目是否被第三方库中的漏洞直接污染,即是否真正调用了第三方库中含有漏洞的代码模块。


技术实现要素:

9.为了解决上述问题,本发明的目的在于提供一种基于java函数调用序列的高精度第三方库漏洞模块检测方法。
10.为了达到上述目的,本发明提供的基于java函数调用序列的高精度第三方库漏洞模块检测方法包括按顺序进行的下列步骤:
11.1)在snyk、maven在内的权威漏洞网站上爬取记载的含有cve、cwe漏洞的第三方库的组件数据,所述组件数据包括:漏洞所属的库名称;受漏洞影响的库版本号;库的最新版本号;漏洞的风险等级;分配给漏洞的snyk_id、cve_id、cwe_id和snyk上记载的漏洞补丁参考链接,并从所有第三方库中过滤出java第三方库;
12.2)从上述漏洞补丁参考链接的信息中提取出补丁修复前后版本的差异,由此获得补丁信息;
13.3)针对每个具有特定版本的java第三方库,根据上述补丁信息的前后修改对比,定位出修复相应漏洞所需要更新的函数,并过滤出其中引入的测试代码或者与漏洞修复无关的代码,之后找到引入漏洞的一个或多个函数,即漏洞源函数,表示为v《v1,v2,

vn》,其中n为漏洞源函数的个数;
14.4)利用java字节码分析工具soot对java第三方库程序进行静态分析,生成第三方库代码文件的函数调用图;然后基于上述函数调用图,从某一漏洞源函数vi出发,采用逆向回溯数据流分析方法,对上述漏洞源函数v《v1,v2,

vn》进行遍历,寻找出被漏洞污染的程序接口模块,表示为a《a1,a2,
…an
》。
15.5)以步骤1)获得的分配给漏洞的snyk_id、cve_id、cwe_id、漏洞所属的库名称、库的最新版本号、受漏洞影响的库版本号、漏洞的风险等级以及步骤4)获得的被漏洞污染的程序接口模块作为字段,建立java第三方库与被漏洞污染的程序接口模块之间的映射关系,表示为“lib—a《a1,a2,
…an
》”;然后基于上述映射关系,搭建漏洞模块关系数据库;
16.6)利用第三方库检测工具atvhunter或现有的第三方包识别工具libpecker,识别出程序项目当前使用的java第三方库以及库版本号;
17.7)通过程序接口模块提取,识别出程序项目中导入的当前版本的java第三方库使用到的程序接口模块;
18.8)检索上述步骤5)中搭建的漏洞模块关系数据库,判断当前版本的java第三方库是否存在漏洞;如果有,则基于java第三方库与被漏洞污染的程序接口模块之间的映射关系,继续判断程序项目使用到的java第三方库中的程序接口模块是否被漏洞污染;若程序项目调用的程序接口模块存在漏洞,则证明程序项目确实因为java第三方库而引入了漏洞;若调用的程序接口模块并没有被漏洞污染,则证明,即使当前java第三方库是含有漏洞的,但对于该程序项目来说,依旧是安全的。
19.在步骤2)中,所述漏洞补丁参考链接的信息为github在内的平台上的commit信息。
20.在步骤3)中,所述与漏洞修复无关的代码为增删空行代码。
21.本发明提供的基于java函数调用序列的高精度第三方库漏洞模块检测方法具有如下有益效果:通过程序数据流分析和函数调用图分析技术,可精确、细粒度地识别出java第三方库中的漏洞模块所污染的程序接口模块,后续便可通过查询关键程序接口模块的调
用,快速、细粒度地判断程序项目是否使用了具有漏洞的模块。本方法可以为后续开发人员选择第三方库及相关程序接口模块提供指导,使用更少的资源让开发人员知晓使用的第三方库的程序接口模块有无漏洞情况;避免在开发过程中选择有安全隐患的程序接口模块,有效地提高了开发效率,减少了后续的测试成本。
附图说明
22.图1为本发明提供的基于java函数调用序列的高精度第三方库漏洞模块检测方法中构建漏洞模块数据库流程图。
23.图2为本发明提供的基于java函数调用序列的高精度第三方库漏洞模块检测方法中基于函数调用图寻找不安全程序接口模块流程图。
24.图3为本发明提供的基于java函数调用序列的高精度第三方库漏洞模块检测方法中判断当前java第三方库是否存在漏洞流程图。
具体实施方式
25.下面结合附图和具体实施例对本发明进行详细说明。
26.如图1-图3所示,本发明提供的基于java函数调用序列的高精度第三方库漏洞模块检测方法包括按顺序进行的下列步骤:
27.1)在snyk、maven在内的权威漏洞网站上爬取记载的含有cve、cwe漏洞的第三方库的组件数据,所述组件数据包括:漏洞所属的库名称;受漏洞影响的库版本号;库的最新版本号;漏洞的风险等级;分配给漏洞的snyk_id、cve_id、cwe_id和snyk上记载的漏洞补丁参考链接,并从所有第三方库中过滤出java第三方库;
28.2)从上述漏洞补丁参考链接的信息(如github等平台上的commit信息)中提取出补丁修复前后版本的差异,由此获得补丁信息;
29.3)针对每个具有特定版本的java第三方库,根据上述补丁信息的前后修改对比,定位出修复相应漏洞所需要更新的函数,并过滤出其中引入的测试代码或者与漏洞修复无关的代码(如增删空行等代码),之后找到引入漏洞的一个或多个函数,即漏洞源函数,表示为v《v1,v2,

vn》,其中n为漏洞源函数的个数;
30.4)利用java字节码分析工具soot对java第三方库程序进行静态分析,生成第三方库代码文件的函数调用图;函数调用图是静态分析的关键,是包含整个函数调用的关系图。然后基于上述函数调用图,从某一漏洞源函数vi出发,采用逆向回溯数据流分析方法,对上述漏洞源函数v《v1,v2,

vn》进行遍历,寻找出被漏洞污染的程序接口模块,表示为a《a1,a2,
…an
》。
31.5)以步骤1)获得的分配给漏洞的snyk_id、cve_id、cwe_id、漏洞所属的库名称、库的最新版本号、受漏洞影响的库版本号、漏洞的风险等级以及步骤4)获得的被漏洞污染的程序接口模块作为字段,建立java第三方库与被漏洞污染的程序接口模块之间的映射关系,表示为“lib—a《a1,a2,
…an
》”,以便于后续快速识别程序项目是否调用了含有漏洞的模块;然后基于上述映射关系,搭建漏洞模块关系数据库;
32.6)利用第三方库检测工具atvhunter或现有的第三方包识别工具libpecker,识别出程序项目当前使用的java第三方库以及库版本号;本步骤需要将java第三方库及其版本
信息精确识别出来,以便后续排查特定版本的java第三方库是否存在漏洞,以及确定是否调用了漏洞模块;
33.7)通过程序接口模块提取,识别出程序项目中导入的当前版本的java第三方库使用到的程序接口模块;
34.8)检索上述步骤5)中搭建的漏洞模块关系数据库,判断当前版本的java第三方库是否存在漏洞;如果有,则基于java第三方库与被漏洞污染的程序接口模块之间的映射关系,继续判断程序项目使用到的java第三方库中的程序接口模块是否被漏洞污染;若程序项目调用的程序接口模块存在漏洞,则证明程序项目确实因为java第三方库而引入了漏洞;若调用的程序接口模块并没有被漏洞污染,则证明,即使当前java第三方库是含有漏洞的,但对于该程序项目来说,依旧是安全的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献