Analisi Malware LockBit MacOS

Elementi importanti dell’analisi: 

  • Utilizzo dell’algoritmo Salsa20, curve25519xsalsa20poly1305 
  • Operazioni di XOR encoding 
  • Attributi di configurazione del ransomware 
  • Funzioni di skipping di files e directories 
  • Presenza di stringhe relative ad ambiente Windows 
  • Funzioni di disk wiping 
  • Utilizzo di thread pools 

Introduzione 

Nella presente analisi è stato preso in considerazione un sample di LockBit (variante MacOS) avente hash abf01633960dd77c6137175a21fccf34

L’artefatto è sviluppato in C++ e compilato con macOS SDK 11.3.0 con architettura ARM. 

A seguire un dettaglio del codice esadecimale dell’indirizzo dell’entrypoint 10000b0d4

Malware assessment 

Effettuando una disamina delle istruzioni assembly dello stesso, è possibile avere contezza di diverse operazioni di sub, stp (al fine di modificare l’indirizzo di memoria consequenzialmente allo storing di dati nei registri), mov, ldr (storing nei registri dalla memoria) 

Di seguito ulteriori operazioni assembly effettuate, tra cui bl (al fine di copiare l’indirizzo della prossima istruzione), cmn (al fine di effettuare operazioni di adding ma con il discarding del risultato): 

All’interno della mappatura di memoria vi è il segment _TEXT, contenente riferimenti alla libreria dyld che contiene files cachati. 

Effettuando un’inspection del codice esadecimale del ransomware si notano riferimenti ad algoritmi e strutture di cifratura, come ad esempio Salsa20, keybytes, crypto_stream_salsa20_xor (che denota anche un utilizzo di operazioni di XOR) ma anche riferimenti al file di Readme destinato alla vittima e ad alcuni attributi di configurazione del ransomware. Esemplificando, gli attributi contenuti sono: SkipByDirName, SkipByFileName (per eccezioni nel processo di encryption), Suspend_VM_ID_ERROR, Suspended_VM_ID. 

All’interno del segment _LINKEDIT (utilizzato per archiviare dati grezzi che vengono impiegati poi dal dynamic linker e le relocation tables) contiene riferimenti di multithreading executions e gestione di oggetti mutex. 

Verificando lo stato di packing del malware è possibile evidenziare un coefficiente d’entropia piuttosto alto per il segment _TEXT, difatti esso si attesta a 6.93823: 

A seguire i dettagli della distribuzione di bytes del threat, vi è una bytes confusion di uno dei segmenti del medesimo: 

Analisi statica 

Fra gli indicatori sospetti da un’operazione di assessment vi sono riferimenti alla presenza di servizi, Base64 encoding, files management (utilizzato nella fase di encryption dei files e folder target): 

Tra le stringhe estraibili dal sample vi sono dettagli inerenti alle funzioni di crittografia e decrittografia, stop e creazione di oggetti services, l’algoritmo Salsa20 e, curiosamente, elementi riferibili solitamente ad un ambiente Windows, come ad esempio ntuser.dat.log (che contiene informazioni, dettagli ed impostazioni dell’utenza di sistema), autorun.inf: 

A seguire ulteriori stringhe relative alle funzioni di encryption, ma anche stringhe di logging che sembrerebbero far riferimento allo skipping e bypassing durante la fase di cyber kill chain. Con tutta probabilità tali riferimenti sono relativi anche a disposizioni di evasion da security solutions. 

Tra gli attributi sono presenti i primi N bytes dei files target da prendere in considerazione ed un parametro di configurazione che indica se procedere con una crittografia della totalità dei files presenti in una folder o meno. 

LockBit variante macOS fa uso dell’algoritmo di crittografia curve25519xsalsa20poly1305 come da evidenza a seguire; tale algoritmo risulta essere piuttosto affidabile in termini di encryption e securing files. 

Qui riferimenti ad operazioni di XOR ed i bytes presi in considerazione: 

Vi sono inoltre riferimenti a macchine eSXi e Linux: 

