SOC Prime Bias: Medio

03 Feb 2026 17:06 UTC

Quando il Malware Contrattacca

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Segui
Quando il Malware Contrattacca
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riepilogo

Il rapporto descrive una catena di intrusione multi-stadio su Windows che combina uno script batch nascosto, un caricatore basato su PowerShell e shellcode generato da Donut per stabilire un RAT residente in memoria e persistente con capacità di furto di credenziali. Il caricatore fornisce un impianto .NET ingegnerizzato per la furtività, con una robusta copertura anti-analisi, iniezione di processi, e funzionalità di controllo remoto interattivo. I dati rubati vengono inviati tramite webhook su Discord e bot Telegram, rafforzando un design modulare focalizzato sull’esecuzione in memoria e un minimo impatto su disco.

Indagine

L’analisi ha identificato la persistenza attraverso un valore di registro Run per utente che attiva un file batch nascosto in %APPDATA%. Lo script batch contiene un blob Base64 incorporato che viene estratto e decodificato in uno stadio PowerShell. Quel caricatore decritta un payload di shellcode Donut e lo inietta in svchost.exe and explorer.exe, utilizzando API di Windows come CreateRemoteThread per eseguire l’impianto in memoria. Lo stadio decriptato si risolve in un’assembly .NET fortemente offuscata che include la funzionalità di Pulsar RAT più un modulo specifico di furto. I ricercatori hanno osservato controlli anti-VM e anti-debug, misure di sicurezza contro analisi o monitoraggio delle iniezioni, e gestori di comandi che tentano di indebolire le difese locali—come la disattivazione del Task Manager e la manipolazione del comportamento relativo all’UAC.

Mitigazione

Bloccare la creazione di file batch nascosti nei percorsi AppData scrivibili dagli utenti e indagare voci sconosciute aggiunte alle chiavi Run per utente. Monitorare le linee di comando di PowerShell per schemi di decodifica Base64 e segni di attività di iniezione di memoria remota. Utilizzare strumenti endpoint capaci di riconoscere le caratteristiche dello shellcode Donut, rilevare assembly .NET in memoria e segnalare il traffico C2 a Discord e Telegram. Applicare un elenco di autorizzazioni per le applicazioni e applicare controlli di uscita che limitano l’accesso verso endpoint webhook e C2 basati su messaggistica.

Risposta

Se rilevato, isolare l’endpoint, fermare le svchost.exe and explorer.exe istanze legate alla creazione di thread dannosi, e rimuovere sia il file batch nascosto sia il run-key associato alla persistenza. Catturare immagini di memoria per preservare artefatti in memoria, estrarre e analizzare il payload .NET, e cercare nell’ambiente comportamenti e indicatori corrispondenti. Reimpostare le credenziali potenzialmente esposte e revocare eventuali token di webhook Discord/Telegram compromessi per prevenire un’ulteriore esfiltrazione.

Parole chiave: malware Windows, caricatore PowerShell, file batch nascosto, AppData, chiave Run, shellcode Donut, CreateRemoteThread, iniezione di processi, .NET in memoria, Pulsar RAT, furto credenziali, webhook Discord, bot Telegram, anti-VM, anti-debug.

Flusso di Attacco

Rilevamenti

Possibile abuso di Telegram come canale di comando e controllo (via dns_query)

Squadra SOC Prime
02 feb 2026

Possibili Punti di Persistenza [ASEPs – Software/NTUSER Hive] (via registry_event)

Squadra SOC Prime
02 feb 2026

Richiami sospetti alle funzioni API di Windows da PowerShell (via powershell)

Squadra SOC Prime
02 feb 2026

Stringhe sospette di PowerShell (via powershell)

Squadra SOC Prime
02 feb 2026

Possibile utilizzo di Schtasks o AT per la persistenza (via cmdline)

Squadra SOC Prime
02 feb 2026

Tentativo di manipolazione sospetta del flusso di dati alternativo (ADS) Zone.Identifier (via process_creation)

Squadra SOC Prime
02 feb 2026

PowerShell che esegue il file in una directory sospetta usando la politica di esecuzione bypass (via cmdline)

Squadra SOC Prime
02 feb 2026

Indicatori di Compromesso (IOCs) (IP di Destinazione) per rilevare: Quando il Malware risponde

