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 年披露。其核心原理是:
- 命名空间冲突:组织内部使用的私有包通常不会在公共注册表(如 npm)上发布
- 注册表优先级:当包管理器(如 npm)同时配置了公共和私有注册表时,可能会优先从公共注册表获取包
- 版本号欺骗:攻击者可以发布一个版本号更高的恶意包到公共注册表
在 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 攻击的分析,建议以下技术参数:
- 下载量异常阈值:监控包下载量的突然激增(如 24 小时内增长超过 500%)
- 版本发布频率:警惕短时间内发布大量版本(如一周内发布 10 个以上版本)
- 代码相似度检查:使用代码相似度分析工具,阈值建议设置为 85% 以上相似度时触发警报
- 网络连接监控:
- 允许的域名白名单
- 最大数据传输量阈值(如单次传输超过 1MB 时记录)
- 连接频率限制(如每分钟超过 10 次连接到同一域名)
案例研究:lotusbail 的检测与缓解
检测指标
安全团队可以通过以下指标检测 lotusbail 类攻击:
-
包元数据异常:
- 包描述与功能不符
- 维护者信息缺失或可疑
- 许可证信息异常
-
代码特征:
- 硬编码的 URL 或密钥
- 反调试代码模式
- 异常的数据加密 / 编码操作
-
行为特征:
- 运行时建立到未知域名的 WebSocket 连接
- 异常的数据收集行为
- 尝试访问设备链接 API
缓解步骤
如果检测到 lotusbail 或类似恶意包:
- 立即隔离:从所有系统中移除受影响的包
- 审计影响:确定哪些系统和用户受到影响
- 凭证轮换:轮换所有可能泄露的凭证和密钥
- 设备检查:指导用户检查 WhatsApp 的已链接设备列表
- 监控增强:加强对受影响系统的监控
未来趋势与防护建议
供应链攻击正在变得更加复杂和隐蔽。未来可能出现的趋势包括:
- AI 生成的恶意代码:攻击者可能使用 AI 生成更难以检测的恶意代码
- 供应链攻击链:攻击可能针对供应链的多个环节,形成攻击链
- 零日漏洞利用:结合供应链攻击和零日漏洞利用
长期防护建议
- 采用零信任架构:对所有依赖关系实施最小权限原则
- 实施软件物料清单(SBOM):为所有软件组件维护详细的物料清单
- 持续安全培训:提高开发人员对供应链攻击的认识
- 社区协作:参与安全社区,共享威胁情报
结论
lotusbail 恶意 NPM 包事件揭示了现代供应链攻击的复杂性和危险性。通过 WebSocket 包装和设备链接劫持,攻击者能够建立持久的后门访问,而依赖混淆攻击则利用了包管理系统的设计缺陷。
防护这类攻击需要多层次的方法:结合静态分析、动态监控和运行时保护;实施组织级的最佳实践;建立有效的应急响应机制。最重要的是,安全团队需要认识到,传统的安全工具可能无法检测这类高级攻击,必须采用专门针对供应链安全的解决方案。
随着软件供应链变得越来越复杂,对依赖关系的安全管理和监控将成为每个组织的关键安全能力。只有通过持续的努力和创新的防护策略,才能有效抵御不断进化的供应链攻击。
资料来源:
- The Hacker News - "Fake WhatsApp API Package on npm Steals Messages, Contacts, and Login Tokens" (2025-12-22)
- Koi Security 研究报告 - 对 lotusbail 恶意包的技术分析
- Snyk Blog - "Detect and prevent dependency confusion attacks on npm to maintain supply chain security" (2021-09-13)