首页> 中国专利> 一种Java第三方依赖漏洞检测方法、系统及存储介质

一种Java第三方依赖漏洞检测方法、系统及存储介质

摘要

本发明公开了一种Java第三方依赖漏洞检测方法、系统及存储介质,该检测方法包括以下步骤:获取第三方依赖包的依赖数据,根据依赖数据构建第三方依赖包的依赖关系图;使用Java分析工具对依赖关系图中的第三方依赖包进行分析,得到所有第三方依赖包的完整函数调用关系图;对完整函数调用关系图进行第三方漏洞检测,有效解决了Java项目可能引用存在缺陷的第三方依赖问题。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-08-26

    实质审查的生效 IPC(主分类):G06F21/57 专利申请号:2022106379976 申请日:20220608

    实质审查的生效

  • 2022-08-09

    公开

    发明专利申请公布

说明书

技术领域

本发明具体涉及一种Java第三方依赖漏洞检测方法、系统及存储介质,属于静态分析技术领域。

背景技术

在当前网络时代,软件充斥在社会的各个角落,Java作为使用较为广泛的编程语言之一,被现在的IT工作者用于各类项目的编程。由于Java编程中常使用第三方依赖包,对于项目中引用的其他第三方依赖中存在的漏洞,由于编程者常常完成一个项目后,不会经常关注于第三方依赖包中存在漏洞的问题,因此,可能导致引用了存在漏洞的第三方依赖包,或者是在使用过程中,引用的第三方依赖包被爆出了存在漏洞,而软件开发人员引用的第三方依赖包引用了爆出漏洞的那个第三方依赖包,也将会导致软件出现漏洞。因此,研究一种针对Java第三方依赖包进行漏洞检测的方法,是十分有必要的。

在Java中,项目引用的第三方依赖在pom文件中都会显示出来,但是并不是引用了含有漏洞的第三方依赖就会导致软件产生漏洞,还需要查看软件是否引用了含有漏洞的第三方依赖中的漏洞函数,因此,需要对引用的第三方依赖包进行函数级的分析,对所有调用的函数进行检测,保障引用第三方依赖的软件的安全性。

发明内容

本发明的目的在于克服现有技术中的不足,提供一种Java第三方依赖漏洞检测方法、系统及存储介质,解决了Java项目可能引用存在缺陷的第三方依赖问题。

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

第一方面,本发明提供一种Java第三方依赖漏洞检测方法,包括以下步骤:

获取第三方依赖包的依赖数据,根据依赖数据构建第三方依赖包的依赖关系图;

使用Java分析工具对依赖关系图中的第三方依赖包进行分析,得到所有第三方依赖包的完整函数调用关系图;

对完整函数调用关系图进行第三方漏洞检测。

结合第一方面,进一步的,所述完整函数调用关系图通过以下步骤得到:

S21,使用Java分析工具,分析依赖关系图中首个依赖包节点,得到首个依赖包的单节点函数调用关系图及函数特征属性;其中,函数特征属性包括函数所属的依赖包名称;

S22,对于当前分析的依赖包节点,根据其单节点函数调用关系图中函数节点的函数特征属性中函数所属的依赖包名称,筛选出属于当前分析依赖包的直接依赖的函数节点,将筛选出的函数节点所属的依赖包更新为当前分析的依赖包节点,使用Java分析工具进行分析,生成该依赖包节点的单节点函数调用关系图;

S23,若当前分析的依赖包节点为所分析的第二个依赖包节点,则将新生成的单节点函数调用关系图与首个依赖包函数调用关系图建立连接关系,得到多节点函数调用关系图;否则,将新生成的单节点函数调用关系图与当前最新的多节点函数调用关系图建立连接关系,更新多节点函数调用关系图;

S24,重复步骤S22至S23,直至依赖关系图中的所有第三方依赖包分析结束,将最终的多节点函数调用关系图作为完整函数调用关系图。

进一步的,所述函数特征属性还包括函数名称,函数的返回值,以及函数的参数信息。

进一步的,所述单节点函数调用关系图通过函数节点与首个依赖包函数调用关系图或当前最新的多节点函数调用关系图建立连接关系。

进一步的,所述获取第三方依赖包的依赖数据包括:从Maven Repository中获取第三方依赖包的依赖关系;

方法还包括,将所述第三方依赖包的依赖关系图存储于依赖关系数据库,所述依赖关系数据库中包括第三方依赖包名称、第三方依赖包所属平台、第三方依赖包所属公司、依赖包版本及直接依赖列表。

进一步的,所述第三方漏洞检测包括检测是否存在已知漏洞中包含的依赖包,若存在,进一步检测是否调用了导致漏洞存在的函数,得出第三方依赖的漏洞检测结果。

进一步的,所述方法还包括从CVE、CWE漏洞数据库中获取第三方依赖相关的漏洞,对依赖关系图进行检测。

进一步的,若依赖关系图存在第三方依赖相关的漏洞,检测函数调用关系图是否存在漏洞相关的函数调用关系节点,判定是否存在第三方依赖漏洞。

第二方面,本发明提供一种Java第三方依赖漏洞检测系统,包括处理器及存储介质;所述存储介质用于存储指令;所述处理器用于根据所述指令进行操作以执行根据上述任一项所述方法的步骤。

本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行实现上述任一项所述方法的步骤。

与现有技术相比,本发明所达到的有益效果:

