- Penulis berhasil memulihkan data dari perusahaan yang terinfeksi ransomware Akira tanpa membayar tebusan
- Kode sumber yang digunakan dalam proses pemulihan tersedia di GitHub
- Ransomware Akira memiliki berbagai varian dan varian ini aktif sejak paruh akhir 2023
- Pada versi sebelumnya (sebelum pertengahan 2023), ada bug yang memungkinkan Avast mengembangkan dekriptor, tetapi setelah hal ini dipublikasikan, penyerang memperbarui mekanisme enkripsinya
- Hash sampel ransomware dapat dilihat di GitHub
Ringkasan cara memulihkan file Akira ransomware (varian Linux/ESXI 2024)
Pendekatan solusi
Analisis awal
- Ransomware menggunakan waktu saat ini dalam nanodetik sebagai seed
- Karena waktu modifikasi file di Linux memiliki resolusi nanodetik, ditemukan kemungkinan untuk memulihkan seed
- Mencoba pendekatan brute force berdasarkan timestamp file yang dimodifikasi
Proses enkripsi yang kompleks
- Ransomware menggunakan 4 nilai seed (waktu dalam nanodetik)
- Pembuatan kunci memproses hash SHA-256 sebanyak 1500 kali secara berulang
- Sistem file VMware VMFS hanya menyimpan waktu modifikasi hingga resolusi detik
- Karena enkripsi berbasis multi-thread, pemulihan timing yang akurat menjadi sulit
Reverse engineering
- Kodenya ditulis dalam C++ sehingga sulit dianalisis, tetapi tidak diobfuskasi
- Dari pesan error, terkonfirmasi bahwa ransomware menggunakan library Nettle
- Generator acaknya berbasis algoritma Yarrow256 dan menggunakan kode berikut
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);
}
- Saat membuat kunci, terjadi 4 kali pemanggilan
generate_random()
- chacha8_key (32 byte)
- chacha8_nonce (16 byte)
- kcipher2_key (16 byte) × 2
Tinjauan kemungkinan brute force
Strategi utama
- Membuat dua timestamp (t3, t4), mengubahnya menjadi seed, lalu menghasilkan bilangan acak
- Bilangan acak digunakan sebagai kunci KCipher2 dan IV, lalu hasil enkripsi dibandingkan dengan file terenkripsi
Analisis performa
- Mengonversi 100 juta timestamp membutuhkan 3 jam (berdasarkan CPU)
- Dengan GPU, kecepatan konversi dipangkas menjadi kurang dari 6 menit
- Untuk rentang 1 detik, pasangan yang mungkin berjumlah sekitar 500 triliun
- Setelah optimasi GPU, RTX 3090 mampu memproses 1,5 miliar enkripsi per detik
Tipe file VMWare dan strategi pemulihan
FLAT-VMDK
- 8 byte pertama VMDK dapat dipulihkan dari bootloader
- Informasi OS dapat diperiksa dari file VMX sehingga perlu memasang OS yang sama
SESPARSE
- Pola header file dikonfirmasi dari source code QEMU
- Header dimulai dengan
0x00000000cafebabe
File lainnya
- Timestamp awal dapat ditemukan dari file NVRAM, file VMX, file log, dan lainnya
Pemulihan timestamp
Log ESXi
- Log ESXi mencatat waktu eksekusi hingga milidetik
- Jika tidak ada log tingkat milidetik, perkiraan dapat dilakukan dari waktu berbasis detik
Waktu modifikasi sistem file
- Pada ESXi, resolusinya hanya sampai detik sehingga sulit memperkirakan waktu yang akurat
Enkripsi multi-thread
- Enkripsi file diproses paralel sebanyak jumlah core CPU
- Waktu modifikasi file mendekati waktu saat enkripsi selesai
Implementasi alat brute force
Algoritma KCipher2
- Menggunakan versi modifikasi, bukan KCipher2 standar (termasuk penanganan endian)
- Optimasi GPU dilakukan menggunakan CUDA
Peningkatan performa
- Performa ditingkatkan dengan shared memory
- Kecepatan ditingkatkan dengan menghapus memory copy
- Pemrosesan file paralel diimplementasikan → mampu menangani sekitar 1,5 miliar kali per detik
RTX 3090 vs RTX 4090
- RTX 4090 sekitar 2,3 kali lebih cepat → membutuhkan 7 hari
- RTX 3090 → sekitar 16 hari
Tahapan pemulihan
1. Ekstraksi timestamp
- Periksa waktu modifikasi dengan perintah
stat
- Ekstrak waktu mulai eksekusi dari log ESXi
2. Ekstraksi data terenkripsi
- Ekstrak blok terenkripsi dari VMDK, SESPARSE, dan lainnya
3. Mengukur kecepatan server
- Gunakan alat
timing-patch dari GitHub
4. Membagi pekerjaan
- Buat dan bagi file konfigurasi
- Atur agar bisa dijalankan paralel di GPU
5. Menyewa GPU dan menjalankan
- Runpod → biaya sekitar 116 dolar untuk 7 hari
- Vast.ai → lebih murah, tetapi kecepatan bisa berbeda tergantung kondisi perangkat
6. Menjalankan brute force KCipher2
./akira-bruteforce run2 config.json
7. Menjalankan brute force Chacha8
- Diperlukan untuk file berukuran besar
8. Menjalankan dekripsi
./decrypt filename.vmdk <t1> <t2> <t3> <t4>
Hasil performa
- RTX 3090 → 1,5 miliar proses per detik
- RTX 4090 → 3,5 miliar proses per detik
- Jika menggunakan 16 RTX 4090 → pemulihan dapat dilakukan dalam kurang dari 10 jam
Kemungkinan dan batasan pemulihan
- Probabilitas keberhasilan pemulihan ransomware kurang dari 0,1%
- Jika kondisi tertentu terpenuhi, tetap ada kemungkinan pemulihan
- Metode enkripsi dapat berubah tergantung varian ransomware
Kesimpulan
- Pemulihan ransomware sangat sulit, tetapi dalam kondisi tertentu bisa berhasil
- Brute force berbasis GPU adalah alat kunci
- Penulis telah merilis kode pemulihan sebagai open source, tetapi sulit memberikan dukungan tambahan
Catatan tambahan
- Lihat file
README.md di GitHub
- Kode ditulis sesuai situasi klien tertentu → bukan alat umum
- Pembuatan file konfigurasi, penyesuaian timing, dan lainnya memerlukan keterampilan setingkat administrator sistem
1 komentar
Komentar Hacker News
Seseorang menyinggung soal "umur terbatas" ransomware. Karena itu, komentar yang menyatakan hal ini tidak berdampak pada korban lain dihapus, tetapi balasannya tetap diposting
Ada pertanyaan tentang mengapa timestamp digunakan
Tulisan ini enak dibaca dan memuat detail yang pas untuk memuaskan rasa ingin tahu tentang prosesnya
Jika aplikasi disandbox secara default, masalah ransomware akan berkurang
"Saya memperkirakan kecepatan CPU mini PC saya dalam menghitung 100.000 timestamp per detik menjadi byte acak (dengan memanfaatkan semua core)"
Saya penasaran mengapa 65k pertama dienkripsi dengan KCipher2 dan sisanya dengan sesuatu yang lain. Terlihat aneh
"Saya memperkirakan setelah ini dipublikasikan, para penyerang akan mengubah enkripsinya lagi"
"Setiap kali saya menulis tentang ransomware di blog saya yang berbahasa Indonesia, banyak orang meminta bantuan terkait ransomware"