SBOM生态系统中主要有两种格式:软件包数据交换(SPDX)和CycloneDX(CDX)
【代码静态分析、SCA、渗透测试、网络设备安全性评估系统、漏洞挖掘系统、Web 安全性评估系统、勒索软件破解系统。合作请后台私信工程师13381155803(微信同步)】
一、什么是SBOM?
要构建和维护安全的系统,您必须知道您使用的是什么软件。如果你不知道装了什么,那你就是瞎开车。软件物料清单(SBOM)是解决这个问题的方法。它将跟踪使用中的任何和所有工具,库和框架,以便您可以检查它们的安全漏洞。
在最简单的形式中,SBOM只是组织的所有软件组件的列表。它至少应该包括每个工具、库或框架的名称,沿着您当前使用的版本及其许可证。
SBOM是任何重要的软件供应链安全计划的重要组成部分。SBOM以其数字形式允许您自动检查已安装的软件是否存在潜在的安全漏洞以及许可证问题。因此,它们不仅有助于合规,还可以帮助公司避免因其包含的许可信息而引起的诉讼。
二、什么是流行的SBOM格式?
SBOM生态系统中主要有两种格式:软件包数据交换(SPDX)和CycloneDX(CDX)。
2.1软件包数据交换
SPDX最初由Linux基金会创建,用于跟踪软件许可证。多年来,SPDX规范不断更新,以跟踪文件的完整性、安全漏洞和软件组件之间的关系。
2.2 CycloneDX CXD
CDX是OWASP基金会创建的一种SBOM格式,用于跟踪软件漏洞。与SPDX一样,CDX规范多年来一直在更新,包括跟踪其他信息(如许可证)的扩展。CDX和SPDX之间的主要区别是CDX更倾向于基于轻量级扩展的方法,而SPDX更倾向于整体。
2.3软件识别标签
SBOM的比较经常提到软件标识(SWID)标签以及SPDX和CDX。但是,SWID标记不是SBOM格式。它为软件组件提供标识符,类似于图书的ISBN,并且只包含版本、创建者和许可方信息。
三、SPDX和CDX有何不同?
3.1 Format 格式
SPDX和CDX都支持各自风格的JSON和XML。然而,SPDX还支持YAML和纯文本格式,这些格式更易于人类阅读,因为它们在信息周围的标记更少。
SPDX
首先,我们有用于SPDX的XML格式,它的命名空间标记名很难处理。下面的代码为示例应用程序定义了一个SBOM,包括名称、版本、许可证和下载URL:
<?xml version="1.0" encoding="UTF-8"?>
<spdx
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://spdx.org/schema/spdx-2.2.xsd">
<spdx:identification>
<spdx:identifier>Example-SBOM</spdx:identifier>
<spdx:name>Simple Example Application</spdx:name>
<spdx:version>1.0</spdx:version>
</spdx:identification>
<spdx:packageDeclaration>
<spdx:name>com.example.SimpleApp</spdx:name>
<spdx:versionInfo>1.0.0</spdx:versionInfo>
<spdx:downloadLocation
href="https://github.com/example/simpleapp"/>
</spdx:packageDeclaration>
<spdx:licenseConcluded ref="MIT"/>
</spdx:spdx>
与上面的相比,SPDX的纯文本格式要简单得多:
SPDXVersion: SPDX-2.3
DataLicense: CC0-1.0
SPDXID: SPDXRef-DOCUMENT
DocumentName: Example Application SBOM
DocumentNamespace: urn:uuid:12345678-90ab-cdef-1234-abcd123456789
Creator: John Doe
Created: 2024-05-20T00:00:00Z
PackageName: com.example.SimpleApp
SPDXID: SPDXRef-Package-com_example_App
PackageVersion: 1.0.0
PackageSupplier: Example Inc.
PackageDownloadLocation: NOASSERTION
FilesAnalyzed: false
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-Package-com_example_SimpleApp
CDX
CDX的XML格式包含相同的信息,但比SPDX XML格式更轻量级:
<?xml version="1.0" encoding="UTF-8"?>
<bom xmlns="http://cyclonedx.org/schema/bom/1.2">
<bomHeader>
<name>Simple Example Application</name>
<version>1.0</version>
<description>A simple example application.</description>
</bomHeader>
<components>
<component>
<id>com.example.SimpleApp</id>
<version>1.0.0</version>
<type>library</type>
<purl>bom:pkg/com.example/[email protected]</purl>
<licenses>
<license>MIT</license>
</licenses>
</component>
</components>
</bom>
3.2规范范围
Linux基金会的项目严重依赖于开源许可证,如GNU通用公共许可证(GPL),它要求用户发布源代码。因此,创建SPDX格式是为了跟踪软件许可证,并为其他组织提供法律的安全工具。
OWASP基金会主要关注软件开发的安全方面,因此它创建了CDX格式来帮助组织跟踪软件漏洞。白色它的核心功能是覆盖代码/二进制文件,用于Web服务的CDX扩展(即,您在应用程序中使用的任何API)也可用。
多年来,SPDX和CDX已经达成了他们的目标,现在都支持许可证和漏洞。
3.3采用
SPDX比CDX得到更广泛的采用和支持。它也是国际标准化组织(ISO)的标准,为实施者提供详细的规范文件(ISO/IEC 5962:2021)。这种标准化帮助SPDX在企业环境中获得了普及,这些标准受到青睐。
然而,CDX的轻量级方法和OWASP的支持帮助它随着时间的推移获得了更多的认可。注意事项:虽然ISO标准受到大企业的欢迎,但由于其广泛的实施要求,它可能会对较小的组织构成障碍。
3.4 规格方法
SPDX规范遵循一种统一的方法,定义了描述软件包和许可证所需的所有标准字段和标识符。
CDX的规格更加灵活。它们基于一个可扩展的模式,只需要最少的信息,并允许您稍后添加其他功能。
3.5许可证标识
SPDX使用标准化的许可证列表,其中包含通用许可证的短标识符。
CDX提供了更详细的许可证信息,包括自定义许可证名称和文本。
3.6 脆弱性
SPDX没有内置支持将库版本链接到已知漏洞。
CDX支持将组件版本链接到漏洞数据库和标识符(例如,CVE、CVSS等)
3.7工具和生态系统
SPDX是一种更加成熟和流行的格式,因此,它具有更大的工具,库和服务生态系统,用于创建,解析和分析SBOM。每个主要的安全服务提供商都支持SPDX,软件包管理器通常支持SDPX许可证标签。
但同样,CDX生态系统由于OWASP的支持和灵活的扩展方法而迅速发展。
如果您正在寻找用于SPDX或CDX的开源SBOM工具,请联系工程师跟您交流:王工13381155803(微信同步)
3.8治理
SPDX由Linux基金会的SPDX工作组管理。它的团队每月多次在线开会,讨论新版本或文档更新等问题
CycloneDX核心工作组管理OWASP基金会内的CDX。
3.9粒度
这两种格式都支持应用程序级别的定义。
SPDX还允许您为文件中的多个代码段定义不同的许可证。因此,如果您不能为具有自己许可证的代码添加新文件,SPDX仍然可以捕获它。
CDX的API支持甚至允许为API提供的每个交互定义。如果只有一个API端点存在漏洞,这很有帮助,因为您可以避免或解决它,同时仍然使用安全端点。
四、如何支持SBOM?
北大团队提供了一个SBOM生成器,支持SPDX和CDX。它可以从您运行的基础设施中生成SBOM,因此您可以知道正在运行的软件。通过其无代理方法,您无需在云资源上安装任何东西即可从已安装的软件生成SBOM。这使得它成为一个轻量级的工具,您可以随时添加,而不必担心容器或虚拟机的更新。
此外,它支持Go,Java,Python和NodeJS,并可以在S3上自动存储创建的SBOM文件。
五、总结
SPDX和CDX都是有能力的SBOM格式,每种格式都有自己的优点和缺点。虽然SPDX比CDX更重,但其更大的生态系统和ISO的认可使其成为那些喜欢经过验证的方法并拥有使用此类全面规范的流程的企业的良好选择。
CDX可能是SBOM生态系统中较年轻的竞争者,但它的轻量级扩展方法更容易为小团队处理,特别是那些采用SBOM来跟踪漏洞的团队。如果您想在SBOM中包含服务API,CDX使用起来更简单。
总的来说,这两种格式都非常适合管理软件依赖项。
原文始发于微信公众号(StaticCodeAnalysis):标准SBOM手册指南
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论