Harden Runner 如何在 CNCF Backstage 代码库中检测到 Sha1-Hulud 供应链攻击

通过运行时监控和基线异常检测识别 npm 供应链攻击的案例研究

引言

2025 年 11 月 23-24 日,npm 生态系统遭遇了有史以来最大规模的协同供应链攻击之一。此次攻击被称为 "Sha1-Hulud: The Second Coming",共入侵了超过 780 个 npm 包,其中包括 Zapier、ENS Domains、PostHog、Postman 和 AsyncAPI 的包。恶意代码以 CI/CD 环境为目标,窃取凭据并试图建立持久后门。

在运行这些被入侵包的数千个 CI/CD 流水线中,包括了 Backstage 的流水线——这是云原生计算基金会(CNCF)旗下的开源开发者门户平台,由 Spotify 创建,拥有超过 32,000 个 GitHub 星标数,并被广泛应用于企业环境。

StepSecurity Harden Runner 在所有监控工作流运行的仓库中检测到了这次攻击。由于 Backstage 是一个使用 Harden Runner 免费社区版(可公开访问洞察)的知名开源项目,我们将其作为案例研究,来说明基线驱动的异常检测如何识别此次攻击,以及这对保障 CI/CD 流水线安全意味着什么。

攻击经过

在攻击窗口期间,backstage/backstage\ 仓库中有九个 GitHub Actions 工作流运行了被入侵的 npm 包。受影响的作业属于 Backstage 的 E2E 测试工作流,具体是在运行以下命令的步骤中:

javascript
- name: Run E2E test run: | sudo sysctl fs.inotify.max_user_watches=524288 yarn e2e-test run

yarn e2e-test run\ 解析并安装依赖项时,由于该包没有锁文件,它获取了某些包的最新版本。在攻击窗口期间,这些最新版本恰好已被入侵。恶意的 preinstall\ 脚本立即执行,触发了 Sha1-Hulud 有效载荷。

Harden Runner 如何检测到攻击

Backstage 使用的是 Harden Runner 的社区版,该版本对开源项目免费。Backstage 维护者自 2023 年 10 月起就开始使用 Harden Runner,这表明他们在 CI/CD 流水线安全方面采取了积极主动的最佳实践。Harden Runner 作为 GitHub Actions 运行器的 EDR(端点检测与响应)代理运行,监控运行时行为,包括所有出站网络连接。

基线驱动的异常检测

Harden Runner 为每个工作流建立预期网络目的地的基线。当工作流运行连接到该基线之外的网络端点时,会触发异常警报。

在 Sha1-Hulud 攻击期间,被入侵的包向 Backstage E2E 工作流历史中从未出现过的端点发起了连接:

异常端点攻击中的用途
bun.sh恶意软件下载 Bun JavaScript 运行时来执行其混淆的有效载荷
oss.trufflehog.org恶意软件下载 TruffleHog 来扫描代码库和环境中的敏感信息

这些连接在 Harden Runner 的网络遥测数据中立即突出显示。它们不属于 Backstage E2E 测试的既定基线,后者通常连接到 npm 注册表、GitHub API 和测试基础设施——而不是可执行文件的下载端点。

如果启用了 Harden Runner 的阻止模式,这些连接本可以被完全阻止。恶意软件将无法下载 Bun 或 TruffleHog,从而阻止攻击进展到初始入侵阶段之后。

可验证的证据

由于 Backstage 使用的是 Harden Runner 的社区版,这些工作流运行的洞察数据是公开可访问的。任何人都可以验证检测结果:

探索此交互式演示,查看 StepSecurity Harden Runner 如何检测到此次攻击:​

访问这些洞察页面时,您会清楚地看到恶意连接被高亮显示。在这些运行中首次出现的新目的地——如 bun.sh\oss.trufflehog.org\keychecker.trufflesecurity.com\——以橙色显示,并带有"异常"标签,使它们与预期的网络活动明显区分开来。

您还可以查看 Harden Runner 为此工作流建立的基线,包括基线基于多少次以前的运行。这让您可以轻松理解为何某些连接会触发警报:它们在工作流历史中从未出现过。

使用 Harden Runner 企业版获得更深入的可见性

虽然社区版通过网络异常检测识别了此次攻击,但 Harden Runner 的企业版提供了额外的功能,可对供应链攻击进行更深入的可见性。

HTTPS 监控和进程遥测

企业版包括:

- HTTPS 监控:完整可见 HTTPS 请求,而不仅仅是连接端点

- 进程事件:完整的进程执行遥测,包括进程树和命令行参数

- 实时通知:检测到异常时通过电子邮件、Slack、S3 和 webhook 集成立即发出警报

检测持久化机制

Sha1-Hulud 恶意软件试图通过在被入侵仓库上注册名为 "SHA1HULUD" 的自托管 GitHub Actions 运行器来建立持久化。这将赋予攻击者通过仓库讨论事件远程执行代码的能力。

