了解这次供应链攻击

攻击背景

2024 年 6 月 25 日,Sansec 安全研究团队披露了一起严重的网络安全事件:知名的 Polyfill 开源库的 CDN 分发站点 polyfill.io(以及 GitHub 账户)自今年 2 月卖给了一家中国企业之后,开始嵌入恶意程序,以将访问使用其服务的网站用户重新引跳转至体育赌博或其他恶意网站。Sansec 估计,超过 10 万个网站受到了这次攻击的影响,包括很多知名上市公司。

Polyfill 函数库的功能是在旧版浏览器中补充或模拟现代浏览器所支持的功能,当旧版浏览器用户所访问的网站具备现代化浏览器所支持的新功能时,网站即可导入该函数库来实现相同的功能。

Sansec 的报告发布两天后,业界纷纷采取措施缓解 Polyfill.io 的风险:域名注册商 Namecheap 暂停了域名(Polyfill.io),此举有效地阻止了恶意代码在访客设备上运行。随后,Cloudflare 等 CDN 服务商也开始自动将 polyfill.io 的链接替换为安全镜像站点的域名。谷歌则屏蔽了嵌入 Polyfill.io 域名的网站广告。网站拦截器 uBlock Origin 将该域名添加到其过滤列表中。Polyfill.io 的原始创建者 Andrew Betts 也敦促网站所有者立即删除指向该库的链接。

Sansec 建议不再需要 Polyfill 函数库的网站应该立刻移除 polyfill.io,或是改用由 Fastly 或 Cloudflare 所提供的 Polyfill 方案。

虽然业界集体行动暂时缓解了 polyfill 供应链攻击威胁,但是,据安全公司 Censys 的最新报告,截至本周二,仍然有超过 38 万个网站链接到(已被关停的)Polyfill.io 恶意网站。其中一些网站与亚马逊、Hulu、梅赛德斯-奔驰、华纳兄弟等国际知名企业和政府机构有关。

amazonaws.com 是仍链接到 polyfill 站点的网站中最常用的域名,这表明亚马逊 S3 静态网站托管的用户广泛使用 polyfill 恶意域名。

Censys 还发现 182 个以 .gov 结尾的域名,可能属于政府实体。其中一个域名 feedthefuture[.]gov 隶属于美国联邦政府。

攻击者

研究人员发现,最近通过多个 CDN(即 Polyfill.io、BootCDN、Bootcss 和 Staticfile)进行的大规模供应链攻击已被追踪到一个共同的操作员。研究人员发现了一个公开的 GitHub 仓库,Polyfill.io 的运营者在其中意外暴露了他们的 Cloudflare 密钥。

通过使用这些仍然有效的 API 密钥,研究人员能够确定所有四个域名及更广泛的供应链攻击背后是同一操作员。

Cloudflare 密钥的意外暴露

安全研究人员和开源情报(OSINT)爱好者发现了一个与 polyfill.io 域相关的大规模供应链攻击的 GitHub 仓库,该攻击现在被认为影响了数千万个网站。泄露在仓库中的秘密使研究人员能够将包括 Polyfill.io、BootCDN、Bootcss 和 Staticfile 在内的所有 4 个 CDN 服务的供应链攻击归因于一个实体。

这一发现是研究员 Ze-Zheng Wu(杭州的一位开发者和博士候选人)、化名为 mdmck10 的用户以及安全研究团队 MalwareHunterTeam 的合作努力的结果。Ze-Zheng Wu 发现了一个名为 "data.polyfill.com" 的 GitHub 仓库,该仓库似乎包含与该网站相关的后端源代码。研究人员观察到仓库所有者意外地将一个 .env 文件上传到了公共仓库:

.env 文件中的秘密暴露在 GitHub 仓库中

.env 文件用于开发人员和系统管理员存储 API 密钥和令牌、环境变量和配置设置等秘密。因此,这些文件应该使用严格的权限进行保护,并且要严密保管,不得向公众公开。暴露的文件中包含了 Cloudflare API 令牌、Polyfill.io 域的 Cloudflare 区域 ID 以及 Algolia API 密钥等值。BleepingComputer 还观察到该文件的早期版本中存在 "生产" 的 MySQL 凭据。

