攻防实战复盘
npm供应链夜袭:一场伪装成日志库的降维打击
2026年07月01日 · 周三
真实攻击复盘 高级
场景:2026年6月,某头部互联网企业(涉及金融、电商业务)SOC在凌晨3点触发多起异常外联告警,目标指向境外IP,溯源发现源头来自一个看似无害的npm依赖包。
攻击 / 事件时间线
1
初始投毒:伪装成日志库的恶意npm包
攻击者注册了名为 loglevel-helper 的npm包,版本号v1.2.3,与知名日志库 loglevel 高度相似,实现依赖混淆。该包在postinstall脚本中嵌入恶意载荷,首先检测运行环境是否为Linux x64,随后从Pastebin下载经过AES加密的Shellcode,解密后注入到Node.js进程内存中,实现无文件驻留。
npmPastebinNode.jsAES
2
横向移动:利用K8s凭据横向渗透
攻击者通过内存中的Shellcode建立反向SSH隧道,回连到C2服务器(IP: 45.xxx.xxx.23,托管在荷兰)。利用kubectl命令扫描本地.kube/config文件,获取了K8s集群的ServiceAccount令牌。随后,攻击者利用该令牌创建了一个名为monitoring-agent的DaemonSet,在所有Node节点上部署了挖矿容器(XMRig变种),并将算力回传到矿池。
KuberneteskubectlXMRigSSH隧道
3
数据窃取:绕过WAF的数据库慢查询
在挖矿行为掩盖下,攻击者通过已攻陷的Pod,利用内网DNS解析找到MySQL数据库。使用mysqldump导出用户表,数据量较大导致网络流量异常。为规避数据库审计,攻击者采用了SELECT ... INTO OUTFILE的方式,将数据分片写入临时文件,再通过curl分块POST到C2,模拟正常的API请求,成功绕过了WAF对exfiltrate行为的检测。
mysqldumpMySQLcurlWAF
蓝队视角 · 发现与处置
SOC值班人员通过Sysmon Event ID 3(网络连接)发现异常外联,目标IP关联到威胁情报平台标记为挖矿C2。
1. 立即封禁该C2 IP及关联域名;
2. 提取npm包loglevel-helper,使用YARA规则(规则名:npm_postinstall_shellcode)扫描全量Node.js依赖;
3. 通过kubectl get pods -o wide定位恶意Pod,执行kubectl cordon隔离节点,并冻结相关ServiceAccount;
4. 对受影响数据库进行全量审计,确认数据泄露范围,并重置所有泄露凭据。
涉及关键技术 / 工具
依赖混淆攻击无文件挖矿(XMRig Pod注入)Sysmon日志分析 + YARA规则匹配
防护经验总结
  • 严格实施npm私有仓库(如Verdaccio),禁止直接从公网拉取未审核的依赖包,并对postinstall脚本执行白名单控制。
  • K8s集群启用RBAC最小权限原则,禁止Pod默认挂载ServiceAccount,使用PodSecurityPolicy限制DaemonSet创建权限。
  • 数据库外联流量必须经过审计代理(如DBProxy),对SELECT INTO OUTFILE等高危操作进行实时阻断和告警。
#供应链攻击#npm投毒#K8s挖矿#无文件攻击
数据安全早知道 · 攻防实战专栏
⚠️ 免责声明
本文内容源自公开披露的安全事件或高仿真模拟场景,所有涉及的组织、系统、技术细节均经过脱敏处理,仅供安全学习与交流参考,不构成任何技术指导或合规建议。
数安早知道
🔗 数据安全与信息安全知识库 datasafe.website
— 点击上方链接访问知识库,获取更多安全资讯 —