
roba cattiva di persone cattive
Il campione di Hive analizzato e citato in questo documento è stato scelto casualmente da questo elenco creato da @rivitna a cui vanno i miei più sentiti ringraziamenti. Gli artefatti sono disponibili sulla piattaforma VirusTotal.
In questo documento, il file a0h2uih3d2.exe è stato preso come riferimento
MD5: 15CF5E0DA094ACDD751A513402A8C941
SHA-1: 72E15AC4473903C814E65E3C06F54EB0399580AA
SHA-256: 335D2E4A743D059955760ECF2EC25EE86D36AA60B096C9180E860C64EF78EE55
Per avere un'idea della complessità di questo ransomware, dai un'occhiata a questa analisi pubblicata da Microsoft Threat Intelligence Center (MSTIC).
Leggi attentamente l'intero documento prima di iniziare a giocare con il codice!
Negli ultimi mesi, ho concentrato gran parte delle mie energie nello studio e nel reverse engineering dell'algoritmo di crittografia di Hive v5. Ho avuto il piacere di collaborare con un grande analista di malware e reverse engineer @rivitna che in passato ha analizzato le versioni precedenti di Hive e ha pubblicato codice e PoC relativi ai loro meccanismi di crittografia. Ha contribuito (non poco) a identificare i componenti coinvolti nelle operazioni di crittografia di Hive v5, che essendo scritto in RUST è diventato più difficile da analizzare. Ho trovato qualcosa in comune con Babuk, un altro ransomware molto importante le cui fonti sono state divulgate nel giugno 2021:
Il ransomware Hive v5 in esecuzione su un sistema vittima genera due chiavi in chiaro, usando l'algoritmo nella prova qui sotto, basato sulle API Windows QueryPerformanceCounter e QueryPerformanceFrequency.
Dai un'occhiata a questa pagina Microsoft per maggiori informazioni sulle API QueryPerformanceCounter, qui per QueryPerformanceFrequency.
QueryPerformanceCounter è un contatore di tempo molto accurato. Quando viene chiamato, restituisce il tempo trascorso dall'ultima accensione del PC.
QueryPerformanceFrequency restituisce il valore (frequenza) del contatore delle prestazioni. Ha un valore fisso di 0x989680. Ciò significa che il valore di QueryPerformanceCounter viene aggiornato 0x989680 volte al secondo, ovvero 10,000,000 volte.
Le due chiavi in chiaro hanno una dimensione di 0xCFFF00 byte e vengono generate una alla volta, byte per byte. Di seguito è riportato lo snippet che consente la creazione di un array di 0xA00000 byte, che è la parte più grande della cosiddetta chiave in chiaro con cui Hive crittografa i file sul PC della vittima.

Ogni byte della chiave viene ottenuto prendendo il valore del registro AL. Il registro EAX contiene il risultato della funzione 0044ADE0 rinominata con l'etichetta createByte che implementa la differenza tra l'istante di tempo corrente e il valore seed iniziale, calcolato alla prima chiamata della funzione 0044A850 rinominata con l'etichetta call_to_QueryPerformanceCounter.
Di seguito è riportato il codice scritto in C++ per generare una chiave in chiaro:

L'algoritmo è molto semplice, anche se all'interno della funzione 0044ADE0 sono state inserite istruzioni che eseguono operazioni ridondanti e vari salti condizionali per cercare di ritardare il tempo di esecuzione del codice durante la generazione della chiave in chiaro:

Nella cartella HiveRansomwareV5_custom_keygen_PoC troverai il codice raw ricavato dal reverse engineering del campione Hive v5 analizzato. Non è codice ottimizzato come quello trovato nel malware, perché non volevo perdere nemmeno una riga di codice della versione compilata.
Nella cartella HiveRansomwareV5_custom_keygen_PoC-optimized troverai il codice ottimizzato derivato dal codice raw sopracitato. In questa versione il codice è molto più facile da leggere rispetto a quello raw, per comprenderne la funzionalità implementata.
Entrambe le versioni devono essere personalizzate con il tuo utente prima di eseguirle, per salvare la chiave in chiaro generata sul tuo Desktop.
Entrambe le chiavi in chiaro vengono generate utilizzando lo stesso algoritmo.
Una chiave in chiaro è composta da 0xA00000 byte generati casualmente in modo sicuro byte. Quindi i primi 0x2FFF00 byte vengono copiati alla fine, creando una chiave in chiaro finale di 0xCFFF00 byte.

Poi Hive usa le due chiavi generate per crittografare i file, ma prima di tutto Hive ransomware v5 crittografa le chiavi generate in una struttura personalizzata (d'ora in poi chiamata keystream) e le posiziona nella radice di ogni unità che crittografa usando l'estensione .key. Ad esempio, se hai sia l'unità C che D installate sul tuo sistema, i keystream crittografati saranno presenti nella radice di ogni unità.

Hive ransomware v5 usa le chiavi in chiaro generate per crittografare i file usando l'istruzione XOR, quindi ci troviamo di fronte a una crittografia simmetrica molto veloce sulle moderne CPU x86/x64.
Hive ransomware v5 deve proteggere la chiave in chiaro generata, crittografandola due volte; d'ora in poi chiameremo questi passaggi round. Sono necessari due round di crittografia per ottenere il keystream finale.
Per fare ciò, a ogni round vengono eseguiti i seguenti passaggi:
Il passaggio 3 garantisce la creazione di un keystream che può essere aperto da una doppia coppia di chiavi private: quelle generate da Hive durante la crittografia e quelle che l'affiliato Hive ha generato quando ha compilato il ransomware per noi.
