- Dem Autor gelang es, die Daten eines mit Akira-Ransomware infizierten Unternehmens ohne Zahlung von Lösegeld wiederherzustellen
- Der im Wiederherstellungsprozess verwendete Quellcode ist auf GitHub verfügbar
- Von Akira-Ransomware existieren verschiedene Varianten; die hier behandelte Variante ist seit Ende 2023 aktiv
- In früheren Versionen (vor Mitte 2023) gab es einen Bug, der Avast die Entwicklung eines Entschlüsselungs-Tools ermöglichte, doch nachdem dies veröffentlicht wurde, aktualisierten die Angreifer die Verschlüsselung
- Hashes von Ransomware-Samples sind auf GitHub einsehbar
Zusammenfassung der Wiederherstellung von Dateien der Akira-Ransomware (Linux/ESXI-Variante 2024)
Lösungsansatz
Erste Analyse
- Die Ransomware verwendet die aktuelle Zeit im Nanosekundenbereich als Seed
- Da Linux-Dateiänderungszeiten eine Auflösung im Nanosekundenbereich haben, wurde die Möglichkeit zur Rekonstruktion des Seeds erkannt
- Auf Basis der Zeitstempel modifizierter Dateien wurde ein Brute-Force-Ansatz versucht
Komplexer Verschlüsselungsprozess
- Die Ransomware verwendet 4 Seed-Werte (Zeit im Nanosekundenbereich)
- Die Schlüsselerzeugung verarbeitet den SHA-256-Hash 1500-mal iterativ
- Das VMware-VMFS-Dateisystem speichert Änderungszeiten nur mit Sekundenauflösung
- Durch die multithreadbasierte Verschlüsselung ist eine exakte Rekonstruktion des Timings schwierig
Reverse Engineering
- Der Code ist in C++ geschrieben und dadurch schwer zu analysieren, aber nicht obfuskiert
- Anhand von Fehlermeldungen wurde die Verwendung der Nettle-Bibliothek bestätigt
- Der Zufallsgenerator basiert auf dem Yarrow256-Algorithmus und verwendet folgenden Code
void generate_random(char *buffer, int size)
{
uint64_t t = get_current_time_nanosecond();
char seed[32];
snprintf(seed, sizeof(seed), "%lld", t);
struct yarrow256_ctx ctx;
yarrow256_init(&ctx, 0, NULL);
yarrow256_seed(&ctx, strlen(seed), seed);
yarrow256_random(&ctx, size, buffer);
}
- Bei der Schlüsselerzeugung wird
generate_random() viermal aufgerufen
- chacha8_key (32 Byte)
- chacha8_nonce (16 Byte)
- kcipher2_key (16 Byte) × 2
Prüfung der Brute-Force-Möglichkeit
Hauptstrategie
- Zwei Zeitstempel (t3, t4) erzeugen, in Seeds umwandeln und daraus Zufallszahlen generieren
- Die Zufallszahlen als KCipher2-Schlüssel und IV zur Verschlüsselung verwenden und das Ergebnis mit der verschlüsselten Datei vergleichen
Leistungsanalyse
- Die Umwandlung von 100 Millionen Zeitstempeln dauert 3 Stunden (CPU-basiert)
- Mit GPU-Einsatz verkürzt sich die Umwandlungszeit auf unter 6 Minuten
- Für einen Bereich von 1 Sekunde gibt es etwa 500 Billionen mögliche Paare
- Nach GPU-Optimierung sind auf einer RTX 3090 1,5 Milliarden Verschlüsselungsvorgänge pro Sekunde möglich
VMware-Dateitypen und Wiederherstellungsstrategie
FLAT-VMDK
- Die ersten 8 Byte einer VMDK lassen sich aus dem Bootloader wiederherstellen
- Die OS-Informationen können aus der VMX-Datei entnommen werden; dafür muss dasselbe OS installiert werden
SESPARSE
- Das Dateikopfmuster wurde im QEMU-Quellcode bestätigt
- Der Header beginnt mit
0x00000000cafebabe
Sonstige Dateien
- In NVRAM-Dateien, VMX-Dateien, Log-Dateien usw. lassen sich frühe Zeitstempel finden
Wiederherstellung der Zeitstempel
ESXi-Logs
- In ESXi-Logs werden Ausführungszeiten mit Millisekundenauflösung aufgezeichnet
- Falls keine Millisekunden-Logs vorhanden sind, kann von Zeiten mit Sekundenauflösung aus geschätzt werden
Änderungszeiten des Dateisystems
- Bei ESXi ist wegen der Sekundenauflösung eine genaue Zeitschätzung schwierig
Multithread-Verschlüsselung
- Die Dateiverschlüsselung wird parallel entsprechend der Anzahl der CPU-Kerne verarbeitet
- Die Änderungszeit einer Datei liegt nahe am Zeitpunkt, zu dem die Verschlüsselung abgeschlossen wurde
Implementierung des Brute-Force-Tools
KCipher2-Algorithmus
- Es wird keine Standardversion von KCipher2 verwendet, sondern eine modifizierte Version (einschließlich Endian-Verarbeitung)
- Zur GPU-Optimierung wurde CUDA eingesetzt
Leistungsverbesserungen
- Leistungssteigerung durch Einsatz von Shared Memory
- Höhere Geschwindigkeit durch Entfernung von Speicherkopiervorgängen
- Parallele Dateiverarbeitung implementiert → etwa 1,5 Milliarden Vorgänge pro Sekunde möglich
RTX 3090 vs RTX 4090
- Die RTX 4090 ist etwa 2,3-mal schneller → 7 Tage Laufzeit
- RTX 3090 → etwa 16 Tage Laufzeit
Schritte der Wiederherstellung
1. Zeitstempel extrahieren
- Änderungszeiten mit dem Befehl
stat prüfen
- Startzeit der Ausführung aus ESXi-Logs extrahieren
2. Verschlüsselte Daten extrahieren
- Verschlüsselte Blöcke aus VMDK, SESPARSE usw. extrahieren
3. Servergeschwindigkeit messen
- Das Tool
timing-patch auf GitHub verwenden
4. Arbeit aufteilen
- Konfigurationsdatei erstellen und aufteilen
- So einrichten, dass parallele Ausführung auf GPUs möglich ist
5. GPU mieten und ausführen
- Runpod → Kosten von etwa 116 US-Dollar für 7 Tage
- Vast.ai → günstiger, aber je nach Gerätezustand sind Geschwindigkeitsunterschiede möglich
6. KCipher2-Brute-Force ausführen
./akira-bruteforce run2 config.json
7. Chacha8-Brute-Force ausführen
- Bei großen Dateien erforderlich
8. Entschlüsselung ausführen
./decrypt filename.vmdk <t1> <t2> <t3> <t4>
Leistungsergebnisse
- RTX 3090 → 1,5 Milliarden Vorgänge pro Sekunde
- RTX 4090 → 3,5 Milliarden Vorgänge pro Sekunde
- Mit 16 RTX 4090 → Wiederherstellung in unter 10 Stunden möglich
Wiederherstellungschancen und Grenzen
- Die Erfolgswahrscheinlichkeit einer Ransomware-Wiederherstellung liegt bei unter 0,1 %
- Wenn bestimmte Bedingungen erfüllt sind, besteht eine Wiederherstellungschance
- Je nach Ransomware-Variante kann sich die Verschlüsselungsmethode ändern
Fazit
- Die Wiederherstellung nach Ransomware ist sehr schwierig, kann unter bestimmten Bedingungen aber erfolgreich sein
- GPU-basierte Brute-Force ist das zentrale Werkzeug
- Der Autor hat den Wiederherstellungscode als Open Source veröffentlicht, kann aber kaum zusätzliche Unterstützung leisten
Zusätzliche Hinweise
- Siehe die Datei
README.md auf GitHub
- Der Code wurde auf die Situation eines bestimmten Kunden zugeschnitten und ist kein allgemeines Werkzeug
- Für das Erstellen von Konfigurationsdateien, Timing-Anpassungen usw. sind Kenntnisse auf Systemadministrator-Niveau erforderlich
1 Kommentare
Hacker-News-Kommentare
Jemand erwähnte die „begrenzte Lebensdauer“ der Ransomware. Das führte dazu, dass ein Kommentar gelöscht wurde, der meinte, dies habe keine Auswirkungen auf andere Opfer, aber es wurde eine Antwort darauf gepostet.
Es gab eine Frage dazu, warum Zeitstempel verwendet werden.
Dieser Beitrag ließ sich gut lesen und enthielt genau die richtige Menge an Details, um die Neugier auf den Ablauf zu befriedigen.
Wenn Anwendungen standardmäßig sandboxed wären, würde das Ransomware-Problem geringer ausfallen.
„Ich habe geschätzt, dass meine Mini-PC-CPU 100.000 Zeitstempel pro Sekunde mit Zufallsbytes berechnen kann (unter Nutzung aller Kerne)“
Ich frage mich, warum die ersten 65k mit KCipher2 verschlüsselt werden und der Rest mit etwas anderem. Das wirkt seltsam.
„Ich erwarte, dass die Angreifer die Verschlüsselung erneut ändern werden, nachdem dies veröffentlicht wurde“
„Jedes Mal, wenn ich in meinem indonesischen Blog über Ransomware schreibe, bitten mich viele Leute um Hilfe bei Ransomware“