标题:一个 AI 编程助手会话演变成了供应链攻击
Mandiant 的最新案例研究表明,一个被劫持的 AI 编程助手会话让攻击者能够向一家软件公司的代码库中注入恶意包,导致 100 个内部代码库遭到破坏,窃取了 GitHub OAuth 令牌,并外泄了源代码和机密信息。 这次违规事件证明,开发者不能将 AI 生成的建议视为安全代码。
事件经过
在一次实时开发会话期间,攻击者控制了嵌入在团队编辑器中的 AI 助手。被劫持的助手随后建议使用一个恶意包。开发者出于对工具的信任,在没有进行额外检查的情况下接受了该建议。
该恶意包植入了一个信息窃取程序,用于搜集存储在工作站上的 GitHub OAuth 令牌。利用这些令牌,攻击者部署了“Shai-Hulud”蠕虫,该蠕虫在 100 个内部代码库中进行了自我复制。由于恶意代码带有公司自身的命名空间,随后拉取相同包的其他开发者也受到了感染。
为何重要
AI 编程助手可以读取项目文件、生成安装命令、编辑依赖清单,甚至运行终端命令。这种广泛的访问权限使其成为供应链攻击极具吸引力的向量。当开发者对 AI 建议的信任超过了对陌生人建议的信任时,攻击者的工作就会变得更加容易:助手可以悄无声息地插入看起来合法的恶意代码。
供应链攻击允许攻击者在组织的整个代码库中进行横向移动、窃取凭据并外泄专有资产——而受害者在损害发生之前往往毫无察觉。
攻击是如何展开的
- 会话劫持 – 攻击者接管了一个正在进行的 AI 助手会话。
- 恶意推荐 – 被劫持的助手被迫建议使用一个恶意包。
- 开发者接受 – 由于相信 AI 的建议,开发者添加了该包并运行了生成的安装命令。
- 载荷执行 – 该包安装了一个信息窃取程序,用于读取本地 GitHub OAuth 令牌和其他机密。
- 蠕虫传播 – 利用窃取的令牌,攻击者部署了 Shai-Hulud 蠕虫,该蠕虫传播到了 100 个内部代码库。
- 数据外泄 – 源代码、内部库和密钥被窃取到攻击者的基础设施中。
开发者现在可以做什么
将每一个 AI 建议都视为不可信代码。对其应用与对待任何第三方依赖项相同的验证步骤。
验证软件包
- 检查官方文档和版本历史。
- 确认发布者的身份和声誉。
- 审查源代码仓库和最近的提交。
- 检查完整的依赖树是否存在异常链接。
- 仔细检查任何安装脚本中是否存在隐藏命令。
加强凭据管理
- 为每个令牌授予尽可能小的权限。
- 优先使用短期令牌,而非长期令牌。
- 不要将生产环境的机密存储在本地开发机上。
- 限制编辑器扩展访问其不需要的凭据。
应对疑似违规事件
- 立即隔离受影响的环境;仅删除
node_modules或类似目录是不够的。 - 轮换所有 GitHub、npm、PyPI 和云端凭据。
- 审计代码库活动,检查是否存在异常的提交或拉取请求(pull-request)合并。
- 审查 CI/CD 日志和 Git-hook 脚本是否存在异常行为。
- 立即隔离受影响的环境;仅删除
展望未来
AI 助手将继续为许多开发者提高生产力,但其功能也伴随着信任成本。组织应当将 AI 生成的代码纳入现有的安全审查流程中,就像对待任何外部库一样。自动化策略检查、经过签名的 AI 助手输出以及运行时沙箱化可以降低被悄无声息入侵的风险。
Mandiant 的案例清楚地表明,一旦 AI 助手遭到破坏,攻击者就获得了一条进入软件供应链的直接通道。将 AI 建议视为威胁模型的一部分,而不是一种“免检通行证”,对于保障代码库安全至关重要。
核心要点:AI 生成的建议并不比任何其他第三方代码更值得信任。必须对其进行严格的验证、限制和监控,否则就有可能让一个得力的助手变成大规模供应链攻击的渠道。
