JavaScript offuscato al centro dell’attacco
Detection stack
- AIDR
- Alert
- ETL
- Query
Sommario
Un’email di phishing ha consegnato un file JavaScript malevolo all’interno di un archivio RAR, innescando una catena di infezione che termina con l’esecuzione del malware Formbook. Una volta lanciato, lo script scrive più file nella cartella pubblica, stabilisce la persistenza attraverso un’attività pianificata e avvia un payload PowerShell che decrittografa il contenuto criptato con AES per caricare una DLL .NET malevola. Questa DLL viene quindi iniettata in un MSBuild.exe processo, dove continua l’esecuzione e distribuisce la fase finale del malware. La campagna incorpora anche diversi metodi di evasione delle difese, inclusa la modifica di ETW e AMSI per ridurre la rilevazione.
Indagine
Durante l’analisi, i ricercatori hanno identificato il dropper JavaScript cbmjlzan.JS, insieme a un’attività pianificata configurata per eseguire lo script copiato ogni quindici minuti per la persistenza. Hanno anche tracciato il comando PowerShell responsabile della decodifica dei dati codificati in base64 nascosti all’interno di file immagine. Il contenuto decrittato ha rivelato una DLL .NET che è stata iniettata in MSBuild.exe e utilizzata per consegnare Formbook. Ulteriori indicatori, inclusi i percorsi dei file, i nomi delle attività e il materiale crittografico, sono stati estratti per supportare indagini più approfondite e lo sviluppo della rilevazione.
Mitigazione
Le organizzazioni dovrebbero bloccare l’esecuzione di file JavaScript e script PowerShell non attendibili lanciati da directory accessibili agli utenti, monitorando attentamente le attività pianificate create con nomi insoliti o dall’aspetto casuale. Dovrebbero essere applicati controlli di esecuzione a MSBuild.exe per prevenire abusi nelle catene di malware. Gli strumenti di sicurezza dovrebbero anche rilevare il comportamento di iniezione DLL, la manomissione di ETW e AMSI e le firme note relative a Formbook. La formazione sulla consapevolezza degli utenti rimane importante per ridurre il rischio posto dagli allegati di phishing.
Risposta
I difensori dovrebbero generare avvisi quando appare il file JavaScript identificato o l’attività pianificata correlata, quindi isolare il terminale compromesso e raccogliere prove volatili per l’analisi. I file malevoli dovrebbero essere rimossi, l’attività pianificata eliminata e la DLL iniettata esaminata completamente per comprendere l’intero flusso di esecuzione. Qualsiasi componente di sistema compromesso dovrebbe essere ricostruito o ripristinato per garantire l’integrità. Gli IOC pertinenti dovrebbero anche essere condivisi con la comunità di sicurezza più ampia per aiutare altri a rilevare attività simili.
"graph TB %% Class definitions classDef action fill:#ffcccc classDef tool fill:#99ccff classDef process fill:#ffff99 classDef file fill:#ccffcc classDef malware fill:#ffcc99 %% Nodes email_phishing["<b>Azione</b> – <b>T1566.001 Allegato Spearphishing</b><br/>Allegato RAR maligno consegnato via eu2011mail"] class email_phishing action tool_wsh["<b>Strumento</b> – <b>Nome</b>: Windows Script Host (JavaScript)<br/><b>Tecnica</b>: T1559.001 Model Object Component"] class tool_wsh tool action_copy["<b>Azione</b> – <b>T1559.001 Model Object Component</b><br/>Lo script si copia su C:UsersPublicLibraries"] class action_copy action action_sched["<b>Azione</b> – <b>T1053 Attività pianificata/Lavoro</b><br/>Crea un’attività pianificata per la persistenza"] class action_sched action tool_ps["<b>Strumento</b> – <b>Nome</b>: PowerShell<br/><b>Tecnica</b>: T1059.001 Comando e Interprete di Scripting"] class tool_ps tool action_decode["<b>Azione</b> – <b>T1027.004 Compilazione Dopo la Consegna</b> & <b>T1140 Deoffuscazione/Decodifica File</b><br/>Decodifica Base64 e decrittazione AES di blob crittografati"] class action_decode action action_patch["<b>Azione</b> – <b>T1027.005 Rimozione Indicatori dagli Strumenti</b><br/>Liveu2011patches ETW e AMSI per eludere la rilevazione"] class action_patch action file_dll["<b>File</b> – <b>Nome</b>: Orio.png (contiene DLL .NET crittografato)<br/><b>Tecnica</b>: Payload Nascosto"] class file_dll file process_msbuild["<b>Processo</b> – <b>Nome</b>: msbuild.exe<br/><b>Tecnica</b>: T1127.001 Proxy di Esecuzione degli Strumenti Sviluppatori Fidati"] class process_msbuild process action_inject["<b>Azione</b> – <b>T1055.001 Iniezione di Processo</b><br/>Inietta DLL decriptata in msbuild.exe"] class action_inject action malware_formbook["<b>Malware</b> – <b>Nome</b>: Formbook<br/><b>Fonte</b>: Payload incorporato in Brio.png"] class malware_formbook malware %% Edges / Flow email_phishing –>|consegna| tool_wsh tool_wsh –>|usa COM per| action_copy action_copy –>|porta a| action_sched tool_wsh –>|avvia| tool_ps tool_ps –>|esegue| action_decode tool_ps –>|applica| action_patch action_decode –>|produce| file_dll action_patch –>|prepara l’ambiente per| file_dll file_dll –>|caricato da| process_msbuild process_msbuild –>|riceve| action_inject action_inject –>|estrae il payload finale da| malware_formbook "
Flusso di Attacco
Rilevamenti
Stringhe di PowerShell Sospette (via cmdline)
Visualizza
Stringhe di PowerShell Sospette (via powershell)
Visualizza
LOLBAS WScript / CScript (via creazione_processi)
Visualizza
Esecuzione Sospetta dal Profilo Utente Pubblico (via creazione_processi)
Visualizza
Richiamo di Metodi .NET Sospetti da PowerShell (via powershell)
Visualizza
File Sospetti nel Profilo Utente Pubblico (via evento_file)
Visualizza
Persistenza JavaScript Offuscata e Iniezione di Payload Malevolo [Creazione di Processi Windows]
Visualizza
Esecuzione di PowerShell Offuscato per Decrittazione [PowerShell Windows]
Visualizza
Esecuzione della Simulazione
Prerequisito: Il Controllo Preliminare di Telemetria e Baseline deve essere superato.
Motivazione: 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 mirano a generare la telemetria esatta prevista dalla logica di rilevamento.
-
Narrazione e Comandi dell’Attacco:
Un attaccante che ha compromesso un account a basso privilegio desidera scaricare un payload malevolo che è memorizzato come una stringa Base64 in un repository di script compromesso. Per evitare la rilevazione, l’attaccante prepara una riga singola di PowerShell che (1) decodifica la stringa Base64, (2) la invoca tramiteiex, e (3) crea un oggetto AES per decrittare ulteriori dati incorporati. La linea di comando esatta è scritta per corrispondere ai letterali della regola.powershell C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Noexit -nop -c iex([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(('REPLACED_STRING'.Replace('VFHDVXDJCF',''))))) ; $aes_var = [System.Security.Cryptography.Aes]::Create()- L’attaccante sostituisce
REPLACED_STRINGcon un payload Base64 legittimo dopo aver rimosso un marker conosciuto (VFHDVXDJCF). - The
-Noexit -nop -cswitch sopprimono i prompt e bypassano la politica di esecuzione, corrispondenti alla condizione di rilevamento. - The
$aes_varil nome della variabile è mantenuto letterale per soddisfare la seconda clausola di selezione.
- L’attaccante sostituisce
-
Script di Test di Regressione: Il seguente script PowerShell riproduce la linea di comando esatta in modo controllato, assicurando che il SIEM riceva telemetria identica.
# Script di Test di Regressione – attiva il rilevamento $payload = "U2FtcGxlIEJhc2U2NCBTdHJpbmc=" # "Sample Base64 String" $marker = "VFHDVXDJCF" $obfuscated = $payload.Replace($marker, "") # simula il .Replace utilizzato nella rilevazione $command = @" C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Noexit -nop -c iex([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(('${obfuscated}'.Replace('VFHDVXDJCF',''))))) ; $aes_var = [System.Security.Cryptography.Aes]::Create() "@ # Esecuzione della linea di comando creata Invoke-Expression $command -
Comandi di Pulizia: Rimuovere eventuali oggetti AES residui e fermare la sessione PowerShell avviata.
# Pulizia – termina il processo figlio PowerShell se ancora in esecuzione Get-Process -Name powershell -ErrorAction SilentlyContinue | Where-Object { $_.Path -like "*WindowsPowerShellv1.0powershell.exe" } | Stop-Process -Force # Opzionalmente, cancella eventuali variabili temporanee Remove-Variable -Name payload, marker, obfuscated, command -ErrorAction SilentlyContinue