Membongkar Malware dengan Ghidra & IDA Pro: Teknik Static Analysis Mendalam

Membongkar Malware dengan Ghidra & IDA Pro: Teknik Static Analysis Mendalam
Pendahuluan
Reverse engineering malware adalah langkah krusial dalam memahami perilaku ancaman siber. Di antara berbagai pendekatan, static analysis menjadi fondasi yang memungkinkan analis membedah kode tanpa menjalankannya. Dua alat yang mendominasi ranah ini adalah Ghidra (open-source dari NSA) dan IDA Pro (komersial dari Hex-Rays). Artikel ini akan mengupas teknik static analysis menggunakan kedua alat tersebut, mulai dari persiapan hingga rekonstruksi logika berbahaya.
Apa itu Static Analysis?
Static analysis adalah teknik menganalisis program tanpa mengeksekusinya. Tujuannya: mengidentifikasi malicious intent melalui struktur kode, string, API calls, dan alur kontrol. Keuntungan utamanya adalah keamanan—tidak perlu menjalankan sampel berbahaya di lingkungan nyata. Namun, tantangannya adalah obfuscation, packing, dan anti-analysis yang sering digunakan malware.
Persiapan Alat: Ghidra vs IDA Pro
Kedua alat memiliki kelebihan masing-masing:
- Ghidra: Gratis, dekompiler yang mumpuni, mendukung banyak arsitektur, dan ekstensibel dengan Python/GhidraScript. Cocok untuk tim dengan anggaran terbatas.
- IDA Pro: Dekompiler (Hex-Rays) yang sangat akurat, basis data analisis yang kaya, dan plugin ekstensif. Harganya mahal, tetapi menjadi standar industri.
Catatan: Dalam praktik, banyak analis menggunakan keduanya secara komplementer. IDA Pro untuk analisis cepat dan interaktif, Ghidra untuk kolaborasi dan scripting massal.
Langkah-langkah Static Analysis
1. Analisis Header File
Sebelum masuk ke kode, periksa header file dari sampel (PE, ELF, Mach-O). Gunakan alat seperti file, pefile, atau GUI Ghidra/IDA.
Contoh di Linux:
bash$ file sample.exe sample.exe: PE32 executable (GUI) Intel 80386, for MS Windows
Di Ghidra, setelah import, buka Program Tree untuk melihat section (.text, .data, .rdata, dll). Perhatikan entropi section—entropi tinggi menandakan packing atau enkripsi.
2. Menelusuri String
String sering menjadi petunjuk awal: URL C2, registry key, nama file, atau perintah sistem.
Di IDA Pro: Buka View > Open subviews > Strings (Shift+F12).
Di Ghidra: Search > Program Text atau gunakan script:
pythonfrom ghidra.program.model.address import AddressSetView from ghidra.app.util.opinion import OpinionService # GhidraScript untuk ekstraksi string strings = currentProgram.getListing().getDefinedData(True) for data in strings: if data.isString(): print(data.getDefaultValueRepresentation())
Perhatian: Malware sering menyembunyikan string dengan XOR atau encoding. Analis harus melakukan decode manual atau menggunakan plugin.
3. Deteksi Packer
Packer menyulitkan analisis statis dengan mengompresi/mengenkripsi kode asli. Tanda-tanda adanya packer:
- Entropi section tinggi (>7.0)
- Hanya sedikit import dalam IAT
- Entry point kecil (stub unpacker)
Gunakan alat seperti Detect It Easy (DiE) atau PEiD untuk identifikasi awal.
Di IDA Pro: Plugin seperti IDAscope dan HexRaysPyTools membantu mendeteksi packer.
Di Ghidra: Gunakan Analysis > One Shot > Packer Detection (jika tersedia). Atau script manual:
python# GhidraScript sederhana untuk cek entropy section from ghidra.util.statistics import Entropy for section in currentProgram.getMemory().getBlocks(): if section.isInitialized(): entropy = Entropy.calculateEntropy(section) print(f"{section.getName()}: {entropy:.2f}")
4. Dekompilasi dan Rekonstruksi Kode
Setelah unpacking (jika perlu), kita masuk ke inti—mendekomilasi kode assembly ke representasi tingkat tinggi.
IDA Pro + Hex-Rays: Pilih fungsi, tekan F5 untuk melihat dekompilasi C-like. Sangat akurat untuk kode yang tidak diobfuscate.
Ghidra Decompiler: Setelah analisis otomatis, buka Window > Decompiler. Bahasa yang dihasilkan mirip dengan Hex-Rays, kadang perlu modifikasi tipe data.
Contoh dekompilasi fungsi yang memanggil CreateFile:
cvoid malicious_function(void) { HANDLE hFile; hFile = CreateFileA("C:\\Windows\\system32\\config\\SAM", 0x80000000, 0, NULL, 3, 0, NULL); if (hFile != INVALID_HANDLE_VALUE) { // baca registry SAM } }
Dari sini, analis bisa melihat bahwa malware mencoba membaca file SAM (database password lokal).
5. Identifikasi Fungsi Berbahaya
Fokus pada API calls yang sensitif:
- Network:
WinHttpOpen,InternetConnect,socket,connect - File/Registry:
CreateFile,RegOpenKeyEx,WriteFile - Process/Thread:
CreateProcess,CreateRemoteThread,WriteProcessMemory(injection) - Cryptography:
CryptEncrypt,CryptDecrypt(ransomware)
Di IDA Pro: Gunakan Imports tab dan Cross References (Xrefs).
Di Ghidra: Window > Symbol Table untuk melihat fungsi impor. Klik kanan > Show References to untuk melacak pemanggil.
6. Menulis Script Analisis Kustom
Untuk efisiensi, tulislah script Python yang memanfaatkan API Ghidra atau IDAPython.
Contoh IDAPython untuk mencetak semua fungsi yang memanggil WriteFile:
pythonimport idautils import idaapi import idc for seg_ea in Segments(): for func_ea in Functions(seg_ea, SegEnd(seg_ea)): func_name = GetFunctionName(func_ea) for (start, end) in Chunks(func_ea): for head in Heads(start, end): if GetMnem(head) == "call": op = GetOperandValue(head, 0) if GetFunctionName(op) == "WriteFile": print(f"Fungsi {func_name} memanggil WriteFile di {hex(head)}")
Contoh GhidraScript (Python) untuk menandai fungsi yang menggunakan enkripsi:
pythonfrom ghidra.app.decompiler import DecompInterface from ghidra.util.task import ConsoleTaskMonitor monitor = ConsoleTaskMonitor() ifc = DecompInterface() ifc.openProgram(currentProgram) # Fungsi untuk mengecek apakah suatu fungsi memanggil CryptEncrypt funcs = currentProgram.getListing().getFunctions(True) for func in funcs: decomp = ifc.decompileFunction(func, 0, monitor) if decomp: code = decomp.getDecompiledFunction().getC() if "CryptEncrypt" in code: print(f"CryptEncrypt ditemukan di {func.getName()}")
Kesimpulan
Static analysis dengan Ghidra dan IDA Pro memberikan kemampuan luar biasa untuk memahami malware tanpa risiko eksekusi. Meskipun terdapat tantangan seperti obfuscation dan packing, kombinasi tool yang tepat serta scripting dapat membuka tabir kode berbahaya. Ingatlah bahwa static analysis hanyalah satu langkah—sering kali diperlukan dynamic analysis untuk konfirmasi.
Untuk analis yang ingin mendalami, pelajari lebih lanjut tentang data flow analysis, symbolic execution, dan deobfuscation. Selamat menganalisis, dan jaga keamanan siber tetap kuat!
Referensi: Ghidra Official Docs, Hex-Rays IDA Pro, Malware Analysis Tutorials oleh OALabs