Tra i parametri di configurazione di LockBit è possibile notare evidenze correlate a wiping functions (utilizzate per distruggere dati su disco), SSH enablement, esxi_enable, except_folder al fine di aggiungere folder in “eccezione” durante la fase di crittografia dei dati: 

Di seguito alcuni dettagli correlabili a variabili della chiave pubblica utilizzata, randomic bytes functions executions. 

Qui evidenze relative a timers, threads ma anche riferimenti a VM management per sospendere macchine virtuali (ad esempio tramite gli attributi “_vmdumper_l” e “_vmdumper_suspend_vm”): 

La funzione _CalculateCryptoBlocksShift prende come argomento in input la variabile arg2, che viene poi utilizzata in istruzioni di left shift mediante istruzioni “lsls”. Vi sono poi istruzioni di adding, seguite da un’istruzione bl al fine di copiare l’indirizzo della prossima istruzione. 

A seguire i dettagli della struttura _KEYSIZE, la quale contiene parametri di tipo .string. Vi è poi un’istruzione di comparing tra il valore del registro r3 (argomento in input “arg4”) e il valore 0x9b al fine di effettuare controlli della size. 

La funzione “_SkypByDirName” prende in input gli attributi arg_4h e arg_2f8h, essi vengono poi aggiunti con il registro r1. Vi sono poi evidenze di istruzioni di comparing, come ad esempio blt, bge e bpl al fine di permettere il controllo delle folders prese in considerazione e “saltare” quelle inserite in “eccezione”. 

La funzione _add_node_to_chain possiede i seguenti attributi come argomenti in input: arg1, arg_4h, arg_8h e arg_2f4h. Dopo un’operazione di shifting lsrs del registro r0 con il valore 0x20, vi è un’istruzione di push per i registri r0, r1, r2, r3, r4, r5, r7 ed lr. 

A seguire la funzione di creazione di thread pooling _tpool_create: 

La funzione _check_esxi viene utilizzata al fine di controllare l’environment d’esecuzione: 

Di seguito vi sono numerosi riferimenti alla libreria di encryption riferibili a “Libsodium”. Una di queste funzioni è denominata “_crypto_box_easy”, la quale utilizza i parametri presi in input arg_4h, arg_ch, arg_10h e arg_14h. La particolarità di tale libreria è che sono state trovate vulnerabilità relative ad un contesto di scambio di messaggi criptati tra A e B: nel caso in cui venga compromessa la chiave privata di A, tutti i messaggi inviati e ricevuti da A sarebbero compromessi. 

A seguire i dettagli della funzione _crypto_box_keypair, la quale possiede gli argomenti arg1, arg2 e arg4 al fine di definire le chiavi di cifratura. 

All’interno dei contesti di definizione di oggetti di crypto_stream vi sono evidenze dell’esecuzione di istruzioni di XOR: 

La funzione _do_I_need_to_bypass_this_file sembra essere un ulteriore attributo di configurazione del ransomware al fine di definire se un determinato file debba essere bypassato o meno durante l’infection phase. 

La funzione _do_I_need_to_bypass_this_vms risulta essere un ulteriore attributo di configurazione del ransomware al fine di definire se una determinata macchina virtuale debba essere bypassata o meno durante l’infection phase. 

La funzione _encrypt_all_files_in_dir prende in input l’attributo arg1 e salvato all’interno del registro r0 e successivamente vi è l’esecuzione della funzione di BHS, utilizzabile con lo scopo di effettuare una comparison unsigned con risultato più alto o uguale. Anche l’istruzione bpl viene utilizzata con lo scopo di effettuare un’operazione di jumping condizionale. 

La funzione _encrypt_file_first_N_bytes prende in considerazione i primi N bytes di un dato file per procedere poi con un’azione di encryption. Vengono aggiunti i diversi argomenti in input arg3, arg_4h, arg_8h, arg_ch, arg_10h, arg_14h, arg_18h, arg_1ch e arg_2e8h con i registri r1 e r2 con una serie di istruzioni add

La funzione _get_password esegue l’istruzione assembly stm al fine di memorizzare il contenuto del registro r3 nei registri consecutivi r0, r1, r2, r3, r4, r5, r6 e r7. 

