x86 Disassembly


Saya lanjutkan pembahasan buku Saxe, kali ini tentang x86 disassembly. Untuk sepenuhnya memahami sebuah sampel malware, perlu dilakukan analisa statik yang lebih mendalam. Teknik yang dilakukan adalah reverse engineering dan disassembly. Disassembly adalah proses menerjemahkan binary sebuah program menjadi bahasa assembly x86. Umumnya penulis malware menggunakan bahasa tingkat tinggi seperti C atau C++ dan mengcompile menjadi binary x86. 

Namun proses disassembly tidak mudah karena, seringkali penulis malware menggunakan teknik obfuscation. Contohnya untuk self-modifying code, yaitu malware yang mampu merubah dirinya ketika dijalankan. Untuk melakukan disasemby kode, kita harus memahami terlebih dahulu bagaimana malware merubah dirinya. Proses ini sangat sulit.

Menurut saxe proses disassembly belum sempurna, masih banyak kekurangan. Di buku dia menggunakan metode linear disassembly. Yaitu proses yang melakukan identifikasi urutan bytes dalam PE yang terkait dengan kode program x86 dan melakukan decoding dari byte tersebut. Batasan dari pendekatan ini adalah dia mengabaikan tentang proses bagaimana instructions di decode di CPU ketika sampel dijalankan. Metode lainnya adalah reverse engineering, yang merupakan metode disassembly yang lebih kompleks. Tools yang sering digunakan adalah IDA Pro. Metode ini melakukan simulasi tentang proses eksekusi program untuk menemukan instruksi assembler yang dicapai sebuah program.

Reverse engineering lebih akurat dibandingkan linear disassembly, namun membutuhkan CPU yang lebih kuat. Proses ini tidak cocok untuk data science, karena harus dilakukan analisa terhadap banyak sampel.

Bahasa assembly adalah bahasa tingkat rendah, dan dipetakan langsung ke format instruksi binary dari arsitektur CPU. Sebuah baris bahasa assembly hampir selalu diperakan pada sebuah instruksi CPU. Sebagian besar kode assembly yang digunakan malware adalah memanggil fungsi sistem operasi seperti DLL (Dynamic-link libraries). DLL ini dipindahkan ke memori program ketika dijalankan. Contohnya penggunaan DLL oleh malware:

  • melakukan modifikasi system registry
  • mengkopi dan memindahkan file
  • membuat koneksi jaringan 
  • Membuat komunikasi melalui protokol jaringan

Memahami kode assembler malware juga kita harus memahami function calls apa saja yang dibuat, dan DLL calls apa saja yang dipanggil. Kita juga akan belajar tentang control flow dan control flow graphs. Pada contoh ini kita akan menggunakan sampel ircbot.exe. 

Ada 2 bahasa utama kode asembler x86 yaitu Intel dan AT&T. Pada buku ini Saxe menggunakan syntax Intel.

Sampai disini dulu, pada tulisan selanjutnya saya akan bahas tentang dasar2 bahasa asembler. 

Referensi:

Saxe, J., & Sanders, H. (2018). Malware Data Science: Attack Detection and Attribution. No Starch Press.

,

Silahkan tuliskan tanggapan, kritik maupun saran