适用于开源组件的安全与合规治理方法
文献发布时间:2023-06-19 10:58:46
技术领域
本发明涉及一种开源组件的治理处理方法,尤其涉及一种适用于开源组件的安全与合规治理方法。
背景技术
近来,随着开源软件的使用量日益增加,在系统开发中使用开源组件逐渐流行起来。2019年,Github的报告指出,超过360万个开源项目依赖了Top50的开源项目之一,rails/rails、facebook/jest、axios/axios等知名项目被其他上百万个开源项目使用。同时,开源项目平均有180个第三方依赖组件,具体的依赖组件数量从几个到上千个不等。依赖组件有很多优点,例如可以免费获得源代码并且可以修改源代码。事实上,很多OSS(OpenSource Software)组件具有很高的可靠性,高性能性和鲁棒性。另一方面,在系统中复用OSS组件(一般指外部组件)在很多方面也存在一系列的挑战,例如从正确选择组件到将组件成功地集成到系统中,再到测试选择的组件。因此,开源软件虽然为IT行业带来了极大便利,提高了开发效率,降低了成本,但是在在很多方面也存在一系列的挑战,由于开源软件的依赖和引用关系较为复杂,其安全性也往往缺少审查和管理,在《2019年开源软件风险研究报告》中,对48363个项目进行依赖组件安全性进行分析,共获得依赖组件漏洞警告信息83834条。其中,总样本项目的20.79%存在依赖组件漏洞,按开源社区划分,18.03%的Github样本项目包含依赖组件漏洞,33.63%的Gitee样本项目包含依赖组件漏洞,因此开源软件也增加了软件供应链的复杂性和安全风险。
开源漏洞来源广泛且杂乱,开源软件的漏洞信息散布于各个社区、托管平台等,因此官方漏洞库收录有缺失,部分开源漏洞未能被收录于官方漏洞库中。且开源软件维护者没有直接有效途径通知开源软件使用者最新的漏洞情况,漏洞信息难以通知到使用者。另一方面,NVD、CNVD、CNNVD等漏洞库中的开源软件漏洞数量不断增加,还有大量开源软件漏洞未被收录到这些漏洞库中,一些现在没有安全漏洞的开源软件,将来也有可能会爆出漏洞,如果不能及时知晓这些安全漏洞以及安全漏洞是否涉及到自身的软件产品,也是一种很大的风险。
虽然开源软件名义上是“免费的”,但它的使用同样受到许可证的约束,除了信息安全风险,开源软件还可能引入知识产权风险,近年来,世界各地违反开源软件许可证的案件不断发生,通过我国企业在使用开源软件过程中存在着各种不遵守软件许可证的情形,究其原因主要是因为使用者对开源软件的性质认知错误,对许可证部分条款存在误解以及对法律后果存在侥幸心理,因此开源许可证风险也不可忽视。由于开源软件的依赖关系的复杂性,在使用开源软件时,不同开源软件的许可证可能存在合规性和兼容性风险,开源许可证的不合理使用可能会为企业留下了许多法律隐患,从而导致知识产权风险。
有鉴于上述的缺陷,本设计人,积极加以研究创新,以期创设一种适用于开源组件的安全与合规治理方法,使其更具有产业上的利用价值。
发明内容
为解决上述技术问题,本发明的目的是提供一种适用于开源组件的安全与合规治理方法。
本发明的适用于开源组件的安全与合规治理方法,其特征在于包括以下步骤:
步骤一,对知识库进行构建,扫描依赖配置文件,形成组件成分清单,建立组件关系树,
步骤二,查找到有漏洞的依赖组件进行分析,利用分析组件实现安全性及合规性的分析,包含组件的漏洞、组件的许可证分析,
步骤三,提供漏洞的修复方案及组件的动态修复方案;
所述知识库包括,漏洞知识库、依赖组件知识库及关联知识库,知识库的构成过程通过漏洞与依赖信息的采集、数据的清洗与关联、知识库的持续更新模块完成,
所述数据的清洗与关联的过程为,对收集到的漏洞信息先进行清洗去重,再根据统一数据格式存入漏洞库,最后进行关联整合深层去重形成最终的漏洞知识库;
对于爬取到的漏洞信息,先通过去重算法清洗冗余和错误的数据,对于数据流中可能的重复数据,HsDedup首先利用布隆过滤器对数据块的重复性进行预判,接下来根据不同的条件分别对缓存区的热区及冷区及磁盘进行三级重复数据的检测;
清洗后的数据会建立统一、标准的数据格式存入漏洞库,对漏洞的基本信息、依赖信息、文件信息、路径信息、函数信息及具体行数信息进行关联整合,若有多条数据各个字段是完全相同的一类数据,则会对其再次去重,关联整合后的漏洞库则是最终的漏洞知识库;
依赖组件按包管理器分类爬取组件信息,并存入组件知识库;
通过数据清洗脚本对获取到的组件信息和漏洞信息进行处理和分析,并且将基本信息、清洗结果等进行分类存储和管理;
清洗关联后的信息统一存储进数据库,数据库包含项目信息库、漏洞库和依赖组件库,将漏洞知识库与组件知识库进行关联整合,形成关联知识库。
进一步地,上述的适用于开源组件的安全与合规治理方法,其中,所述漏洞与依赖信息的采集过程为,通过预设渠道获取漏洞和依赖组件的信息,对获取到的信息进行清洗和关联,并保持对知识库的持续更新。
更进一步地,上述的适用于开源组件的安全与合规治理方法,其中,所述步骤一中,通过采集模块通过分布式爬虫、反爬虫绕过及更新策略进行漏洞特征的采集,所述漏洞特征包括CVE编号、标题、类型、解决方案、组件的名称、版本、许可证信息中的一种或是多种。
更进一步地,上述的适用于开源组件的安全与合规治理方法,其中,所述采用人工导入模块进行配合,用于特定的组件信息、漏洞基本信息数据的导入。
更进一步地,上述的适用于开源组件的安全与合规治理方法,其中,所述漏洞知识库漏洞和依赖组件知识库的持续更新采用Scrapy爬虫框架基础实施,通过gerapy对爬虫进行管理,通过docker的每日定时任务,持续更新全球开源项目的信息、组件信息以及漏洞信息。
更进一步地,上述的适用于开源组件的安全与合规治理方法,其中,所述步骤二中,
通过预设系统,如本申请人所提供的开源安全与合规治理管理平台关联各平台仓库,所述平台仓库包括Github、Gitee、Gitlab中的一种或是多种;
通过命令行、zip包上传开源项目,或是登录Gitee、Gitlab、Github拉取项开源目;
通过对源代码中的依赖文件内容进行解析,将不同的zip包进行分类,按照不同的包管理器进行解析,分析源代码中所使用的依赖组件情况,形成树状结构并且找出树节点进行节点筛选,筛选出有漏洞的依赖并且进行标记,最后存入到数据库中。
更进一步地,上述的适用于开源组件的安全与合规治理方法,其中,所述分析源代码中所使用的依赖组件情况的过程为,
查找到有漏洞的依赖组件后进行标记,分析漏洞的受影响范围、是否有解决方案等信息,如果有就在系统中解决方案字段进行展示,没有则显示无,将漏洞的信息进行记录,基于知识库进行开源许可证的风险及合规分析。
更进一步地,上述的适用于开源组件的安全与合规治理方法,其中,所述步骤三中,系统从漏洞库的中获取包含漏洞编号、漏洞版本以及漏洞发布时间的漏洞相关信息,组件及许可证的合规性,
根据输入的组件的groupId和artifactId坐标,计算出某个组件当前的无漏洞风险安全版本,
将安全版本进行有小到大的排序,安全版本通过数据库中存储的修复建议中的推荐版本字段得到,如果存在多个推荐版本,则比较原有版本与推荐版本之间的距离,取距离最近的推荐版本作为最终的安全版本,
用户在平台上配置邮箱地址,系统会对项目进行定时扫描,若项目组件的漏洞情况发生变化,系统将漏洞的组件名影响组件以及ID发送至用户设定的通讯系统。
再进一步地,上述的适用于开源组件的安全与合规治理方法,其中,所述步骤三中,系统实时监控项目变化情况,通过与数据库中漏洞的对比,如果重新解析后的项目漏洞数量发生改变,系统会生成漏洞信息报告单并发送至项目所属用户的邮箱,该漏洞信息报告单包含了漏洞名称及其影响组件,以及其对应的cve-id或者漏洞ID,用户能通过点击邮件中的项目列表链接跳转到平台查看项目最新检测情况;如果项目解析结果与数据库信息对比无差别则不会发送邮件给项目所属用户。
借由上述方案,本发明至少具有以下优点:
1、支持对开源依赖组件与开源许可证的支持,能进行自动化识别与安全、合规分析。
2、通过组件间的依赖关系建立组件关系树,从而进行审查和管理。
3、支持检测组件所关联的漏洞情况。
4、能提供动态修复方案,同时支持自动修复。
5、对漏洞进行持续跟踪与监控,能确保产品的安全性。
6、能够适应敏捷开发,可集成ci/cd工具,做到安全左移,提高开发效率,降低开发成本。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
图1是识库构建的流程示意图。
图2是漏洞与依赖信息的采集流程示意图。
图3是漏洞与依赖信息的清洗与关联的流程示意图。
图4是知识库定时更新的实施示意图。
图5是漏洞安全版本修复示意图。
图6是邮箱提醒机制实施示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
如图1至6的适用于开源组件的安全与合规治理方法,其与众不同之处在于包括以下步骤:
步骤一,对知识库进行构建。在此期间,通过采集模块(从多种渠道)通过分布式爬虫、反爬虫绕过及更新策略进行漏洞特征的采集,漏洞特征包括CVE编号、标题、类型、解决方案、组件的名称、版本、许可证信息中的一种或是多种。可采用人工导入模块进行配合,用于特定的组件信息、漏洞基本信息数据的导入,满足在无互联网条件下的数据导入。
步骤二,查找到有漏洞的依赖组件进行分析。通过预设的开源安全与合规治理管理平台系统关联各平台仓库。平台仓库包括Github(面向开源及私有软件项目的托管平台)、Gitee(码云)、Gitlab(项目管理和代码托管平台)中的一种或是多种。
实施期间,通过命令行、zip包上传开源项目,或是登录Gitee、Gitlab、Github拉取项开源目。通过对源代码中的依赖文件内容进行解析,将不同的zip包进行分类,因为不同的包有不一样的解析机制,所以需要将包分类。按照不同的包管理器进行解析,分析源代码中所使用的依赖组件情况,形成树状结构并且找出树节点进行节点筛选,筛选出有漏洞的依赖并且进行标记,最后存入到数据库中。同时,系统需要时调出展示层进行展示。具体来说,分析源代码中所使用的依赖组件情况的过程为,查找到有漏洞的依赖组件后进行标记,方便溯源查找漏洞,以及根据查找到的漏洞进行分析。之后,分析漏洞的受影响范围、是否有解决方案等信息,如果有就在系统中解决方案字段进行展示,没有则显示无,将漏洞的信息进行记录,基于知识库进行开源许可证的风险及合规分析。
步骤三,漏洞进行修复。在此期间,系统从漏洞库的中获取包含漏洞编号、漏洞版本以及漏洞发布时间的漏洞相关信息,组件及许可证的合规性,根据输入的组件的groupId(数据库中的字段名)和artifactId(数据库中的字段名)坐标,计算出某个组件当前的无漏洞风险安全版本。随后,将安全版本进行有小到大的排序,安全版本通过数据库中存储的修复建议中的推荐版本字段得到,如果存在多个推荐版本,则比较原有版本与推荐版本之间的距离,取距离最近的推荐版本作为最终的安全版本。
用户在平台上配置邮箱地址,系统会对项目进行定时扫描,若项目组件的漏洞情况发生变化,系统将漏洞的组件名影响组件以及ID发送至用户设定的通讯系统。这些通讯系统可以包括邮箱、钉钉、Jira等。
系统实时监控项目变化情况,通过与数据库中漏洞的对比,如果重新解析后的项目漏洞数量发生改变,系统会生成漏洞信息报告单并发送至项目所属用户的邮箱,该漏洞信息报告单包含了漏洞名称及其影响组件,以及其对应的cve-id或者漏洞ID,用户能通过点击邮件中的项目列表链接跳转到平台查看项目最新检测情况;如果项目解析结果与数据库信息对比无差别则不会发送邮件给项目所属用户。
进一步来看,本发明采用的知识库包括,漏洞知识库、依赖组件知识库及关联知识库,知识库的构成过程通过漏洞与依赖信息的采集、数据的清洗与关联、知识库的持续更新模块完成。同时,对于数据的清洗与关联的过程为,对收集到的漏洞信息先进行清洗去重,再根据统一数据格式存入漏洞库,最后进行关联整合深层去重形成最终的漏洞知识库。
对于爬取到的漏洞信息,先通过去重算法清洗冗余和错误的数据,本方案采取的是一种高效的重复数据检索方法HsDedup。对于数据流中可能的重复数据,HsDedup首先利用布隆过滤器对数据块的重复性进行预判,接下来根据不同的条件分别对缓存区的热区及冷区及磁盘进行三级重复数据的检测。由此,充分利用重复数据中的局部性,提升重复数据的检测效能。并且,清洗后的数据会建立统一、标准的数据格式存入漏洞库。由于漏洞来源多渠道,需要对其进行关联整合再次深度去重。
为了能够更细粒度的与组件、项目信息进行关联整合,首先需要对漏洞数据进行深加工,即提取关键字段信息,漏洞数据中关键字段的提取是为了从组件信息、依赖库信息、文件信息、路径信息、函数信息及具体行数信息等方面与配置文件中的组件信息、依赖信息、文件信息、路径信息、函数信息及具体行数信息等为进行精细关联处理做准备。对其提取关键字后。
对漏洞的基本信息、依赖信息、文件信息、路径信息、函数信息及具体行数信息进行关联整合,若有多条数据各个字段是完全相同的一类数据,则会对其再次去重,关联整合后的漏洞库则是最终的漏洞知识库。
结合实际实施来可能,依赖组件按包管理器分类爬取组件信息,并存入组件知识库,其由组件基本信息库、组件版本库、组件依赖库构成。通过数据清洗脚本对获取到的组件信息和漏洞信息进行处理和分析,并且将基本信息、清洗结果等进行分类存储和管理。清洗关联后的信息统一存储进数据库。数据库包含项目信息库、漏洞库和依赖组件库,将漏洞知识库与组件知识库进行关联整合,形成关联知识库。在本方案中,MongoDB数据库主要作为结果数据库用于存储未处理的漏洞信息,项目信息库、漏洞库和依赖组件库则存于MySQL。
结合本发明一较佳的实施方式来看,漏洞与依赖信息的采集过程为,通过预设渠道获取漏洞和依赖组件的信息,对获取到的信息进行清洗和关联,并保持对知识库的持续更新。由此,可以为其他模块提供数据支撑。
并且,漏洞知识库漏洞和依赖组件知识库的持续更新采用Scrapy爬虫框架基础实施,进行二次开发和优化。之后,通过gerapy(分布式爬虫管理框架)对爬虫进行管理,通过docker(开源的应用容器引擎)的每日定时任务,持续更新全球上百万的开源项目的信息、组件信息以及漏洞信息。
实际实施期间,支持IDE、Jenkins、命令行等工具集成,并通过邮件、钉钉等方式进行精准推送漏洞信息。用户能通过本地命令行工具直接解析压缩包进行本地扫描。集成IDE插件让开发者在开发阶段直接检测出漏洞信息,能进行快速响应,精确到行,选择最合适的修复方案推荐给用户。集成Jenkins根据用户自定义规则进行自动化策略执行,及时阻断构建过程。这样,一旦发现新的漏洞或新的解决方案会通过邮件、钉钉实时通知到用户,让用户能够快速处理问题。
通过上述的文字表述并结合附图可以看出,采用本发明后,拥有如下优点:
1、支持对开源依赖组件与开源许可证的支持,能进行自动化识别与安全、合规分析。
2、通过组件间的依赖关系建立组件关系树,从而进行审查和管理。
3、支持检测组件所关联的漏洞情况。
4、能提供动态修复方案,同时支持自动修复。
5、对漏洞进行持续跟踪与监控,能确保产品的安全性。
6、能够适应敏捷开发,可集成ci/cd工具,做到安全左移,提高开发效率,降低开发成本。
此外,本发明所描述的指示方位或位置关系,均为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或构造必须具有特定的方位,或是以特定的方位构造来进行操作,因此不能理解为对本发明的限制。
术语“主”、“副”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“主”、“副”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“若干”的含义是两个或两个以上,除非另有明确具体的限定。
同样,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本发明中,除非另有明确的规定和限定,术语“连接”、“设置”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个组件内部的连通或两个组件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。并且它可以直接在另一个组件上或者间接在该另一个组件上。当一个组件被称为是“连接于”另一个组件,它可以是直接连接到另一个组件或间接连接至该另一个组件上。
需要理解的是,术语“长度”、“宽度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或组件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
以上所述仅是本发明的优选实施方式,并不用于限制本发明,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。
- 适用于开源组件的安全与合规治理方法
- 一种安全域间防火墙安全策略合规基线管理方法及装置