Checkmarx 安全研究团队发现了一个长达一年的供应链攻击,其中涉及恶意 NPM 软件包 @0xengine/xmlrpc。从 2023 年 10 月的一次合法 XML-RPC 实施演变成了一次复杂的网络威胁,将加密货币挖掘与数据窃取结合在了一起。这次攻击凸显了软件供应链中持续存在的漏洞。
该软件包最初是作为 “Node.js 的纯 JavaScript XML-RPC 服务器和客户端实现 ”出现的,但在 1.3.4 版本之后发生了恶意演变。“报告指出:“这种一致的更新模式有助于保持合法维护的外观,同时掩盖恶意功能。”在其生命周期中,该软件包共收到 16 次更新,最近一次更新发布于 2024 年 10 月。
恶意代码隐藏在 validator.js 文件中,只有在满足特定条件时才会激活。恶意软件模仿合法功能的能力使其在 NPM 生态系统中逃避检测的时间异常之长。
恶意软件包“@0xengine/xmlrpc”
攻击者使用了两种分发方法:
- 直接安装 NPM: 开发人员直接下载 @0xengine/xmlrpc。
- 合法软件仓库中的依赖关系: GitHub 项目 “yawpp ”伪装成 WordPress 发布工具,同时暗中安装恶意软件包。
研究人员解释说:“这种策略利用了开发人员对软件包依赖关系的信任。”通过将软件包作为依赖项嵌入到一个看起来合法的项目中,攻击者在保持隐蔽性的同时扩大了其影响范围。
一旦触发,恶意软件就会发起多阶段攻击:
- 数据盗窃: 通过 Dropbox 和 file.io API,每隔 12 小时收集和渗透 SSH 密钥、bash 历史记录和环境变量等敏感信息。
- 加密货币挖掘: 攻击利用 XMRig 挖取 Monero,目标是 Linux 系统。截至 2024 年 10 月,攻击者的 Monero 钱包通过 hashvault.pro 矿池连接了 68 个活跃矿工。
该恶意软件采用了复杂的规避技术,在检测到用户活动时停止操作,并避开安全监控工具。
为了确保长期控制,该恶意软件将自己伪装成一个合法的系统服务 “Xsession.auth”,配置为在系统启动时自动启动。这种持久机制使采矿操作在重启后能够无缝恢复。每日签到机制也使攻击者能够更新配置和接收新命令。
这一活动凸显了恶意软件包和被破解的合法软件包的双重威胁。正如研究人员所警告的,“软件包的使用寿命和持续维护历史并不能保证其安全性”。开发人员必须采取强有力的安全措施,包括
- 彻底审查所有开源依赖项。
- 定期审核软件包更新。
- 使用监控工具检测异常行为。