
Artigo
KREMLIN: análise da extensão maliciosa que forja as verificações do Chrome
TL;DR — O KREMLIN (REF9334) é uma operação brasileira de malware bancário que utiliza um JavaScript disfarçado de comprovante bancário para iniciar uma cadeia de infecção multi-estágio. O diferencial técnico está na capacidade de instalar a extensão AVSync nos navegadores Chrome e Edge forjando as verificações criptográficas de integridade do Chromium (Secure Preferences, HMACs e hashes App-Bound). Com isso, o navegador trata a extensão como aprovada sem qualquer intervenção do usuário. A operação teve 1.515 sistemas infectados ao longo de 7 campanhas em 15 meses, com 98,75% das vítimas no Brasil.
Pré-requisitos
- Conhecimento básico de navegadores Chromium (Chrome, Edge) e extensões
- Familiaridade com conceitos de malware bancário e infostealers (ladrões de informações)
- Leitura complementar: KREMLIN: a extensão fantasma que rouba sessões bancárias no Brasil, StreamRAT: análise completa, Wazuh SIEM
Introdução — O que é o KREMLIN
O KREMLIN (identificado internamente como REF9334 pela Elastic Security Labs — laboratório de pesquisa em segurança cibernética da Elastic) é uma operação brasileira de malware bancário que combina loaders (carregadores) JavaScript multi-estágio, instaladores personalizados em C++ e uma extensão maliciosa para Chromium. Batizado de KREMLIN pelo próprio autor, que usa o handle Kr3mlin4rt1st (sem qualquer relação com a Rússia), o malware tem como alvo 12 instituições financeiras brasileiras e utiliza contratos inteligentes (smart contracts) na blockchain Ethereum como resolvedor dead-drop para atualizar dinamicamente seus endpoints de C2 (command and control — servidor de comando e controle).
A Elastic Security Labs rastreou esta operação desde maio de 2025 e documentou 7 campanhas distintas ao longo de 15 meses, totalizando 1.515 sistemas infectados — 98,75% deles no Brasil. O nome KREMLIN apareceu pela primeira vez em fevereiro de 2026, em cabeçalhos de scripts JSE (JScript.Encode, formato proprietário de script ofuscado da Microsoft) que creditavam o autor e a versão 1.33.
Cadeia de infecção — do comprovante bancário à extensão fantasma
A cadeia de infecção do KREMLIN começa com um arquivo JavaScript que se passa por um documento bancário legítimo — comprovante de pagamento, boleto, extrato ou transferência PIX. A vítima recebe o arquivo por phishing (engenharia social), malvertising ou drive-by download (download automático ao visitar um site comprometido) e o executa manualmente.
O primeiro passo do loader é exibir uma mensagem de erro falsa para convencer a vítima de que o documento não foi aberto. Em segundo plano, o script executa duas verificações anti-sandbox: conta quantos arquivos existem na área de trabalho da vítima (menos de 5 indica sandbox) e consulta o WMI (Windows Management Instrumentation — interface de gerenciamento do Windows) para contar processos em execução (menos de 50 indica ambiente de análise). Se ambas as verificações indicarem um ambiente isolado, o malware aborta e faz um beacon (sinalização) para o endpoint /api/log_loader?hash= no servidor C2, registrando o ID da campanha.
Em seguida, o loader decodifica e extrai o próximo estágio JavaScript usando certutil, baixa o runtime do Node.js (legítimo) e executa o segundo estágio. Para persistência, ele extrai um arquivo CAB embutido que instala uma tarefa agendada chamada MicrosoftNodeRuntimeUpdater, configurada para executar conhost.exe --headless node.exe um minuto após o login do usuário — a descrição da tarefa ("Node.js V8 Runtime is the JavaScript engine responsible for compiling and executing Node.js applications using Google's high-performance V8 engine.") foi copiada do projeto oficial para parecer legítima.
O segundo estágio consulta um smart contract (contrato inteligente) na blockchain Ethereum — 0xCD7360A83E5cdbBbbbcEB0e78748babA6740d07b — para obter três parâmetros de configuração: main-v2 (URL do instalador da extensão), sub-module (um carrier JPEG contendo um kit de injeção de processo .NET RunPE) e sentinel (outro JPEG contendo um CAB com o binário legítimo da SentinelOne — empresa de segurança cibernética para sideloading). Os domínios observados para estes downloads incluem granderevolucao[.]store, volmira[.]site, zaviro[.]online e o serviço público Archive.org, usado para hospedar os carriers JPEG.
O instalador C++ e o sideloading via SentinelOne
O instalador principal do KREMLIN é um binário de 2,10 MB escrito em C++ para x64, compilado estaticamente com inúmeras bibliotecas — sinal de imaturidade técnica, segundo os analistas, já que o overhead (peso extra) de bibliotecas open-source incha significativamente o binário.
Para executar o próximo estágio, o malware faz sideloading (carregamento lateral) do binário legítimo SentinelMemoryScanner.exe da SentinelOne. A técnica funciona assim: o instalador coloca uma DLL maliciosa nomeada como SentinelAgentCore.dll no diretório de execução; ao carregar o binário assinado da SentinelOne, o Windows carrega automaticamente a DLL maliciosa por DLL search order hijacking (sequestro da ordem de busca de DLLs).
Dentro de DllMain, o malware utiliza uma técnica avançada para iniciar uma thread antes da inicialização completa da DLL: localiza as estruturas internas LdrpLoaderLock e LdrpWorkInProgress no ntdll.dll, libera o loader lock e limpa a variável de progresso. Isso permite que a thread principal comece a executar antes que DllMain retorne, evitando deadlocks. Esta técnica é uma implementação completa do projeto open-source LdrLockLiberator.
O instalador também implementa syscalls indiretos (chamadas de sistema indiretas): constrói um mapa de hashes de nomes de API para números de serviço do sistema (SSN) correlacionando as exportações do ntdll.dll com as entradas RUNTIME_FUNCTION na seção .pdata. O código foi rastreado até a biblioteca open-source PigSyscall.
Verificações anti-análise do instalador
Além das verificações iniciais do loader JavaScript, o instalador C++ executa uma bateria completa de anti-sandbox:
- Lista de processos: busca por nomes associados a sandboxes (joeboxcontrol.exe, sandbox.exe) e ferramentas de análise (x64dbg.exe, wireshark.exe, ghidra.exe, procmon.exe)
- Blacklist de nomes de usuário: compara o nome da conta contra uma lista predefinida (CurrentUser, Sandbox, Emily, Johnson, maltest)
- Hardware: verifica se a máquina tem mais de 2 CPUs e mais de 3 GB de RAM
- Canary de rede: tenta acessar www[.]creamp1eonlyfans[.]net — um domínio não registrado. Se obtiver resposta, assume que está em sandbox (que simulou a rede) e dispara uma violação de acesso proposital chamando o endereço inválido 0x1337
- VMware e VirtualBox: busca por drivers, DLLs e processos como vmtoolsd.exe, VBoxService.exe
Como o KREMLIN instala a extensão sem o Chrome Web Store — e forja as verificações do Chromium
O diferencial técnico mais significativo do KREMLIN é a instalação da extensão maliciosa AVSync sem passar pelo Chrome Web Store, manipulando diretamente os mecanismos de verificação de integridade do Chromium.
Antes de modificar o perfil do navegador, o malware aguarda até que o Chrome esteja fechado ou o usuário fique inativo por pelo menos dois minutos (monitorado via GetLastInputInfo). Se o navegador continuar aberto, ele o força a encerrar com TerminateProcess, tornando o desligamento menos perceptível.
Recuperação das chaves de criptografia do Chrome
O instalador precisa de três chaves para forjar as verificações do Chromium:
-
Chave OSCrypt legada (v10): extraída do arquivo %LOCALAPPDATA%\Google\Chrome\User Data\Local State, no campo os_crypt.encrypted_key. O malware remove o prefixo DPAPI de 5 bytes e decifra o blob restante com CryptUnprotectData.
-
Chave OSCrypt App-Bound (v20): o malware lança o Chrome sob um debugger com a flag --no-startup-window e processa eventos de depuração até carregar chrome.dll (ou msedge.dll). Então varre a seção .rdata em busca da string OSCrypt.AppBoundProvider.Decrypt.ResultCode, localiza uma instrução LEA RIP-relativa que referencie essa string, aplica byte-pattern matching adicional para encontrar o ponteiro do buffer da chave e usa ReadProcessMemory para ler a chave do processo do navegador.
-
Seed de integridade: extraída do arquivo resources.pak em %PROGRAMFILES%\Google\Chrome\Application\<VERSION>\. O Chromium usa esta seed para gerar tanto HMACs legados quanto hashes criptografados das novas versões (App-Bound).
Modificação do Secure Preferences
Com as chaves em mãos, o malware copia a extensão para o diretório de perfil do navegador e modifica o arquivo Secure Preferences. As alterações incluem:
- Ativar o modo desenvolvedor (extensions.ui.developer_mode e account_values.extensions.ui.developer_mode)
- Registrar a extensão em extensions.settings.<extension_id>
- Para navegadores Chrome com versão >= 144, calcular HMACs legados usando a seed do resources.pak e gerar hashes SHA-256 criptografados com a chave OSCrypt recuperada
- Escrever os valores de integridade em protection.macs: o HMAC legado e o hash criptografado (*_encrypted_hash) para cada entrada modificada, além do super_mac e super_encrypted_hash agregados
O resultado é que o Chromium carrega a extensão como se ela tivesse sido instalada e aprovada pelo próprio navegador, sem qualquer notificação ou confirmação para o usuário. Esta técnica foi originalmente documentada pela Synacktiv em The Phantom Extension: Backdooring Chrome through Uncharted Pathways.
A extensão AVSync — capacidades e protocolo C2
A extensão maliciosa se apresenta como AVSync System Inc e solicita permissões para acessar abas, cookies, armazenamento e a API webRequest. É composta por um service worker de fundo e dois content scripts (scripts injetados nas páginas visitadas).
O código JavaScript da extensão é não ofuscado e usa nomes de variáveis descritivos. A configuração contém um campo ENDPOINT_DINAMIC (com erro de digitação intencional — DINAMIC em vez de DYNAMIC), que serve como pivot para identificação de amostras adicionais. O endpoint pode ser uma URL ou um contrato inteligente Ethereum.
A comunicação com o C2 segue este fluxo:
- A extensão resolve seu endpoint C2 via ENDPOINT_DINAMIC (no exemplo analisado: graph.checkeligibitily.workers[.]dev)
- O endpoint retorna um par [host:port] (ex: luizestrelhashapr.online:443)
- A extensão gera um identificador único de vítima de 10 caracteres (ABCDEFGHJKLMNPQRSTUVWXYZ123456789)
- Conecta via WebSocket ao caminho /google_ws/ no servidor C2, enviando o ID, versão da extensão e uma tag
- Faz polling a cada 1 segundo por comandos
A extensão suporta 7 comandos operacionais via WebSocket:
| Comando | Nome | Descrição |
|---|---|---|
| GSH01 | Screenshot | Captura a aba ativa e faz upload da imagem comprimida |
| GAT01 | Get tabs | Enumera abas, domínios e estado ativo |
| GCO01 | Get cookies and storage | Rouba cookies, sessionStorage e localStorage |
| GHI01 | Get history | Coleta até 1.000 entradas de histórico dos últimos 15 dias |
| GSO01 | Get source | Extrai e envia o HTML completo da página |
| INC01 | Inject HTML | Injeta HTML controlado pelo atacante e reporta interações |
| UPD01 | Update config | Atualiza regras de interceptação, keylogging e redirect |
Além do WebSocket, a extensão faz polling periódico em endpoints que se passam por arquivos CSS (/google_api/81d47cb6.css, /google_api/a98cb43d.css etc.) para obter configurações de interceptação e redirecionamento.
Interceptação e keylogging
A configuração obtida via 81d47cb6.css contém uma lista de domínios-alvo identificados por hash MD5. Quando uma página de um banco brasileiro é carregada, a extensão pode:
- Interceptar requisições: capturar POST requests com determinados padrões de URL e método HTTP, extraindo corpo ou cabeçalhos
- Fazer keylogging: registrar um listener de evento input em todo <input> e <textarea> da página, enviando os dados digitados ao servidor C2. Utiliza MutationObserver para capturar campos adicionados dinamicamente via JavaScript
- Redirecionar cliques: com base em seletores CSS configurados, redirecionar cliques em elementos específicos para URLs controladas pelo atacante
Os dados trafegados entre a extensão e o C2 são comprimidos com a biblioteca lz-string e codificados em Base64.
Exfiltração de dados e roubo de sessões
Após instalar a extensão, o instalador do KREMLIN faz a coleta completa dos dados do navegador. Para cada perfil do Chrome, ele adiciona ao arquivo ZIP:
chrome/<user-profile>/Login Data
chrome/<user-profile>/Login Data For Account
chrome/<user-profile>/Web Data
chrome/<user-profile>/Network/Cookies
chrome/<user-profile>/Extensions/**
O instalador também produz um arquivo keys.json contendo ambas as chaves OSCrypt (v10 e v20), permitindo a decifragem posterior dos campos criptografados nos bancos de dados exfiltrados.
O ZIP é então criptografado com RC4 através da API não documentada SystemFunction032, usando o hash SHA-256 do plaintext como chave. O arquivo criptografado, o Customer ID e o hash SHA-256 são enviados para os endpoints C2 volmira[.]site//api/savecreds e zaviro[.]online//api/v1/fingerprint.
As 7 campanhas do KREMLIN
A Elastic Security Labs reconstruiu a evolução da operação desde junho de 2025, identificando 7 campanhas distintas que revelam um amadurecimento gradual das táticas.
| Campanha | Período | Cadeia de execução | Payloads | Infraestrutura principal |
|---|---|---|---|---|
| Codecaudiog A | Jun 2025 | PowerShell → RunPE → Instalador | Extensão, DonutLoader, PULSAR 1.6.6/1.7.3 | codecaudiog[.]site, codecvideowin[.]online, 185.221.23[.]133 |
| Codecaudiog B | Jun 2025 | JavaScript → Instalador | Extensão, PULSAR ou ambos | codecaudiog[.]site, version.checkeligibitily.workers[.]dev |
| Acrobat | Ago 2025 | JavaScript → PowerShell → RunPE → DonutLoader | PULSAR 1.7.1/1.7.2, sem extensão | acrobat-updater[.]com, 144.172.112[.]239 |
| Framesync | Set 2025 | Não recuperada | Extensão apenas (FrameSync Driver/Plugin) | lojinhadoluiz[.]online, orange-sun-195a.checkeligibitily.workers[.]dev |
| Donalurdesconfeitos → Cremeb | Dez 2025 a Mar 2026 | JavaScript → PowerShell → RunPE → Instalador | Extensão apenas | donalurdesconfeitos[.]site, marialurdes[.]site, cremeb[.]com |
| Cremeb QR | Abr 2026 | LNK → PowerShell → JavaScript (WSH) → Node.js → RunPE → DLL | Extensão QR, PULSAR 2.4.5 | cremeb[.]com, 37.16.74[.]100, 37.16.74[.]34 |
| Ethereum transition | Mai 2026 em diante | JavaScript → Node.js → RunPE → Instalador (e sideload SentinelOne) | Extensão AVSync, REMCOS RAT | granderevolucao[.]store, volmira[.]site, zaviro[.]online, 178.92.162[.]38 |
Destaques evolutivos importantes:
- Na campanha Acrobat (ago 2025), o módulo RunPE passou a instalar persistência via tarefa agendada chamada AcrobatBrowserExtension, executada a cada 30 minutos
- Na campanha Cremeb QR (abr 2026), o malware passou a baixar o runtime Node.js para executar o próximo estágio — comportamento mantido na versão atual. Também introduziu o Early Cascade Injection, injetando o payload no explorer.exe ao invés de mapeá-lo manualmente
- A extensão QR (ID cdgcjghdeinagopbaobhmaefigoafaaa) usava engenharia social: exibia um overlay em português pedindo reautenticação via QR code em sites como web.whatsapp.com e www.sicoob.com.br
- Na campanha Ethereum transition (mai 2026), o malware trocou o PULSAR pelo REMCOS RAT (Remote Access Trojan — trojan de acesso remoto), que oferece capacidades mais amplas. Esta foi também a primeira a utilizar o sideloading via binário legítimo da SentinelOne, eliminando a necessidade do módulo RunPE
- A infraestrutura de smart contracts evoluiu de contratos simples com variáveis nomeadas (admin, main, extension) para contratos com mapping e métodos setConfig/getConfig dedicados
Análise da blockchain Ethereum
O desenvolvedor da operação (ou operador da carteira 0x5C32A09873be70a92fd8bB5A9fED7967dE06BdE6) movimentou 20.778 USDT recebidos e 19.016 USDT enviados entre junho de 2025 e agosto de 2026. O primeiro contrato de teste (UserName) foi implantado em 16 de maio de 2026, com valores de teste como Medina, Filosofo e Danone1555IBIZA. O primeiro contrato malicioso surgiu em 19 de maio, apontando para cremeb[.]com. O contrato atual (0xCD7360A83E5cdbBbbbcEB0e78748babA6740d07b) continua ativo.
Interrupção temporária via domínio canário
A Elastic Security Labs registrou o domínio canário www[.]creamp1eonlyfans[.]net — que o malware usa para detectar sandboxes. Com o domínio registrado, os sistemas infectados (1.515 no total) passaram a receber resposta positiva, fazendo o malware acreditar que estava em ambiente de análise e abortar a execução. 98,75% desses sistemas estavam no Brasil.
Como se proteger
Atualização do navegador. Manter Chrome e Edge atualizados garante que as versões mais recentes do mecanismo App-Bound estejam ativas. Versões >= 144 do Chromium introduziram a criptografia App-Bound, que o KREMLIN precisa extrair via depuração do processo — um processo mais complexo que eleva a barra técnica para o atacante.
Monitoramento de processos. Ferramentas como Wazuh podem detectar a execução de conhost.exe --headless node.exe, a criação da tarefa agendada MicrosoftNodeRuntimeUpdater, ou a presença de processos SentinelMemoryScanner.exe fora do diretório de instalação legítimo da SentinelOne.
Proteção de endpoints. Soluções EDR (Endpoint Detection and Response) com capacidade de detecção de sideloading de DLL suspeita podem identificar o carregamento de SentinelAgentCore.dll por SentinelMemoryScanner.exe quando o binário legítimo é executado de um local inesperado.
Verificação de extensões. Usuários podem verificar as extensões instaladas em chrome://extensions e remover qualquer extensão desconhecida, especialmente aquelas com ID não reconhecido e modo desenvolvedor ativo.
Treinamento de usuários. Boa parte da infecção depende que a vítima execute manualmente um arquivo JavaScript recebido por e-mail. Campanhas de conscientização sobre não executar arquivos .js anexados a mensagens — mesmo que pareçam comprovantes bancários — reduzem significativamente a superfície de ataque.
Isolamento de navegador. Para usuários de alto risco (financeiro, administrativo), considerar o uso de navegadores isolados ou perfis separados para acesso a sistemas bancários, de modo que uma extensão maliciosa em um perfil não comprometa o outro.
Conclusão
O KREMLIN representa um salto qualitativo no malware bancário brasileiro ao demonstrar domínio técnico sobre os mecanismos de segurança mais profundos do Chromium. A capacidade de forjar as verificações criptográficas de integridade do navegador — HMACs legados, hashes App-Bound criptografados e o Secure Preferences — coloca esta operação em um patamar técnico raramente observado em malware brasileiro.
A operação combina uma engenharia social eficaz (comprovantes bancários em português, 12 instituições financeiras visadas) com técnica sofisticada (contratos inteligentes Ethereum como dead-drop resolver, sideloading via binário assinado, syscalls indiretos, anti-sandbox multicamadas). A escolha de bibliotecas open-source e a transição para REMCOS RAT sugerem que o grupo está em fase de amadurecimento e investimento.
Embora a Elastic tenha interrompido temporariamente a campanha ao registrar o domínio canário — e os 1.515 sistemas infectados tenham deixado de executar o malware — a infraestrutura permanece ativa, e novos domínios podem surgir. A melhor defesa continua sendo a prevenção: educação de usuários, monitoramento de endpoints e manutenção de navegadores atualizados.
Perguntas frequentes
O que significa KREMLIN?
KREMLIN é o nome dado pelo próprio autor do malware (handle Kr3mlin4rt1st) ao seu toolkit de malware bancário. Não tem relação com a Rússia — todas as evidências (idioma português, comentários em código, horários de transações Ethereum) apontam para operadores brasileiros.
Como a extensão AVSync é instalada sem confirmação do usuário?
O malware modifica diretamente o arquivo Secure Preferences do perfil do Chrome/Edge, ativando o modo desenvolvedor e registrando a extensão. Para que o Chromium aceite estas modificações, o malware recupera as chaves criptográficas do navegador (OSCrypt legada e App-Bound) e a seed de integridade do resources.pak, recalculando os HMACs e hashes criptografados que o navegador verifica ao carregar as preferências.
Quais bancos brasileiros são alvo do KREMLIN?
As iscas do malware mencionam 12 instituições: Banco do Brasil, Caixa, Bradesco, Sicoob, C6 Bank, Inter, BTG, Safra, PagBank, PicPay, Santander e Mercado Pago. As extensões interceptam o tráfego e injetam keylogging nestes domínios.
O KREMLIN afeta outros navegadores além do Chrome?
Sim. A análise da Elastic Security Labs confirma que o malware também visa o Microsoft Edge (Chromium). A técnica de instalação forçada e forja de verificações funciona em qualquer navegador baseado em Chromium.
Qual a diferença entre as chaves OSCrypt v10 e v20?
A chave v10 (OSCrypt legada) é derivada do DPAPI do Windows e armazenada no arquivo Local State. A chave v20 (App-Bound) foi introduzida no Chromium 127+ e é criptografada com um segredo vinculado ao processo do navegador — só pode ser recuperada executando o navegador em modo debug e lendo-a da memória do processo, o que torna o ataque significativamente mais complexo.
O que significa REF9334?
REF9334 é o identificador interno usado pela Elastic Security Labs para rastrear esta operação de malware. É um código de referência sem significado público — serve para correlação entre relatórios e indicadores de comprometimento.
O malware ainda está ativo?
A infraestrutura do KREMLIN permanece ativa. O contrato inteligente Ethereum que armazena as URLs de C2 continua no ar e pode ser atualizado a qualquer momento. A Elastic Security Labs interrompeu temporariamente a campanha ao registrar o domínio canário creamp1eonlyfans.net, mas novos domínios de C2 podem ser configurados via atualização do smart contract.
Como detectar se meu computador está infectado?
Verifique se há extensões desconhecidas em chrome://extensions com o modo desenvolvedor ativo. Procure pela tarefa agendada MicrosoftNodeRuntimeUpdater no Agendador de Tarefas do Windows. Verifique processos como conhost.exe --headless node.exe em execução. Um EDR como o Wazuh pode identificar padrões de sideloading do SentinelMemoryScanner.exe fora do diretório legítimo.
O que é a técnica de sideloading usada pelo KREMLIN?
O sideloading (ou DLL sideloading) explora a ordem de busca de DLLs do Windows. O malware coloca uma DLL maliciosa com nome esperado (SentinelAgentCore.dll) no diretório onde um executável legítimo (SentinelMemoryScanner.exe) será executado. Quando o Windows carrega o executável, automaticamente carrega a DLL falsa como se fosse parte legítima do software.
Por que o malware usa contratos inteligentes Ethereum?
O uso de Ethereum como dead-drop resolver permite que os operadores mudem os servidores de C2 e download sem alterar o binário do malware. Basta atualizar as variáveis no smart contract (com taxas de transação baixas) e todos os sistemas infectados recebem as novas URLs na próxima execução. É um mecanismo descentralizado que dificulta o takedown da infraestrutura.
Fontes e leituras adicionais
- Elastic Security Labs — The extension you never installed: KREMLIN forges Chrome's own integrity checks to steal banking sessions — 13/09/2026
- Zero Day Security — KREMLIN: a extensão fantasma que rouba sessões bancárias no Brasil — 28/09/2026
- Synacktiv — The Phantom Extension: Backdooring Chrome through Uncharted Pathways — 2026
- GitHub (ElliotKillick) — LdrLockLiberator — 2026
- GitHub (evilashz) — PigSyscall — 2026
- Outflank — Introducing Early Cascade Injection — 15/10/2024
- Zero Day Security — StreamRAT: análise completa do RAT brasileiro — 2026
- Zero Day Security — Wazuh SIEM: guia completo do SIEM open-source — 2026