Traduzione dell’articolo di Vaibhav Billade e Rumana Siddiqui dei Seqrite Labs
Indice
- Introduzione
- Catena di infezione
- Albero dei processi
- Campagna 1
- – persistenza
- – file BATCH
- – script PowerShell
- – loader
- – XWorm/Remcos
- Campagna 2
- Conclusione
- IOCs
- Rilevamenti
- MITRE ATT&CK TTPs
Introduzione alle campagne XWorm e Remcos
Recenti campagne malware hanno dimostrato l’uso, in continua evoluzione, di loader basati su file BAT per distribuire RAT (remote access trojan). Le più recenti diffondono malware come XWorm e Remcos, notoriamente molto diffusi anche in Italia. Queste campagne, spesso, iniziano con un archivio ZIP ospitato su piattaforme dall’aspetto affidabile, come ImageKit. Sono strutturate per apparire come contenuti legittimi allo scopo di indurre l’interazione dell’utente.
Abbiamo analizzato una di queste campagne, per verificarne il funzionamento. Lo ZIP diffuso via email contiene uno script BAT altamente offuscato che funge da primo stadio della catena di infezione. Questi file BAT usano tecniche avanzate per sfuggire al rilevamento statico e distribuiscono loader PowerShell che iniettano il payload dei RAT direttamente in memoria. Questa tecnica conferma una tendenza ormai affermata: l’uso di malware che funzionano direttamente in memoria. Si parla di malware file-less, che non lasciano cioè alcun file nella memoria della macchina.
Un elemento rilevante di queste campagne è l’impiego di file SVG per distribuire gli script BAT malevoli. Gli SVG contengono un JavaScript incorporato che attiva la catena di esecuzione quando il file viene iniettato in ambienti vulnerabili o inserito in pagine di phishing. L’uso di formati “non tradizionali” per la consegna del malware ha lo scopo di ridurre la probabilità di rilevamento.
Catena d’infezione

Albero dei processi

Analisi della Campagna 1 di XWorm
Analizzando la prima campagna, sono stati identificati più script BAT collegati all’operazione. Evidenza, questa, che ribadisce un panorama delle minacce in costante evoluzione. Non a caso alcuni script sono in sviluppo attivo e contengono codice parziale o in prova; altri sono pienamente operativi e in grado di eseguire l’intera catena d’attacco, compresi download ed esecuzione del payload.
L’immagine seguente mostra due esempi di file BAT:
- Esempio 1: consegnato direttamente come allegato EML.
- Esempio 2: scaricato tramite URL ospitato su ImageKit.
La varietà nei metodi di consegna indica che gli attori stanno sperimentando approcci diversi per aumentare il successo dell’infezione e sfuggire ai controlli di sicurezza.

Persistenza
Il malware stabilisce persistenza creando un file BAT nella cartella di avvio di Windows (Startup). In questo modo lo script malevolo viene eseguito automaticamente ad ogni avvio del sistema o al login dell’utente.

File BATCH
La figura mostra lo script BAT nella forma offuscata affiancato alla versione deoffuscata.

Script PowerShell
La figura seguente mostra la finestra del processo PowerShell e gli argomenti di riga di comando usati all’esecuzione. È così chiaro il modo in cui PowerShell venga usato per iniettare il payload in memoria. Analizzeremo lo script PowerShell nelle parti successive, per comprenderne il ruolo nella distribuzione di XWorm.


Il comando PowerShell esegue uno script decodificando una stringa Base64 ed eseguendola in memoria. Utilizza -nop
per evitare il caricamento del profilo utente, -w hidden
per nascondere la finestra e iex
(Invoke-Expression) per eseguire il contenuto decodificato.
Ecco lo scirpt deoffuscato:

