Quando il Malware Contrattacca
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)
Visualizza
Possibili Punti di Persistenza [ASEPs – Software/NTUSER Hive] (via registry_event)
Visualizza
Richiami sospetti alle funzioni API di Windows da PowerShell (via powershell)
Visualizza
Stringhe sospette di PowerShell (via powershell)
Visualizza
Possibile utilizzo di Schtasks o AT per la persistenza (via cmdline)
Visualizza
Tentativo di manipolazione sospetta del flusso di dati alternativo (ADS) Zone.Identifier (via process_creation)
Visualizza
PowerShell che esegue il file in una directory sospetta usando la politica di esecuzione bypass (via cmdline)
Visualizza
Indicatori di Compromesso (IOCs) (IP di Destinazione) per rilevare: Quando il Malware risponde
Visualizza
Indicatori di Compromesso (IOCs) (IP di Origine) per rilevare: Quando il Malware risponde
Visualizza
Indicatori di Compromesso (IOCs) (HashMd5) per rilevare: Quando il Malware risponde
Visualizza
Indicatori di Compromesso (IOCs) (HashSha1) per rilevare: Quando il Malware risponde
Visualizza
Persistenza via chiave Run per l’esecuzione di file batch [Evento Registro di Windows]
Visualizza
Rilevamento di iniezione di memoria ed esecuzione payload tramite PowerShell [Windows PowerShell]
Visualizza
Rilevamento di esecuzione di batch e PowerShell per la persistenza nascosta del malware [Creazione Processo Windows]
Visualizza
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:
- 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).
- 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. - 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.
- 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”. - 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."