Qui i dettagli di un riferimento alle funzioni di decryption AES _mbedtls_aes_decrypt_cbc e _mbedtls_aes_init_encrypt(), le quali effettuano diverse istruzioni di data loading ldr, logical shifting lsls dei registri r2 e r0 in correlazione con gli altri registri. Successivamente vi sono istruzioni di comparing tra i registri e diversi valori esadecimali (ad esempio il valore esadecimale 0x68, in decimale 104). 

La funzione _pre_encrypt_file funge da preludio dell’operazione di crittografia, la quale possiede attributi similari alle funzioni AES sopra descritte. 

A seguire i dettagli della funzione di distruzione di dati _wipe_routine che provvede ad aggiungere gli argomenti in input al registro r1 e ad eseguire numerose operazioni di shifting, come ad esempio lsls

All’interno della funzione start_wiping vi sono dettagli inerenti ad istruzioni di shifting, comparing ed istruzioni di spostamento di dati nei vari registri, come ad esempio r0 e r3

IOCs: 

abf01633960dd77c6137175a21fccf34 

_I_need_to_bypass_this 

_SUSPENDED_VM_ID 

Regola YARA: 

rule LockBitMacRule 

{  

strings:  

$str = “_I_need_to_bypass_this ” 

$str1 = “SUSPENDED_VM_ID 

$hex= {5f 49 5f 6e 65 65 64 5f 74 6f 5f 62 79 70 61 73 73 5f 74 68 69 73} 

$hex1 = {53 55 53 50 45 4e 44 45 44 5f 56 4d 5f 49 44}  

condition: $str or $str1 or $hex or $hex1  

CONCLUSIONI: 

LockBit, con tale variante macOS, ha dimostrato come, partendo dalla struttura del source code del threat della variante Windows, è possibile costruire un threat multiplatform non senza però presentare problematiche relative a bugs ed errori di programmazione desumibili da operazioni di assessment e strings extraction, come ad esempio il fatto che vengano utilizzate funzioni di encryption derivabili da librerie Libsodium che, in alcune tipologie di circostanze, possono presentare potenziali vulnerabilità. L’ipotesi per cui la source code base di Windows è stata utilizzata per sviluppare la variante macOS è rafforzabile dal fatto che, curiosamente, tra le stringhe estraibili dal sample siano presenti effettivamente dettagli solitamente relativi ad ambiente Windows. 

Anche all’interno della variante macOS sono presenti attenzioni allo sviluppo di un sistema di threat configuration che prevede l’inserimento di specifici attributi per l’infection chain che indicano, ad esempio, la crittografia di tutti o di alcuni files all’interno di una data folder, wiping disk attributes e IDs inerenti a macchine virtuali. 

Lo sviluppo da parte degli autori di LockBit di tale variante macOS può voler significare che i threat actors si stiano spostando sempre di più nell’ottica del multiplatform e, tale scenario, potrebbe comportare alcune considerazioni: il rischio di contrarre infezioni da tali minacce è più elevato, i malware developers avranno come obiettivo principale quello di allargare i confini di vulnerabilities hunting per colpire più sistemi operativi e tale behavior potrebbe essere correlato anche ad altre tipologie di minacce, non solo ransomware threats. 

Swascan Academy lancia la Seconda Edizione del corso OSINT & Social Engineering!
Analisi Malware: Mirai

Pronto intervento Cyber Swascan

Contattaci per un supporto immediato

Il sottoscritto, in qualità di interessato DICHIARA di aver letto e compreso il contenuto della privacy policy ai sensi dell’articolo 13, GDPR. ACCONSENTE al trattamento dei Dati in relazione all’invio da parte del Titolare di comunicazioni afferenti alla gestione di eventuali misure precontrattuali, preordinate alla stipulazione e/o esecuzione del contratto con il Cliente nonché all'adempimento dei relativi obblighi.
Il consenso prestato potrà essere revocato in qualsiasi momento contattando il Titolare ai recapiti presenti nella citata privacy policy.