Come un File VHDX Distribuisce Remcos RAT
Detection stack
- AIDR
- Alert
- ETL
- Query
Sommario
Una campagna malware multi-stadio utilizza un archivio ZIP armato contenente un’immagine disco VHDX per eludere i controlli di sicurezza comuni. Dopo il montaggio del VHDX, un file JavaScript offuscato viene eseguito e lancia una serie di stadi PowerShell tramite WMI. Il payload finale è Remcos RAT, che viene iniettato in un processo Windows legittimo per nascondere la sua esecuzione.
Investigazione
Il ricercatore ha esaminato un archivio ZIP malevolo e il contenitore VHDX integrato per ricostruire l’intero flusso dell’attacco. L’analisi ha rivelato una catena di esecuzione complessa che utilizzava la creazione di processi basata su WMI per mascherare le relazioni padre-figlio, insieme all’offuscare delle stringhe con XOR e Base64 e un loader .NET riflettente. Il percorso di infezione è stato tracciato con successo dall’esecuzione iniziale di JavaScript fino al dispiegamento del payload finale Remcos.
Mitigazione
Le organizzazioni dovrebbero applicare controlli rigorosi per prevenire il montaggio di immagini disco VHDX da fonti non attendibili. Gli strumenti di sicurezza dovrebbero anche monitorare le attività sospette Win32_Process.Create inviate da motori di script come JavaScript o PowerShell. Bloccare domini noti come malevoli e controllare per la persistenza insolita delle chiavi Run nel registro può ulteriormente ridurre il rischio.
Risposta
Se viene rilevata questa attività, isolare immediatamente l’endpoint interessato per interrompere la comunicazione di comando e controllo. Acquisire un dump della memoria per catturare il payload iniettato di Remcos e il loader .NET riflettente. Una revisione forense completa dovrebbe quindi cercare voci di chiavi Run malevole, file VHDX aggiuntivi e attività sospette di PowerShell altrove nell’ambiente.
Flusso di attacco
Rilevamenti
Punti di Persistenza Possibili [ASEPs – Software/NTUSER Hive] (tramite registry_event)
Visualizza
Punti di Persistenza Possibili [ASEPs – Software/NTUSER Hive] (tramite cmdline)
Visualizza
LOLBAS WScript / CScript (tramite process_creation)
Visualizza
File di Disco Rigido Virtuale è stato Creato (tramite file_event)
Visualizza
Possibile Servizio DNS Dinamico è Stato Contattato (tramite dns)
Visualizza
Rilevamento di Iniezione di Processo e Loader Riflettente PowerShell .Net [Creazione Processo Windows]
Visualizza
Esecuzione di Script PowerShell tramite WMI per Evasione EDR [Windows Powershell]
Visualizza
## Esecuzione della Simulazione
Prerequisito: Il Controllo Pre-lancio di Telemetria e Baseline deve essere passato.
Razionale: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e il racconto DEVONO riflettere direttamente le TTP identificate e mirare a generare l’esatta telemetria attesa dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.
-
Narrativa dell’attacco & Comandi: L’avversario mira a eseguire un payload malevolo in memoria per evitare il rilevamento da parte dell’AV tradizionale. Utilizzano uno script PowerShell che sfrutta
[System.Reflection.Assembly]::Load()per recuperare una DLL .NET compilata direttamente da un array di byte nel processo attuale. Per mantenere la persistenza e sfuggire al controllo, tentano di avviare o interagire conbackgroundTaskHost.exe, un processo Windows legittimo, per nascondere il loro thread di esecuzione all’interno di un’attività di sistema standard. -
Script di Test di Regressione:
# Script di simulazione: Caricamento riflettente .NET e interazione con processo # Questo script imita la logica catturata dalla regola di rilevamento. # 1. Crea un array di byte fittizio rappresentante un'Assembly .NET (altamente semplificata per simulazione) $assemblyBytes = [byte[]](0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00) # Mimica intestazione MZ Write-Host "[+] Tentativo di caricamento Assembly .NET riflettente..." -ForegroundColor Cyan try { # Questa stringa specifica è un obiettivo per la regola di rilevamento $assembly = [System.Reflection.Assembly]::Load($assemblyBytes) Write-Host "[!] Successo: Assembly caricato in memoria (solo simulazione)." -ForegroundColor Green } catch { Write-Host "[-] Caricamento Assembly fallito (atteso a causa di byte fittizi non validi), ma il comando è stato inviato." -ForegroundColor Yellow } Write-Host "[+] Tentativo di invocare backgroundTaskHost.exe per attivare il rilevamento..." -ForegroundColor Cyan # Questa stringa specifica è un obiettivo per la regola di rilevamento Start-Process "C:WindowsSystem32backgroundTaskHost.exe" -ArgumentList "/test-detection" -
Comandi di Pulizia:
# Pulizia: Termina il processo backgroundTaskHost avviato Stop-Process -Name "backgroundTaskHost" -ErrorAction SilentlyContinue Write-Host "[+] Pulizia completata. BackgroundTaskHost terminato." -ForegroundColor Green