SOC Prime Bias: Medio

03 Feb 2026 20:06

Quando il Malware Contrattacca

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso 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.

graph TB %% Class Definitions classDef action fill:#99ccff classDef file fill:#ccffcc classDef process fill:#ffeb99 classDef malware fill:#ff9999 classDef operator fill:#ff9900 %% Nodes – Files and Registry logon_script_file[“<b>File</b>: 0a1a98b5f9fc7c62.bat<br/><b>Posizione</b>: %APPDATA%\\Microsoft\\…”] class logon_script_file file run_key[“<b>Registro</b>: HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\bada287ebf”] class run_key file %% Nodes – Techniques (Actions) persistence_run[“<b>Tecnica</b> – T1037.001 Script di Inizializzazione all’Avvio o al Logon<br/><b>Descrizione</b>: File batch nascosto posizionato in %APPDATA% e registrato nella chiave Run per garantire la persistenza.”] class persistence_run action powershell_interpreter[“<b>Tecnica</b> – T1059.001 Interprete di Comandi e Script: PowerShell<br/><b>Descrizione</b>: Esegue lo script PowerShell decodificato aggirando i criteri di esecuzione.”] class powershell_interpreter action obfuscation[“<b>Tecnica</b> – T1027 File o Informazioni Offuscate<br/><b>Descrizione</b>: Array di byte cifrato con XOR e logica di compilazione dopo la consegna.”] class obfuscation action deobfuscate[“<b>Tecnica</b> – T1140 Deoffuscazione/Decodifica di File o Informazioni<br/><b>Descrizione</b>: Decodifica Base64 e XOR per produrre shellcode.”] class deobfuscate action reflective_loading[“<b>Tecnica</b> – T1620 Caricamento Riflessivo di Codice<br/><b>Descrizione</b>: Alloca memoria nel processo di destinazione e scrive il shellcode.”] class reflective_loading action process_injection[“<b>Tecnica</b> – T1055.002 Iniezione di Processo: Iniezione di File Eseguibile Portabile<br/><b>Descrizione</b>: Inietta shellcode tramite CreateRemoteThread in svchost.exe ed explorer.exe.”] class process_injection action sandbox_evasion[“<b>Tecnica</b> – T1497 Evasione da Virtualizzazione/Sandbox<br/><b>Descrizione</b>: Verifica la presenza di macchine virtuali e sandbox prima di procedere.”] class sandbox_evasion action indirect_cmd[“<b>Tecnica</b> – T1202 Esecuzione Indiretta di Comandi<br/><b>Descrizione</b>: Abilita o disabilita Gestione AttivitĂ  e Controllo Account Utente tramite C2.”] class indirect_cmd action uac_bypass[“<b>Tecnica</b> – T1548.002 Abuso dei Meccanismi di Controllo dell’Elevazione: Aggiramento del Controllo Account Utente<br/><b>Descrizione</b>: Disabilita il Controllo Account Utente e l’interfaccia di sicurezza.”] class uac_bypass action scheduled_task[“<b>Tecnica</b> – T1053 AttivitĂ /Processo Pianificato<br/><b>Descrizione</b>: Crea un’attivitĂ  schtasks.exe per eseguire il payload al logon.”] class scheduled_task action autostart[“<b>Tecnica</b> – T1547 Esecuzione Automatica all’Avvio o al Logon<br/><b>Descrizione</b>: Persistenza doppia tramite chiave Run e attivitĂ  pianificata.”] class autostart action cred_from_browser[“<b>Tecnica</b> – T1555.003 Credenziali dai Browser Web<br/><b>Descrizione</b>: Raccoglie le credenziali memorizzate.”] class cred_from_browser action alternate_auth[“<b>Tecnica</b> – T1550.004 Uso di Materiale di Autenticazione Alternativo: Cookie di Sessione Web<br/><b>Descrizione</b>: Estrae cookie di sessione e token.”] class alternate_auth action archive_data[“<b>Tecnica</b> – T1560.002 Archiviazione dei Dati Raccolti: Archiviazione tramite Libreria<br/><b>Descrizione</b>: Comprimesse in memoria le credenziali raccolte in un archivio ZIP.”] class archive_data action compression[“<b>Tecnica</b> – T1027.015 Compressione<br/><b>Descrizione</b>: Comprime i dati in formato ZIP prima dell’esfiltrazione.”] class compression action exfil_webhook[“<b>Tecnica</b> – T1567.004 Esfiltrazione tramite Webhook<br/><b>Descrizione</b>: Invia l’archivio ZIP a webhook Discord e Bot Telegram.”] class exfil_webhook action web_service[“<b>Tecnica</b> – T1102.003 Servizio Web: Comunicazione a Senso Unico<br/><b>Descrizione</b>: Utilizza HTTPS verso Discord e Telegram per l’esfiltrazione.”] class web_service action compile_after_delivery[“<b>Tecnica</b> – T1027.004 Compilazione dopo la Consegna<br/><b>Descrizione</b>: Compila codice di interoperabilitĂ  C# a runtime per l’iniezione.”] class compile_after_delivery action stripped_payload[“<b>Tecnica</b> – T1027.008 Payload Privati dei Metadati<br/><b>Descrizione</b>: Assembly .NET finale privo di metadati.”] class stripped_payload action embedded_payload[“<b>Tecnica</b> – T1027.009 Payload Incorporati<br/><b>Descrizione</b>: Il shellcode Donut incorpora il payload .NET.”] class embedded_payload action %% Nodes – Files Produced ps_script_file[“<b>File</b>: ps_7b948266.ps1<br/><b>Contenuto</b>: Decodifica il payload Base64 ed esegue.”] class ps_script_file file donut_shellcode[“<b>File</b>: decoded.bin<br/><b>Tipo</b>: Shellcode generato da Donut”] class donut_shellcode file %% Nodes – Processes svchost_process[“<b>Processo</b>: svchost.exe”] class svchost_process process explorer_process[“<b>Processo</b>: explorer.exe”] class explorer_process process %% Nodes – Malware credential_stealer[“<b>Malware</b>: Stealer .NET<br/><b>Descrizione</b>: Estrae password, cookie e token dai browser.”] class credential_stealer malware %% Connections – Attack Flow logon_script_file –>|registrato in| run_key run_key –>|abilita| persistence_run persistence_run –>|esegue| powershell_interpreter powershell_interpreter –>|esegue| ps_script_file ps_script_file –>|contiene| obfuscation obfuscation –>|richiede| deobfuscate deobfuscate –>|produce| donut_shellcode donut_shellcode –>|caricato da| reflective_loading reflective_loading –>|scrive in| svchost_process svchost_process –>|inietta tramite| process_injection process_injection –>|prende di mira| explorer_process process_injection –>|usa| compile_after_delivery process_injection –>|usa| embedded_payload explorer_process –>|esegue| credential_stealer credential_stealer –>|estrae| cred_from_browser credential_stealer –>|estrae| alternate_auth cred_from_browser –>|dati raccolti| archive_data archive_data –>|compresso da| compression compression –>|inviato tramite| exfil_webhook exfil_webhook –>|usa| web_service sandbox_evasion –>|controlla prima| powershell_interpreter indirect_cmd –>|controlla| uac_bypass scheduled_task –>|persistenza alternativa| autostart autostart –>|garantisce| persistence_run

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."