了解最新技术文章
如果您要为生命中最重要的人(例如您的家人)建造一座房子,那么舒适和安全将是您的首要任务。除了安全设计的空间和充足的居住空间之外,您还需要确保该结构符合建筑规范并由您信任的材料制成。
这正是物料清单成为软件开发中关键要素的原因。就像记录建筑项目中使用的建筑材料和设计建立结构完整性一样,源代码中包含软件依赖项和开源组件的完整列表可以让您对所使用的应用程序更有信心。
在 Heartbleed Bug 和 Log4j 漏洞等事件带来的安全问题之后,拜登政府于 2021 年 5 月发布了一项关于改善国家网络安全的行政命令。该行政命令的目标是“使[联邦政府]的方法现代化”网络安全。” 并“跟上当今动态且日益复杂的网络威胁环境。”
EO 规定的一项关键进展是在所有政府软件采购中添加强制性软件物料清单 (SBOM)。这要求所有希望向美国联邦政府销售的软件公司必须为销售的每个产品提供 SBOM。
根据网络安全和基础设施安全局的说法,SBOM 是“嵌套清单,即构成软件组件的成分列表”。它列出了软件中存在的所有构建块,并允许信息和安全专业人员:(1)验证所有组件没有已知的漏洞,以及(2)跟踪软件供应链,从而在可能被利用的情况下管理风险。
说白了,SBOM的要求是基于透明度方面的。这可能会引起一些人的注意:所有软件依赖项的完整列表不是同样危险吗?
简短的回答可能是肯定的,但重要的是要注意 SBOM 只是一个参考。它本身并不是为了减少威胁或限制漏洞的暴露(稍后会详细介绍)。从本质上讲,它充当理解和减轻软件产品固有风险的“指南”或手册,例如,列出所有开源库及其并入该产品的各自版本。
这个想法是,更高的透明度可以增强质量和安全性,尤其是在开源软件社区中。通过更多地关注特定的技术或代码,可以更快地发现问题和漏洞并进行修复——有点像像公共分类账一样运行的区块链背后的想法。在这种情况下,好处远远超过记录源代码组件的风险。
开源程序是发布并向公众提供的软件或代码片段,它对于当代软件开发非常有用和基础,以至于您很难找到不使用开源的功能正常的程序或应用程序成分。
可以说,物料清单为网络安全提供的主要好处是提供软件供应链的透明度。软件供应链是应用程序使用的或在其功能中发挥作用的每个组件。你可能会明白这是怎么回事。软件供应链的强度取决于其最薄弱的环节。
以log4j 漏洞利用为例。根据 CISA 的说法,log4j 是一个软件组件,用于记录消费者、企业服务、网站和应用程序中的安全和性能信息。存在一个问题:未经身份验证的远程参与者可以利用此组件并使用Log4Shell控制系统。Log4j 被世界各地的公司和组织广泛使用,以至于当漏洞的消息爆发时,每个人都在争先恐后地删除、否认和修补与该组件相关的所有应用程序。
就本博客而言,我们更感兴趣的是 SBOM 如何帮助减轻与如此广泛的漏洞相关的风险。
这里被低估的好处是时间。如果您为产品维护 SBOM,则可以更轻松地验证新发现的安全缺陷对软件供应链的影响程度。梳理源代码以查看是否受到影响需要花费宝贵的时间,否则这些时间本可以用于修补或删除受影响的组件。
此外,如果您要发布广泛使用的软件(例如商业软件),则维护 SBOM 可以清晰地了解您的项目使用的第三方组件中可能存在哪些风险或问题,从而使您能够在出现问题之前主动纠正这些风险或问题。更大的利用或事件,而不是在损害已经造成时做出反应。
简而言之,SBOM 通过提供可能的程序依赖性的完整列表来帮助安全和 IT 专业人员。该列表可以帮助他们在软件开发生命周期 (SLDC) 的早期识别和维护易受攻击的组件,或者帮助他们在安全漏洞的决定性时刻快速确定在何处进行修复。
在同一行政命令中,提到了零信任模型- 等等,我们不是在谈论创建透明度列表吗?是的,但我们还没有提到我们应该对谁保持透明。SBOM 通常只能由具有适当许可的人员访问。这包括您自己的 DevOps 工程师、网络安全和合规人员,在某些情况下还包括您值得信赖的客户。在这些人的手中,SBOM 是防御恶意行为者的非常强大的工具。
SBOM 的一个鲜为人知的目的是保护公司免受自身侵害。 除了验证谁有权访问敏感信息(例如产品的物料清单)之外,零信任模型还依赖于以下原则:
合适的人
正确的数据
正确的访问类型
并且只有出于正确的理由。
这四个要素严重限制了员工可以访问公司敏感数据的数量,这是用于最大程度地减少IT 系统中的表面积和潜在漏洞的核心策略。默认情况下,任何用户或系统都不会自动受到信任,无论其位置或网络环境如何。“零信任”的运作假设是,所有实体,无论是在网络边界内部还是外部,都应被视为潜在的不可信实体,并接受验证和授权。
遵循零信任安全模型有许多不同的好处。事实上,您最喜欢的一些应用程序和程序可能已经在使用它。以下是您可能已经经历过的一些做法:
多重身份验证 (MFA)
即时 (JIT) 访问
持续监控
有条件访问
设备健康检查
用户和实体行为分析 (UEBA)
SBOM 是更广泛的安全架构中的关键元素。加强防御需要“承认传统网络边界内外都存在威胁”。
规划和准备
那么如何创建 SBOM?首先,您必须确定您需要什么类型的 SBOM。这将取决于您拥有什么计划、其 SLDC 的成熟程度以及计划的总体规模。
下一个考虑因素是 SBOM 的格式。截至本文撰写时,虽然还没有通用的数据交换格式,但存在三种流行的格式:SPDX、CPE和CycloneDX。这些开源选项中的任何一个都足以满足大多数用例,但要找到最适合您的程序的选项。至于实际的文件文档格式,SBOM 可以采用简单的 .csv 文件格式,但也可以采用各种其他文件格式,例如:.xlsx、.spdx、.xml、.json 和 . yaml。
如果您有兴趣创建自己的材料清单以与联邦机构和机构合作,最好参考他们面向公众的论坛,了解他们关于 SBOM 格式的政策。例如,国家电信和信息管理局没有标准格式,但指定了物料清单应包含的最低元素。其他联邦机构可能有不同的要求。
规划 SBOM
创建和管理 SBOM 是一项复杂的任务,尤其是当您有大型程序或使用大量免费开源软件 (FOSS) 和库时。从头开始创建 SBOM 通常是最困难的部分,特别是如果您选择更手动的方法(维护一个 SBOM 绝不是一项微不足道的任务,但并不像第一个账单那么复杂)。以下是创建 SBOM 并使其保持最新的一般清单:
定义项目范围
列出已知的 FOSS 组件和使用的库
建立监控组件更新的协议
设置漏洞警报和安全通知
更新 SBOM 以反映更改
手动创建 SBOM
可以手动创建 SBOM,但软件组合分析 (SCA) 程序可以大大减少这样做所需的资源。信誉良好的 SCA 工具将包括源代码中使用的第三方和专用组件,但仍由开发人员来验证和检查与实际源的一对一对应关系,这就是手动检查和记录源代码组件的地方基本的。例如,SCA 工具可能会将您的源代码标记为依赖于库,而实际上您只是使用单个二进制文件、代码片段甚至引用。只要您遵循最初选择的格式,自由格式的输入就是可以接受的。
使用工具生成 SBOM
如前所述,使用工具创建 SBOM 通常更实用、更快捷。SCA 程序会自动扫描您的源代码并列出所有组件,包括版本号、库信息和类似的有用详细信息,以完成您的 SBOM。
这些工具将分析您的源代码并以您选择的格式返回输出。SCA 工具用来生成 SBOM 的最常用方法之一是上传和扫描方法。这可能涉及通过 API 调用启动流程、使用具有正确权限的帐户验证调用,以及提供一次性身份验证密钥。实际扫描发生在场外,服务提供商提供最终输出文档。
回想一下零信任的概念:与工具(即第三方提供商)合作应该比在本地执行所有操作都要接受更高级别的审查。您不想向您不信任的实体授予管理员权限。
无论您对零信任和 SBOM 创建持何种立场,不可否认的是,该行业正朝着这个方向发展。越来越多的公司和软件开发商(不仅仅是联邦机构)将要求 SBOM 作为其采购订单的一部分。同样,即使是开源社区也会更加信任
创建 SBOM 不仅应该被考虑,因为它是一项联邦要求,相反,还应该考虑生成 SBOM,因为它为加强软件供应链提供了好处。它可以增强您的防御能力,防止漏洞甚至影响您的用户,并且在检测到巨大的安全缺陷时还可以为您提供额外的补救措施。