Per semplificare l’analisi, abbiamo suddiviso lo script deoffuscato in due parti.
Prima parte
La prima parte è progettata per trovare ed eseguire codice offuscato incorporato in un file batch (aoc.bat
) nel profilo dell’utente corrente. Lo script ottiene il nome utente dalle variabili d’ambiente per costruire il percorso a aoc.bat
, legge tutte le righe in UTF-8 e cerca righe che iniziano con il prefisso commento triplo :::
seguito da una stringa Base64. Trovata la riga, decodifica la stringa Base64 in un array di byte e la converte in una stringa Unicode assegnata a $ttzhae
. Questa stringa decodificata contiene un ulteriore livello di script PowerShell che viene eseguito in memoria con Invoke-Expression
. In questo modo un attaccante può nascondere logiche PowerShell multi-stadio all’interno di un commento di un file batch apparentemente innocuo, abilitando esecuzione stealth e fileless.

La prima parte disabilita programmaticamente due meccanismi chiave di sicurezza Windows: AMSI (Antimalware Scan Interface) ed ETW (Event Tracing for Windows). Lo script sfrutta reflection .NET e la creazione dinamica di delegate per risolvere funzioni native come GetProcAddress
, GetModuleHandle
, VirtualProtect
e AmsiInitialize
. Identifica e patcha in memoria AmsiScanBuffer
con un’istruzione che forza il ritorno (mov eax, 0; ret
), bypassando così la scansione AMSI. Allo stesso modo sovrascrive l’inizio di EtwEventWrite
con un’istruzione di ritorno per disabilitare il tracciamento eventi. Queste modifiche in memoria permettono alle azioni PowerShell malevole di eseguirsi in modo furtivo senza essere scansionate dalle soluzioni endpoint.

Seconda parte
Nella seconda parte lo script recupera il nome utente e costruisce il percorso di aoc.bat
. Esegue payload nascosti come assembly .NET criptati e compressi all’interno di quel batch. Cerca una riga di commento prefissata con ::
che contiene una stringa payload Base64. La stringa viene suddivisa in due parti usando la barra inversa \
come delimitatore. Ciascuna parte viene decodificata da Base64, decriptata con AES usando una chiave e IV hardcoded (CBC con padding PKCS7) e quindi decompressa con GZIP. Il risultato sono due assembly .NET distinti, caricati ed eseguiti direttamente in memoria. Il primo assembly viene invocato senza argomenti; il secondo viene eseguito con '%*'
passato come input simulato da riga di comando.

Il secondo payload è il loader che esegue il malware finale: il RAT XWorm.

Loader di XWorm
Il loader è progettato per eludere il rilevamento, disabilitare il logging degli eventi ed eseguire i payload incorporati direttamente in memoria. Può decriptare ed eseguire eseguibili .NET tramite Assembly.Load
o eseguire shellcode decriptato modificando le protezioni di memoria con VirtualProtect
e invocandolo tramite delegate.



Capacità del loader
- Elusione del rilevamento
- Disabilitazione del logging degli eventi
- Estrazione ed esecuzione dei payload incorporati

Abbiamo identificato diversi loader che impiegano l’esecuzione in memoria per evitare il rilevamento e persistere in maniera più silenziosa possibile. Alcuni loader contengono eseguibili .NET criptati che vengono decriptati ed eseguiti dalla memoria usando Assembly.Load
seguito da .EntryPoint.Invoke
, permettendo l’esecuzione di codice gestito senza scrivere il file su disco (malware file less).
Altre varianti contengono shellcode criptato. Queste decriptano lo shellcode, cambiano le protezioni di memoria tramite VirtualProtect
per renderlo eseguibile e poi lo eseguono usando un delegate creato con Marshal.GetDelegateForFunctionPointer
.

Persistenza

XWorm e Remcos
Abbiamo già pubblicato un’analisi approfondita su XWorm e Remcos in questo anno. Entrambi offrono funzionalità avanzate: keylogging, esecuzione remota di comandi, esfiltrazione dati e tecniche di persistenza ed evasione.

