2024 年 10 月底,一个名为 haski 的 npm 包在短短数天内席卷大量开发者电脑。攻击者首次把 以太坊智能合约 用作动态、公开的 C2 地址服务,远控木马随之潜伏。本篇文章将时空压缩还原这起软件供应链攻击细节,提炼可行防御措施,并给出可落地的排查清单。事件时间轴
- 10 月 21 日
haski与jest-fet-mock初次上线,代码实现本地回连测试 - 10 月 23 日 继续投放
1234wdzwkcsf第三版样本 - 10 月 31 日—11 月 3 日 34 个精心仿冒的恶意 npm 包同时发布,迅速到达高峰
攻击者原先仅在本地 PyPI、Docker Hub 小范围测试,真正“放大招”却选在 npm 生态最火热的时间段,目的清晰:抢占开源供应链信任链路。
恶意包如何欺骗开发者
名称 typo 抢占
has**k**i≈ huskypuppeteerfox≈ puppeteer
元数据伪造
- description、repository、homepage 字段与正版一致
- 新增两个隐性依赖
axios+ethers为智能合约交互铺路
postinstall钩子
所有受害工程只要npm install即触发随机字符命名的.cjs脚本,零交互、高成功率。
混淆脚本揭秘:三步植入远控
反混淆后的核心代码高度集中,可拆成三步:
- 通过以太坊 智能合约 调用公开函数
getString()拿动态 C2 判断平台拉取匹配 payload
- node-macos、node-linux、node-win.exe
- 静默后台执行并设启动项
由于 getString() 调用无需签名、不消耗 gas,攻击者可随时上链改地址,沙箱、IPS、域名黑名单统统失效。
👉 查看不受链上地址影响的实时监控思路
智能合约地址深度漫游
- 地址:
0xa1b40044ebc2794f207d45143bd82a1b86156c6b setString()历次修改记录
Sep-23localhost:3001→ Sep-2445.125.67.172:1228→ Oct-22193.233.201.21:3001
全部交易公开可查,安全团队据此迅速锁定最早受控 IP。毕竟区块链不可篡改,这是分析人员手中一把“双刃剑”。
Linux 木马功能速览
天穹沙箱显示 node-linux 具备以下行为:
cron写自启动任务- 每 60 秒回连智能合约 C2
- 收到
download.exec指令后,无签名加载附加 ELF 模块
一句话总结:拿到 194.53.54.188:3001,等于拿到当前受害者完整 shell 权限。
关键词:供应链攻击、npm、以太坊、智能合约、typosquatting、远控木马
下文将用场景问答方式,高密度融入上述关键词,让搜索引擎一眼看懂。
FAQ:供应链攻击防御与排查
Q1:如何快速检测仓库是否被投毒?
A:运行 npm audit 后对峙文件 SHA1;或直接对比 node-modules/*/package.json 中任何含 postinstall/preinstall 字段的包。
Q2:以太坊智能合约地址能否一键拉黑?
A:传统网络封堵失效,但可以把 getString() 返回的域名/IP 作为威胁情报节点,引入 DNS sinkhole、EDR 字段实时黑名单。
Q3:开发者个人如何防御 typosquatting?
A:强制 package-lock.json 锁版本;安装 package-name-diff 这类 VSCode 插件实时提醒拼写差异。
Q4:CI/CD 流程能否拦截?
A:在流水线加入 链上地址无关的实时监控思路,结合 GitHub Actions Egress Policy 限定可访问 IP,阻断恶意拉取。
Q5:开源组件如何确认智能合约被正常调用?
A:通过开源项目 eth-call-check 白名单去只放行 project wallet 地址,任何异常合约地址即报警。
Q6:误装了恶意包如何彻底清除?
A:删除 node_modules、package-lock.json,npm cache clean --force,再 npm install 自可信镜像。Linux/macOS 还需 launchctl list 与 crontab 手动巡查是否残留自启。
事件溯源与画像
俄语报错 Ошибка установки 多次出现,C2 托管在俄罗斯主机商 iHor。结合时间及邮箱命名机械化特征,可推断背后团队具备:
- 强烈俄语背景
- 全自动化发包脚本
- 熟悉区块链、DevOps、红队双轨流程
他们的目的并非炫技,而是 精准渗透商业 CI/CD 系统,为后续勒索或数据窃取埋下长期据点。
防御总结:四步走
包管理层面
- 使用私有仓库 + LFS 私钥签名校验
代码审计层面
- 引入 AST 反混淆,自动分析
eval/Function(bool)调用
- 引入 AST 反混淆,自动分析
运行时层面
- EDR 对
ethers库对外 RPC 调用进行策略限速
- EDR 对
威胁情报层面
- 实时监控以太坊合约地址变更,配合 STIX 格式报告自动封禁新产生的域名
供应链攻击没有终点,只有不断进化的手法。 ether、Solana、BSC 通通可能成为下一块跳板。👇
IOC 速查
- 智能合约地址
0xa1b40044EBc2794f207D45143Bd82a1B86156c6b - 钱包地址
0x52221c293a21D8CA7AFD01Ac6bFAC7175D590A84 - 恶意域名
45.125.67.172:1228、45.125.67.172:1337、193.233.201.21:3001、194.53.54.188:3001 - ELF/PE 文件 SHA1
2addf6ef678f9f663b00e13e3bb2fa0a37299dd07ac12ba9822df1f6652fd3dd67f61e026719a76a5ded160d97657902a14ecca95acfb01c7bf957d1 - 缺字母故意打错 npm 包样本(部分)
haskijest-fet-mockpuppeteerfoxsolitymetamakscoingeco
遇到以上任意 IOC,请立即更新 SIEM、代理网关或主机卫士规则,把供应链攻击风险阻断在第一次安装之前。