3.3软件标识格式
推动软件供应链安全性和软件透明度的一个基本方面是需要有效的方法来识别软件组件,包括拥有足够的信息来唯一地识别每个软件组件。然而,这种需求远不是一个微不足道的问题,因为软件领域由数千个不同的软件供应商、部门和社区组成。美国国家电信和信息管理局(NTIA)在他们的“软件识别挑战和指导”白皮书(www.ntia.gov/files/ntia/publications/ntia_ sbom_software_identity-2021mar30.pdf)中关注了这个问题,该白皮书是通过NTIA的多利益相关者过程产生的。NTIA指出,有必要在短期内功能性地识别软件组件,但也需要在未来使多个现有的识别系统实现合理化。这样做将缓解一些挑战,并帮助行业围绕一个统一的解决方案进行反弹。为了控制围绕软件组件识别的一些混乱,NTIA建议尽可能使用现有的识别系统,但指出这并不总是可能的,这导致一些人不得不使用“尽最大努力”的识别方法。
尽管整个行业的软件生产商和消费者都在广泛推动采用和集成软件材料清单(SBOM),但关于SBOM组件的识别,目前还没有权威的消息来源。软件供应商通常根据其组织和相关活动的需要来定义和识别软件组件。组件识别不是一个静态事件,而且可能会由于分叉和采用项目和组织收购等因素而改变,因此这个问题可能会进一步加剧。
尽管整个行业的软件生产商和消费者都在广泛推动采用和集成软件材料清单(SBOM),但关于SBOM组件的识别,目前还没有权威的消息来源。软件供应商通常根据其组织和相关活动的需要来定义和识别软件组件。组件识别不是一个静态事件,而且可能会由于分叉和采用项目和组织收购等因素而改变,因此这个问题可能会进一步加剧。
综上所述,有一些主要的软件识别标准被行业和NTIA认可,如cpe、软件标识标签(SWIDs)和软件包url(PURLs),我们接下来将快速查看它们。
CPE
通用平台枚举(CPE)是一种结构化的命名方案,用于描述和识别跨企业IT资产的应用程序、操作系统和硬件设备的类别。最初由NIST(www.govinfo.gov/content/pkg/GOVPUB-C13-5d78ccf04a5285bc768fb03ea45 dd6bb/pdf/GOVPUB-C13-5d78ccf04a5285bc768fb03ea45dd6bb.pdf),CPE于2011年8月发布,已经经过了几次迭代,截至本文时最新版本为2.3(https://cpe.mitre.org/specification)。CPE解决了以标准化的方式引用IT产品和平台的需求,同时对于处理和自动化也是机器可读的。NIST维护一个CPE字典(https://csrc.nist.gov/Projects/Security-Content-Automation-Protocol/Specifications/cpe/字典),它作为一个商定的CPE名称列表。它有XML格式,可供公众消费和使用。
最新的CPE规范,2.3,将CPE标准分解成一个堆栈中的一套单独的规范,其中包括以下内容:
■名称
■名称匹配
■字典
■适用性语言
该名称是CPE规范的基础,用于定义为IT产品类分配名称的标准化方法。名称匹配用于定义一种将源CPE名称与目标CPE名称进行一对一比较的方法。它决定了两个实体之间是否存在公共关系。例如,IT资产管理工具可以收集有关系统上安装的软件的信息,并识别已安装或存在的特定软件。该字典定义了创建和管理CPE字典的标准化方法,这些字典是CPE名称及其相关元数据的存储库。堆栈中的最后一个规范是适用性语言,它通过形成组成的CPE名称和引用的复杂逻辑表达式,定义了一种描述IT平台的标准化方式。CPE规范提供的一个例子是一个操作系统,如Windows XP,它运行微软Office 2007,以及操作系统上的一个特定配置,如有源无线网卡。
软件标识标签
软件标识(SWID)标记是由国际标准化组织认可的一种格式,是一种用于描述软件产品(https://csrc.nist.gov/projects/softwareidentification-swid/guidelines)的结构化元数据格式。SWID使用数据元素来识别软件产品,以及在产品生产和分发中发挥角色的产品版本、组织或个人,以及软件产品组成的工件。一些软件资产管理和安全流程将SWID作为活动的一部分,如对软件资产的漏洞评估、丢失的补丁程序或特定的配置管理评估。它还可以用作验证软件完整性的一部分,或作为安全操作活动的一部分。
NIST在其出版物NISTIR 8060“创建可互操作的软件标识(SWID)标签的指南”(https://nvlpubs.nist.gov/nistpubs/ir/2016/NIST.IR.8060.pdf)中详细描述了使用SWID标签。NTIA还在其出版物“现有SBOM格式和标准的调查”(www.ntia.gov/files/ntia/publications/sbom_ formats_survey-version-2021.pdf)中讨论了SWID。SWID标签被各种标准机构使用,如可信计算组(TCG)和互联网工程特别工作组(IETF)。作为一个标准,SWID帮助定义一个软件产品的生命周期。SWID使用了四种类型的标签:
■ 基础
■ 补丁
■ 数据
■ 补充
基础标签用于识别和描述安装在计算设备上的软件产品,而补丁标签表示对已安装的软件产品进行的增量更改。数据标签表示处于预安装状态的可安装软件产品,例如有关安装软件包或软件更新的元数据。补充标签可用于向任何被引用的SWID标签添加信息。软件管理工具可以使用它们来添加元数据,而不改变其他标记格式。要可视化SWID标签的生命周期功能,请参见图3.2,它显示了前面提到的NTIA出版物中的一个示例。
虽然我们在SBOM格式的讨论中加入了SWID,但SWID并没有像其他主要SBOM格式(例如SPDX和CycloneDX)那样收到同等关注,因为它主要侧重于软件识别作为主要用例,并且缺乏其他格式提供的丰富的上下文。但是,需要注意的是,CycloneDX原生支持SWID进行软件识别。
PURL
软件包URL(PURL; https://archive.fosdem.org/2018/schedule/event/purl/attachments/slides/2298/export/events/attachments/purl/slides/2298/meet_purl_FOSDEM_2018_narrow.pdf)可帮助解决与软件包命名约定和协议相关的问题。现代软件开发涉及消耗和生产大量的软件包,如NPM和Ruby gem。然而,在涉及到软件包的识别、位置和供应时,每个包管理器和生态系统都使用不同的命名约定和方法。
为了解决这一挑战,nexB(www.nexb.com)--他们开发ScanCode和VulnerableCode、软件组成分析(SCA)和免费和开源软件(FOSS)安全扫描工具--开发了PURL规范(https://github.com/package-url/purl-spec)。PURL项目的目标是标准化在软件包管理器、工具和更广泛的软件生态系统中识别和定位软件包的方法。PURL由六个数据元素组成:
■方案
■类型
■命名空间/名称
■版本
■限定符
■子路径
有些元素是可选的,而其他元素则是必需的。这最终会形成一个URL字符串,比如pkg:bitbucket/birkenfeld/pygmentsmain@244fd47e07d1014f0aed9c. scheme是pkg常定的URL方案。Type是指示程序包类型的必需元素,如maven或NPM。命名空间,如Maven和Docker,是一个可选的元素。名称是显示程序包名称的必需字段;版本是一个可选的数据元素。限定符提供了额外的上下文,如操作系统、体系结构或分布,而子路径可以识别包中的其他子路径;这两个元素也都是可选的。
PURL最初是在FOSDEM 2018等活动上展示的。自成立以来,它现在被许多人认为是一个事实上的标准,用于包url的项目,如领先的SBOM格式CycloneDX和SPDX,OSS索引,和世界各地的其他组织。
开放全球应用程序安全项目(OWASP)、Linux基金会和Oracle等人的成员也已经开始努力让NVD采用PURL,以改进漏洞管理(https://owasp.org/blog/2022/09/13/sbom-forumrecommends-improvements-to-nvd.html)的自动化和组件识别.一个被称为SBOM论坛的组织,由供应链顾问和博客主 Tom Alrich(http://tomalrichblog.blogspot.com)领导,发表了一篇题为“操作脆弱性管理的组件识别的建议”的论文(https://owasp.org/assets/files/posts/A%20Proposal%20to%20Operationalize%20Component%20 Identification%20for%20Vulnerability%20Management.pdf).在该文中,作者指出了命名问题,即开源产品或组件在不同的包管理器和注册表之间具有不同的名称。为了在漏洞识别和修复方面更有效,组织需要为软件组件制定一个标准化的命名约定。
NVD目前对软件产品使用CPE名称;然而,CPE命名约定带来了各种挑战,阻碍了与软件安全相关的自动化工作。NVD中的cpe主要通过供应商、产品和版本字符串来识别软件和硬件组件。NVD采用PURL有可能缓解与CPE使用相关的一些挑战,并促进改进的软件识别,以及帮助与SBOM采用和自动化相关的工作。
No Comments