Jump to content

Dynamic Analysis: Code Injection: Difference between revisions

From Haidhi Wiki
Created page with "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 menyuntik..."
 
No edit summary
 
Line 19: Line 19:


== Attach ke Proses Target ==  
== 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:
Alternatif lain adalah attach ke proses target sebelum <code>CreateRemoteThread</code> dijalankan oleh malware. Bisa juga dengan memodifikasi CreateRemoteThread menjadi CREATE_SUSPENDED, contohnya:
<syntaxhighlight lang=cpp>
<syntaxhighlight lang=cpp>
CreateRemoteThread(Process, NULL, NULL,
CreateRemoteThread(Process, NULL, NULL,
Line 28: Line 28:
*Pasang breakpoint di <code>Process32First</code> dan <code>Process32Next</code>
*Pasang breakpoint di <code>Process32First</code> dan <code>Process32Next</code>
*Analisis logika pencarian proses (biasanya pakai <code>strcmp</code> atau sejenisnya)
*Analisis logika pencarian proses (biasanya pakai <code>strcmp</code> atau sejenisnya)
⚠️Catatan: Pencarian proses tidak selalu untuk injection—kadang hanya trik anti-debug.
⚠️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 <code>WriteProcessMemory</code>
*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 <code>MapViewOfSection</code> untuk 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 <code>EXECUTE</code>, tapi bukan bagian dari file yang dimapping
*Dialokasi pakai <code>VirtualAlloc</code>, jadi flag-nya PRIVATE</code>, bukan <code>IMAGE</code>
*Banyak shellcode punya kombinasi izin aneh: <code>READ_WRITE_EXECUTE</code>
Tool Volatility:
*<code>malfind</code>: deteksi region mencurigakan.
**Scan semua process atau spesifik pakai PID.
**Biasanya ada MZ header (PE) sebagai indikator kuat.
*<code>vaddump</code>: dump semua virtual memory dari process ke file.
*<code>dlldump</code>: 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)
*<code>vaddump</code> / <code>procdump</code> buat 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.

Latest revision as of 11:47, 14 April 2025

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 VirtualAllocEx untuk mengalokasikan memori di proses target. Simpan alamat hasil alokasi ini, misal 0x300000
  • Pasang breakpoint pada WriteProcessMemory. Simpan alamat sumber (shellcode di proses malware, misal 0x450000) dan alamat tujuan (biasanya sama dengan hasil dari VirtualAllocEx, yaitu 0x300000).
  • Pasang breakpoint pada CreateRemoteThread untuk mengambil EntryPoint dari shellcode (misal 0x30012F)
  • 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 Process32First dan Process32Next
  • Analisis logika pencarian proses (biasanya pakai strcmp atau 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 MapViewOfSection untuk 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, bukan IMAGE
  • 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 / procdump buat 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.