La gang Phobos Ransomware è stata individuata per la prima volta a Dicembre 2018 e ha sempre avuto come target aziende per lo più di piccole dimensioni. Sono state identificate somiglianze e connessioni tra Phobos Ransomware e Dharma Ransomware ma anche tra Phobos Ransomware e CrySIS Ransomware. Dopo che sono stati pubblicati i dettagli delle chiavi di Dharma Ransomware, nuove versioni di Phobos Ransomware sono state sviluppate. [1]
All’interno della presente analisi è stato preso in esame il malware sample 11.exe (Hash: d5b1a26c5c3b592c7008f440a36be0c3). E’ stato sviluppato in C++ e possiede le sezioni del Portable Executable .text e .cdata con un coefficiente d’entropia non indifferente, entrambe in uno stato di “packed”:
Matrice TTPs:
L’entrypoint dell’eseguibile risulta essere all’indirizzo 00402fa7:
Verificando la mappatura di memoria è possibile osservare come all’interno della sezione .cdata siano presenti elementi ricorrenti, nello specifico il pattern “du?a.qa”:
A seguire i dettagli degli imports principali che sono stati effettuati e per ognuno anche lo scopo dell’import stesso:
- MPR.dll (al fine di enumerare le risorse di rete dell’infrastruttura colpita)
- WS2_32.DLL (al fine di gestire oggetti Windows Sockets, nel dettaglio la funzione WSAAddressToStringW viene utilizzata al fine di convertire un indirizzo di socket in stringa intelligibile)
- WINHTTP.DLL (al fine di gestire, inviare e ricevere richieste e connessioni HTTP)
- KERNEL32.DLL (al fine di enumerare i files da criptare, ottenere i dettagli del current timestamp, rinominare files, gestire e spostare i puntatori dei files, ottenere dettagli in merito agli attributi della macchina, informazioni hardware, enumerare i dischi della macchina compromessa, ottenere attributi di files tramite la funzione GetFileAttributesW e settarli tramite la funzione SetFileAttributesW, leggere aree di memoria di processi esterni. Importante anche la funzione QueryPerformanceCounter che può essere utilizzata al fine di ottenere dettagli in merito agli intervalli di tempo di frequenza del counter e quindi dettagli hardware e CPU, eliminare files mediante la funzione DeleteFileW).
- ADVAPI32.DLL (al fine di ottenere maggiori privilegi negli access tokens e gestire chiavi di registro: SetValue, CloseKey, OpenKey e QueryValue. Inoltre la libreria viene utilizzata al fine di ricercare ed individuare accounts tramite il SID all’interno del dominio)
Verificando le stringhe estraibili dall’eseguibile è possibile individuare alcuni dettagli importanti: il ransomware sembra avere riferimenti al disco “X:”, il quale rappresenta l’etichetta del disco di sistema nel momento in cui Windows viene avviato in Safe Mode. La modalità Safe Mode del sistema operativo può essere piuttosto utile per una minaccia ransomware, il quale può cifrare i files senza preoccuparsi dell’interferenza di altri processi esterni. A seguire inoltre i numerosissimi riferimenti a network behaviour, nello specifico shares enumeration e richieste HTTP, nonché dettagli in merito alla conversione in stringa dell’indirizzo socket.
Di seguito i dettagli delle stringhe associate a environment information gathering ed enumeration dei dischi della macchina infetta, nonché la creazione di threads per multithreading:
A seguire l’evidenza del riferimento alla funzione ReadProcessMemory:
Phobos Ransomware esegue la funzione OpenMutexW e ReleaseMutex al fine di aprire un oggetto mutex e rilasciarlo in seguito:
Qui i dettagli delle stringhe inerenti a contesti d’esecuzione di moving di files, gathering di privilegi di access tokens, di un account tramite SID (Security Identifier) e gestione di chiavi di registro:
Effettuando alcune verifiche approfondite in merito alle richieste HTTP, il ransomware sembra effettuare l’invio di alcuni attributi e parametri mediante l’esecuzione della funzione sub_403CBD, le variabili sono le seguenti: pswzServerName (dword ptr 8) e pwszObjectName (dword ptr 0Ch):
In seguito viene gestita la response della richiesta HTTP POST:
La variabile var_28 sembrerebbe rappresentare un ID inviato durante tale sessione HTTP POST:
Viene richiamata la funzione sub_403CBD:
All’interno della funzione sub_4086B7 vengono effettuate istruzioni di WriteFile e contestualmente “spostati” i file pointers. E’ presente un’istruzione jz e, nel caso in cui il verdict sia false, viene eseguita l’istruzione WriteFile, in caso contrario viene richiamata la label loc_40877B:
A seguire il riferimento all’esecuzione della funzione GetTickCount, QueryPerformanceCounter e SystemTimeToFileTime che può essere utilizzata in ambito di anti-VM:
Dopo aver ottenuto informazioni e dettagli in merito al dominio dell’infrastruttura colpita, viene fatto un confronto tra due variabili che contengono SIDs, ovvero pSid2 e pSid1:
Viene presa in considerazione un’istanza del processo corrente tramite la funzione GetCurrentProcess, essa viene poi modificata includendo nuovi attributi di privileges del token del processo stesso:
All’interno della funzione sub_402084 è presente l’esecuzione della funzione WSAAddressToStringW al fine di convertire l’indirizzo socket in stringa con il parametro “\\\\e-“ e viene inoltre effettuata la connessione verso shares di rete. Fra i parametri utilizzati vi sono il nome della risorsa di rete, lo username e la password di accesso:
La funzione sub_404EA5 possiede dettagli dei riferimenti alle variabili var_4C e var_44, che verranno poi utilizzati al fine di generare l’ID univoco della macchina (serial number del disco di sistema) e l’ID del mutex, impiegato nella gestione di accesso concorrenziale a determinate risorse durante la fase di infezione.
Alcuni degli indicatori sospetti del Portable Executable sono: la presenza della sezione .cdata, esecuzioni di networking (shares di rete e richieste HTTP POST) ma anche storage (enumerazione ed ottenimento dei dettagli di dischi e volumi) e reckoning (information gathering in merito al dominio dell’infrastruttura e gli accounts).
Il ransomware in esame è stato compilato il 31 Marzo 2020:
A seguire i dettagli delle sezioni del PE, compresa la sezione sospetta .cdata:
All’interno della sezione .text dell’eseguibile è possibile evidenziare la presenza di un’istruzione JAE, un salto condizionale nel caso in cui il confronto sia maggiore o uguale, se questo è TRUE esso salta all’istruzione MOV EAX, DWORD PTR [EBP – 4]
Effettuando una sessione di debugging è possibile avere contezza dell’ID del volume di sistema ottenuto (tramite la funzione GetVolumeInformationW) e l’ottenimento della variabile ELVL per la creazione del mutex utilizzato durante l’infezione. Al termine dell’acquisizione di tali attributi fondamentali viene fatto un confronto con 00000000 al fine di verificare che la costruzione dell’ID sia stata completata. La struttura finale dell’attributo utilizzato nel mutex risulta essere la seguente: Global\\<<BID>><<ID>><<ELVL>>, ciò permette a Phobos Ransomware di identificare univocamente ogni macchina infetta e cifrata.
Di seguito alcuni dettagli del source code dove viene richiamata l’esecuzione della funzione OpenMutexW:
L’esecuzione della richiesta POST è in realtà inutile, in quanto il threat non esegue, in tal senso, alcuna richiesta POST esterna; difatti durante la sessione di debugging è stato ricevuto l’errore di mancanza di parametri in input per la richiesta in questione.
Phobos Ransomware effettua tasks di persistenza droppando items ai seguenti paths e chiavi di registro:
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\
HKU\%SID%\Software\Microsoft\Windows\CurrentVersion\Run\
%USERPROFILE%\AppData\Local\
A seguire, inoltre, l’evidenza di ottenimento da parte del sample del Security Identifier utilizzato oltretutto per impostare la persistenza a bordo della macchina compromessa:
IOCs:
- d5b1a26c5c3b592c7008f440a36be0c3
- info[@]fobos[.]one
Regola YARA:
rule PhobosHunting {
strings:
$phobos_string = “ELVL”
$phobos_hex = { 45 4c 56 4c }
condition:
$phobos_string or $phobos_hex
}
CONCLUSIONI:
Un elemento peculiare, relativo al sample Phobos Ransomware analizzato, è il fatto che esso contenga un contesto d’esecuzione di una richiesta POST: tale richiesta è però inutile in quanto i parametri passati in input risultano essere vuoti; questo è stato confermato anche dalla sessione di debugging, nella quale è possibile constatare come l’esecuzione vada in errore per mancanza di parametri. Confrontando la variante risalente al 2020 di Phobos Ransomware con le altre varianti più recenti (ad esempio alcune risalenti al 2021), è riscontrabile ad esempio il loader Y.dll (Hash: 4ff1f8a052addbc5a0388dfa7f32cc493d7947c43dc7096baa070bfc4ae0a14e) il quale provvede all’utilizzo di PasteBin (dominio paste[.]ee) al fine di effettuare il delivery e la diffusione del threat.
Per quanto riguarda la versione del 2020, sembra plausibile il fatto che il ransomware sia un preludio ad un oggetto “RaaS” (Ransomware as a Service), difatti la fase di esecuzione di questa presunta richiesta POST potrebbe essere potenzialmente modificata da eventuali threat actors per sviluppare e rilasciare una versione che includerebbe anche tasks di estorsione di dati in caso di mancato pagamento. Il codice sorgente di Phobos Ransomware (prima variante) risulta essere stato pubblicato sul cybercrime marketplace xDedic, tuttavia l’FBI ha provveduto a chiudere tale pubblicazione nel Gennaio 2019.