通过企业版的 HTTPS 监控,这种持久化尝试可以直接观察到——恶意软件向 GitHub API 发出 HTTPS 调用来注册运行器。这提供了超越初始有效载荷下载的额外入侵证据,并揭示了恶意软件试图执行的完整范围。

您可以在我们的企业演示中看到这一点,其中 Runner.Listener\/actions/runner-registration\ 发起 POST 调用到 api.github.com\。这触发了检测,即使没有基线——工作流通常不会注册运行器,使这种行为本身就很可疑。

探索此交互式演示,查看 StepSecurity 如何为企业客户检测此次攻击:​

实时告警

对于企业客户,这些检测会通过配置的集成触发即时通知。与其事后审查时才发现入侵,安全团队可以在异常行为发生时立即收到警报——实现快速响应和遏制。

负责任的披露与影响评估

我们将发现报告给了 Backstage 维护者,他们审查了检测数据并评估了影响。他们的分析得出结论,受影响的 E2E 工作流只持有只读 GitHub 令牌,且未配置其他敏感信息。因此,此次入侵对 Backstage 仓库没有造成影响。

我们想对 Backstage 维护者的快速响应和调查支持表示感谢。他们的协作使我们能够快速确认检测结果并评估影响。

从检测到预防

虽然检测到 Sha1-Hulud 攻击提供了有价值的可见性,但 Harden Runner 的阻止模式可以主动防止此类攻击成功。

在这种情况下,Backstage 以审计模式运行 Harden Runner,该模式监控并警告异常连接,但不阻止它们。如果启用了阻止模式,前往 bun.sh\oss.trufflehog.org\ 的连接将在网络层面被阻止。恶意软件的 preinstall\ 脚本会执行,但它将无法:

  • 下载执行其混淆有效载荷所需的 Bun 运行时

  • 下载 TruffleHog 来扫描敏感信息

  • 在没有有效载荷的情况下外泄任何发现的凭据

攻击将在造成任何损害之前被阻止。对于有权访问敏感信息的工作流而言,这就是安全警报与安全事件之间的区别。

为何运行时监控至关重要

本案例研究验证了一条基本原则:​您不能仅依赖部署前的安全检查来捕获供应链攻击。​

传统安全方法侧重于:

  • 扫描依赖项中的已知漏洞(CVE)

  • 审查锁文件中的意外变更

  • 使用 npm 包的允许列表

这些方法对像 Sha1-Hulud 这样的零日供应链攻击无效,因为:

  1. 被入侵的包在攻击时没有 CVE

  2. 许多项目不使用锁文件,在许多情况下安装的是包的最新版本

  3. 被入侵的包是合法的、受信任的包,只是被劫持了

运行时监控提供了缺失的那一层。通过建立预期行为基线并对异常发出警报,Harden Runner 根据代码实际做了什么——而不是它声称是什么——检测到了攻击。

这不是 Harden Runner 第一次检测到供应链攻击。先前的检测包括:

在每个案例中,运行时监控都通过传统安全工具遗漏的异常行为识别了攻击。

建议

基于此次事件,我们建议:

对开源项目

  1. 在您的 GitHub Actions 工作流上启用 Harden Runner。社区版对公开仓库免费。

  2. 审查您的工作流权限。最小权限原则限制了 Backstage 的暴露面。

  3. 考虑启用出站策略执行。Harden Runner 可以阻止连接到您基线之外的端点,实时阻止攻击。

对企业

  1. 在 CI/CD 工作流上实施运行时监控,以获得供应链攻击的可见性。

  2. 将 CI/CD 运行器视为高价值目标。它们通常有权访问生产凭据和部署能力。

  3. 监控异常行为,而不仅仅是已知威胁。零日攻击需要行为检测。

  4. 假设您的依赖项可能会被入侵。围绕此假设构建您的安全态势。

结论

Sha1-Hulud 攻击入侵了超过 780 个 npm 包,影响了数千个仓库。在 Backstage 仓库中,Harden Runner 通过基线异常检测识别了攻击——发现连接到 bun.sh\oss.trufflehog.org\ 的网络连接,这些连接在工作流历史中从未出现过。

此次检测不是基于签名或 CVE,而是基于观察工作流突然开始执行其从未执行过的操作。

对于 Backstage 而言,有限的工作流权限意味着没有影响。但这次攻击是一个警告:供应链攻击越来越复杂,如果没有运行时监控,您可能永远不会知道您的 CI/CD 流水线已被入侵。

运行时监控提供了检测此类攻击所需的可见性。如果您不监控 CI/CD 运行器实际在做什么,您就是在盲目飞行。

了解更多关于 Harden Runner 以及它如何保护 CI/CD 流水线免受供应链攻击的信息,请访问 stepsecurity.io 或探索 GitHub Action。​

有关 Sha1-Hulud 恶意软件的技术细节和被入侵包的完整列表,请参阅我们的 技术分析