Oltre a XWorm, varianti della stessa campagna hanno impiegato Remcos, un RAT commerciale noto che fornisce accesso desktop remoto, keylogging, esecuzione comandi, manipolazione file, cattura di screenshot ed esfiltrazione dati.
Campagna 2 di XWorm/ Remcos
La Campagna 2 introduce una variazione significativa nella distribuzione: l’uso di file SVG (Scalable Vector Graphics) con JavaScript incorporato, impiegati principalmente in attacchi di phishing. Gli SVG malevoli sono confezionati per sembrare immagini legittime e vengono renderizzati in software vulnerabili (visualizzatori obsoleti o client di posta) o inseriti in pagine di phishing costruite per attirare utenti ignari. Il JavaScript interno fa da trigger e avvia il download automatico di un archivio ZIP quando l’SVG viene aperto o visualizzato in anteprima.
Lo ZIP scaricato contiene poi uno script BAT offuscato che costituisce il vettore di accesso iniziale. Se l’utente esegue manualmente il BAT o è indotto a farlo mediante ingegneria sociale, attiva una catena multi-stadio simile a quella della Campagna 1. Il BAT invoca comandi PowerShell che decodificano ed eseguono un loader EXE direttamente in memoria. Il loader decripta e dispiega il payload finale, qui XWorm.
L’uso degli SVG è rilevante perché i file immagine sono spesso considerati benigni e talvolta esclusi da ispezioni approfondite. Sfruttando la capacità di scripting degli SVG, gli attori possono bypassare difese perimetrali e realizzare consegne stealth e fileless.
Conclusione
Queste campagne mostrano una tendenza crescente verso l’uso di script offuscati, l’esecuzione fileless e l’impiego di formati non tradizionali come gli SVG per veicolare RAT quali XWorm e Remcos. L’incapsulamento dei payload in BAT ed l’esecuzione tramite PowerShell permettono agli attaccanti di aggirare i controlli statici. La transizione dall’uso degli SVG negli attacchi di phishing alla loro adozione per la distribuzione di malware sottolinea la necessità di dotarsi di soluzioni di rilevamento comportamentale, di scansione dei contenuti e di formazione degli utenti per fronteggiare queste minacce in evoluzione.
IOCS:
MD5 | File |
EDA018A9D51F3B09C20E88A15F630DF5 | BAT |
23E30938E00F89BF345C9C1E58A6CC1D | JS |
1CE36351D7175E9244209AE0D42759D9 | LOADER |
EC04BC20CA447556C3BDCFCBF6662C60 | XWORM |
D439CB98CF44D359C6ABCDDDB6E85454 | REMCOS |
Individuazione
- Trojan.LoaderCiR
- Trojan.GenericFC.S29960909
MITRE ATT&CK TTPs
Tattica | Technique ID & name | Descrizione |
---|---|---|
Execution | T1059.001 – Command and Scripting Interpreter: PowerShell | PowerShell è usato per interpretare comandi, decriptare dati e invocare payload. |
Execution | T1106 – Execution Through API | Lo script usa API .NET (es. Assembly.Load, Invoke) per eseguire payload in memoria. |
Defense evasion | T1027 – Obfuscated Files or Information | I payload sono codificati in Base64, criptati AES e compressi per bypassare rilevamenti statici. |
Defense evasion | T1140 – Deobfuscate/Decode Files or Information | Lo script decodifica e decomprime i payload prima dell’esecuzione. |
Defense evasion | T1055.012 – Process Injection: .NET Assembly Injection | I payload vengono caricati in memoria. |
Defense evasion | T1036 – Masquerading | Il contenuto maligno è nascosto nel file batch. |
Persistence | T1053 – Scheduled Task/Job | Persistenza stabilita tramite startup menu. |
Initial access | T1204 – User Execution | L’esecuzione dipende dall’utente che avvia manualmente il batch. |
Command and control | T1132 – Data Encoding | Base64 e crittografia usati per codificare comandi/payload. |
Command and control | T1219 – Remote Access Software | XWorm fornisce accesso remoto e controllo sull’host infetto. |
Credential access | T1056.001 – Input Capture: Keylogging | XWorm include keylogging per rubare input e credenziali. |
Exfiltration | T1041 – Exfiltration Over C2 Channel | I dati rubati vengono esfiltrati attraverso il canale C2 usato da XWorm. |