热门JavaScript库"is"等软件包遭npm供应链攻击植入后门
字数 1478 2025-09-01 11:26:10

NPM供应链攻击事件分析与防范指南

事件概述

2025年7月19日,多个热门JavaScript库(包括"is"、eslint-config-prettier等)在NPM平台上遭到供应链攻击。攻击者通过钓鱼手段获取开发者账户权限后,向这些库中植入了恶意代码。

受影响库清单

  • is (每周下载量超过220万次)
  • eslint-config-prettier
  • synckit
  • @pkgr/core
  • napi-postinstall
  • got-fetch

攻击技术分析

1. 初始入侵手段

  • 钓鱼攻击:攻击者发送伪装成NPM官方的验证邮件
  • 钓鱼网站:邮件包含指向伪造NPM登录页面的链接
  • 凭证窃取:开发者John Harband在不知情下提交了账户凭证

2. 恶意代码植入

攻击者获取账户权限后:

  • 发布了包含后门的新版本
  • 受影响版本范围:is v3.3.1至v5.0.0
  • 恶意包在NPM上存活约6小时才被下架

3. 后门技术细节

  • 通信机制:基于WebSocket建立通信通道
  • 功能:实现远程代码执行(RCE)能力
  • 隐蔽性:代码经过混淆处理,难以静态分析发现

4. 关联恶意软件

发现名为Scavanger的新型信息窃取软件:

  • 主要针对Windows NT系统
  • 功能:
    • 从浏览器提取敏感数据
    • 专门窃取存储的加密货币钱包凭证

应急响应措施

1. 受影响用户应立即:

  1. 审计项目依赖项

    • 检查package.json和package-lock.json/yarn.lock
    • 确认是否使用了受影响库的恶意版本
  2. 验证版本完整性

    • 使用npm audityarn audit扫描漏洞
    • 对比文件哈希值与官方发布版本
  3. 升级到安全版本

    • 更新到各库官方发布的最新净化版本
    • 示例命令:npm update is --save

2. 项目维护者应:

  1. 发布公开安全通告
  2. 撤销所有受影响版本的发布
  3. 重置所有账户凭证和API密钥
  4. 启用双因素认证(2FA)

长期防范策略

1. 账户安全

  • 强制启用2FA:NPM账户必须启用双因素认证
  • 警惕钓鱼邮件
    • 检查发件人地址是否合法
    • 不点击邮件中的直接链接,手动输入网址
    • 注意拼写错误和异常域名

2. 供应链安全

  1. 依赖项管理

    • 使用npm ci而非npm install确保版本一致性
    • 锁定依赖版本,避免自动升级到不安全版本
  2. 完整性验证

    • 启用npm的签名验证功能
    • 考虑使用lockfile-lint等工具验证lock文件
  3. 最小权限原则

    • 发布账户使用最小必要权限
    • 定期审查和维护访问控制列表

3. 开发流程安全

  1. 代码审查

    • 所有变更需经过同行评审
    • 特别关注依赖项更新
  2. 自动化安全扫描

    • 集成静态应用安全测试(SAST)工具
    • 使用npm audit或第三方工具如Snyk
  3. 发布流程

    • 实施多因素发布审批
    • 维护安全的构建环境

技术检测方法

1. 检测受影响版本

# 检查项目中是否使用了受影响的is版本
npm ls is

# 或使用yarn
yarn list is

2. 恶意代码特征

  • 异常的WebSocket连接代码
  • 可疑的eval或Function构造函数使用
  • 非常规的网络请求
  • 代码混淆或加密部分

3. 网络行为监控

  • 监控异常的出站网络连接
  • 特别关注WebSocket连接行为
  • 使用网络流量分析工具检测异常

事件响应联系人

  • NPM安全团队:security@npmjs.com
  • 受影响库维护者应通过官方渠道联系用户

总结

此次供应链攻击事件凸显了开源生态系统的脆弱性。开发者必须提高安全意识,实施多层次防护措施,从账户安全、依赖管理到发布流程进行全面加固。定期审计和安全培训应成为开发团队的常规实践。

NPM供应链攻击事件分析与防范指南 事件概述 2025年7月19日,多个热门JavaScript库(包括"is"、eslint-config-prettier等)在NPM平台上遭到供应链攻击。攻击者通过钓鱼手段获取开发者账户权限后,向这些库中植入了恶意代码。 受影响库清单 is (每周下载量超过220万次) eslint-config-prettier synckit @pkgr/core napi-postinstall got-fetch 攻击技术分析 1. 初始入侵手段 钓鱼攻击 :攻击者发送伪装成NPM官方的验证邮件 钓鱼网站 :邮件包含指向伪造NPM登录页面的链接 凭证窃取 :开发者John Harband在不知情下提交了账户凭证 2. 恶意代码植入 攻击者获取账户权限后: 发布了包含后门的新版本 受影响版本范围:is v3.3.1至v5.0.0 恶意包在NPM上存活约6小时才被下架 3. 后门技术细节 通信机制 :基于WebSocket建立通信通道 功能 :实现远程代码执行(RCE)能力 隐蔽性 :代码经过混淆处理,难以静态分析发现 4. 关联恶意软件 发现名为 Scavanger 的新型信息窃取软件: 主要针对Windows NT系统 功能: 从浏览器提取敏感数据 专门窃取存储的加密货币钱包凭证 应急响应措施 1. 受影响用户应立即: 审计项目依赖项 检查package.json和package-lock.json/yarn.lock 确认是否使用了受影响库的恶意版本 验证版本完整性 使用 npm audit 或 yarn audit 扫描漏洞 对比文件哈希值与官方发布版本 升级到安全版本 更新到各库官方发布的最新净化版本 示例命令: npm update is --save 2. 项目维护者应: 发布公开安全通告 撤销所有受影响版本的发布 重置所有账户凭证和API密钥 启用双因素认证(2FA) 长期防范策略 1. 账户安全 强制启用2FA :NPM账户必须启用双因素认证 警惕钓鱼邮件 : 检查发件人地址是否合法 不点击邮件中的直接链接,手动输入网址 注意拼写错误和异常域名 2. 供应链安全 依赖项管理 : 使用 npm ci 而非 npm install 确保版本一致性 锁定依赖版本,避免自动升级到不安全版本 完整性验证 : 启用npm的签名验证功能 考虑使用 lockfile-lint 等工具验证lock文件 最小权限原则 : 发布账户使用最小必要权限 定期审查和维护访问控制列表 3. 开发流程安全 代码审查 : 所有变更需经过同行评审 特别关注依赖项更新 自动化安全扫描 : 集成静态应用安全测试(SAST)工具 使用 npm audit 或第三方工具如Snyk 发布流程 : 实施多因素发布审批 维护安全的构建环境 技术检测方法 1. 检测受影响版本 2. 恶意代码特征 异常的WebSocket连接代码 可疑的eval或Function构造函数使用 非常规的网络请求 代码混淆或加密部分 3. 网络行为监控 监控异常的出站网络连接 特别关注WebSocket连接行为 使用网络流量分析工具检测异常 事件响应联系人 NPM安全团队:security@npmjs.com 受影响库维护者应通过官方渠道联系用户 总结 此次供应链攻击事件凸显了开源生态系统的脆弱性。开发者必须提高安全意识,实施多层次防护措施,从账户安全、依赖管理到发布流程进行全面加固。定期审计和安全培训应成为开发团队的常规实践。