CSIRT Toscana

VenomStealer: analisi tecnica (BL01/250620/CSIRT-ITA)

Data:
20 Giugno 2025 13:01

Descrizione e potenziali impatti

Questo CSIRT ha effettuato un’analisi di un malware open source pubblicamente disponibile su GitHub, noto con la denominazione venom. Per evitare ambiguità con il più noto VenomRAT , un malware di natura e finalità differenti, nel presente documento tale Infostealer verrà indicato con il nome VenomStealer .

VenomStealer è un Information Stealer pubblicato il 16 marzo 2024, di cui si fornisce di seguito una approfondita panoramica tecnica.

Primo step: the dropper

Il vettore di attacco prevede la distribuzione di un archivio nel formato “.RAR”, presumibilmente tramite campagne malspam e/o piattaforme di file hosting .

A seguito dell’estrazione dell’archivio – nel caso in cui la visualizzazione delle estensioni dei nomi dei file non sia abilitata – all’utente viene presentato un file apparentemente innocuo che simula un comune documento Word ( Figura 1 ).

Figura 1 – Contenuto dell’archivio
Figura 1 – Contenuto dell’archivio

Sebbene l’icona visualizzata richiami quella di un documento Word, il file è in realtà un archivio SFX (Self-Extracting Archive) creato con WinRAR ( Figura 2 ), contenente direttive opportunamente predisposte, che ne regolano il comportamento durante le fasi di estrazione:

Figura 2 - Archivio SFX
Figura 2 – Archivio SFX
  • Setup=<file> : definisce il file da eseguire automaticamente al termine dell’estrazione. Ove presenti più direttive Setup=, ciascun file viene avviato in sequenza, attendendo il termine del precedente prima di proseguire.
  • TempMode: indica che i file devono essere estratti in una directory temporanea all’interno del path %TEMP%, che verrà eliminata automaticamente dopo l’esecuzione del/dei programma/i.
  • Silent=1: disattiva eventuali notifiche mostrate durante l’estrazione.
  • Overwrite=1 e Update=U: sovrascrivono i file esistenti senza richiedere conferma, aggiornando solo i file presenti nell’archivio che siano più recenti o non ancora presenti nella cartella di destinazione.
Figura 3 - Cartella di estrazione temporanea
Figura 3 – Cartella di estrazione temporanea

Di fatto, il pacchetto autoestraente crea la directory “%AppData%\Local\Temp\RarSFX0\ ” ( Figura 3 ) e al suo interno deposita il payload del malware (con estensione .DOCX.EXE) e un documento esca (con estensione .DOCX), quest’ultimo aperto per primo al fine di legittimare la campagna malevola.

Alla chiusura del documento Word avviene in automatico il lancio del payload finale.

Secondo step: pre-execution phase

Le analisi condotte sul payload malevolo hanno evidenziato che si tratta di un Infostealer sviluppato in linguaggio Go. Il sample presenta tutti i simboli di debug ed è privo di significativi meccanismi di offuscamento, ad eccezione della tecnica utilizzata per la gestione delle stringhe all’interno del binario, che risultano cifrate. Il malware, inoltre, è configurato per attivare una modalità di esecuzione verbosa, stampando a video le azioni eseguite durante l’esecuzione.

All’avvio, il codice malevolo legge la propria configurazione di inizializzazione – in formato JSON – per determinare la modalità di esecuzione e le operazioni preliminari da eseguire. La configurazione risulta cifrata mediante lo stesso algoritmo impiegato per l’offuscamento delle stringhe presenti nell’eseguibile. Tale algoritmo applica una sequenza di operazioni così strutturata:

  1. un’operazione di XOR, eseguita byte per byte, utilizzando una chiave statica;
  2. l’incremento di ciascun byte risultante mediante l’aggiunta di un valore costante pari a 3;
  3. la codifica dell’output in formato BASE64;
  4. l’inversione dell’ordine dei caratteri della stringa codificata.

A titolo esemplificativo, la stringa “discord”, una volta sottoposta a tale procedura, risulta trasformata nel valore cifrato “==QmUAmRj7SG” [1] .

La configurazione decifrata viene mostrata e descritta di seguito.

