Il gruppo Lynx è un nuovo e sofisticato Threat Actor emerso a metà del 2024, responsabile di oltre 166 attacchi in diversi settori di cui almeno 3 in Italia. [1]

Fin dalla sua comparsa, il gruppo dietro questo ransomware ha preso attivamente di mira organizzazioni di vari settori come la vendita al dettaglio, l’immobiliare, l’architettura e i servizi finanziari e ambientali negli Stati Uniti e nel Regno Unito.

Lynx ransomware ha particolari somiglianze con un altro noto ransomware, INC, motivo per cui diverse fonti di intelligence lo indicano come suo possibile rebranding.
Il gruppo dietro al ransomware Lynx rappresenta una minaccia a doppia estorsione sempre più diffusa e sofisticata. La diffusione del ransomware viene veicolata attraverso una varietà di vettori di attacco; una volta compromesso un sistema, cifra tutti i file trovati con AES, evitando quelli di sistema, aggiungendo l’estensione .lynx e rimuove i file di backup, incluse le shadow copies, per impedire il ripristino dei dati.

Una caratteristica peculiare di Lynx è l’invio della nota di riscatto a tutte le stampanti disponibili in rete, che aggiunge un elemento inaspettato alla strategia di estorsione.

Parametri di configurazione

Di default il ransomware cripta tutti i file ed elimina tutti i backup, ma, analizzando il codice tramite IDA, è facilmente individuabile come questo ransomware sia altamente personalizzabile tramite flag passate in linea di comando.

Di seguito una tabella riassuntiva con i parametri che è possibile indicare all’esecuzione del malware:

–file [1 o lista di file]cripta 1 file o una lista specifici
–dircripta una cartella
–mode <mode> [fast, medium, slow, entire]quanto cripta di ogni file: fast: 5%, medium: 15%, slow: 25%, entire: 100%
–helpprinta l’help
–verboseverbose mode
–silentcripta il file senza aggiungere estensione e ransomnote
–stop-processesprova a stoppare i processi tramite RestartManager
–encrypt-networkCripta le cartelle di rete
–load-drivescorrompe boot loader
–hide-cmdnasconde la console
–no-backgroundnon imposta la ransomnote come sfondo desktop
–no-printnon manda la ransomnote alle stampanti
–killtermina processi e servizi
–safe-modeentra in safe-mode di Windows

Una volta individuati i vari flag che il ransomware può prendere in input procediamo a dare un occhio al codice tramite IDA.

Stop dei processi

Qualora venisse passato il flag, la prima operazione eseguita dal ransomware è quella di termine dei processi. Nel seguente pseudocodice, generato da IDA, possiamo vedere come prima operazione utilizza una API di Windows, CreateToolhelp32Snapshot, per recuperare i PID dei vari processi in esecuzione.

Una volta ottenuto il risultato di questa chiamata, cicla su tutti i processi e li termina, avendo cura di non terminare sé stesso.

Iterazione per terminare i processi

Una volta finito di terminare i processi passa i servizi richiamando una successiva subroutine rinominata da noi termina_servizi.

Anche per i servizi il procedimento è molto simile: il ransomware utilizza l’API OpenSCManagerW per ottenere l’handle al service control manager database,l’API EnumServicesStatusExW per effettuare un’enumerazione di tutti processi attivi e, infine, tramite un ciclo ricorsivo, li termina tutti.

Iterazione per terminare i servizi

RansomNote

Proseguendo con l’analisi, possiamo individuare la ransomnote che verrà scritta all’interno del file readme.txt ed inviata alle stampanti, come vedremo in seguito.

Ransomnote in base64

È molto interessante notare come la ransomnote sia encodata in base64: per vederne il contenuto, effettuiamo la decifratura tramite cyberchef e individuiamo facilmente il testo in chiaro:

Ransomnote decifrata

Possiamo notare che l’unica parte non compilata è quella riguardante l’ID; esso verrà poi successivamente sostituito con quello univoco generato nei prossimi step.

Setup per cifratura dei file

Dopo aver decodificato la ransomnote e sostituito l’ID della vittima al suo interno, il malware comincia a inizializzare un ambiente multithread per procedere alla cifratura dei file.

Per prima cosa, la funzione richiama e popola la struttura SystemInfo con informazioni sul sistema corrente, come il numero di processori disponibili.

Il numero di thread da utilizzare viene impostato a quattro volte il numero di processori, sfruttando il multi-threading per accelerare la cifratura del disco.

Successivamente, viene creato un I/O Completion Port per gestire le operazioni di I/O asincrone.

  • 0xffffffff: indica che inizialmente la completion port non è associata a nessun file handle.
  • 0: specifica che la completion port non è collegata a una porta esistente.
  • 0: la completion key è impostata a zero, e l’ultimo parametro definisce il numero massimo di thread che possono essere eseguiti contemporaneamente. Se impostato a zero, viene utilizzato il numero di processori del sistema.

