crates.io 事后分析报告:用户上传恶意软件

2023 年 9 月 1 日 · Adam Harvey 代表 crates.io 团队

摘要

8 月 16 日,crates.io 团队收到来自 Phylum 的 Louis Lang 的通知,一位新用户上传了九个 crate,这些 crate 通过拼写错误抢注1 流行的 crate,并带有恶意意图。这些 crate 立即被撤回,用户帐户被锁定,然后在 8 月 18 日从 crates.io 文件存储中完全删除。

Phylum 也撰写了关于此事件的他们自己的博客

内容

这些 crate 包含恶意的 build.rs 文件,这些文件会尝试将用户计算机的元数据发送到 Telegram2 频道,包括他们的操作系统、IP 地址和基于其 IP 地址的地理位置信息。3

一个 crate 的一个版本还包含 PuTTY4 安装程序的副本,build.rs 会生成 PuTTY,而不是将元数据发送到 Telegram。我们假设这是早期尝试从 build.rs 文件中实现某些功能的一个阶段。

已采取的措施

在 crates.io 团队收到报告后,这些 crate 立即被撤回,相关的用户帐户被锁定。这不会阻止某人直接从 static.crates.io 下载 crate 文件,但会从 crate 索引中删除这些 crate,并使它们无法通过正常的 cargo 使用进行卸载。

分析相关 crate 以及该用户采取的所有操作(从注册、搜索用于拼写错误抢注的 crate,到最终发布 crate)的日志后,我们决定从 static.crates.io 中完全删除这些 crate,以防止任何进一步攻击的可能性。5 删除操作于 2023 年 8 月 18 日 17:22 UTC 执行。

分析

在这种情况下,这些 crate 完全且非常明显地是出于恶意目的而制作的。

我们没有证据表明这些 crate 被任何实际用户下载过——对我们日志中与这些 crate 下载请求关联的用户代理的分析表明,唯一的下载是自动扫描器和镜像操作。

与这些 crate 关联的用户在 8 月 18 日之前的 30 天内6 没有采取任何其他操作——恶意或其他操作。

未来行动

Rust 基金会安全倡议 计划未来开展对所有 crate 上传进行扫描的工作,包括拼写错误抢注和 crate 文件的实际内容。这两个项目的原型都将检测到这些 crate 文件,crates.io 团队打算在准备就绪后与基金会合作实施这些扫描器。

致谢

感谢 Phylum 的 Louis Lang 报告这些 crate,Josh Stone 促成报告,以及 Rust 基金会的 Walter Pearce 协助进行分析。

  1. 拼写错误抢注 是恶意行为者用来发起依赖混淆攻击的一种技术,在这种攻击中,合法的用户可能会被诱骗使用恶意的依赖项,而不是他们预期的依赖项——例如,恶意行为者可能会尝试发布一个名为 proc-macro 的 crate,以捕获合法 proc-macro2 crate 的用户。

  2. Telegram 是一款流行的即时消息应用程序。

  3. 人们想知道为什么他们在将 IP 地址发送到他们的 Telegram 频道后不能这样做,但联合工作负载显然在 2023 年很流行。

  4. PuTTY 是 Windows 上流行的 SSH 客户端。

  5. 这些 crate 被保留下来,以备未来出现其他攻击时进行分析,并为未来的扫描工作提供信息。

  6. crates.io 上保留一年的日志,但我们的日志平台上只有 30 天的日志可立即使用。我们选择不进一步回溯分析,因为基于 IP 地址的分析受到野外动态 IP 地址使用的限制,并且相关 IP 地址是分配给住宅 ISP 的一部分。