基于知识图谱的第三方库安全风险分析方法及系统
文献发布时间:2023-06-19 11:54:11
技术领域
本发明属于软件安全技术领域,特别涉及一种基于知识图谱的第三方库安全风险分析方法及系统。
背景技术
在软件开发领域内,大规模软件几乎都会使用第三方库依赖来增加功能性。然而,有约超过1/4的第三方库依赖存在安全漏洞隐患,而且95%的漏洞等级在中危(Middle)及以上,16%的漏洞等级为严重等级(Critical),再加上第三方库间也存在调用与被调用的关系,如果间接调用的第三方库中存在漏洞风险,原项目也会有被漏洞风险影响的可能性。如果这些安全漏洞被恶意开发者利用,会造成不可估计的损失。所以对第三方库调用链进行漏洞分析检测和风险分析十分必要。
国内外研究现状下,对第三方库依赖进行分析的方法有许多,如白名单匹配检测、提取函数方法签名、基于聚类方法技术、基于机器学习方法等。但这些技术并没有在安全漏洞的角度进行对第三方库的风险分析。例如,白名单匹配检测方法中仅是对代码中的包名或者第三方库的包名进行比较,一旦应用使用了代码混淆,对第三方库的分析就会不准确,容易误导开发者。国外OWASP基金会提出了一种工具OWASP Dependency Check,它能够连接国家计算机通用漏洞数据库(National Vulnerability Database,NVD)数据库对比项目依赖项列表,筛选出对应的通用漏洞披露(Common Vulnerabilities and Exposures,CVE)。目前的风险分析技术仅仅是对第三方库进行一系列简单检测工作,或者是对单个第三方库进行漏洞分析,没有在调用链上考虑漏洞风险,在第三方库安全漏洞风险存在方面存在分析不全面、漏报、误报的现象。
发明内容
发明目的:本发明的目的在于针对上述现有技术存在的问题,提供一种基于知识图谱的第三方库安全风险分析方法及系统,为第三方库及调用过程中间接依赖时存在的漏洞或者隐藏漏洞进行安全风险分析。
技术方案:实现本发明目的的技术解决方案为:基于知识图谱的第三方库安全风险分析方法,所述方法包括以下步骤:
(1)采集项目依赖配置文件作为初始数据集,并从采集的文件中迭代获取多层第三方库lib信息及api调用关系,生成记录所有的第三方库实体的文件,以及记录第三方库实体间的精确到api级别的调用关系文件;
(2)根据步骤(1)中获取的lib信息在NVD数据库中索引CVE以搜集第三方库的漏洞信息,生成记录所有的漏洞实体的文件;
(3)根据漏洞实体的URLs属性获取含有漏洞的第三方库中受影响的api信息,生成记录第三方库和漏洞关系的文件;
(4)将步骤(1)-(3)生成的记录实体和关系的文件导入知识图谱工具生成知识图谱;
(5)通过构建好的知识图谱实现第三方库安全风险分析,得到CVE漏洞直接和间接影响到的第三方库。
进一步地,所述步骤(1)中使用并行迭代算法思想实现lib信息及api调用关系的数据爬取与整理,其中第三方库实体的属性包括lib的编号、版本号、类别和发布时间,具体步骤包括:
(1.1)从项目依赖配置文件中抽取出第一层第三方库信息lib
(1.2)通过网络爬虫获取lib
(1.3)使用并行迭代的方法,将lib
(1.4)将lib
(1.5)将lib
进一步地,所述步骤(2)中在复制到本地的NVD数据库中索引CVE,具体步骤包括:
(2.1)在本地数据库中添加NVD数据库中的CVE相关信息,将步骤(1)中的生成记录所有的第三方库实体的文件里lib条目与其匹配,筛选出对应的CVE条目;
(2.2)将CVE条目通过爬虫工具在CVE、CVEdetails两个平台进行CVE信息更新,将两个网站中的数据取并集,生成CVE实体条目,其中CVE实体的属性包括CVE的编号、漏洞类型、漏洞描述和URLs,生成记录所有的漏洞实体的CVE.csv文件,并自动更新。
进一步地,所述步骤(3)生成记录第三方库和漏洞关系的文件的具体步骤包括:
(3.1)扫描CVE实体条目中的URLs属性,筛选出patch或者commit,通过URL中信息提取出含有漏洞的第三方库中受影响的api,并保存;
(3.2)建立lib条目与CVE条目之间的关系,关系的属性包括对应受影响的api信息,生成记录第三方库和漏洞关系的lib_CVE.csv文件。
进一步地,所述步骤(5)中通过构建好的知识图谱实现第三方库安全风险分析,具体步骤包括:
(5.1)输入待分析的新的CVE漏洞信息,更新到知识图谱中,并扫描CVE实体条目中的URLs属性,筛选出patch或者commit,通过URL中信息提取出含有漏洞的第三方库中受影响的api,与对应的第三方库建立关系;
(5.2)使用广度优先搜索BFS算法从新的CVE漏洞节点开始遍历图谱,在每一个调用链上的关系上,判断前一个关系的尾部是否与后一个关系的头部相同,若相同,则将两边属性标记成true,否则为false;
(5.3)将每一层上的第三方库存在漏洞的api与调用该第三方库api相比较,判断是否调用了有漏洞影响的第三方库api,如果相同,将标记成true,否则为false;
(5.4)将所有关系属性标记为false的关系隐藏,输出第三方库漏洞风险调用链,分析出新加入的CVE漏洞直、间接影响到的第三方库。
基于相同的发明构思,本发明提供的基于知识图谱的第三方库安全风险分析系统,包括:
信息采集模块,用于采集项目依赖配置文件作为初始数据集;
第一数据爬取及处理模块,用于从采集的文件中迭代获取多层第三方库lib信息及api调用关系,生成记录所有的第三方库实体的文件,以及记录第三方库实体间的精确到api级别的调用关系文件;
第二数据爬取及处理模块,用于根据获取的lib信息在NVD数据库中索引CVE以搜集第三方库的漏洞信息,生成记录所有的漏洞实体的文件;以及根据漏洞实体的URLs属性获取含有漏洞的第三方库中受影响的api信息,生成记录第三方库和漏洞关系的文件;
知识图谱构建模块,用于将数据爬取及处理模块生成的记录实体和关系的文件导入知识图谱工具生成知识图谱;
以及,第三方库安全风险分析模块,用于通过构建好的知识图谱实现第三方库安全风险分析,得到CVE漏洞直接和间接影响到的第三方库。
进一步地,所述第一数据爬取及处理模块,包括:
第三方库信息及调用关系获取单元,用于从项目依赖配置文件中抽取出第一层第三方库信息lib
以及,合并去重单元,用于将lib
进一步地,所述第二数据爬取及处理模块,包括:
CVE信息获取单元,用于在本地数据库中添加NVD数据库中的CVE相关信息,将所有的第三方库实体的文件里lib条目与其匹配,筛选出对应的CVE条目;将CVE条目通过爬虫工具在CVE、CVEdetails两个平台进行CVE信息更新,将两个网站中的数据取并集,生成CVE实体条目,其中CVE实体的属性至少包括CVE的编号、漏洞类型、漏洞描述和URLs,生成记录所有的漏洞实体的CVE.csv文件,并自动更新;
以及,第三方库和漏洞关系获取单元,用于扫描CVE实体条目中的URLs属性,筛选出patch或者commit,通过URL中信息提取出含有漏洞的第三方库中受影响的api,并保存;建立lib条目与CVE条目之间的关系,关系的属性包括对应受影响的api信息,生成记录第三方库和漏洞关系的lib_CVE.csv文件。
进一步地,所述第三方库安全风险分析模块,包括:
新漏洞连接单元,用于输入待分析的新的CVE漏洞信息,更新到知识图谱中,并扫描CVE实体条目中的URLs属性,筛选出patch或者commit,通过URL中信息提取出含有漏洞的第三方库中受影响的api,与对应的第三方库建立关系;
调用链搜索单元,用于使用广度优先搜索BFS算法从新的CVE漏洞节点开始遍历图谱,在每一个调用链上的关系上,判断前一个关系的尾部是否与后一个关系的头部相同,若相同,则将两边属性标记成true,否则为false;将每一层上的第三方库存在漏洞的api与调用该第三方库api相比较,判断是否调用了有漏洞影响的第三方库api,如果相同,将标记成true,否则为false;
以及,风险结果输出单元,用于将所有关系属性标记为false的关系隐藏,输出第三方库漏洞风险调用链,分析出新加入的CVE漏洞直、间接影响到的第三方库。
基于相同的发明构思,本发明提供的基于知识图谱的第三方库安全风险分析系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被加载至处理器时实现所述的基于知识图谱的第三方库安全风险分析方法。
有益效果:本发明与现有技术相比,其显著优点为:1)搜集第三方库依赖以及漏洞相关信息,并用相应算法将数据趋于结构化,便于构建知识图谱,同时将第三方库间api调用情况分层处理,针对每层调用实现了api调用关系、漏洞关系的构建;2)采用并行迭代思想进行第三方库按层进行数据扩展,提高了数据爬取及处理的效率;3)构建了一种存储第三方库多个层级之间的调用信息及各层级之间存在精确到api级别的漏洞信息的知识图谱,并利用该知识图谱进一步对第三方库调用链进行安全漏洞风险分析,使软件开发者全方位考虑到第三方库安全漏洞信息,从而减少安全漏洞对软件开发的隐患。
附图说明
图1为本发明一个实施例中的顶层系统流程图。
图2为本发明一个实施例中并行迭代获取第三方库lib信息及api调用关系流程图。
图3为一个实施例中第三方库索引CVE流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在一个实施例中,如图1所示,基于知识图谱的第三方库安全风险分析方法,所述方法包括以下步骤:
(1)采集若干项目依赖配置文件,例如基于Maven管理的软件的pom.xml文件作为初始数据集,并从采集的文件中迭代获取多层第三方库lib信息及api调用关系,生成记录所有的第三方库实体的lib_all.csv文件,以及记录第三方库实体间的精确到api级别的调用关系的lib_relationship.csv文件;
(2)根据步骤(1)中获取的lib信息在NVD数据库中索引CVE以搜集第三方库的漏洞信息,生成记录所有的漏洞实体的CVE.csv文件;
(3)根据漏洞实体的URLs属性获取含有漏洞的第三方库中受影响的api信息,生成记录第三方库和漏洞关系的lib_CVE.csv文件;
(4)将生成的lib_all.csv、lib_relationship.csv、CVE.csv、lib_CVE.csv文件导入知识图谱工具,例如Neo4j接口生成知识图谱。
(5)通过构建好的知识图谱实现第三方库安全风险分析,得到CVE漏洞直接和间接影响到的第三方库。
进一步地,在其中一个实施例中,如图2所示,步骤(1)中具体使用了并行迭代算法思想实现lib信息及api调用关系的数据爬取与整理,其中第三方库实体的属性包括lib的编号、版本号、类别和发布时间等,本例中实体为lib(groupId,artifactId,version,License,Categories,Time of release,Used times),具体步骤包括:
(1.1)从项目配置文件中抽取出第一层第三方库信息lib
(1.2)通过网络爬虫在Maven repositories中获取lib
(1.3)使用并行迭代的方法,将lib
(1.4)将lib
(1.5)将lib
进一步地,在其中一个实施例中,如图3所示,步骤(2)2中在复制到本地的NVD数据库中索引CVE,具体步骤包括:
(2.1)在本地数据库中添加NVD官方数据库中的CVE相关信息,如通用平台枚举(Common Platform Enumeration,CPE)条目(NVD、CVE数据索引)等字段,将步骤(1)中的lib_all.csv文件里lib条目与其匹配,筛选出对应的CVE条目;
(2.2)将CVE条目通过爬虫工具在CVE、CVEdetails两个网站进行CVE信息更新,将两个网站中的数据取并集,生成CVE实体条目,其中CVE实体的属性包括CVE的编号、漏洞类型、漏洞描述和URLs(补丁网络地址)等,具体为CVE(CVEID,CVSSV2,ConfidentialityImpact,Integrity Impact,Availability Impact,Access Complexity,Authentication,Gained Access,Vulnerability Type(s),CWE,Description,URLs),生成记录所有的漏洞实体的CVE.csv文件,并自动更新。本实施例中的爬虫工具可以采用分离联网爬虫过程、数据解析过程、以及使用多线程并发、异步的方法进行优化,如将spider中的连接mavenrepositories中的URL下载过程模块与对HTML解析模块进行分离式开发,从而实现爬虫效率的提升;使用python中aiohttp模块异步地处理HTTP请求,使用asyncio模块实现异步IO等。
进一步地,在其中一个实施例中,步骤3生成第三方库和漏洞关系的文件,具体步骤包括:
(3.1)扫描CVE实体条目中的URLs属性,筛选出patch或者commit,通过上述URL中信息提取出含有漏洞的第三方库中受影响的api(具体提取patch或者commit中漏洞修复代码中的类名及函数名),并保存;
(3.2)建立lib条目与CVE条目之间的关系,关系的属性为对应受影响的api信息,生成记录第三方库和漏洞关系的lib_CVE.csv文件。
进一步地,在其中一个实施例中,步骤5中通过构建好的知识图谱实现第三方库安全风险分析,具体步骤包括:
(5.1)输入待分析的新的CVE漏洞信息CVE(CVEID,CVSSV2,ConfidentialityImpact,Integrity Impact,Availability Impact,Access Complexity,Authentication,Gained Access,Vulnerability Type(s),CWE,Description,URLs),更新到知识图谱中,并扫描CVE实体条目中的URLs属性,筛选出patch或者commit,通过上述URL中信息提取出含有漏洞的第三方库中受影响的api,与对应的第三方库建立关系(libA.classa.function1→CVE);
(5.2)使用广度优先搜索BFS算法从新的CVE漏洞节点开始遍历图谱,在每一个调用链上的关系(libA.classa.function1→libB.classb.function2)上,判断前一个关系的尾部是否与后一个关系的头部相同,若相同,则将两边属性Tag成true,否则为false;
(5.3)将每一层上的第三方库存在漏洞的api与调用该第三方库api相比较,判断是否调用了有漏洞影响的第三方库api,如果相同,将Tag成true,否则为false;
(5.4)将所有关系属性Tag为false的关系隐藏,输出第三方库漏洞风险调用链,分析出新加入的CVE漏洞直、间接影响到的第三方库。
在一个实施例中,提供了一种基于知识图谱的第三方库安全风险分析系统,该系统包括:
信息采集模块,用于采集项目依赖配置文件作为初始数据集;
第一数据爬取及处理模块,用于从采集的文件中迭代获取多层第三方库lib信息及api调用关系,生成记录所有的第三方库实体的文件,以及记录第三方库实体间的精确到api级别的调用关系文件;
第二数据爬取及处理模块,用于根据获取的lib信息在NVD数据库中索引CVE以搜集第三方库的漏洞信息,生成记录所有的漏洞实体的文件;以及根据漏洞实体的URLs属性获取含有漏洞的第三方库中受影响的api信息,生成记录第三方库和漏洞关系的文件;
知识图谱构建模块,用于将数据爬取及处理模块生成的记录实体和关系的文件导入知识图谱工具生成知识图谱;
以及,第三方库安全风险分析模块,用于通过构建好的知识图谱实现第三方库安全风险分析,得到CVE漏洞直接和间接影响到的第三方库。
进一步地,在其中一个实施例中,第一数据爬取及处理模块包括:
第三方库信息及调用关系获取单元,用于从项目依赖配置文件中抽取出第一层第三方库信息lib
以及,合并去重单元,用于将lib
进一步地,在其中一个实施例中,第二数据爬取及处理模块包括:
CVE信息获取单元,用于在本地数据库中添加NVD数据库中的CVE相关信息,将所有的第三方库实体的文件里lib条目与其匹配,筛选出对应的CVE条目;将CVE条目通过爬虫工具在CVE、CVEdetails两个平台进行CVE信息更新,将两个网站中的数据取并集,生成CVE实体条目,其中CVE实体的属性至少包括CVE的编号、漏洞类型、漏洞描述和URLs,生成记录所有的漏洞实体的CVE.csv文件,并自动更新;
以及,第三方库和漏洞关系获取单元,用于扫描CVE实体条目中的URLs属性,筛选出patch或者commit,通过URL中信息提取出含有漏洞的第三方库中受影响的api,并保存;建立lib条目与CVE条目之间的关系,关系的属性包括对应受影响的api信息,生成记录第三方库和漏洞关系的lib_CVE.csv文件。
进一步地,在其中一个实施例中,第三方库安全风险分析模块包括:
新漏洞连接单元,用于输入待分析的新的CVE漏洞信息,更新到知识图谱中,并扫描CVE实体条目中的URLs属性,筛选出patch或者commit,通过URL中信息提取出含有漏洞的第三方库中受影响的api,与对应的第三方库建立关系;
调用链搜索单元,用于使用广度优先搜索BFS算法从新的CVE漏洞节点开始遍历图谱,在每一个调用链上的关系上,判断前一个关系的尾部是否与后一个关系的头部相同,若相同,则将两边属性标记成true,否则为false;将每一层上的第三方库存在漏洞的api与调用该第三方库api相比较,判断是否调用了有漏洞影响的第三方库api,如果相同,将标记成true,否则为false;
以及,风险结果输出单元,用于将所有关系属性标记为false的关系隐藏,输出第三方库漏洞风险调用链,分析出新加入的CVE漏洞直、间接影响到的第三方库。
关于基于知识图谱的第三方库安全风险分析系统的具体限定可以参见上文中对于基于知识图谱的第三方库安全风险分析方法的限定,在此不再赘述。上述基于知识图谱的第三方库安全风险分析方法中的各个模块/单元可全部或部分通过软件、硬件及其组合来实现。上述各模块/单元可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器执行以上各个模块对应的操作。
在一个实施例中,提供了一种基于知识图谱的第三方库安全风险分析系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被加载至处理器时实现上述基于知识图谱的第三方库安全风险分析方法。
本发明构建了一种存储第三方库多个层级之间的调用信息及各层级之间存在精确到api级别的漏洞信息的知识图谱,并利用该知识图谱进一步对第三方库调用链进行安全漏洞风险分析,使软件开发者全方位考虑到第三方库安全漏洞信息,从而减少安全漏洞对软件开发的隐患。
- 基于知识图谱的第三方库安全风险分析方法及系统
- 基于知识图谱的民航安全风险分析方法及装置