
Schlechtes Zeug von bösen Jungs
Das in diesem Dokument analysierte und referenzierte Hive-Sample wurde zufällig aus dieser Liste ausgewählt, die von @rivitna erstellt wurde, dem mein herzlichster Dank gilt. Artefakte sind auf der VirusTotal-Plattform verfügbar.
In diesem Dokument wird die Datei a0h2uih3d2.exe als Referenz herangezogen
MD5: 15CF5E0DA094ACDD751A513402A8C941
SHA-1: 72E15AC4473903C814E65E3C06F54EB0399580AA
SHA-256: 335D2E4A743D059955760ECF2EC25EE86D36AA60B096C9180E860C64EF78EE55
Um sich einen Eindruck von der Komplexität dieser Ransomware zu verschaffen, werfen Sie bitte einen Blick auf diese Analyse, die vom Microsoft Threat Intelligence Center (MSTIC) veröffentlicht wurde.
Bitte lesen Sie das gesamte Dokument sorgfältig, bevor Sie mit dem Code herumspielen!
In den letzten Monaten habe ich den Großteil meiner Energie in das Studium und Reverse Engineering des Hive-v5-Verschlüsselungsalgorithmus gesteckt. Ich hatte die Freude, mit einem großartigen Malware-Analysten und Reverse Engineer @rivitna zusammenzuarbeiten, der in der Vergangenheit frühere Versionen von Hive analysiert und Code und PoCs zu deren Verschlüsselungsmechanismen veröffentlicht hat. Er hat (nicht wenig) dazu beigetragen, die Komponenten zu identifizieren, die an den Verschlüsselungsoperationen von Hive v5 beteiligt sind, das, da es in RUST geschrieben ist, schwieriger zu analysieren geworden ist. Ich habe einige Gemeinsamkeiten zwischen Hive v5 und Babuk festgestellt, einer weiteren sehr wichtigen Ransomware, deren Quellcode im Juni 2021 offengelegt wurde:
Die auf einem Opfersystem ausgeführte Hive-Ransomware v5 erzeugt zwei Klartextschlüssel, wobei sie den unten gezeigten Algorithmus verwendet, der auf den Windows-APIs QueryPerformanceCounter und QueryPerformanceFrequency basiert.
Bitte werfen Sie einen Blick auf diese Microsoft-Seite für weitere Informationen zu den QueryPerformanceCounter-APIs, hier für QueryPerformanceFrequency.
QueryPerformanceCounter ist ein sehr genauer Zeitzähler. Beim Aufruf gibt er die Zeit zurück, die seit dem letzten Einschalten des PCs vergangen ist.
QueryPerformanceFrequency gibt den Wert (Frequenz) des Performance-Counters zurück. Er hat einen festen Wert von 0x989680. Das bedeutet, dass der QueryPerformanceCounter-Wert 0x989680 Mal pro Sekunde aktualisiert wird, also 10.000.000 Mal.
Die beiden Klartextschlüssel haben eine Größe von 0xCFFF00 Bytes und werden einzeln, Byte für Byte, erzeugt. Unten ist der Codeausschnitt, der die Erstellung eines Arrays von 0xA00000 Bytes ermöglicht, das den größten Teil des sogenannten Klartextschlüssels darstellt, mit dem Hive die Dateien auf dem PC des Opfers verschlüsselt.

Jedes Byte des Schlüssels wird durch den Wert des AL-Registers erhalten. Das EAX-Register enthält das Ergebnis der Funktion 0044ADE0, die mit dem Label createByte umbenannt wurde und die Differenz zwischen dem aktuellen Zeitpunkt und dem anfänglichen Seed-Wert implementiert, der beim ersten Aufruf der Funktion 0044A850 berechnet wird, die mit dem Label call_to_QueryPerformanceCounter umbenannt wurde.
Unten ist der in C++ geschriebene Code zur Erzeugung eines Klartextschlüssels:

Der Algorithmus ist sehr einfach, auch wenn innerhalb der Funktion 0044ADE0 Anweisungen eingefügt wurden, die redundante Operationen und verschiedene bedingte Sprünge ausführen, um die Ausführungszeit des Codes während der Erzeugung des Klartextschlüssels zu verzögern:

Im Ordner HiveRansomwareV5_custom_keygen_PoC finden Sie den Rohcode, der per Reverse Engineering aus der analysierten Hive-v5-Probe gewonnen wurde. Es ist kein optimierter Code wie im Malware-Original, da ich keine einzige Codezeile der kompilierten Version auslassen wollte.
Im Ordner HiveRansomwareV5_custom_keygen_PoC-optimized finden Sie den optimierten Code, der aus dem oben genannten Rohcode abgeleitet wurde. In dieser Version ist der Code viel leichter zu lesen als der Rohcode, um die implementierte Funktionalität zu verstehen.
Beide Versionen müssen vor dem Ausführen an Ihren Benutzer angepasst werden, um den erzeugten Klartextschlüssel auf Ihrem Desktop zu speichern.
Beide Klartextschlüssel werden mit demselben Algorithmus erzeugt.
Ein Klartextschlüssel besteht aus 0xA00000 sicher zufällig generierten Bytes. Dann werden die ersten 0x2FFF00 Bytes ans Ende kopiert, wodurch ein endgültiger Klartextschlüssel von 0xCFFF00 Bytes entsteht.

Anschließend verwendet Hive die beiden erzeugten Schlüssel, um Dateien zu verschlüsseln, aber zuerst verschlüsselt die Hive-Ransomware v5 die erzeugten Schlüssel in einer eigenen Struktur (im Folgenden Keystreams genannt) und legt sie mit der Erweiterung .key im Stammverzeichnis jedes Laufwerks ab, das sie verschlüsselt. Wenn Sie zum Beispiel beide Laufwerke C und D auf Ihrem System installiert haben, sind die verschlüsselten Keystreams im Stammverzeichnis jedes Laufwerks vorhanden.

Die Hive-Ransomware v5 verwendet die erzeugten Klartextschlüssel, um Dateien mit der XOR-Instruktion zu verschlüsseln. Wir haben es also mit einer sehr schnellen symmetrischen Verschlüsselung auf modernen x86/x64-CPUs zu tun.
Die Hive-Ransomware v5 muss den erzeugten Klartextschlüssel schützen, indem sie ihn zweimal verschlüsselt; im Folgenden nennen wir diese Runden. Es sind zwei Verschlüsselungsrunden erforderlich, um den endgültigen Keystream zu erhalten.
Um dies zu erreichen, werden in jeder Runde die folgenden Schritte ausgeführt: