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.xyzwalleting.services 组合
  • 伪装成合法的 Hyperliquid 交易平台
  • 试图窃取用户凭证并转移资金

B. 针对 NPM(2025 年 9 月初)

  • 使用 npmjs.help 进行钓鱼攻击
  • 目标是获取 NPM 发布者凭证
  • 试图添加攻击者控制的 API 密钥

3. 攻击暴露与分析(2025 年 9 月 9 日后)

A. 安全厂商披露

SEAL 和多家安全厂商发布分析报告

B. 基础设施追踪

通过追踪 npmjs.help 域名的痕迹数据,发现相关联的攻击基础设施

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

攻击时间线

三、问题分析

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. 攻击基础设施关联分析

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

攻击基础设施关联

3. Hyperliquid 钓鱼攻击详细流程

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: 显示转账页面

Hyperliquid 钓鱼攻击流程

4. 攻击脚本功能分析

A. npmjs.help 攻击脚本

  • 窃取 2FA 访问令牌
  • 添加攻击者控制的 API 密钥
  • 允许恶意软件包发布

B. 2hy.xyz 攻击脚本

  • 完全替换合法内容
  • 检测"Deposit"文本元素
  • 自动化模拟用户操作
  • 设置攻击者钱包地址:0xbcc605314a9434855ed7C7a6C3c03b89FC966649
  • 使用 sleep 函数模拟人类行为

五、解决方案

1. 临时方案(已实施)

A. 域名查封

  • 恶意域名已被识别和查封
  • 相关托管服务已下线

B. 威胁情报共享

  • 发布 IOC(入侵指标)清单
  • 与安全社区共享分析结果

2. 永久方案

A. NPM 发布流程加固

  • 定期清理不活跃的维护者账户
  • 限制访问权限范围
  • 使用公司控制账户进行发布

B. 域名白名单机制

  • 仅接受来自 npmjs.comnpmjs.org 的通知
  • 警惕 npmjs.helpnpmjs.cam 等相似域名

C. 开发者安全培训

  • 识别钓鱼攻击特征
  • 验证域名真实性
  • 警惕凭证请求

3. 预防措施

A. 包管理器层面

  • 重新评估用户信息暴露策略
  • 实施更严格的身份验证
  • 提供匿名化选项

B. 企业层面

  • 建立发布管道安全审查机制
  • 使用公司控制账户进行关键操作
  • 定期审计维护者列表

C. 个人层面

  • 启用 2FA/MFA
  • 使用专用邮箱用于开发活动
  • 定期审查账户权限

六、经验总结

1. 做得好的地方

  • 安全厂商快速响应和分析
  • 攻击者模式被成功识别
  • 威胁情报有效共享

2. 需要改进的地方

  • NPM 注册表的信息暴露策略
  • 开发者安全意识培训
  • 包管理器的安全审查机制

3. 行业启示

  • 供应链安全是持续挑战
  • 攻击者会不断调整战术
  • 需要多层次的防御策略

七、入侵指标(IOC)

1. 恶意域名

域名注册时间IP 地址
npmjs.cam2025-08-2691.202.5.162
2hy.xyz2025-07-0291.202.5.162
walleting.services2025-06-2665.108.111.55
npmjs.help2025-09-05(已下线)

2. 恶意钱包地址

  • 0xbcc605314a9434855ed7C7a6C3c03b89FC966649

3. 攻击特征

  • 使用相同的 JavaScript 混淆服务
  • iframe 加载合法网站内容
  • 针对加密货币用户群体
  • 使用 sleep 函数模拟人类行为

参考资料

  1. Following up on 'The Largest (Failed) Supply Chain Attack in History' - Security Alliance Radar
最后修改:2026 年 01 月 15 日
如果觉得我的文章对你有用,请随意赞赏