天天看点

SCA(软件成分分析)中的知识图谱技术

在开源广泛使用的今天,如何解决开源组件中潜在的风险问题也被众多企业提上了日程。开源风险包括漏洞风险,许可证风险等等,现在一般的解决方法是使用SCA工具。

SCA工具最基础的检测能力就是对开源组件中的依赖关系进行分析。组件的依赖关系之所以如此重要,是由开源本身的性质所决定的。开源对于开发者来说最好的一点就是避免了重复造轮子,但广泛的引用开源组件带来的问题就是依赖关系复杂且混乱。最麻烦的是一旦其中一项依赖出现了问题,单靠人工手段进行检测实在是太费时费力了。

在开源项目中可传递依赖关系引入的安全风险事件比比皆是,大家所熟知的就是 2021 年 12 月份出现的 Log4j2 漏洞(CVE-2021-44228)。 Log4j2 作为一个堪比标准库的基础日志库,受到无数开源 Java 组件直接或间接依赖。此次爆发的 Log4j2 漏洞影响范围广泛且危害严重,在各个场景领域皆应获得重点关注,我国工信部对此事件也给予了高度重视。

那么像log4j2这样的、庞大且复杂的组件关系链,最好的检测和管理办法就是使用知识图谱技术。

知识图谱本质上是结构化的语义知识库,用于以符号形式描述物理世界中的概念及其相互关系。其基本组成单位是“实体-关系-实体”三元组,以及实体及其相关属性-值对,实体间通过关系相互联结,构成网状的知识结构。在知识表示中,知识图谱是一种知识库,其中的数据通过图结构的数据模型或拓扑整合而成。知识图谱通常被用来存储彼此之间具有相互联系的实体。(来源:wiki)

知识图谱技术近几年在工业界应用也越来越广泛。如网络安全、医疗、法律、金融垂直领域都已经有比较好的应用案例。

SCA(软件成分分析)中的知识图谱技术

 知识图谱和依赖关系在表现形式上的适配度很高。知识图谱最重要的功能就是描述点与点之间的联系,最重要作用无非就在于确定了点之后如何寻找它的其他联系。而SCA的依赖分析也是如此,我们首先需要找到有问题的开源组件,随后将它的依赖关系全部报告出来,这样使用者才知道该组件的影响力和范围有多大。

根据NIST建议的 CycloneDX标准中提供的开源组件成分及其关系规范化的格式描述,可以通过关系图描述开源组件的组成成分,如下图所示。

SCA(软件成分分析)中的知识图谱技术

 通过知识图谱可以很好的解决开源软件复杂的依赖关系表示不清晰的问题,让开源软件成分语义化,可视化,变得机器可读可推理。总的来说,使用知识图谱有以下几点优势:

1.知识图谱的图表示方法能构建开源软件的成分深层关系(如依赖、引用、许可等);

2.使用开源软件相关的漏洞知识库和其建立关系,利用知识图谱的分层传播路径搜索算法有效分析开源软件的漏洞影响,以衡量项目漏洞的严重性;

3.应用图算法分析知识图谱(依赖关系图)获得最具风险的关键依赖关系,推荐有效的修复建议。

为了方便理解,我们简单构建一个开源软件知识图谱本体模型:

SCA(软件成分分析)中的知识图谱技术

在安全分析研究方面,开源软件知识图谱可以帮助安全人员对开源软件进行全面的风险评估分析:

1. 基于开源组件属性特征(如源代码、包等文件的 hash 值)来判定组件是否存在被包装冒用或自身被篡改的风险;

2. 利用不同开源组件的依赖关系,结合组件版本信息,可以在高危漏洞应急响应中快速识别受影响的其他组件,通过图的聚合及子图拆分等图优化算法能够高效、持续的输出风险分析结果。

如下图,展示了 [email protected] 组件存在的多个高危漏洞关系,如果在软件中引用了存在高危漏洞的开源组件,无疑会给软件产品带来潜在的威胁,同样,软件供应商的软件产品也会面临同样的安全风险。

SCA(软件成分分析)中的知识图谱技术

 显而易见,相比于传统的文字或表格呈现形式,知识图谱的展示能让使用者更清晰的了解组件的依赖关系,更有效的采取相应的修复措施。

CodeAnt支持知识图谱技术,通过依赖关系图的展示,对组件进行彻底的检测剖析。传统的SCA工具只能做到基本的依赖分析,而CodeAnt基于知识图谱技术,能进一步实现漏洞追踪预警、软件组件隔离和专家修复建议。真正做到深层次的软件成分分析,保障您的软件供应链安全。

参考资料:让代码安全变轻松,简单好用的开发安全平台-CodeAnt

继续阅读