Dynamic Analysis: Code Injection
Dynamic Analysis process injection memang cukup rumit. Teknik ini biasanya digunakan oleh malware agar bisa menjalankan shellcode atau load sebuah DLL di dalam proses lain—membuatnya lebih sulit untuk dideteksi atau dianalisis menggunakan debugger biasa. Karena itu, beberapa trik khusus dibutuhkan untuk melakukan debugging dengan sukses.
Debug it where it is
Teknik ini cukup populer di kalangan reverse engineer. Intinya adalah tidak membiarkan malware menyuntikkan shellcode ke proses target, melainkan men-debug shellcode tersebut langsung dari memori malware, seolah-olah sudah disuntikkan. Langkah-langkah:
- Malware memanggil
VirtualAllocExuntuk mengalokasikan memori di proses target. Simpan alamat hasil alokasi ini, misal0x300000 - Pasang breakpoint pada
WriteProcessMemory. Simpan alamat sumber (shellcode di proses malware, misal0x450000) dan alamat tujuan (biasanya sama dengan hasil dariVirtualAllocEx, yaitu0x300000). - Pasang breakpoint pada
CreateRemoteThreaduntuk mengambil EntryPoint dari shellcode (misal0x30012F) - Hitung alamat EntryPoint dari shellcode dalam proses malware:
EntryPoint Malware = 0x30012F - 0x300000 + 0x450000 = 0x45012F
- Di VM (disarankan), ambil snapshot, lalu ubah nilai EIP ke
0x45012F, atur argumen jika perlu, dan lanjutkan debugging.
Teknik ini sederhana dan cocok untuk shellcode yang tidak kompleks. Tapi:
- Tidak cocok jika terjadi multiple injection atau proses hollowing
- Shellcode bisa error karena dieksekusi di proses yang berbeda dari target aslinya
Attach ke Proses Target
Alternatif lain adalah attach ke proses target sebelum CreateRemoteThread dijalankan oleh malware. Bisa juga dengan memodifikasi CreateRemoteThread menjadi CREATE_SUSPENDED, contohnya:
CreateRemoteThread(Process, NULL, NULL,
(LPTHREAD_START_ROUTINE)LoadLibrary, (LPVOID)Memory, CREATE_SUSPENDED, NULL);
Untuk itu, kita perlu tahu proses target yang akan disuntik. Caranya:
- Pasang breakpoint di
Process32FirstdanProcess32Next - Analisis logika pencarian proses (biasanya pakai
strcmpatau sejenisnya)
⚠️Catatan: Pencarian proses tidak selalu untuk injection, kadang hanya trik anti-debug.
Menangani Process Hollowing
Teknik-teknik di atas tidak berlaku untuk process hollowing. Dalama teknik ini malware:
- Membuat proses baru dalam suspended state
- Mengosongkan isi PE aslinya
- Menggantinya dengan PE berisi code jahat
- Lalu menjalankan proses seolah-olah normal
Karena prosesnya suspended, debugger seperti OllyDgb tidak akan bisa attach sebelum malware melanjutkan prosesnya.
Solusi:
- Pasang breakpoint pada
WriteProcessMemory - Dump PE file sebelum ia ditulis ke memory Target
- Deteksi awalaa PE bisa dilakukan dengan melihat signatur "MZ" aatau teks This program cannot run in DOS mode
Beberapa malware menggunakan CreateSection dan MapViewOfSection (bukan WriteProcessMemory). Ini membuat file di memori yang bisa ditulis lalu dipetakan ke proses target. Langkah:
- Breakpoint di
MapViewOfSectionuntuk menangkap alamat objek memori - Breakpoint lagi di alamat tersebut untuk mendeteksi penulisan data (yang kemungkinan besar adalah PE file)
- Scroll ke atas sampai ketemu bagian awal PE (dengan signature MZ)
- Dump PE file tersebut dan debug seperti biasa di OllyDbg atau secara statik di IDA Pro
kesimpulan
- Teknik 1: Debug shellcode langsung di memori malware. Cocok untuk shellcode sederhana.
- Teknik 2: Attach ke proses target sebelum shellcode dijalankan. Perlu deteksi proses target.
- Teknik 3: Tangani process hollowing dengan cara dump PE file dari memori sebelum dijalankan.
Langkah-langkah di atas penting sebagai bagian dari analisis dinamis, dan bisa dikombinasikan dengan forensik memori (seperti Volatility) untuk analisis tahap berikutnya.
Memory Forensics
Tujuan utama malware pakai process injection itu buat sembunyi dari tools forensic, jadi mendeteksinya agak tricky. Tapi kita bisa pakai teknik ini dengan bantuan Volatility.
Deteksi Code Injection & Reflective DLL Injection
Ciri khas injection:
- Memory punya izin
EXECUTE, tapi bukan bagian dari file yang dimapping - Dialokasi pakai
VirtualAlloc, jadi flag-nya PRIVATE, bukanIMAGE - Banyak shellcode punya kombinasi izin aneh:
READ_WRITE_EXECUTE
Tool Volatility:
malfind: deteksi region mencurigakan.- Scan semua process atau spesifik pakai PID.
- Biasanya ada MZ header (PE) sebagai indikator kuat.
vaddump: dump semua virtual memory dari process ke file.dlldump: dump file PE yang dicurigai lebih akurat dari injected code.
Deteksi Process Hollowing
Hollowing artinya malware menggantikan executable utama dengan dirinya sendiri, tapi masih kelihatan prosesnya "normal". Trik deteksi:
- Bandingkan output dlllist (dari PEB/user-mode) vs ldrmodules (dari EPROCESS/kernel-mode).
- Kalau beda, berarti ada yang aneh:
- Dlllist punya, ldrmodules tidak → PE palsu diinject, malware running di alamat berbeda.
- Keduanya punya tapi beda alamat → PEB ditamper untuk redirect ke malware.
- EPROCESS dan PE nggak linked → malware menggantikan PE di memori utama.
Tools bantu:
- malfind (cari MZ magic)
vaddump/procdumpbuat dumping image dari RAM.
HollowFind Plugin
- Plugin gabungan dari semua teknik di atas.
- Otomatis deteksi region mencurigakan yang mungkin hasil hollowing.
- Bisa langsung dump PE image malware ke direktori tertentu.