
“ 朝鲜黑客组织 Contagious Interview 在 npm、PyPI、Go、Rust 等生态投毒 1700+ 包。
Rust 中招 logtrace,恶意代码藏Logger::trace(i32)函数体内,安装时无异常,调用即拉取窃密木马。”
thehackernews 今日(美国时间 4 月 8 日)有篇文章:N. Korean Hackers Spread 1,700 Malicious Packages Across npm, PyPI, Go, Rust,感觉有点神奇——或说不太相信。
具体是说:朝鲜黑客在 Rust、npm、PyPI、Go 传播了 1700+ 个恶意软件包。
姑且拓展了一下,分享与大家,可以参考分析。

事件概述
4 月 8 日(美国时间),Socket 安全团队发布报告,确认与朝鲜相关联的攻击组织 Contagious Interview 已将供应链投毒范围扩展至 Rust、Go 以及 PHP 生态。
自 2025 年 1 月至今,该组织在 npm、PyPI、Go、Rust、Packagist 五个仓库累计投放恶意包超过 1700+ 个,其中 Rust 生态的投毒载体为 crate logtrace。
logtrace的技术细节
不同于以往 Rust 供应链攻击中常见的手法——即在 build.rs 脚本中直接插入恶意系统命令——logtrace 的恶意逻辑深埋在业务函数内部:
// 恶意代码片段示意
impl Logger {
pub fn trace(&self, level: i32) {
// 当level满足特定条件时,向C2发起请求并拉取第二阶段载荷
if level == /* 特定魔数 */ {
fetch_and_execute_payload();
}
// 其余正常日志逻辑...
}
}这一设计带来的隐蔽性在于:
第二阶段载荷是一个具备信息窃取与远程访问功能的跨平台木马,主要目标为浏览器存储的密码、加密货币钱包密钥、SSH 私钥以及开发环境凭证。
攻击面的多维扩展:Rust 供应链攻击现状
logtrace 事件并非孤例。自 2025 年以来,针对 Rust 生态的供应链攻击在手法和规模上均呈现出显著升级。攻击者不再满足于单一的 build.rs 注入,而是构建了包含依赖混淆、恶意过程宏、账户接管在内的复合攻击矩阵。
下表汇总了近一年内 Rust 生态中具有代表性的供应链攻击事件(鸣谢:deepseek 的整理和帮助):
攻击包名 | 攻击时间 | 攻击手法 | 恶意载荷/目标 |
|---|---|---|---|
faster_log, async_println | 2025年5月 | 仿冒知名日志库fast_log,利用名称近似诱导误装 | 窃取Solana、以太坊钱包私钥,下载量8424次 |
evm-units, uniswap-utils | 2025年4-12月 | 伪装以太坊EVM工具,使用#[ctor::ctor]属性实现自动执行 | 跨平台RCE,覆盖Windows/macOS/Linux,下载量超7400次 |
finch_cli_rust, finch-rust | 2026年2月 | 仿冒AWS Finch工具,利用build.rs脚本执行恶意命令 | 本地RCE与数据窃取,重点窃取AWS凭证及SSH密钥 |
petgraph (CI/CD漏洞利用) | 2026年3月 | 利用GitHub Actions的pull_request_target触发器执行恶意build.rs | 窃取CARGO_REGISTRY_TOKEN,攻击者可向crates.io发布被后门的版本 |
logtrace (Contagious Interview) | 2026年4月 | 恶意逻辑嵌入Logger::trace(i32)函数体,触发式唤醒 | 多平台RAT与窃密木马,跨生态协同攻击的一部分 |
上述案例揭示了当前攻击的几个显著特征:
1. 命名欺骗高度精细化。攻击者对 Rust 生态的命名习惯和热门 crate 有深入研究,仿冒名称极具迷惑性(如 logtrace 之于 log/trace,finch-rust 之于 AWS Finch)。
2. 触发机制持续迭代。从 build.rs 即时执行,到 #[ctor::ctor] 的自动初始化,再到 logtrace 的函数内条件触发,攻击者不断寻找更隐蔽的激活路径。
3. 攻击链条向上游延伸。petgraph 案例表明,攻击者已开始直接针对 CI/CD 流程和开发者凭证,企图劫持合法 crate 的发布权限,实现更大范围的污染。
纵深防御:工具链与生态建设
面对日趋复杂的攻击态势,单点防御已无法满足安全需求。Rust 生态的防御体系需要从开发者个人实践、项目 CI/CD 流程、以及基础设施层面同步构建。
一、开发者侧技术防御工具
• cargo-audit
检查 Cargo.lock 中的依赖是否包含已知漏洞。依赖 RustSec Advisory Database,是 CI 流程中的基础检查项。局限性在于无法识别零日漏洞或未入库的恶意包。
• cargo-deny
对依赖进行多维度审计:重复依赖检测、crate 来源限制、许可证合规检查、特定版本禁用。可有效拦截来自非官方源或高风险命名空间的 crate。
• cargo-crev
去中心化的代码审查信任网络。开发者对 crate 进行审查后签名发布,其他开发者可根据信任关系链决定是否采纳审查结果。该工具在防范未公开恶意包方面具有独特价值。
• cargo-auditable
将完整依赖图信息嵌入编译后的二进制文件。安全扫描器可直接对二进制进行分析,获取准确的软件物料清单,这在审计已部署的服务时尤为关键。
二、生态层面基础设施建设
Rust 基金会及其工作组正在推进多项供应链安全关键项目:
• 可信发布 (Trusted Publishing)
crates.io 已完成与 GitHub Secret Scanning 的集成,支持从可信 CI 环境直接发布,减少因凭证泄露导致的包劫持风险。
• crate签名机制
基于 TUF 框架的 crate 签名方案已完成多仓库原型验证。未来发布到 crates.io 的每个版本都将携带可验证的密码学签名,从源头保障完整性。
• 能力分析
基于 Capslock 的分析工具正在规划中,旨在静态分析 crate 的实际能力需求(文件访问、网络请求、进程创建等),辅助开发者识别过度权限的可疑依赖。
• 漏洞信息展示
crates.io 前端将集成 RustSec 的漏洞数据,开发者访问 crate 页面时可直接查看其历史漏洞记录。
总结
logtrace 事件是 Contagious Interview 跨生态攻击的一环,但其技术手法对 Rust 社区具有特殊的警示意义:供应链安全与语言的内存安全是正交命题。恶意逻辑可以存在于任何一段看似正常的代码中,而不仅是 unsafe 块或构建脚本。
Rust 开发者需要将依赖审查的边界从 build.rs 扩展到全部源码,将防御手段从个人警觉升级为自动化工具链与社区信任网络的组合。cargo-audit、cargo-deny、cargo-crev、cargo-auditable 构成的工具矩阵,配合 crates.io 正在落地的签名与可信发布基础设施,是目前可见的、具有可操作性的防御路径。
攻击者的手法仍在演进,防御体系同样需要持续迭代。
谢谢您的阅读,欢迎交流。如果您发现错别字,也请向我发信息。
💡『iRust』rust spreads, rust connects 👇