用Claude Code 找到攻击者
有人在我的生产系统中挖矿。整个调查过程不到一小时。不是因为我快。而是因为 Claude Code 很快。
AI编程/Vibe Coding 遇到问题需要帮助的,联系微信 ezpoda,免费咨询。
新年第一天。手里拿着咖啡。准备慢慢回到工作中。
然后我看到了日志。
2026-01-02T06:34:27 GET xmrig-6.24.0-linux-static-x64.tar.gz
2026-01-02T06:34:30 GET http://37.32.6.33:7979/m
2026-01-02T06:34:30 spawn /opt/systemf/m ENOENT
Xmrig。在生产环境中。有人正在我的客户 Kubernetes 集群中挖掘门罗币。
令人震惊。
1、调查过程
我有几百兆的 JSON 日志,对手动关联时间戳毫无耐心。所以我做了任何理性的人会做的事情:我让 Claude Code 分析日志并找出触发矿工下载的原因。
几秒钟内,它构建了时间线:
时间 事件
- 06:34:26 正常请求到 /onboarding
- 06:34:27 从 GitHub 下载 xmrig
- 06:34:30 从可疑 IP 下载第二个负载
- 06:34:57 容器 OOMKilled
这个加密货币矿工消耗资源如此之多,以至于在 30 秒内消耗了 2GB 内存并导致容器崩溃。讽刺的是。攻击者的贪婪让我们避免了长期的妥协。
但他们是怎么办到的?
2、追踪错误线索
Claude Code 的第一个嫌疑人是一个低版本的 npm 包叫做 device-unique-keygen。由一个电子邮件与包维护者匹配的开发者添加。经典的供应链攻击模式。
我感到兴奋。可能太兴奋了。
Claude Code 获取了 GitHub 仓库,分析了源代码,检查了 postinstall 脚本,寻找混淆代码,搜索了 eval() 调用。
什么也没有。该包是干净的。只是一个浏览器指纹库。无聊。合法的。
我们继续前进。
没有恶意的 init 容器。没有 sidecars。没有 .ashrc 的把戏。Dockerfile 是干净的。Pod 规范是干净的。
除了有人确实在我们的基础设施上挖矿,一切都干净。
3、真正的答案
Claude Code 在代码库上运行了 npm audit。
critical │ Next.js is vulnerable to RCE in React flight protocol
Package │ next
Patched │ >=15.3.6
Your ver │ 15.3.4
CVSS │ 10.0
CVSS 10.0。最高可能的分数。安全评级中的“你的房子正在被主动烧毁”的级别。
应用程序正在运行 Next.js 15.3.4。一个公开披露的 RCE 漏洞。不需要身份验证。攻击者可以通过发送精心设计的请求在服务器上运行任意命令。
这就是发生的事情。他们发送了一个请求,运行了两次 wget,下载了矿工,并开始从他们未付费的计算周期中提取加密货币价值。
容器的内存限制阻止了他们。每月 20 美元的 Kubernetes 资源限制防止了可能的持续盗窃。
4、Claude Code 实际做了什么
我想明确说明这里发生了什么。我没有独自解开一个复杂的攻击。我没有手动关联日志时间戳或逆向工程混淆的 npm 包。
我说“检查这些日志”,而 Claude Code 做了:
- 从 JSON 日志条目中构建时间线
- 识别恶意工件和 C2 服务器
- 追踪 git blame 找出添加可疑包的人
- 从 GitHub 获取并分析源代码
- 逐一排除攻击路径
- 通过 npm audit 找到实际漏洞
- 将 OOMKill 时间与攻击相关联
- 建议修复措施和取证保存步骤
整个调查不到一小时。不是因为我快。而是因为 Claude Code 很快。
5、修复方法
pnpm update next@^15.3.6
一个命令。这就是修复 CVSS 10.0 漏洞的方法。
我们还对被破坏的 Pod 进行了取证分析,旋转了密钥,并添加了适当的安全上下文以防止未来的 wget 冒险。

6、教训
两件事拯救了我们:
- 集中式日志(没有日志就无法进行调查)
- 内存限制(攻击者的矿工自己杀死了自己)
一件事本来可以完全防止这种情况:在部署之前运行 npm audit。
攻击者利用了一个公开披露并已修复的漏洞。我们只是还没有更新而已。
祝你在自己的依赖项更新中好运。
原文链接:I Found a Cryptominer in My Client’s Production Cluster. Claude Code Found the Attacker.
汇智网翻译整理,转载请标明出处