Hotdry.
ai-security

分析恶意NPM包通过依赖链窃取WhatsApp消息的技术实现与供应链安全检测方案

深入剖析lotusbail恶意NPM包如何通过WebSocket包装和设备链接劫持窃取WhatsApp消息,探讨依赖混淆攻击的供应链安全风险,并提供工程化的检测与防护方案。

2025 年 12 月,网络安全研究人员披露了一个名为 "lotusbail" 的恶意 NPM 包,该包伪装成功能完整的 WhatsApp API,却在背后窃取用户的 WhatsApp 凭证、拦截所有消息、收集联系人列表,并建立持久后门。这个包已被下载超过 56,000 次,揭示了现代供应链攻击的复杂性和隐蔽性。

技术实现:WebSocket 包装与设备链接劫持

WebSocket 包装层的数据拦截

lotusbail 包的核心攻击机制在于其对 WebSocket 通信的包装。该包基于合法的@whiskeysockets/baileys库构建,这是一个用于与 WhatsApp Web API 交互的 TypeScript WebSocket 库。攻击者在正常的 WebSocket 客户端之上添加了一个恶意包装层。

当开发者使用 lotusbail 库连接到 WhatsApp 时,所有通过 WebSocket 传输的数据都会经过这个包装层。Koi Security 的研究人员 Tuval Admoni 指出:"一旦你进行身份验证并开始发送 / 接收消息,拦截就会启动。除了正常使用 API 外,不需要任何特殊功能。"

这个包装层能够捕获:

  • 身份验证令牌和会话密钥
  • 完整的消息历史记录
  • 包含电话号码的联系人列表
  • 媒体文件和文档

所有被窃取的数据都会经过加密,然后发送到攻击者控制的服务器。这种设计使得传统的静态代码分析工具难以检测,因为从表面上看,代码确实实现了 WhatsApp API 的功能。

设备链接劫持的持久后门

更危险的是,lotusbail 包含一个硬编码的配对码,用于劫持 WhatsApp 的设备链接过程。当用户使用该库进行身份验证时,不仅会链接自己的应用程序,还会同时链接攻击者的设备。

Koi Security 的 Idan Dardikman 解释道:"后门配对码在身份验证流程中激活 —— 所以攻击者的设备在你将应用程序连接到 WhatsApp 的那一刻就被链接了。"

这种攻击的持久性令人担忧。即使开发者卸载了 lotusbail 包,攻击者的设备仍然保持与受害者 WhatsApp 账户的链接。要断开连接,用户必须手动进入 WhatsApp 应用的设置,找到已链接设备列表并移除攻击者的设备。大多数用户根本不会意识到有额外的设备链接到自己的账户。

反调试保护机制

为了增加检测难度,lotusbail 还包含了反调试功能。当检测到调试工具时,代码会进入无限循环陷阱,导致执行冻结。这使得安全研究人员在动态分析过程中难以追踪恶意行为。

依赖混淆攻击:供应链安全的致命弱点

lotusbail 攻击的成功部分归功于依赖混淆(dependency confusion)攻击模式。这种攻击利用了一个基本的设计缺陷:私有包名在公共注册表中不存在时,任何人都可以注册相同的包名。

依赖混淆的工作原理

依赖混淆攻击最早由 Alex Birsan 在 2021 年披露。其核心原理是:

  1. 命名空间冲突:组织内部使用的私有包通常不会在公共注册表(如 npm)上发布
  2. 注册表优先级:当包管理器(如 npm)同时配置了公共和私有注册表时,可能会优先从公共注册表获取包
  3. 版本号欺骗:攻击者可以发布一个版本号更高的恶意包到公共注册表

在 JavaScript 和 Node.js 生态系统中,使用作用域包(scoped packages)可以大大减少这种攻击面。然而,许多组织仍然使用非作用域包名,或者配置不当的私有注册表。

lotusbail 的伪装策略

lotusbail 通过模仿流行的 WhatsApp API 库来增加可信度。它复制了合法库的 README 文件,提供了看似完整的功能文档。对于匆忙的开发者来说,这种伪装很难被发现。

更令人担忧的是,传统的安全检测方法在这种情况下失效。正如 Koi Security 团队所说:"供应链攻击并没有放缓 —— 它们正在变得更好。传统安全无法捕获这一点。静态分析看到工作的 WhatsApp 代码并批准它。声誉系统看到了 56,000 次下载,并信任它。恶意软件隐藏在 ' 这段代码有效 ' 和' 这段代码只做它声称的事情 ' 之间的差距中。"

工程化检测与防护方案

静态分析与动态监控的结合

要有效检测这类攻击,需要结合多种检测方法:

1. 依赖关系审计工具

使用专门的供应链安全工具进行依赖关系审计。例如:

  • Snyk 的 snync 工具:专门用于检测潜在的依赖混淆漏洞
  • GitHub 的 Dependabot:自动扫描依赖关系中的安全漏洞
  • Socket.dev:提供深入的包分析和风险评分

这些工具可以检查:

  • 包是否来自预期的源(私有注册表 vs 公共注册表)
  • 依赖关系图中是否存在已知的恶意包
  • 包的元数据是否可疑(如突然的下载量激增)

