保护您的代码库:溯源的重要性

您选择的依赖项会直接影响软件的安全性。

译自 Protect Your Codebase: The Importance of Provenance,作者 Tim Miller。

任何看过犯罪剧的人都会听说过证据的保管链。检方必须能够证明谁处理了证据以及他们从收集证据到在审判中出示证据时如何处理证据。如果保管链中存在断裂,法官可以拒绝证据。这是防止恶意起诉的重要保护措施。

虽然这并不能成为引人入胜的电视节目,但软件也有同样的概念:溯源。

溯源的重要性

现代软件不仅仅是您编写的代码;它还包括您从供应商和开源项目中引入的依赖项集合。这个供应链对您软件的安全性有直接影响。就像一条物理链条的强度取决于最薄弱的环节一样,您的软件的安全性也取决于最不安全的依赖项。受Log4Shell影响的应用程序之所以脆弱,不是因为应用程序代码不安全;而是因为它们使用的log4j 库存在漏洞。

当然,Log4Shell 漏洞是偶然发生的,大多数漏洞都是如此。但是,有些漏洞是故意插入的。有人可能会将混淆的恶意代码插入源代码库(如今年早些时候的xz 后门),或者他们可能会添加一个旨在攻击某些用户的依赖项(如 2022 年 3 月添加到 node-ipc 的反俄peacenotwar 依赖项),或者他们可能会破坏软件存储库或更新机制(如 2017 年的NotPetya)。

当您知道谁开发了软件以及它是如何测试、构建和发布的——它的溯源——您就知道您可以信任它多少。

溯源如何被攻击

由于溯源对于保护软件供应链至关重要,因此操纵溯源是成功供应链攻击的关键。

一些攻击发生在溯源生成之前或生成时。例如,攻击者可能会虚假地声称他们审查了代码,而实际上他们没有审查,或者故意忽略审查中出现的问题。攻击者还可以入侵另一个帐户并使用该帐户冒充可信人员。冒充者可以以不会引起团队其他成员警觉的方式提交代码、执行审查或触发构建。入侵构建系统的攻击者可能会导致它在构建的软件物料清单 (SBOM) 中生成虚假记录。

其他攻击发生在事后。访问 git 存储库的攻击者可以编辑提交以更改作者或时间戳。或者他们甚至可以更改旧的提交以在过去插入恶意代码,这很少有人会注意到。拥有服务器访问权限的攻击者可以更改文件内容和时间戳以掩盖他们的踪迹。

在这两种情况下,攻击者并不一定需要采取直接行动。使用社会工程学方法,他们可以诱使其他人代表他们进行这些更改。

确保可信的溯源

当您知道溯源是软件供应链攻击的媒介时,您可以采取措施来保护它。第一步是收集您依赖项的溯源数据(如果存在);满足SLSA 级别 1或更高级别的项目会生成您可以检查和验证的溯源数据。

确保可信身份生成溯源。如果您能够证明溯源数据来自您拥有和保护的系统或来自已知的良好行为者,那么更容易信任它。对溯源记录进行加密签名可以确保记录是由可验证实体(个人或拥有适当加密密钥的系统)生成的。

将溯源数据存储在一次写入的存储库中。这使您能够在以后验证是否有任何溯源数据被修改。修改(无论是恶意还是意外)都是一个警告信号,表明您的依赖项以某种方式被篡改了。

保护您自己和任何下游用户生成的来源也很重要。实施严格的访问和身份验证控制,以确保只有授权用户可以修改来源记录。对生成来源数据的任何系统使用多因素身份验证,这可以降低未经授权访问的风险。将访问记录到单独的只写日志系统,以便您可以审核谁在何时访问了哪些系统。

迈向更安全的供应链

供应链安全没有一个神奇的解决方案,但您采取的每一步都是朝着正确方向迈进。当您知道依赖关系图中包含什么、它是如何产生的以及它包含哪些已知漏洞时,您就使供应链更加安全。

您的供应链越安全,您的用户就越安全。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注