随着软件供应链攻击发生的次数越来越多,Google 发布了一系列指南来确保软件包的完整性,目的是为了防止未经授权的代码修改影响软件供应链。
Google 的 SLSA 框架(Supply-chain Levels for Software Artifacts 软件制品的供应链级别)通过识别 CI/CD 流水线中的问题并减小影响,为实现更安全的软件开发和部署流程提供建议。
目录
什么是SLSA
SLSA 全名是 Supply chain Levels for Software Artifacts, or SLSA (发音“salsa”).
SLSA 是一个端到端框架,一个标准和控制的清单确保软件构建和部署过程的安全性,防止篡改源代码、构建平台以及构件仓库而产生的威胁。
软件供应链中的问题
任何软件供应链都可能引入漏洞,随着系统变得越来越复杂,检查和最佳实践来保证工件完整性变得至关重要,确保你所依赖的源代码就是你实际使用的代码。
如果没有坚实的基础和系统发展计划,就很难集中精力应对明天的下一次黑客攻击、违规或妥协。
供应链攻击包括哪些
A 提交未经认证的修改
B 泄露源码仓库
C 从被修改源代码构建
D 泄露构建过程
E 使用已泄露的依赖
F 上传被修改的包
G 泄露了包仓库
H 使用已泄露的包
真实世界的例子
完整性威胁 | 已知例子 | SLSA 如何提供帮助 |
---|---|---|
A 提交未经认证的修改 | 研究人员试图通过邮件列表上的 补丁程序故意将漏洞引入 Linux 内核。 |
两人审查发现了大部分(但不是全部)漏洞。 |
B 泄露源码仓库 | PHP:攻击者破坏了 PHP 的自托管 git 服务器并注入了两个恶意提交。 |
一个受到更好保护的源代码平台 将成为攻击者更难攻击的目标。 |
C 从被修改源代码构建 | Webmin:攻击者修改了构建基础设施 以使用与源代码控制不匹配的源文件。 |
符合 SLSA 标准的构建服务器会生成出处, 以识别实际使用的来源,从而使消费者能够检测到此类篡改。 |
D 泄露构建过程 | SolarWinds:攻击者破坏了构建平台 并安装了在每次构建期间注入恶意行为的植入程序。 |
更高的 SLSA 级别需要对构建平台进行更强大的安全控制, 这使得妥协和获得持久性变得更加困难。 |
E 使用已泄露的依赖 | event-stream:攻击者添加了一个无害的依赖项,然后更新了该依赖项 以添加恶意行为。更新与提交到 GitHub 的代码不匹配(即攻击 F)。 |
递归地将 SLSA 应用于所有依赖项会阻止这个特定的向量,因为 出处会表明它不是由适当的构建器构建的,或者源不是来自 GitHub。 |
F 上传被修改的包 | CodeCov:攻击者使用泄露的凭据将恶意工件上传到 Google Cloud Storage(GCS),用户可以从中直接下载。 |
GCS 中工件的出处表明工件不是以 预期的方式从预期的源代码库中构建的。 |
G 泄露了包仓库 | 对包镜像的攻击:研究人员为几个流行的 包存储库运行镜像,这些镜像可能被用来提供恶意包。 |
与上面的 (F) 类似,恶意工件的来源表明它们不是 按预期构建的,也不是来自预期的源代码库。 |
H 使用已泄露的包 | Browserify typosquatting:攻击者 上传了一个与原始名称相似的恶意包。 |
SLSA 不直接解决这种威胁,但将出处链接回源代码控制 可以启用和增强其他解决方案。 |