热门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. 受影响用户应立即:
-
审计项目依赖项
- 检查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. 检测受影响版本
# 检查项目中是否使用了受影响的is版本
npm ls is
# 或使用yarn
yarn list is
2. 恶意代码特征
- 异常的WebSocket连接代码
- 可疑的eval或Function构造函数使用
- 非常规的网络请求
- 代码混淆或加密部分
3. 网络行为监控
- 监控异常的出站网络连接
- 特别关注WebSocket连接行为
- 使用网络流量分析工具检测异常
事件响应联系人
- NPM安全团队:security@npmjs.com
- 受影响库维护者应通过官方渠道联系用户
总结
此次供应链攻击事件凸显了开源生态系统的脆弱性。开发者必须提高安全意识,实施多层次防护措施,从账户安全、依赖管理到发布流程进行全面加固。定期审计和安全培训应成为开发团队的常规实践。