-->

Cara Mengatasi File Yang Terinfeksi Ransomeware “IDRANSOMv3”

CySecIPB - 2016



Saya mendapatkan informasi dari timeline Facebook bahwa seseorang kena serangan ransomware buatan anak negeri. Ransomware ini bertindak seperti ransomware pada umumnya, mengenkripsi file milik korban dan meminta uang tebusan. Namun serangannya tergolong “mudah”, tidak secanggih ransomware internasional. Sampelnya didapat dari suatu link yang diberikan di grup Facebook.

Identifikasi

Identifikasi dengan perintah “file” di Linux menunjukkan ransomware tersebut dibuat dengan .NET. Kemungkinan akan mudah di-reverse engineer.

$ file F623D.exe

F623D.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows

Properties dari executable tersebut menunjukkan “codename”-nya yaitu “IDRANSOMv3”:

Karena merupakan assembly .NET, dengan mudah bisa dibedah isinya dengan ILSpy misalnya. Didapatkan source code yang mendekati aslinya. Di situ terlihat ada 3 form.

Berikut hasil static analysis dari setiap form beserta penjelasan setelah dianalisis.

Form1

Fungsi
Keterangan
GetMd5Hash
Menghitung hash MD5 dari string, output dalam hexadecimal
VerifyMd5Hash
Mengecek string dengan suatu hash MD5
Form1_Load
Scan folder di komputer dan mendaftarkan file yang akan dienkripsi dalam suatu list
Timer1_Tick
Melakukan enkripsi satu entri dalam list file
CreateKey
Menghasilkan key enkripsi dari suatu “password”
CreateIV
Menghasilkan IV enkripsi dari suatu “password”
EncryptOrDecryptFile
Fungsi inti untuk melakukan enkripsi dengan key dan IV tertentu
passwordEncryptSHA
Menghitung hash SHA1 dari string, output dalam hexadecimal

Form1 mulai dalam kondisi hidden (this.Hide()), sehingga user tidak tahu apa yang sedang terjadi.
Di fungsi Form1_Load, diambil nama dari komputer. Selain itu kode ASCII-nya ditambah 2 setiap karakternya (sandi caesar dengan 2 geser) dan hasilnya dimasukkan ke Form1.result. (Kode di bawah ini sudah dipersingkat, dihapus bagian try-catch yang terlalu banyak).

Nama komputer kemudian di-hash dengan MD5 dan hasilnya masuk ke Form1.TextBox1. Hasil hash tersebut kemudian di-hash lagi dengan SHA1 dan hasilnya masuk ke Form1.TextBox2. Jadi sejauh ini kita punya TextBox2 = sha1(md5(nama_komputer)), semua hash dalam string hexadecimal.

Setelah itu program akan mendaftar file-file yang akan dienkripsi. Folder yang ditarget yaitu:
  • MyDocuments
  • MyMusic
  • MyPictures
  • C:\Users\<username>\Downloads
  • C:\Users\<username>\Desktop
  • D:\

Program tidak menarget file dengan ekstensi tertentu, tapi hanya file yang akhirannya bukan “.fucked”. Sepertinya ekstensi “.fucked” ini adalah file yang sudah dia enkripsi, supaya tidak dienkripsi lebih dari sekali.

Setelah mendaftarkan semua file, program men-start Timer1. Di fungsi tick dari Timer1, dipanggil fungsi untuk mengenkripsi. File yang dienkripsi ditambahi ekstensi “.fucked”, dan file aslinya dihapus.

Key dan IV untuk enkripsi dihitung dari “password” yang merupakan isi TextBox2. Key diambil dari byte ke-0 sampai ke-31 dari nilai SHA512 dari password. Jadi key sepanjang 32 byte.

IV diambil juga dari hasil SHA512 dari password, namun diambil byte ke-32 sampai ke-47 (sepanjang 16 byte).

Didapatkan informasi vital:
  • Key = sha512(sha1(md5(nama_komputer))), diambil byte 0-31
  • IV = sha512(sha1(md5(nama_komputer))), diambil byte 32-47

