摘要
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 协助进行分析。
-
拼写错误抢注 是恶意行为者用来发起依赖混淆攻击的一种技术,在这种攻击中,合法的用户可能会被诱骗使用恶意的依赖项,而不是他们预期的依赖项——例如,恶意行为者可能会尝试发布一个名为
proc-macro
的 crate,以捕获合法proc-macro2
crate 的用户。↩ -
人们想知道为什么他们在将 IP 地址发送到他们的 Telegram 频道后不能这样做,但联合工作负载显然在 2023 年很流行。↩
-
这些 crate 被保留下来,以备未来出现其他攻击时进行分析,并为未来的扫描工作提供信息。↩
-
crates.io 上保留一年的日志,但我们的日志平台上只有 30 天的日志可立即使用。我们选择不进一步回溯分析,因为基于 IP 地址的分析受到野外动态 IP 地址使用的限制,并且相关 IP 地址是分配给住宅 ISP 的一部分。↩