2. 运行时行为监控

由于静态分析可能无法检测 lotusbail 这类攻击,运行时监控变得至关重要:

// 示例:监控WebSocket连接的异常行为
const originalWebSocket = window.WebSocket;
window.WebSocket = function(...args) {
  const ws = new originalWebSocket(...args);
  
  // 监控消息发送
  const originalSend = ws.send;
  ws.send = function(data) {
    // 检查是否包含敏感数据
    if (containsSensitiveData(data)) {
      logSuspiciousActivity('WebSocket data exfiltration', data);
    }
    return originalSend.call(this, data);
  };
  
  return ws;
};

3. 网络流量分析

监控应用程序的网络流量,特别关注:

  • 到未知或可疑域名的连接
  • 异常的数据传输模式
  • 加密流量的元数据(如数据包大小、频率)

组织级防护策略

1. 私有注册表的最佳实践

  • 强制使用作用域包:要求所有内部包使用组织作用域(如@company/package-name
  • 配置正确的注册表优先级:确保私有注册表在公共注册表之前被查询
  • 实施包签名:要求所有内部包进行数字签名验证

2. 开发流程集成

  • 预提交钩子:在代码提交前运行依赖安全检查
  • CI/CD 管道集成:在构建过程中自动扫描依赖关系
  • 审批工作流:对新引入的依赖关系进行人工或自动审批

3. 应急响应计划

建立针对供应链攻击的应急响应计划:

  • 隔离受影响系统:立即隔离运行恶意依赖的系统
  • 撤销访问凭证:如果凭证可能已泄露,立即撤销
  • 审计受影响账户:检查所有可能受影响的用户账户和服务

技术参数与阈值建议

基于对 lotusbail 攻击的分析,建议以下技术参数:

  1. 下载量异常阈值:监控包下载量的突然激增(如 24 小时内增长超过 500%)
  2. 版本发布频率:警惕短时间内发布大量版本(如一周内发布 10 个以上版本)
  3. 代码相似度检查:使用代码相似度分析工具,阈值建议设置为 85% 以上相似度时触发警报
  4. 网络连接监控
    • 允许的域名白名单
    • 最大数据传输量阈值(如单次传输超过 1MB 时记录)
    • 连接频率限制(如每分钟超过 10 次连接到同一域名)

案例研究:lotusbail 的检测与缓解

检测指标

安全团队可以通过以下指标检测 lotusbail 类攻击:

  1. 包元数据异常

    • 包描述与功能不符
    • 维护者信息缺失或可疑
    • 许可证信息异常
  2. 代码特征

    • 硬编码的 URL 或密钥
    • 反调试代码模式
    • 异常的数据加密 / 编码操作
  3. 行为特征

    • 运行时建立到未知域名的 WebSocket 连接
    • 异常的数据收集行为
    • 尝试访问设备链接 API

缓解步骤

如果检测到 lotusbail 或类似恶意包:

  1. 立即隔离:从所有系统中移除受影响的包
  2. 审计影响:确定哪些系统和用户受到影响
  3. 凭证轮换:轮换所有可能泄露的凭证和密钥
  4. 设备检查:指导用户检查 WhatsApp 的已链接设备列表
  5. 监控增强:加强对受影响系统的监控

未来趋势与防护建议

供应链攻击正在变得更加复杂和隐蔽。未来可能出现的趋势包括:

  1. AI 生成的恶意代码:攻击者可能使用 AI 生成更难以检测的恶意代码
  2. 供应链攻击链:攻击可能针对供应链的多个环节,形成攻击链
  3. 零日漏洞利用:结合供应链攻击和零日漏洞利用

长期防护建议

  1. 采用零信任架构:对所有依赖关系实施最小权限原则
  2. 实施软件物料清单(SBOM):为所有软件组件维护详细的物料清单
  3. 持续安全培训:提高开发人员对供应链攻击的认识
  4. 社区协作:参与安全社区,共享威胁情报

结论

lotusbail 恶意 NPM 包事件揭示了现代供应链攻击的复杂性和危险性。通过 WebSocket 包装和设备链接劫持,攻击者能够建立持久的后门访问,而依赖混淆攻击则利用了包管理系统的设计缺陷。

防护这类攻击需要多层次的方法:结合静态分析、动态监控和运行时保护;实施组织级的最佳实践;建立有效的应急响应机制。最重要的是,安全团队需要认识到,传统的安全工具可能无法检测这类高级攻击,必须采用专门针对供应链安全的解决方案。

随着软件供应链变得越来越复杂,对依赖关系的安全管理和监控将成为每个组织的关键安全能力。只有通过持续的努力和创新的防护策略,才能有效抵御不断进化的供应链攻击。


资料来源

  1. The Hacker News - "Fake WhatsApp API Package on npm Steals Messages, Contacts, and Login Tokens" (2025-12-22)
  2. Koi Security 研究报告 - 对 lotusbail 恶意包的技术分析
  3. Snyk Blog - "Detect and prevent dependency confusion attacks on npm to maintain supply chain security" (2021-09-13)
查看归档