事件概述
2026年8月初,安全研究员Paul McCarty在npm注册表中发现了一个惊人的攻击事件:
近800个恶意npm包被批量发布
代号 Flooding Dropper / WEL1DROPPER
目标覆盖 Windows、macOS、Linux 三大系统
疑似为4月发现的 Moika 运动的升级版(Moika涉及约250个包)这些包携带远程访问木马(RAT)和信息窃取器,通过npm这一软件供应链入口,将恶意代码注入到 unsuspecting 开发者的项目中。
AI生成包名的规模化伪装
传统做法 vs 新趋势
preinstall/postinstall生命周期钩子
包发布后自动触发恶意脚本
Flooding Dropper 的创新:
使用 AI自动生成 的包名
包名是合法包的拼写错误版本(typo-squatting)
例如:
axios→axi0s、react→reacct等
README中诱导开发者手动使用
require()加载
为什么AI生成包名更危险?
混淆手法
包内包含一个名为 lib/telemetry.js 的文件:
实现了看似合理的遥测SDK
包含与恶意下载器相同的逻辑
包入口点不导入此文件
目的:增加噪音,让快速审查者误以为是正常的分析功能
DNS TXT记录作为备用C2通道
攻击链路
npm包安装 → 执行下载器 → 识别OS/架构 → 尝试Cloudflare Workers →
失败则切换到DNS TXT记录 → 获取第二阶段载荷双通道设计
主通道:Cloudflare Workers
oob-worker.cf103-070.workers.dev
oob-worker.cf102-baf.workers.dev
oob-worker.cf99-9b3.workers.dev
备用通道:DNS TXT记录
域名:
wel1.ru
子域分平台:
sdk.dl.wel1.ru(Linux x64)
ext.dl.wel1.ru(Linux ARM64)
pkg.dl.wel1.ru(macOS)
net.dl.wel1.ru(Windows)
DNS TXT记录的技术细节
恶意软件执行以下步骤:
请求
c.<domain>的TXT记录解析响应为载荷块数量(1-2000之间的值)
请求编号的TXT记录(如
1.c.<domain>、2.c.<domain>)返回的字符串连接并Base64解码为二进制缓冲区
写入临时目录后执行
为什么选择DNS TXT?
DNS流量通常被防火墙放行
难以通过HTTPS代理检测
可快速更换解析记录实现动态C2
绕过基于域名的黑白名单
跨平台恶意软件的分发策略
Windows:深度对抗检测
ETW(Windows Event Tracing) 修补:禁用系统事件追踪
AMSI(Anti-Malware Scan Interface) 修补:绕过反恶意软件扫描
沙箱/虚拟机检测:避免在分析环境中运行
持久化:注册表Run键 + 计划任务双保险
macOS:隐蔽持久化
使用LaunchAgent实现开机自启
执行环境检测(调试器、分析工具特征)
下载远程服务器上的Payload
Linux:C2框架部署
UPX打包ELF二进制,降低特征体积
配置硬编码的Cloudflare Worker URL
最终部署 Sliver —— 开源的一个红队C2框架
攻击者可完全控制受害者Linux主机
npm供应链安全的新趋势
The Hacker News: Nearly 800 Malicious NPM Packages
OpenSourceMalware: Paul McCarty的分析报告
Palo Alto Networks Unit 42: npm/PyPI供应链攻击报告