{  // Lista di moduli che definiscono cosa esfiltrare  "modules": ["cookie", "history", "password", "files"],   // Se false, stampa vari messaggi di debug  "quiet": false,   // Chiave usata per cifrare l'header Authorization nelle richieste HTTP  "token": "<TOKEN>",   // URL del C2  "url": "http://<IP>",   // Se true, VenomStealer cerca di rilevare se si trova in una macchina virtuale  "antivm": false,   // Se true, VenomStealer cerca di rilevare se si trova in un ambiente di analisi o debug  "antidebug": true,   // La configurazione del modulo "files"  "files": {    // Cartelle in cui il malware cerca i file da esfiltrare    "dirs": ["C:/Users/%USERNAME%"],     // Estensione dei file da esfiltrare    "exts": ["txt", "pdf", "docx", "zip", "xlsx", "rar"],     // Dimensione max dei file da esfiltrare in MiB, dimensioni superiori vengono ignorate    "max": 10  },   // Configurazione del modulo "error"  "error": {    // Titolo della finta finestra di dialogo dell'errore    "title": "Failed to load wincpp.dll",     // Messaggio della finta finestra di dialogo dell'errore    "message": "Program failed while loading Windows C++ Native libraries, please install      Visual Studio to download these libraries. (0xff280000)"  }}

Modules : specifica l’elenco dei moduli integrati da caricare, i quali verranno impiegati per carpire le informazioni dal sistema target. I moduli supportati sono:

  • error
  • files
  • cookie
  • history
  • password
  • card
  • discord

Quiet : indica se attivare o meno la modalità “ verbose ”, contenente messaggi di debug da stampare in stdout ;

Token : definisce una chiave che VenomStealer usa per cifrare l’ header Authorization utilizzato nelle richieste HTTP per comunicare con il server C2;

URL : contiene l’URL del server C2;

AntiVM: se abilitata, il malware verifica se è in esecuzione all’interno di una macchina virtuale ( sandbox evasion ) e, in caso positivo, ne interrompe l’esecuzione al fine di eludere eventuali analisi. I controlli comprendono:

  • CPU : verifica della presenza di funzionalità associate a macchine virtuali;
  • MAC Address : confronto con indirizzi noti utilizzati da software di virtualizzazione;
  • Dischi : individuazione di dischi virtuali tramite query WMI orientate alla ricerca di identificatori autoesplicativi (ad esempio contenenti label quali: “virtual”, “vmware”, “virtio” e “vbox”).

AntiDebug: se abilitata, la funzione verifica la presenza di eventuali processi di debug o analisi in esecuzione. Se uno dei processi elencati in tabella risulta attivo, il programma interrompe l’esecuzione:

Files : nel caso in cui il modulo “files” sia stato definito nella rispettiva chiave, tale campo definisce le estensioni dei file da esfiltrare ( Exts ) a partire da un determinato PATH ( Dirs ) e la loro dimensione massima in MiB ( Max );

Error : nel caso in cui il modulo “error” sia stato definito nella rispettiva chiave, definisce un falso messaggio di errore da mostrare all’utente poco dopo l’esecuzione, volto a:

  • distogliere l’attenzione dal vero problema (ad esempio, mancanza di privilegi o esecuzione in un ambiente non compatibile);
  • ridurre eventuali sospetti, facendo sembrare il crash un bug “legittimo” di un’applicazione C++.

Terzo step: execution and artifact removal

Superata la fase preliminare, VenomStealer verifica l’integrità del nome del file in esecuzione. In particolare, controlla che i primi 10 caratteri dell’hash SHA-512 del sample stesso corrispondano al nome del file associato al processo in esecuzione ( Figura 4 ).

Figura 4 – SHA-512 del payload malevolo
Figura 4 – SHA-512 del payload malevolo

Qualora i valori corrispondano, l’esecuzione prosegue; in caso di discrepanza:

  • il payload malevolo viene copiato nella directory %TEMP% con il nome atteso ( 31b7f74672.exe ) ed eseguito nuovamente da tale percorso;
  • il processo originario (con estensione .DOCX.EXE ) viene terminato, causando l’eliminazione automatica del contenuto della cartella RarSFX0 , in conformità al comportamento predefinito dei pacchetti autoestraenti SFX;
  • dal nuovo percorso, il payload crea un Alternate Data Stream (ADS) [2] utilizzando i primi tre caratteri dell’hash SHA-512 ( 31b7f74672.exe: 31b ) e vi trasferisce il proprio contenuto, rimuovendolo dallo stream principale $DATA [3] , rendendo il file originale apparentemente vuoto;
  • infine, il malware contrassegna l’intero file ( 31b7f74672.exe ) per la rimozione dal filesystem ( Figura 5 ).
Figura 5 - Flusso di esecuzione
Figura 5 – Flusso di esecuzione

Questa tecnica permette al malware di restare residente in memoria pur non lasciando alcuna entry NTFS nel namespace del file system.

Quarto step: data collection

Completata la fase di inizializzazione, l’Infostealer procede con una serie di operazioni di fingerprinting del sistema mirate a raccogliere dettagli sull’ambiente in cui è in esecuzione. Le informazioni raccolte includono:

  • MachineGuid;
  • Hostname;
  • Username;
  • indirizzo IP pubblico;
  • ISP (internet service provider);
  • paese (geotag);
  • fuso orario (timezone);
  • memoria disponibile;
  • spazio su disco;
  • hardware ID;
  • modello della CPU;
  • modello della GPU;
  • versione del sistema operativo.

Alcuni di questi dati vengono impiegati per identificare in modo univoco la macchina infetta: a partire dalle informazioni raccolte, viene infatti calcolato un AgentID estraendo i primi 15 caratteri esadecimali dell’hash SHA-512 generato dalla concatenazione dei valori di < MachineGuid >, < Username > e < Hostname >.

Successivamente, lo stealer carica i moduli specificati nella configurazione, per avviare la fase di raccolta dei dati da esfiltrare ( Figura 6 ).

Figura 7 - Evidenze di esfiltrazione file
Figura 6 – Caricamento moduli per l’esfiltrazione

La raccolta inizia con l’estrazione di informazioni dalle seguenti applicazioni, di cui la maggior parte appartiene alla categoria Internet Browser:

Ogni tipologia di dato collezionato viene temporaneamente copiata nella cartella %TEMP% con un nome file di 12 caratteri generato casualmente e privo di estensione, nel formato originale ( SQLite nella maggior parte dei casi).

A titolo di esempio, si riporta di seguito un estratto dei file analizzati durante le fasi di analisi, con il dettaglio del contenuto di ciascun file:

Quinto step: exfiltration

Le informazioni collezionate vengono infine trasmesse al server C2 tramite richieste HTTP di tipo POST, ciascuna contenente dati rielaborati in formato JSON.

L’endpoint utilizzato per l’esfiltrazione dei dati presenta una struttura URL ben definita, strutturata come segue:

http://<IP>/ntp?id=<AgentID>&type=<DataType>

dove il parametro id corrisponde all’ AgentID precedentemente generato per identificare univocamente la vittima, mentre il parametro type può assumere i seguenti valori:

  • system : dettagli del fingerprint del sistema;
  • files : esfiltrazione di interi file (esempio in Figura 7 e maggiori dettagli di seguito);
  • card : esfiltrazione di dettagli relativi a carte di credito salvate sul browser;
  • discord : analisi dei file “.log” e “.ldb” in %AppData%\Discord\Local Storage\leveldb\ per individuare e decifrare il token Discord, utilizzato successivamente per recuperare ulteriori informazioni sull’utente tramite API ufficiali e procedere all’esfiltrazione di quanto collezionato;
  • password : key e token di sessione;
  • history : cronologia di ogni browser analizzato;
  • cookie : cookie di ogni browser analizzato.
Figura 7 - Evidenze di esfiltrazione file
Figura 7 – Evidenze di esfiltrazione file

Esempio: esfiltrazione dei file

Per esfiltrare i file, VenomStealer effettua una richiesta HTTP al seguente URL:

http://<IP>/ntp?id=<AgentID>&type=files

Il body della richiesta corrispondente a un oggetto JSON con la seguente struttura ( Figura 8 ):

  • data : incorpora l’intero contenuto del file codificato in BASE64 ;
  • path : specifica il percorso completo e il nome del file di origine;
  • size : indica la dimensione del file in byte.
Figura 8 - Formato JSON di esfiltrazione file
Figura 8 – Formato JSON di esfiltrazione file

Azioni di mitigazione

Gli utenti e le organizzazioni possono far fronte a questa tipologia di attacchi verificando scrupolosamente le e-mail ricevute e attivando le seguenti misure aggiuntive:

  • fornire periodiche sessioni di formazione finalizzate a riconoscere il phishing, diffidando da comunicazioni inattese;
  • verificare scrupolosamente l’identità dei mittenti delle comunicazioni ricevute e la relativa attendibilità;
  • evitare l’esecuzione di software proveniente da fonti non affidabili, soprattutto se privo di una firma digitale che ne certifichi l’autenticità;
  • valutare l’adozione di policy di restrizione dell’esecuzione di file da percorsi temporanei o non autorizzati (%TEMP%, %APPDATA% o %LOCALAPPDATA%), mediante strumenti quali AppLocker, Software Restriction Policies (SRP) o Windows Defender Application Control (WDAC), al fine di limitare i vettori di esecuzione malware più comuni.

Azioni di risposta agli incidenti

Qualora si riscontrino evidenze di avvenuta compromissione sui propri sistemi, si raccomanda agli utenti e alle organizzazioni di attuare le seguenti azioni:

  • collezionare eventuali evidenze, quali processi/servizi in esecuzione su dispositivi target, log di rete e log di autenticazione considerati non convenzionali;
  • porre in isolamento e/o offline gli host potenzialmente interessati dalla compromissione;
  • ripristinare gli host compromessi ad un’immagine precedente consistente (dopo aver espletato le necessarie attività forensi);
  • resettare gli account degli utenti interessati dalla compromissione;
  • segnalare tempestivamente a questo CSIRT, tramite il portale https://segnalazioni.acn.gov.it/ l’evento occorso.

[1] Una possibile ricetta CyberChef in grado di deoffuscare la configurazione e le stringhe di VenomStealer è la seguente: Fork, Reverse, From Base64, SUB, XOR – CyberChef

[2] Gli Alternate Data Stream (ADS) sono funzionalità del file system NTFS che permettono di associare dati nascosti a un file senza alterarne l’aspetto visibile. Questi dati non sono mostrati in Explorer e vengono spesso usati per tecniche di offuscamento o persistenza.

[3] Lo stream principale $DATA è il flusso predefinito di un file nel file system NTFS, ovvero quello che contiene i dati visibili e accessibili normalmente dall’utente o dalle applicazioni.

Change log

Versione Note Data
1.0 Pubblicato il 20-06-2025 20/06/2025

Il presente articolo è un prodotto originale di csirt.gov.it, riproposto qui a solo scopo di aumentarne la visibilità. Può essere visualizzato in versione originale al seguente link