软件供应链最近真是被折腾惨了。

在过去几个月里,我们接连看到了针对 Axios、Trivy、LiteLLM、SAP、Vercel 的攻击,以及新一波 Mini Shai-Hulud 攻击活动,影响了包括 TanStack、UiPath 和 Mistral AI 在内的一大批软件包。

随后 GitHub 证实,在一个被投毒的 VS Code 扩展程序被安装到一名员工的笔记本电脑上之后,攻击者访问了近 3800 个内部代码仓库。

该扩展程序是 Nx Console,一个拥有 220 万次安装量和已验证发布者徽章的合法工具,却是通过另一起供应链攻击中窃取的令牌被攻破的。

恶意版本在应用市场上只存活了十八分钟,但自动更新已经在这段时间内把它推送到了开发者已打开的编辑器中。

这些攻击的切入点各不相同。

一个浏览器扩展程序、软件包注册表中的蠕虫、一个被投毒的 IDE 插件。但它们最终都指向了同一个目标:开发者的电脑。GitHub 可不是一家粗心大意的公司。

如果这能发生在托管全球大部分源代码的平台上,那么任何平台都可能遭遇同样的事。

开发者现已成为主要目标

开发者现已成为主要目标

开发者已成为攻击者最有价值的目标之一,因为他们掌握着云凭证、SSH 密钥、npm 发布令牌、Kubernetes 配置以及对源代码的直接访问权限。一个被泄露的凭证就足以发布恶意软件包,或在数千个组织中引发下游连锁入侵。

AI 驱动开发的兴起也从两个方面加剧了这一挑战。首先,在开发者笔记本电脑上工作的编码代理正在拉取软件包并安装技能插件,而对安装了什么基本无人把关,这当然进一步扩大了开发者设备上的攻击面。

其次,发动供应链攻击的门槛被大幅拉低了,因为过去需要真正技能和深厚技术知识才能做到的事情,现在只要订阅一个 LLM 就行了。技术更娴熟的攻击者也在利用 AI 发动日益复杂的攻击,其扩展速度快于安全团队的响应速度。

多年来,供应链安全指的是保护代码流经的基础设施,例如注册表、构建流水线和 CI/CD 系统。这些层面仍然重要,但如今漏洞的起点提前了——在代码进入共享基础设施之前,就已经出现在开发者的设备上了。

传统端点保护远远不够

传统端点保护远远不够

尽管开发者机器上存有敏感内容,且他们面临的风险日益增长,大多数企业保护这些设备的方式,和保护普通员工的笔记本电脑没什么两样:包括用于检测操作系统威胁的传统端点保护(EDR),以及用来管控安装内容的移动设备管理(MDM)。

问题在于,开发者日常所做的大部分工作都发生在操作系统之上,通过包管理器、IDE 市场、浏览器扩展和 AI 工具进行。EDR 和 MDM 基本上看不到这些。一个运行安装后脚本的恶意 npm 包,安全工具根本不会察觉。

一个被人做了手脚的 VS Code 扩展在悄悄窃取凭据,同样不会被察觉。一个 OAuth 权限开得太大的 AI 浏览器插件,也不会被察觉。这些工具当初设计的时候,根本没考虑现在软件开发是怎么干的。

公司被迫在几个烂选项之间做选择

公司被迫在几个烂选项之间做选择

因此,大多数公司发现,自己不得不用一些本来不想用的办法来保护开发者的终端设备。

有些公司封锁一切,在开发者和开放互联网之间划一条死线。这在金融服务等高度监管的环境中可能行得通,但在其他行业,这会直接把开发速度拖死。这种方法限制性太强,以至于这些环境中的开发者常常搞出各种变通办法,比如再弄一台笔记本、把 VPN 关掉,结果安全性比你什么都不做还差。

许多公司则走向另一个方向,允许开发者想装什么就装什么,然后祈祷别出事。鉴于我刚刚列出的问题,这种方法风险极高(而且基本上没法交代)。

还有一些公司尝试第三条路,一个一个地手动审批安装请求。虽然从安全和开发者需求的角度来说,这种精细的做法确实有效,但根本没法规模化。

这个行业正在解决错误的问题

这个行业正在解决错误的问题

目前,供应链安全方面的对话大多围绕检测展开。你多快能识别出一个恶意软件包?你多快能标记出一个被入侵的扩展程序?这些都是合理的问题,但它们忽略了一个重要的点。

看看 GitHub 那次安全事件。恶意的 Nx Console 扩展程序在十八分钟内就被识别并下架了。这速度确实够快。但这无济于事,因为自动更新已经在那段时间内把受感染的版本分发到了正在运行的编辑器上。检测告诉你存在恶意的东西。但它并没有阻止它进入开发者的机器。

更有用的问题是:你如何从一开始就阻止某个东西装到设备上?一个冷却期,也就是新版本发布后到允许安装之间的延迟,本可以完全避免 GitHub 那次安全事件。

如果你的策略规定“不要自动安装任何发布不到 48 小时的版本”,那么恶意的 Nx Console 版本就永远不会装到任何一台设备上。这是一条基本的时间规则,它为整个生态系统争取到了在问题造成影响之前将其捕获所需的时间窗口。

同样的思路可以推广到更广的范围。了解每台开发者机器上都安装了哪些软件。制定策略,规定哪些软件包、扩展程序和插件是允许使用的。当开发者需要策略之外的软件时,给他们一种足够快的申请方式,让他们不会绕过策略。

这一切并不意味着要把开发环境变得死气沉沉。现代软件开发依赖于开源、第三方工具,并且越来越依赖于 AI 智能体。开发者需要工作的自由。但这种自由应该是可见的、在管理之下的,而不是不可见的。

第一张多米诺骨牌

第一张多米诺骨牌

开发者设备是软件供应链中的第一张多米诺骨牌。我在这篇文章中描述的每一次重大入侵都始于那里,而不是在流水线或生产环境中。

修复方法并不复杂,但忽视它们的代价却很大。业界多年来一直将安全性左移到流水线中。现在是时候把它一路左移到设备端了。

我们评测了市面上最好的商用显示器,并进行了排名。

本文是作为TechRadar Pro Perspectives的一部分制作的,这是我们展示当今科技行业顶尖人才的频道。