本发明提出静态分析技术,通过对第三方依赖包进行分析,得到完整的函数调用关系图,对其进行漏洞检测,提高项目调用第三方依赖的安全性。

附图说明

图1是本发明实施例提供的一种Java第三方依赖漏洞检测方法的整体流程图;

图2 是本发明实施例中生成第三方依赖包的依赖关系过程示意图;

图3 是本发明中生成函数调用关系过程示意图。

具体实施方式

本发明提供一种Java第三方依赖漏洞检测方法,步骤如下:

获取第三方依赖包的依赖数据,根据依赖数据构建第三方依赖包的依赖关系图;使用Java分析工具对依赖关系图中的第三方依赖包进行分析,得到所有第三方依赖包的完整函数调用关系图;对完整函数调用关系图进行第三方漏洞检测。

其中,所有第三方依赖包的完整函数调用关系图是通过以下步骤得到:

S21,使用Java分析工具,分析依赖关系图中首个依赖包节点,得到首个依赖包的单节点函数调用关系图及函数特征属性;其中,函数特征属性包括函数所属的依赖包名称;

S22,对于当前分析的依赖包节点,根据其单节点函数调用关系图中函数节点的函数特征属性中函数所属的依赖包名称,筛选出属于当前分析依赖包的直接依赖的函数节点,将筛选出的函数节点所属的依赖包更新为当前分析的依赖包节点,使用Java分析工具进行分析,生成该依赖包节点的单节点函数调用关系图;

S23,若当前分析的依赖包节点为所分析的第二个依赖包节点,则将新生成的单节点函数调用关系图与首个依赖包函数调用关系图建立连接关系,得到多节点函数调用关系图;否则,将新生成的单节点函数调用关系图与当前最新的多节点函数调用关系图建立连接关系,更新多节点函数调用关系图;

S24,重复步骤S22至S23,直至依赖关系图中的所有第三方依赖包分析结束,将最终的多节点函数调用关系图作为完整函数调用关系图。

下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。

实施例一

如图1所示,为本发明实施例提供的一种Java第三方依赖漏洞检测方法的整体流程图,具体步骤如下:

查询所需检测的第三方依赖的依赖关系图,需要在MavenRepository中获取第三方依赖的依赖关系,构建对应的依赖关系数据库,存储第三方依赖关系在数据库中。

具体过程如图2所示,在查询需要检测的第三方依赖时,从数据库中找到其所有相关联的第三方依赖,首先,从依赖关系数据库中得到其直接相关依赖,之后对于其第一层相关依赖再依次得到它们的直接相关依赖,重复此项操作,一直到依赖没有直接相关依赖为止,从而得到所需检测的第三方依赖关系图,依赖包节点结构为:

public class Dependencies

{ private String libraryName;//依赖包名称

private String libraryPlatform;//依赖包平台

private String libraryVendor;//依赖包所属公司

private String version;//依赖包版本

private List dependenciesList;//直接依赖包列表}。

通过使用Java分析工具Soot,对第三方依赖包进行静态分析。

首先对需要分析的第三方依赖包使用Soot分析工具,对所有的可达路径进行静态分析,主要分析依赖包中的函数调用关系,得到所有调用函数的Signature(包含函数所处的依赖包名称,函数的返回值,函数名称,函数的参数信息),并生成对应的函数调用关系节点和函数调用关系图,函数调用关系节点结构为:

public class CallGraphNode

{ private int id;//函数调用节点ID

private String methodSignature;//函数签名

private String jarName;//所属依赖包名称

private String methodName;//函数名称

private Dependencies Dependencies;//所属依赖包节点

private CallGraphNode pre;//函数节点前继节点指针

private List next = new ArrayList<>();//当前函数直接调用函数列表}。

根据得到的函数调用关系图,筛选函数调用关系图中函数调用关系节点中所属依赖包存在于分析依赖包的直接依赖包列表的函数调用关系节点,并将这部分函数调用关系节点根据所处依赖包进行分组。

对这些存储的函数调用关系节点中所属依赖包信息属于分析依赖包的直接依赖包列表的依赖包继续进行分析,对于依赖包分析中函数名称与存储起来的函数调用节点的函数名称一致,且所属依赖包名称与分析的依赖包名称相同的节点,通过函数调用关系节点的Pre属性进行连接,并将新生成的这个函数调用关系节点加入至之前存储起来的函数调用关系节点的next列表中,从而建立连接关系。

重复此项操作,直至所有依赖包分析结束,得到完整的函数调用关系图,函数调用关系图生成过程如图3所示。

从CVE、CWE漏洞数据库中获取第三方依赖相关的漏洞,对得到的函数调用关系图进行遍历,首先筛选出函数调用关系节点所属第三方依赖包属于存在漏洞的第三方依赖包的函数调用关系节点,筛选出来以后,再在其中检测导致漏洞产生的第三方依赖中的漏洞函数是否被调用,通过函数调用关系节点的函数名称来对其进行检测,最终得到检测结果。

实施例二

本发明还提供一种Java第三方依赖漏洞检测系统及计算机可读存储介质,检测系统包括处理器及存储介质,其中存储介质用于存储指令,处理器用于根据指令进行操作以执行一种Java第三方依赖漏洞检测方法的步骤。

实施例三

计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现一种Java第三方依赖漏洞检测方法的步骤。

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

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

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

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

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号