文章总结: ChainScript是一款利用Polygon链上智能合约作为动态C2解析器的Node.jsRAT,通过ClickFix社工伪装成知名软件安装包传播。其核心特点是基础设施与恶意软件解耦,合约可随时更换C2地址,使域名黑名单失效。检测应聚焦进程链形态与行为组合,如node.exe先eth_call后开WebSocket外连,并建议将node.exe异常外联规则纳入基线检测。
综合评分: 88
文章分类: 恶意软件,红队,安全运营,威胁情报,应急响应
ChainScript:把C2藏进区块链合约的Node.js RAT
红队安全圈
红队安全圈
红队安全圈
2026年9月22日 08:00
重庆
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
新出一条 Node.js RAT:不连固定 C2,每次向 Polygon 链上合约发 eth_call 拿控制端地址,攻击方改合约就能整体换防,恶意软件一个字节不动。域名黑名单对它彻底失效,这篇拆它的链路和检测思路。
01 引言
一个新的 Node.js RAT 正借 ClickFix 社工话术扩散:伪装成 Spotify、Zoom、Teams 安装包,落地后不连固定 C2,而是每次向 Polygon 链上的智能合约发 eth_call 查询当前控制端地址——攻击方只要改合约内容就能整体迁移基础设施,恶意软件本体一个字节都不用动。这就是 EtherHiding 技术的实战化,域名黑名单和 IP 情报对它基本失效。
02 感染链:ClickFix 到 Node 运行时
入口是经典的 ClickFix:受害者被诱导在运行框粘贴执行一条 msiexec 命令,从 api-configuard[.]com 的 capher.php 端点带 token 拉下一个恶意 MSI。
安装包 ComponentTask33-4d14e6ac.msi 伪装成 Spotify AB 的软件。它自带一个完整的 Node.js 运行时——这一点很关键,目标机器不需要装 Node,环境完全自包含。MSI 配置全程跑在用户态,不需要管理员权限,也就不会触发 UAC。
执行链:隐藏 PowerShell 拉起 ._scatter.ps1,wscript.exe 执行 ._agent.vbs,最后启动捆绑的 node.exe 加载核心代理 app\src\index.js。
._scatter.ps1 把组件打散到一堆微软风格的用户目录:Node 运行时放 Libraries\QuickSystemSearch,主程序放 Themes\SettingsHostStandard58,配置放 INetCache\FilterManager,辅助工具放 Shell\RemoteTempPrimary。运行时、代码、配置、工具四样分家,全穿微软马甲。
持久化是双保险:先尝试建隐藏计划任务 ComponentTask33Agent(用户登录触发),失败就回退写 HKCU 的 Run 键。全程用户态,不碰系统目录。
03 核心:区块链上的 C2 解析器
这是 ChainScript 最值得研究的部分。它不内置 C2 地址,而是把 Polygon 链上的一个智能合约当作权威 DNS 用。
具体机制:代理向链 ID 137(Polygon 主网)的合约发送 eth_call 请求,函数选择器 0x4ab7874e。返回值 ABI 解码后是一个字符串,校验以 ws:// 或 wss:// 开头,缓存五分钟,然后作为 WebSocket 控制端的连接地址——配置文件里存的地址被链上返回值直接覆盖。
效果有多好?分析期间实测:合约先指向一个服务器,存活约 18 分钟;连接重置 12 分钟后,同一个合约返回了全新地址——后端整体轮换完成,已部署的恶意软件没有重新分发过。观察到的控制端端口集中在 3847,也有 3851 和 3854。
还有一个细节很说明问题:某个样本的合约在安装包编译前 23 秒才部署。这个窗口人工来不及操作,合约创建八成已经固化进恶意软件的构建流水线——基础设施即代码,字面意义。
04 功能面:完整 RAT 能力
连接建立后,app\src\index.js 承载几乎全部逻辑:CMD 与 PowerShell 交互式 shell、文件浏览与传输、桌面截图(由 .NET 辅助程序执行)、载荷投递、任意 JavaScript 执行、自更新和清理。
钱包侦察单独说一下:它会枚举目标机器装了哪些加密钱包、装在哪,但没有专门的种子词或私钥窃取代码。不过考虑到它已经有完整 shell 权限,这个区别没什么实际意义——想偷的时候一条命令的事。
同一套代码换了三件马甲:Spotify、Zoom Workplace、Microsoft Teams 三个 MSI 版本,包名和落盘布局略有差异,核心代理完全一致。两个已知构建甚至复用同一个 connect-delay-state.json 结构——记录 10 到 30 秒随机首次连接延迟,沙箱实测 24540 毫秒,与设计完全吻合。
05 检测思路:盯行为别盯地址
EtherHiding 直接改写了检测逻辑。传统打法是收集 C2 域名和 IP 做黑名单,但 ChainScript 的地址五分钟一换、合约一改全体换防,IP 情报的有效期短到没有操作价值。
真正稳定的是两类东西。一是进程链形态:msiexec 拉起 wscript、wscript 启动 VBScript、node.exe 跑 app\src\index.js——这条链是代码结构决定的,攻击者改基础设施改不掉它。对这条序列开告警,误报率低且长期有效。
二是行为组合。单独看,node.exe 发起区块链 RPC 请求不稀奇(Web3 开发者满地都是),node.exe 开 WebSocket 也不稀奇。但 node.exe 先做 eth_call 紧接着开 WebSocket 外连,这个组合就是强指标。
持久化位点:计划任务 ComponentTask33Agent、HKCU Run 键同名值、%LOCALAPPDATA% 下一系列微软命名的伪装目录。
06 红队视角
ChainScript 代表的趋势比恶意软件本身重要:Node.js 加区块链 C2 发现已经不是孤例——Tsundere、EtherRAT 等家族都在用同一配方。把基础设施从恶意软件里剥离出去,正在从技巧变成设计选择。
对红队,EtherHiding 思路有直接参考价值:链上合约是免费的、匿名的、永不下线的 C2 解析器,封锁面趋近于零。防守侧的应对只能转向行为与进程链检测,这反过来要求终端侧的进程遥测质量——没有 EDR 遥测的环境面对这类家族基本是盲的。给客户做评估时,node.exe 异常外联这类行为规则应该进基线检测清单。
07 IOC 与参考
合约与基础设施
合约 0xf9099d0d…FD4DDbCF4
(Polygon chain 137)
选择器 0x4ab7874e
端口 3847 / 3851 / 3854
域名 api-configuard[.]com
文件与持久化
ComponentTask33-*.msi
UpdateDigital-*.msi
._agent.vbs / ._scatter.ps1
app\src\index.js
connect-delay-state.json
任务 ComponentTask33Agent
https://blackpointcyber.com/blog/chainscript-tracing-a-nodejs-rat-across-the-blockchain/
ChainScript: the RAT that hides its command server inside a blockchain contract
说明:Blackpoint 原始分析报告与安全媒体报道。
如果文章对您有收获,欢迎关注、点赞、推荐、转发。
— END —
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:红队安全圈 红队安全圈
红队安全圈《ChainScript:把C2藏进区块链合约的Node.js RAT》