Loading... # NPM 钓鱼攻击后续技术分析报告 # 一、事件概述 ## 1. 事件背景 2025 年 9 月 9 日,SEAL 及多家安全厂商披露了一起被称作"历史上最大规模的(失败)供应链攻击"事件。攻击者通过精心设计的钓鱼攻击,试图获取 NPM 发布者凭证并植入恶意代码。所幸,攻击者似乎浪费了其访问权限,仅获利约 1000 美元,同时暴露了其攻击模式和基础设施。 ## 2. 影响范围 ### A. 潜在影响 - 数百万台计算机可能暴露于恶意代码 - NPM 生态系统的供应链安全受到威胁 - 区块链用户的账户安全面临风险 ### B. 实际影响 - 攻击基本失败,未造成大规模破坏 - 攻击者获利极有限(约 1000 美元) - 攻击基础设施和模式被完全曝光 ## 3. 严重程度 中等级别(潜在影响高,实际影响低) # 二、事件时间线 ## 1. 攻击基础设施准备(2025 年 6 月 - 8 月) ### A. 域名注册时间线 - 2025-06-26:`walleting.services` 注册 - 2025-07-02:`2hy.xyz` 注册 - 2025-08-26:`npmjs.cam` 注册(注意 TLD 差异) - 2025-09-05:`npmjs.help` 注册(主要攻击域名) ### B. 基础设施部署 攻击者使用不同的托管商和域名注册商,分散基础设施以提高存活率 ## 2. 钓鱼攻击实施阶段 ### A. 针对 Hyperliquid(2025 年 8 月底) - 使用 `2hy.xyz` 和 `walleting.services` 组合 - 伪装成合法的 Hyperliquid 交易平台 - 试图窃取用户凭证并转移资金 ### B. 针对 NPM(2025 年 9 月初) - 使用 `npmjs.help` 进行钓鱼攻击 - 目标是获取 NPM 发布者凭证 - 试图添加攻击者控制的 API 密钥 ## 3. 攻击暴露与分析(2025 年 9 月 9 日后) ### A. 安全厂商披露 SEAL 和多家安全厂商发布分析报告 ### B. 基础设施追踪 通过追踪 `npmjs.help` 域名的痕迹数据,发现相关联的攻击基础设施 ```mermaid graph TD subgraph 攻击时间线 A[2025-06-26<br/>walleting.services 注册] --> B[2025-07-02<br/>2hy.xyz 注册] B --> C[2025-08-26<br/>npmjs.cam 注册] C --> D[2025-08-27 至 09-01<br/>npmjs.cam 攻击活动] D --> E[2025-09-05<br/>npmjs.help 注册] E --> F[2025-09-09<br/>攻击被披露] end ``` <img src="https://static.op123.ren/static/c2/a3b5c7d9e2f1.svg" alt="攻击时间线" width="700" style=""> # 三、问题分析 ## 1. 直接原因 攻击者使用高度相似的混淆 JavaScript 函数和钓鱼基础设施,针对多个目标实施持久性钓鱼攻击 ## 2. 根本原因分析 ### A. 为什么 NPM 成为攻击目标? - NPM 注册表通过 `npm view` 命令极易获取发布者邮箱 - 相比 PyPI、Cargo 等其他包管理器,NPM 暴露了更多用户信息 - 这为攻击者提供了精确的目标定位信号 ### B. 为什么攻击失败? - 攻击者更专注于钓鱼而非恶意软件部署 - 缺乏恶意软件操作经验 - 攻击基础设施分散,缺乏协调 ### C. 攻击者的真实意图? - 主要目标是凭证窃取而非恶意软件传播 - 专注于加密货币用户群体 - 可能同时运营多个未被发现的钓鱼活动 ## 3. 深层反思 - 供应链安全需要更加严格的身份验证机制 - 包管理器应重新考虑用户信息的暴露策略 - 开发者安全意识培训至关重要 # 四、攻击技术分析 ## 1. 钓鱼技术 ### A. iframe 加载技术 所有攻击都使用 iframe 加载合法网站内容,创造逼真的钓鱼页面 ### B. JavaScript 注入 通过恶意 JavaScript 代码注入,实现: - 凭证窃取 - 2FA 令牌获取 - 自动化操作模拟 ### C. 混淆技术 使用相同的混淆服务对 JavaScript 代码进行混淆,使检测更加困难 ## 2. 攻击基础设施关联分析 ```mermaid graph LR subgraph NPM 攻击链 A1[npmjs.cam<br/>91.202.5.162] --> A2[npmjs.help<br/>相同基础设施] end subgraph Hyperliquid 攻击链 B1[2hy.xyz<br/>91.202.5.162] --> B2[walleting.services<br/>65.108.111.55] end A1 -.共享混淆服务.-> B1 A1 -.相同 IP.-> B1 C[攻击者控制] --> A1 C --> B1 style A1 fill:#ff9999 style A2 fill:#ff9999 style B1 fill:#ff9999 style B2 fill:#ff9999 ``` <img src="https://static.op123.ren/static/f5/d8e3c7b2a1f9.svg" alt="攻击基础设施关联" width="800" style=""> ## 3. Hyperliquid 钓鱼攻击详细流程 ```mermaid sequenceDiagram participant U as 用户 participant P as 钓鱼站点<br/>2hy.xyz participant I as 恶意脚本<br/>walleting.services participant H as 合法站点<br/>Hyperliquid U->>P: 输入凭证 P->>H: 通过 iframe 加载合法页面 H-->>P: 返回页面内容 P->>I: 注入恶意 JavaScript I->>I: 检查 "Deposit" 文本 I->>I: 监控 URL 中的 'cotton' 参数 I->>H: 模拟点击和输入 Note over I,H: 设置钱包地址:<br/>0xbcc6...6649 I->>H: 触发事件处理 H-->>U: 显示转账页面 ``` <img src="https://static.op123.ren/static/a7/e9f4a8d6b3c2.svg" alt="Hyperliquid 钓鱼攻击流程" width="700" style=""> ## 4. 攻击脚本功能分析 ### A. `npmjs.help` 攻击脚本 - 窃取 2FA 访问令牌 - 添加攻击者控制的 API 密钥 - 允许恶意软件包发布 ### B. `2hy.xyz` 攻击脚本 - 完全替换合法内容 - 检测"Deposit"文本元素 - 自动化模拟用户操作 - 设置攻击者钱包地址:`0xbcc605314a9434855ed7C7a6C3c03b89FC966649` - 使用 sleep 函数模拟人类行为 # 五、解决方案 ## 1. 临时方案(已实施) ### A. 域名查封 - 恶意域名已被识别和查封 - 相关托管服务已下线 ### B. 威胁情报共享 - 发布 IOC(入侵指标)清单 - 与安全社区共享分析结果 ## 2. 永久方案 ### A. NPM 发布流程加固 - 定期清理不活跃的维护者账户 - 限制访问权限范围 - 使用公司控制账户进行发布 ### B. 域名白名单机制 - 仅接受来自 `npmjs.com` 或 `npmjs.org` 的通知 - 警惕 `npmjs.help`、`npmjs.cam` 等相似域名 ### C. 开发者安全培训 - 识别钓鱼攻击特征 - 验证域名真实性 - 警惕凭证请求 ## 3. 预防措施 ### A. 包管理器层面 - 重新评估用户信息暴露策略 - 实施更严格的身份验证 - 提供匿名化选项 ### B. 企业层面 - 建立发布管道安全审查机制 - 使用公司控制账户进行关键操作 - 定期审计维护者列表 ### C. 个人层面 - 启用 2FA/MFA - 使用专用邮箱用于开发活动 - 定期审查账户权限 # 六、经验总结 ## 1. 做得好的地方 - 安全厂商快速响应和分析 - 攻击者模式被成功识别 - 威胁情报有效共享 ## 2. 需要改进的地方 - NPM 注册表的信息暴露策略 - 开发者安全意识培训 - 包管理器的安全审查机制 ## 3. 行业启示 - 供应链安全是持续挑战 - 攻击者会不断调整战术 - 需要多层次的防御策略 # 七、入侵指标(IOC) ## 1. 恶意域名 | 域名 | 注册时间 | IP 地址 | |------|---------|---------| | npmjs.cam | 2025-08-26 | 91.202.5.162 | | 2hy.xyz | 2025-07-02 | 91.202.5.162 | | walleting.services | 2025-06-26 | 65.108.111.55 | | npmjs.help | 2025-09-05 | (已下线) | ## 2. 恶意钱包地址 - `0xbcc605314a9434855ed7C7a6C3c03b89FC966649` ## 3. 攻击特征 - 使用相同的 JavaScript 混淆服务 - iframe 加载合法网站内容 - 针对加密货币用户群体 - 使用 sleep 函数模拟人类行为 *** ## 参考资料 1. [Following up on 'The Largest (Failed) Supply Chain Attack in History' - Security Alliance Radar](https://radar.securityalliance.org/npm-follow-up/) 最后修改:2026 年 01 月 15 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