Untuk metode enkripsinya sendiri (dalam fungsi EncryptOrDecryptFile) menggunakan algoritma Rijndael (beda dengan AES), yang kalau dibaca di dokumentasi .NET menggunakan parameter default mode operasi CBC, padding PKCS7, dan block size 128 bit.

Dengan demikian bisa disimpulkan ternyata kunci enkripsi tidak didapatkan lewat jaringan atau internet (seperti ransomware high-level), tapi dihitung dari informasi yang ada di komputer, dalam hal ini adalah nama komputer. Jadi ransomware ini cukup mudah untuk dikalahkan.

Form2

Form2 hanya berisi sekumpulan control, dan merupakan jendela peringatannya yang memberi tahu user bahwa filenya sudah dienkripsi dan informasi cara penebusannya. Namun ada hal yang penting pada fungsi Button2_Click.

Di situ ada perbandingan input Form2.TextBox1 dengan Form1.TextBox2. Jika sama, maka tampilkan Form3, dan jika beda tampilkan pesan bahwa kode salah. Kita ingat bahwa Form1.TextBox2 berisi nilai sha1(md5(nama_komputer)). Jadi bisa kita simpulkan bahwa “kode” untuk membuka kembali file terenkripsi harus sama dengan itu.

Form3

Form3 dipanggil ketika “kode” yang dimasukkan benar, yang berarti digunakan untuk mendekripsi kembali file-file *.fucked. Di fungsi Form3_Load, program mencari seluruh folder target dan file-file yang memilik ekstensi “.fucked” dan mendaftarkannya.

Di fungsi Timer1_Tick, dilakukan proses dekripsi dengan cara yang sama untuk enkripsi. Setelah itu, file “.fucked” dihapus. Selain itu ditampilkan juga pesan ucapan terima kasih :(

Eksperimen

Ransomware ini dicoba dijalankan juga di Windows 8 di dalam VirtualBox. Pada mulanya disediakan 3 file di dalam folder (My) Documents sebagai target.

Selanjutnya dijalankan program ransomware tersebut. Tada, muncul pesan merah! Mungkin developernya mencoba untuk sopan, pakai “assalamualaikum” segala.

Semua file target pun terenkripsi, ditambahi ekstensi “.fucked”.

Jika diklik tombol “Kembalikan File Saya”, muncul informasi pembayaran yang disertai akun email dan Facebook (???). Di situ ada juga “ID KOMPUTER” yang tidak lain adalah nama komputer digeser dengan sandi caesar sebanyak 2 (ingat Form1.result). Nama komputer saya di eksperimen ini adalah “win8-vbox”, namun ternyata dijadikan huruf besar semua (“WIN8-VBOX”) dan digeser 2 huruf kode ASCII menjadi “YKP:/XDQZ”. Terdapat tempat untuk memasukkan “kode” untuk dekripsinya, yang dimaksudkan akan diberikan setelah kita membayar ke pembuat ransomware.

Jika kita close jendela merah tersebut, program tetap berjalan di background dan bersemayam di system tray.

Program juga mencegah kita untuk shutdown secara normal.

Hack

Karena kita sudah tahu dari Form2 bahwa “kode” untuk membukanya adalah nilai sha1(md5(nama_komputer)), kita bisa hitung kode itu misalnya lewat PHP.

Kemudian masukkan nilai hash itu ke jendela ransomware.

Maka file-file kita akan dipulihkan kembali.

Dan kita akan diberi ucapan terima kasih. Terima kasih kembali!

Tapi entah karena bug atau apa, file-file “.fucked” tidak dihapus oleh program. Tapi yang penting file asli kita sudah kembali.

Penutup

Ransomware ini sangat sederhana dan termasuk mudah karena kunci enkripsinya diambil dari informasi yang ada di komputer korban, dan juga dibuat dengan .NET sehingga mudah dikembalikan menjadi source code-nya. Jika Anda atau teman Anda menjadi korban ransomware ini, tidak perlu membayar ke penjahat pembuatnya, cukup lakukan sedikit scripting untuk menghitung nilai hash dari nama komputer untuk mendapatkan kode dekripsinya.


Source: https://docs.google.com/document/d/1lHWsWx8XVjoITk2REdfJjZnnWiFNZl4T5isa4UFqXhY/edit