Cloudflare API 密钥使研究人员,特别是 mdmck10,能够查询并获得与特定 Cloudflare 账户相关的活动区域列表。Cloudflare 的 "区域" 是网站管理员在其 Cloudflare 账户中组织和管理域名以及每个域名的独特设置的一种方式。大致而言,每个 Cloudflare "区域" 包括域名、DNS 设置、区域的创建或修改日期以及与所有者相关的元数据。在返回的所有域名(或区域)中,有一个是 cdn.polyfill.io。注意,区域 ID 也与在上述 GitHub 仓库中发现的 .env 文件中的区域 ID 匹配:

Polyfill 域相关的区域 ID

mdmck10 分享的 430 行 JSON 文件还包含了 staticfile.net、bootcdn.net、bootcss.com 等域名的条目,表明这些域名由同一 Cloudflare 用户账户管理,由同一实体操作。虽然 Cloudflare 从未授权 Polyfill.io 使用其标志和名称,也从未认可该服务,但在周三,Polyfill.io 的 DNS 记录神秘地切换到了 Cloudflare 的,表明至少该域名所有者部分使用了 Cloudflare 的服务。我们当时联系了 Cloudflare,了解其是否参与了这些 DNS 记录的变更或帮助减轻了攻击,但未得到回复。

攻击可能自 2023 年 6 月以来持续进行

一直密切关注这一情况的 MalwareHunterTeam 指出,谷歌对其广告客户关于供应链攻击的警告不仅限于嵌入 polyfill.io 的广告着陆页,还包括另外三项服务:Bootcss、BootCDN 和 Staticfile。

Nullify(澳大利亚的一位法医调查员和安全研究员)现在做出了一个更加令人担忧的观察。他发现,"check_tiaozhuan" 这一代表注入的恶意代码的函数在中国论坛上自 2023 年 6 月以来就有提及。从那时起,通过 BootCSS 传播的同样的注入代码的一个非常原始的版本一直在流通。

BleepingComputer 能够独立确认,多个中文论坛页面(最早可追溯到 2023 年 6 月 20 日)上的开发者试图解读和理解由 BootCSS 交付的异常 "混淆代码"。根据开发者的说法,'check_tiaozhuan' 函数会检查访问者是否正在使用移动设备并将用户的浏览器重定向到另一个页面。

Sansec 研究人员最早对 Polyfill.io 攻击发出警报,他们更新了与供应链攻击相关的域名列表,包括:

  • bootcdn.net
  • bootcss.com
  • staticfile.net
  • staticfile.org
  • unionadjs.com
  • xhsbpza.com
  • union.macoms.la
  • newcrbpc.com

"打地鼠" 局面:全面影响尚待评估

从攻击中产生的更广泛影响可能会在未来几周内显现,其范围尚未完全掌握。在 Polyfill.io 被 Namecheap 关闭后不久,其运营者推出了另一项服务 polyfill.com。截至今天上午,polyfill.com 不再响应,已被关闭。

威胁情报分析师 Dominic Alvieri 警告称,Polyfill.io 的运营者可能提前囤积了多个不同注册商的域名,"polyfill.cloud" 就是一个可能的例子。若任何人继续使用这些服务,活跃部署这些域名可能迅速将这一事件变成打地鼠局面。

目前已注册的备用域名包括 /polyfill[.]cloud。他们将从一个域名转移到另一个域名。目前已知的所有注册资产上仍然是相同的注册信息。

针对与该攻击相关的域名的检测率在主要的防病毒引擎中仍然较低,人工取证工作可能有助于审计您的环境。

如果您还没有,考虑用 Cloudflare 和 Fastly 设置的安全替代品替换现有的任何这些服务的使用。来自网络安全公司 Leak Signal 的 Polykill.io 是另一项有用的服务,可以帮助您识别使用 Polyfill.io 的网站并进行切换。

请立即停止使用 Polyfill, BootCDN,七牛 Staticfile 等服务,防范各种静态资源 CDN 的注入,并且这些 CDN 目前已经被浏览器插件和各种安全DNS屏蔽
这次攻击重新建立了我对供应链攻击的认知,各位使用 CDNJS 镜像时也要多加小心
各种镜像都应该镜像,并且使用 Cloudflare 作为受信任的源,或者更多的直接使用 Cloudflare,更广泛的使用意味着更少的受到阻断
让我们陷入困境的不是无知,而是看似正确的谬误论断。