Infine, viene creato un thread per ciascun processore per gestire il completamento delle operazioni di I/O.

Setup dei thread

Cifratura dei file

Ora che il ransomware è riuscito a inizializzare i thread correttamente, procede con la vera a propria cifratura.

Innanzitutto tenta di creare un file README.txt in una directory specificata, poi utilizzando la funzione FindFirstFileW, individua il primo file nella directory.

Per ogni file, la funzione verifica se si tratta di un file di sistema o se ha estensioni specifiche come .exe, .msi, .dll o .lynx. Se il file non soddisfa questi criteri e non si chiama LYNX o README.txt, viene messo in coda per la cifratura avviando un nuovo thread.

Per ogni sottodirectory, la funzione effettua una chiamata ricorsiva a enum_dir.

Le directory speciali come windows e program files vengono ignorate per evitare di processare le cartelle di sistema; invece, le directory Program Files e Program Files (x86) vengono gestite separatamente: per ciascuna sottodirectory, viene effettuata una chiamata ricorsiva a enum_dir per cercare e cifrare le directory relative a database, precisamente cerca Microsoft SQL Server, MongoDB e PostgreSQL.

Scrittura readme.txt
Creazione del thread per la cifratura di ogni file
Elenco delle cartelle “escluse”
Cifratura delle cartelle relative a DB

Concludiamo questa sezione notando che il sample decifra una chiave pubblica da cui poi genera le chiavi AES utilizzate per la cifratura.

Chiave pubblica e chiamata alla subroutine per generazione chiavi AES

Crittografia delle share di rete

Una volta crittografati i file individuati nelle cartelle precedentemente enumerate, il ransomware non si ferma e continua la ricerca di file sensibili. In particolare, possiamo anche osservare che tenta di individuare cartelle di rete condivise per criptare i file all’interno.

La cifratura dei file tramite SMB è una pratica sempre più diffusa tra i threat actor ransomware. Questo perché rende più difficile le detection di AV ed EDR e quindi anche bloccarne l’esecuzione, poiché il processo malevolo non è in esecuzione sulla macchina che subisce la cifratura, ma su un’altra macchina della rete.

Crittografia share di rete

Ulteriori operazioni: Ricerca di driver esterni e cancellazione shadow copies

Il ransomware, prima di effettuare le ultime operazioni, ricerca all’interno del file system la presenza di driver particolari e/o nascosti. Tenta l’enumerazione per individuare ulteriori dispositivi collegati. Qualora li trovasse li trovasse, procede a criptare tutti i file all’interno:

Driver nascosti cercati dal ransomware

Una volta terminata la ricerca dei driver nascosti, procede con la cancellazione delle shadow copies, per poi terminare:

Cancellazione delle shadow copies

Fase Finale e Richiesta del Riscatto

Le ultime operazioni che il ransomware esegue sono il cambio dello sfondo del desktop tramite il set di una chiave di registro con una foto tutti i siti onion di Lynx (chat e blog).

L’immagine viene scaricata nella cartella %TEMP% come “background-image.jpg”.

Modifica dello sfondo del dispositivo infettato
Immagine nella cartella TEMP

Infine, come ultima operazione, avviene l’invio della ransomnote a tutte le stampanti di rete individuate, caratteristica peculiare del ransomware Lynx.
La lista delle stampanti viene ottenuta tramite la funzione EnumPrintersW; successivamente, itera su ciascuna stampante, ignorando Microsoft Print to PDF e Microsoft XPS Document Writer.

Per le stampanti rimanenti, avvia il processo di stampa utilizzando StartDocPrinterW e StartPagePrinter.

Infine, tramite WritePrinter, la nota di riscatto viene inviata alla stampante:

Invio della ransomnote a tutte le stampanti trovate

IOC

Di seguito una lista di sha256 dei sample di Lynx raccolti:

f71fc818362b1465fc1deb361de36badc73ac4dd9e815153c9022f82c4062787
0315dbb793f855f154aa8d227151f1098bd9b580a4f85064648b85bac1321663
6012a489883017a92c3745f267be6b49228e2ff41ae749d127b1f6fa78152aaf
3e68e5742f998c5ba34c2130b2d89ca2a6c048feb6474bc81ff000e1eaed044e
5da4f51e3ced3166336277bb04c32d0cd20f3e28db3d4f02826fee88b7583040
80908a51e403efd47b1d3689c3fb9447d3fb962d691d856b8b97581eefc0c441

Fonti e Link utili

[1] Dati forniti da RansomFeed: https://ransomfeed.it/stats.php?page=groups-stats

Malpedia: https://malpedia.caad.fkie.fraunhofer.de/details/win.lynx

Ti è piaciuto l’articolo? Seguici su Linkedin per sostenerci!

consigliati