Das Incident-Response-Team von Eye Security wurde neulich beauftragt, einen Ransomware-Vorfall zu untersuchen, den wir der 8Base-Ransomware-Gruppe zuordnen konnten. Schnell stellten wir fest, dass die Verschlüsselung auf einigen Hosts noch aktiv war. Daher beschlossen wir, herauszufinden, ob ein Memory Dump des Prozesses uns ausreichende Informationen liefern würde, um die Verschlüsselungsschlüssel wiederherzustellen.
Im Folgenden skizzieren wir die durchgeführten Schritte sowie diejenigen, die für eine erfolgreiche Wiederherstellung nötig gewesen wären, wenn wir früher eingreifen hätten können.
Der 8Base-Verschlüsselungsprozess
Dateien unter 1,5 MB werden vollständig verschlüsselt. Bei größeren Dateien verschlüsselt die Ransomware nur drei 256-KB-Blöcke: am Anfang, am Ende und einen zufälligen Block in der Mitte.
Diese Technik wird genutzt, um maximalen Schaden anzurichten, die Wiederherstellungschancen zu minimieren und gleichzeitig die Verschlüsselung zu beschleunigen sowie die Entdeckung zu erschweren. Die ersten und letzten Abschnitte einer Datei enthalten essenzielle Header, Metadaten, Formatinformationen und Indexstrukturen. Ohne diese ist eine Datei oft unbrauchbar. Dennoch gibt es Tools, die bestimmte Dateitypen teilweise wiederherstellen können. Um das zu verhindern, verschlüsselt die Ransomware zusätzlich einen zufälligen Block in der Mitte. Das zerstört die Datenstruktur und macht eine Wiederherstellung nahezu unmöglich.
Die Schlüsselgenerierung bei dem 8Base-Ransomware-Angriff
Die Malware erstellt für jedes Laufwerk oder Netzlaufwerk, das sie verschlüsselt, ein neues (Paar) AES-Schlüssel. Dieser Zufallsgenerator wurde bereits von CERT Polska analysiert und mit begrenztem Erfolg angegriffen (siehe "A Tale of Phobos: How We Almost Cracked a Ransomware Using CUDA"). Daher wäre es unwahrscheinlich gewesen, die AES-Schlüssel per Brute-Force zu entschlüsseln.
Jeder AES-Schlüssel wird anschließend mit einem RSA-öffentlichen Schlüssel verschlüsselt. Die verschlüsselten Daten enthalten zudem die Volume-Seriennummer des Systemlaufwerks sowie eine eindeutige Kennung. So kann die Angreifer gezielt entscheiden, für welche Systeme sie die AES-Schlüssel freigeben.
struct rsa_encrypted_data {
char key[32];
int volume_serial_nr;
int identifier; // config variable 1
};
Nachdem beide Schlüssel generiert werden, werden sie in einer gemeinsamen Struktur zusammengeführt, die auch eine CRC-Prüfsumme enthält. Diese Prüfsumme wird über die Verkettung beider Schlüssel berechnet, wie aus dem folgenden Code ersichtlich ist.
Falls der AES-Schlüssel noch im Memory vorhanden ist, sollten wir eine Struktur mit dem folgenden Aufbau finden:
struct key_combo {
char aes_key[32];
char rsa_encrypted_aes_key[128];
int crc_checksum;
};
Herausforderungen bei der Wiederherstellung der Verschlüsselungsschlüssel aus dem Speicher
Zur Analyse des Raw-Memory-Dumps verwendeten wir das folgende Python-Skript, um die Struktur zu identifizieren:
# data is raw memory dump
import struct,zlib
for i in range(len(data)-128-32-4):
mem_crc = struct.unpack('I',data[i+32+128:i+32+128+4])
calc_crc = zlib.crc32(data[i:i+32+128])
if mem_crc == calc_crc:
print(f'Found aes key: {data[i:i+32]}')
Leider konnten wir die Schlüssel nicht finden, da sie direkt nach Abschluss der Verschlüsselung eines Laufwerks von der Malware gelöscht wurden. Dadurch blieb uns nur ein sehr kurzes Zeitfenster, in dem die Schlüssel verfügbar waren.
Die Alternativlösung: Entschlüsseln der Dateien
Die Umgebung des Kunden wurde vollständig wiederhergestellt. Sie können darüber in unserem Artikel „8Base Ransomware Investigation Uncovers Surprising Insights“ lesen. Dieser Prozess wäre jedoch etwas anders verlaufen, wenn wir die Schlüssel hätten wiederherstellen können. Hier sind die Schritte, die wir zur Wiederherstellung der Dateien unternommen hätten.
Am Ende jeder verschlüsselten Datei wurden zwei Datenstrukturen hinzugefügt. Bei der ersten handelt es sich um verschlüsselte Metadaten, bei der anderen um einen unverschlüsselten Footer. Um die Datei wiederherzustellen, lesen wir zunächst den Footer am Ende der Datei. Dieser enthält die Informationen, die zum Wiederherstellen und Entschlüsseln der verschlüsselten Metadaten benötigt werden. Hier ist die Struktur:
struct __declspec(align(1)) phobos_file_footer {
char always_zero[20];
char iv[16];
int padding_size;
char rsa_encrypted_part[128];
int metadata_offset;
char attacker_id[6];
};
Das wichtigste Feld ist metadata_offset, ein Offset vom Ende der Datei zu ihren verschlüsselten Metadaten. Diese können mit dem wiederhergestellten AES-Schlüssel und der iv aus dem Footer mit AES-256 im CBC-Modus entschlüsselt werden. Daraus ergibt sich die folgende Struktur.
struct phobos_file_metadata {
int always_zero;
int encryption_mode;
int magic;
int nr_chunks;
int chunk_len;
int crc_checksum;
int orig_filename_offset; //offset from start of structure phobos_file_metadata
int padding;
//chunks for large files only if encryption mode == 1
LARGE_INTEGER chunk_offsets[nr_chunks];
char chunk_data[nr_chunks][chunk_len];
};
Das wichtigste Feld ist encryption_mode. Modus 1 ist für teilweise Verschlüsselung, verwendet bei Dateien, die größer als 1,5 MB sind, und hat einen magischen Wert von 0xAF77BC0F. Modus 2 ist für die Verschlüsselung der gesamten Datei und hat einen magischen Wert von 0xF0A75E12.
Für vollständig verschlüsselte Dateien (Modus 2) verwenden Sie denselben AES-Schlüssel und Initialisierungsvektor zur Entschlüsselung. Entfernen Sie den Footer, die Metadaten und die letzten Bytes des Padding mithilfe des padding_size-Feldes.
Für große Dateien (Modus 1) sind die Daten in der Struktur enthalten. Um die Datei wiederherzustellen, suchen Sie den Offset chunk_offsets[idx] und schreiben Sie chunk_data[idx] an diesem Offset. Und natürlich entfernen Sie auch die Metadaten und den Footer am Ende der Datei.
Erkenntnisse aus diesem 8Base-Ransomware-Fall
Wären wir früher eingeschaltet worden, hätten wir den Verschlüsselungsprozess stoppen können, bevor die Schlüssel zerstört wurden – und die Dateiwiederherstellung wäre einfacher gewesen. Zudem hätte die Absicherung von Benutzerkonten mit starken Passwörtern und Multi-Faktor-Authentifizierung das Risiko eines Angriffs deutlich verringert. Glücklicherweise konnten wir die Umgebung des Kunden mit minimaler Ausfallzeit wiederherstellen.
Möchten Sie Ihre Sicherheitslage verbessern? Melden Sie sich bei uns für weitere Details.