Regole SOC Prime AI
02 feb 2026

Indicatori di Compromesso (IOCs) (IP di Origine) per rilevare: Quando il Malware risponde

Regole SOC Prime AI
02 feb 2026

Indicatori di Compromesso (IOCs) (HashMd5) per rilevare: Quando il Malware risponde

Regole SOC Prime AI
02 feb 2026

Indicatori di Compromesso (IOCs) (HashSha1) per rilevare: Quando il Malware risponde

Regole SOC Prime AI
02 feb 2026

Persistenza via chiave Run per l’esecuzione di file batch [Evento Registro di Windows]

Regole SOC Prime AI
02 feb 2026

Rilevamento di iniezione di memoria ed esecuzione payload tramite PowerShell [Windows PowerShell]

Regole SOC Prime AI
02 feb 2026

Rilevamento di esecuzione di batch e PowerShell per la persistenza nascosta del malware [Creazione Processo Windows]

Regole SOC Prime AI
02 feb 2026

Esecuzione della Simulazione

Presupposto: Il controllo pre-volo della Telemetria & Baseline deve essere passato.

Motivo: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirare a generare la telemetria esatta attesa dalla logica di rilevamento. Esempi astratti o non correlati porteranno a una diagnosi errata.

  • Narrativa & Comandi per l’Attacco:

    1. Ricognizione e Recupero Payload – L’attaccante usa una one-liner di PowerShell per scaricare un blob di shellcode codificato in Base64 da un server C2 (simulato tramite un file locale).
    2. Offuscamento – Il payload scaricato è offuscato con XOR utilizzando la chiave 0xAA. Lo script contiene la stringa letterale “XOR” per soddisfare la seconda clausola della regola.
    3. Decodifica e De-offuscamento – L’attaccante decodifica la stringa Base64, applica l’operazione XOR in memoria e memorizza lo shellcode chiaro in un array di byte.
    4. Iniezione di Processo – Utilizzando l’API di Windows CreateRemoteThread, lo script inietta lo shellcode in un processo bersaglio benigno (notepad.exe). La linea di comando include esplicitamente il testo “CreateRemoteThread”.
    5. Esecuzione – Il thread remoto viene eseguito, ottenendo l’esecuzione del codice sull’host.
  • Script di Test di Regressione:

    # ------------------------------------------------------------
    # Campagna simulata di iniezione di memoria tramite PowerShell
    # ------------------------------------------------------------
    # 1. Prepara un payload fittizio (shellcode) – a scopo dimostrativo usiamo
    #    solo un piccolo array di byte che stampa "Injected".
    $shellcode = [Byte[]] (0x90,0x90,0x90,0x90)   # Segnaposto NOP sled
    
    # 2. Offusca il payload con XOR usando la chiave 0xAA
    $key = 0xAA
    $xorPayload = $shellcode | ForEach-Object { $_ -bxor $key }
    
    # 3. Codifica il payload XORato in Base64
    $b64 = [Convert]::ToBase64String($xorPayload)
    
    # 4. Costruisce il comando PowerShell che eseguirà l'iniezione
    $injectCmd = @"
    `$bytes = [Convert]::FromBase64String('$b64')
    # De-offuscamento XOR (letterale 'XOR' presente per il rilevamento)
    `$decoded = `$bytes | ForEach-Object { `$_ -bxor $key }
    # Avvia notepad come bersaglio per l'iniezione
    `$proc = Start-Process notepad -PassThru
    # Alloca memoria nel processo remoto
    `$addr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(`$decoded.Length)
    # Crea thread remoto (stringa letterale per il rilevamento)
    `$thread = [System.Threading.Thread]::Start( { 
    } )
    "@
    
    # 5. Codifica l'intero comando di iniezione (include marcatore ::6bbd64163c24f552::)
    $marker = '::6bbd64163c24f552::'
    $fullCmd = $marker + $injectCmd
    $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($fullCmd))
    
    # 6. Esegue il PowerShell dannoso tramite -EncodedCommand
    powershell.exe -EncodedCommand $encoded
  • Comandi di Pulizia:

    # Termina tutte le istanze di notepad avviate durante il test
    Get-Process notepad -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # Rimuove eventuali file/moduli temporanei se creati (nessuno in questa demo)
    Write-Host "Pulizia completata."