Malware Analysis Fundamentals #05: Static & Code Analysis — Membedah Malware Tanpa Menjalankannya
Tutorial static & code analysis malware: dari hash dan strings, deteksi packer dengan entropy, sampai disassembly di Ghidra dan menulis rule YARA — semuanya tanpa menjalankan sampel.
Pendahuluan
Static analysis adalah proses memeriksa sampel malware tanpa pernah mengeksekusinya. Pendekatan ini jauh lebih aman dibanding behavioral analysis karena tidak ada risiko payload benar-benar aktif di sistem analisis — tapi tetap butuh kehati-hatian karena beberapa sampel bisa memicu efek samping hanya dari proses parsing file (misalnya exploit pada parser PDF).
Tutorial ini membahas empat lapisan static analysis, dari yang paling dangkal sampai paling dalam, beserta tools yang biasa dipakai di masing-masing tahap.
Prasyarat
- Sampel sudah di-preserve dan di-hash (lihat bagian #04)
- Lingkungan analisis terisolasi tanpa akses internet langsung
- Tools: Ghidra atau IDA, capa, Detect It Easy, FLOSS, YARA
Langkah 1: Hash, Tipe File, Metadata, dan Signature
Mulai dengan identifikasi dasar sebelum masuk ke analisis yang lebih berat.
sha256sum sample.exe
file sample.exe
exiftool sample.exe
Cocokkan hash dengan database publik seperti VirusTotal atau MalwareBazaar untuk melihat apakah sampel sudah pernah dianalisis sebelumnya — ini bisa menghemat waktu analisis secara signifikan jika sampel bukan varian baru.
Langkah 2: Strings, Imports, Exports, dan Sections
Strings yang tertanam dalam binary sering membocorkan banyak informasi: URL C2, path file, pesan error, bahkan kadang kredensial hardcoded.
strings -n 8 sample.exe | less
Namun, strings mentah sering kali tidak terlalu berguna pada sampel yang di-obfuscate. Di sinilah FLOSS (FireEye Labs Obfuscated String Solver) berperan — tool ini mampu mengekstrak string yang disembunyikan lewat teknik obfuscation sederhana.
floss sample.exe
Selain strings, periksa juga import table (fungsi Windows API apa saja yang dipanggil sampel). Import seperti WriteProcessMemory, CreateRemoteThread, atau VirtualAllocEx sering jadi red flag untuk teknik process injection.
Untuk klasifikasi kapabilitas secara otomatis berdasarkan API yang dipanggil, tool capa dari Mandiant sangat membantu:
capa sample.exe
capa akan mencocokkan pola import dan strings dengan aturan yang sudah dipetakan ke teknik MITRE ATT&CK — mempercepat identifikasi kapabilitas tanpa perlu disassembly manual dulu.
Langkah 3: Entropy, Packer, dan Embedded Content
Banyak malware dibungkus (packed) atau dienkripsi untuk menyulitkan analisis statis. Salah satu cara mendeteksinya adalah dengan mengukur entropy file — packer dan enkripsi cenderung menghasilkan entropy yang tinggi dan seragam.
Detect It Easy (DIE) adalah tool populer untuk deteksi packer, compiler, dan bahasa pemrograman yang dipakai:
Buka sample.exe di Detect It Easy
-> Lihat hasil deteksi packer/compiler di panel utama
-> Periksa entropy per section di tab "Entropy"
Jika DIE mendeteksi packer, static analysis lebih lanjut mungkin tidak banyak membantu sampai sampel di-unpack terlebih dahulu — baik secara manual maupun dengan menjalankannya di sandbox terkontrol untuk unpacking otomatis.
Langkah 4: Disassembly, Decompilation, dan Control Flow
Untuk memahami logika sampel secara mendalam, sampel perlu di-disassemble (diubah jadi kode assembly) atau bahkan di-decompile (diubah jadi pseudo-code yang mirip bahasa tingkat tinggi).
Ghidra (gratis, dari NSA) dan IDA (komersial, standar industri) adalah dua tool paling umum dipakai. Binary Ninja juga populer sebagai alternatif dengan API scripting yang fleksibel.
Alur kerja umum di Ghidra:
- Import binary dan biarkan auto-analysis berjalan
- Cari fungsi
mainatau entry point - Telusuri control flow graph untuk memahami alur eksekusi
- Tandai (rename) fungsi dan variabel penting seiring pemahaman bertambah
- Cross-reference string dan import yang ditemukan di langkah 2
Disassembly adalah proses yang memakan waktu. Jangan mencoba memahami 100% kode — fokus pada fungsi-fungsi yang terhubung langsung dengan API mencurigakan yang sudah ditemukan sebelumnya.
Menulis Deteksi dengan YARA
Setelah pola unik sampel teridentifikasi (string spesifik, urutan byte, atau kombinasi import tertentu), tuliskan rule YARA agar varian serupa bisa terdeteksi otomatis di masa depan:
rule Suspicious_Loader_Example
{
meta:
description = "Contoh rule deteksi loader berbasis string unik"
author = "Yowisben"
strings:
$s1 = "VirtualAllocEx" ascii
$s2 = "CreateRemoteThread" ascii
$s3 = { 4D 5A 90 00 03 00 00 00 } // MZ header pattern
condition:
uint16(0) == 0x5A4D and 2 of ($s1, $s2, $s3)
}
Penutup
Static analysis memberi gambaran mendalam tentang struktur dan kapabilitas malware tanpa risiko eksekusi. Namun, static analysis punya batas — sampel yang heavily obfuscated atau menggunakan packer canggih sering butuh dilihat perilakunya secara langsung untuk memastikan pemahaman kita akurat.
Itulah topik bagian #06 selanjutnya: behavioral & memory analysis, tempat kita benar-benar menjalankan sampel di lingkungan yang terkendali dan mengamati apa yang sebenarnya terjadi.
Post Terkait
Malware Analysis Fundamentals #04: Alur Kerja Analisis Malware yang Aman dalam 6 Langkah
Tutorial alur kerja analisis malware yang aman dalam 6 langkah: preserve & hash, triage, static analysis, behavioral ana...
Malware Analysis Fundamentals #03: Mengenal Jenis-Jenis Malware, dari Ransomware sampai Rootkit
Panduan mengenal delapan kelas malware paling umum — ransomware, infostealer, RAT/backdoor, worm, trojan, bot/loader, sp...
Malware Analysis Fundamentals #02: Tujuan Utama Analisis Malware, dari Kapabilitas sampai MITRE ATT&CK
Enam tujuan inti analisis malware: identifikasi kapabilitas, ukur dampak, ekstrak IOC, ungkap persistence & evasion, duk...