AizuDemy

Tutorial Reverse Engineering Malware ELF Linux Pakai Radare2 di VPS

Tutorial Reverse Engineering Malware ELF Linux Pakai Radare2 di VPS
๐ŸŽง
Dengarkan Artikel Ini
Suara AI Otomatis โ€ข 8 mnt baca baca
โšก TL;DR

Poin Kunci Artikel Ini:

  • Garis cabang: hijau mewakili alur kondisi terpenuhi (True), merah mewakili alur gagal (False), biru mewakili lompatan tanpa kondisi (Unconditional Jump).
  • [ ] Isolasi antarmuka jaringan host analisis (skrip IPTables / Network Namespace).
  • [ ] Lakukan proses unpacking jika biner teridentifikasi di-pack (contoh: UPX).
๐Ÿ“‹ Daftar Isi Materi Tutup โ–ด

Anomali Proses Linux & Bedah Header ELF

Deteksi insiden malware pada server Linux berawal dari identifikasi anomali pemakaian resource atau aktivitas jaringan yang mencurigakan. Perintah monitor seperti htop, top, dan ss -tulpn sering menampilkan proses asing yang berjalan dari direktori temporer seperti /tmp, /var/tmp, atau /dev/shm. Ketika biner malware mendeteksi upaya analisis, mekanisme self-delete kerap aktif menghapus file dari disk. Namun, file descriptor proses tetap terbuka di /proc.

1. Isolasi Artefak dan Verifikasi File

Ambil biner dari memori atau disk sebelum hilang. Periksa link simbolik proses aktif di /proc/<PID>/exe untuk menyelamatkan biner yang terhapus.

# Periksa file descriptor proses terinfeksi (contoh PID: 4120)
ls -l /proc/4120/exe
# Output: /proc/4120/exe -> /tmp/.systemd-service (deleted)

# Salin biner aktif langsung dari memori proses ke lokasi analisis
cp /proc/4120/exe /root/analysis/sample.elf
cd /root/analysis

# Identifikasi tipe biner dan arsitektur target
file sample.elf
# Output: sample.elf: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, stripped

Status stripped menandakan tabel simbol (.symtab) dan string simbol (.strtab) dihapus saat kompilasi (strip --strip-unneeded). Karakteristik ini umum pada sampel biner malware untuk menghambat proses analisis statis.

2. Inspeksi Header ELF Menggunakan readelf dan rabin2

Struktur Executable and Linkable Format (ELF) terdiri dari ELF Header, Program Header Table, dan Section Header Table. Baca struktur ELF Header menggunakan readelf untuk mengekstrak informasi arsitektur dan titik eksekusi utama.

# Baca ELF Header lengkap
readelf -h sample.elf

Elemen kritis pada ELF Header meliputi:

  • Magic Bytes: 7f 45 4c 46 (Indikator validitas format ELF).
  • Class & Data: ELF64, 2's complement, little endian (Arsitektur 64-bit, LSB).
  • Entry point address: Offset instruksi pertama (misal: 0x4010e0).
  • Type: EXEC (Executable file) atau DYN (Position Independent Executable / PIE).

Gunakan rabin2 dari framework Radare2 untuk menganalisis struktur section, header program, serta mengukur entropi Shannon per seksi. Nilai entropi tinggi (> 7.0) mengindikasikan payload terenkripsi, dikompresi, atau di-pack.

# Tampilkan informasi biner dan daftar seksi
rabin2 -I sample.elf
rabin2 -S sample.elf

# Hitung nilai entropi seksi biner
rabin2 -E sample.elf
Parameter Rabin2Karakteristik Biner NormalIndikator Malware / Packed Binary
Entropi Seksi (.text)4.5 - 6.5> 7.2 (Terindikasi terenkripsi/terkompresi)
Daftar Seksi.text, .rodata, .data, .bss, .gotUPX0, UPX1, .vmp, atau nama acak/kosong
Tabel Impor (Imports)Lengkap (socket, fork, execve, libc)Sangat minim (hanya mmap, mprotect, dlopen)
Tabel Simbol (Symbols)Ada fungsi main, helper, debuggingStripped total atau berisi nama terobfuskasi

Jika output rabin2 -S menampilkan seksi UPX0 dan UPX1, lakukan ekstraksi unpacked binary menggunakan utility UPX sebelum tahap disassembly.

# Unpack biner yang dikompresi UPX
upx -d sample.elf -o sample_unpacked.elf

Disassembly & Decompile Kode Pakai Radare2 CLI

Radare2 (r2) menyediakan lingkungan analisis biner berbasis CLI tanpa ketergantungan interface GUI. Tool ini efisien dijalankan langsung di server VPS terisolasi.

1. Inisialisasi Analisis di Radare2

Buka biner dengan r2 dan jalankan analisis otomatis. Opsi -A mengeksekusi skrip aaa saat inisialisasi.

r2 -A sample_unpacked.elf

Di dalam shell interaktif r2 (ditandai prompt [0x4010e0]>), tingkatkan kedalaman analisis jika tabel fungsi belum terpeta penuh:

[0x4010e0]> aaaa   # Perluas analisis mendalam (emulasi instruksi & referensi silang)
[0x4010e0]> afl    # Tampilkan daftar seluruh fungsi terdeteksi (Analyze Function List)

Pada biner stripped, fungsi main tidak muncul secara eksplisit di tabel fungsi afl. Cari entry0 (Entry Point biner), lalu lacak parameter panggilan __libc_start_main. Pada ABI x86_64 Linux, argumen pertama (alamat fungsi main) dimasukkan ke register rdi sebelum instruksi call ke __libc_start_main.

2. Navigasi & Assembly Walkthrough

Pindahkan offset posisi analisis ke alamat fungsi target menggunakan perintah seek (s), lalu bongkar kode instruksi assembly (disassemble) menggunakan pdf (Print Disassembly Function).

[0x4010e0]> s main
[0x401150]> pdf

Berikut alur disassembly assembly x86_64 yang umum diimplementasikan pada sampel Linux Reverse Shell / C2 Beaconing:

; --- Setup Stack Frame ---
0x00401150      55             push rbp            ; Simpan base pointer lama ke stack
0x00401151      488bec         mov rbp, rsp        ; Set base pointer baru
0x00401154      4883ec20       sub rsp, 0x20       ; Alokasikan 32 byte pada stack lokal

; --- Inisialisasi Socket (sys_socket) ---
0x00401158      bf02000000     mov edi, 2          ; Argumen 1: AF_INET (IPv4 = 2)
0x0040115d      be01000000     mov esi, 1          ; Argumen 2: SOCK_STREAM (TCP = 1)
0x00401162      ba00000000     mov edx, 0          ; Argumen 3: Protocol IP (0)
0x00401167      e874feffff     call sym.imp.socket ; Panggil API libc socket()

; --- Verifikasi File Descriptor ---
0x0040116c      85c0           test eax, eax       ; Periksa Return Value (Socket FD)
0x0040116e      7909           jns 0x401179        ; Lompat ke 0x401179 jika nilai non-negatif
0x00401170      bf01000000     mov edi, 1          ; Argumen exit status = 1
0x00401175      e890feffff     call sym.imp.exit   ; Panggil exit() jika gagal membuat socket

; --- Konstruksi Struct sockaddr_in & Inisialisasi Koneksi Network ---
0x00401179      89c7           mov edi, eax        ; Pindahkan Socket FD ke register EDI
0x0040117b      488d3e         lea rdi, [rbp-0x10] ; Poin RDI ke alamat struktur sockaddr_in
0x0040117e      e8bcfeffff     call sym.imp.connect; Panggil API libc connect()

3. Analisis Logika Kontrol dengan Visual Graph & Decompiler

Mode visual graph memvisualisasikan alur kontrol program (Control Flow Graph / CFG) untuk mempermudah pemetaan blok percabangan (je, jne, jmp).

[0x401150]> VV

Kontrol pada Mode Visual Graph:

  • Navigasi blok kode: gunakan tombol h, j, k, l atau tombol arah panah.
  • Ganti mode tampilan visual: tekan p secara berurutan.
  • Garis cabang: hijau mewakili alur kondisi terpenuhi (True), merah mewakili alur gagal (False), biru mewakili lompatan tanpa kondisi (Unconditional Jump).
  • Keluar dari mode visual: tekan q.

Jika plugin r2ghidra terkonfigurasi, ubah instruksi assembly menjadi pseudo-code C untuk efisiensi analisis logika kompleks:

[0x401150]> pdg    # Decompile fungsi aktif menggunakan Ghidra Decompiler Engine

Ekstraksi IoC & Dynamic Execution Handling

Ekstraksi Indicator of Compromise (IoC) mencakup identifikasi IP Command and Control (C2), port, nama berkas persistensi, serta artefak konfigurasi tersembunyi.

1. Ekstraksi String & Dekode String Terobfuskasi

Ekstrak string statis dari seksi data (.rodata, .data) menggunakan utilitas CLI atau shell internal r2.

# Ekstrak string dari terminal menggunakan rabin2
rabin2 -z sample_unpacked.elf

# Ekstrak string dari dalam prompt r2
[0x401150]> iz     # Tampilkan string pada seksi data (.rodata/.data)
[0x401150]> izz    # Pindai string printable di seluruh area memori biner

Malware modern sering mengaburkan string sensitif menggunakan encoding XOR sederhana atau AES. Identifikasi routine dekripsi dalam assembly dengan melacak instruksi operasi bitwise xor dalam loop.

# Cari instruksi XOR dalam fungsi yang sedang dianalisis
[0x401150]> pdf ~ xor

# Lakukan pencarian pola byte spesifik di memori
[0x401150]> /x 3145ff

2. Dynamic Tracing dengan strace & Isolasi Sandbox

Sebelum melakukan eksekusi dinamis pada sampel malware, isolasi antarmuka jaringan VPS menggunakan aturan iptables untuk memblokir seluruh trafik keluar (egress) guna mencegah penyebaran infeksi.

# Putus akses egress & ingress jaringan luar, sisakan antarmuka loopback
sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

Jalankan strace untuk memantau panggilan sistem (system calls) yang dilakukan biner secara real-time.

strace -f -e trace=file,network,process -o trace_output.txt ./sample_unpacked.elf

Analisis potongan log eksekusi pada trace_output.txt:

execve("./sample_unpacked.elf", ["./sample_unpacked.elf"], 0x7ff76540 /* 21 vars */) = 0
socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(4444), sin_addr=inet_addr("192.0.2.14")}, 16) = -1 ECONNREFUSED
openat(AT_FDCWD, "/etc/persistence_cron", O_WRONLY|O_CREAT|O_TRUNC, 0644) = 4

Hasil tracing mengonfirmasi artefak IoC berikut:

  • IP Address C2: 192.0.2.14
  • Port Koneksi C2: 4444/TCP
  • Target Persistensi Disk: /etc/persistence_cron

3. Debugging Interaktif Menggunakan Radare2

Jalankan r2 dalam mode debugger dinamis (-d) untuk melewati pemeriksaan anti-analysis atau mengekstrak memori terenkripsi saat runtime execution.

# Buka biner dalam mode debug dinamis
r2 -d sample_unpacked.elf

# Pasang Breakpoint pada alamat panggilan connect()
[0x7f8a90]> db 0x040117e

# Lanjutkan eksekusi biner hingga menabrak breakpoint
[0x7f8a90]> dc

# Inspeksi status register CPU
[0x040117e]> dr

# Inspect buffer memori pada stack (struktur sockaddr_in)
[0x040117e]> px 32 @ rbp-0x10

Kesimpulan & Mitigation Strategy

Penguasaan Radare2 di lingkungan CLI VPS memberikan kemampuan analisis biner yang responsif dan fleksibel bagi praktisi cybersecurity. Pemahaman mendalam atas struktur ELF, konvensi panggil instruksi x86_64, dan mekanisme kernel syscall merupakan fondasi dasar dalam menangani insiden malware Linux.

Checklist Alur Analisis Malware ELF

  • [ ] Isolasi antarmuka jaringan host analisis (skrip IPTables / Network Namespace).
  • [ ] Ekstrak biner dari disk atau direktori /proc/<PID>/exe.
  • [ ] Identifikasi arsitektur biner, ELF header, dan tingkat entropi seksi via rabin2.
  • [ ] Lakukan proses unpacking jika biner teridentifikasi di-pack (contoh: UPX).
  • [ ] Petakan fungsi via afl dan selidiki entry point serta instruksi main.
  • [ ] Dekode string terobfuskasi dan petakan alur kontrol visual graph (VV).
  • [ ] Lakukan dynamic tracing via strace dan debugging interaktif via r2 -d.
  • [ ] Dokumentasikan IoC (IP C2, domain, lokasi persistensi, dan hash biner).

Strategi Mitigasi Jangka Panjang Server Linux

  1. Hardening Direktori Temporer: Konfigurasi mount point /tmp dan /dev/shm di /etc/fstab dengan opsi noexec,nosuid,nodev guna menggagalkan eksekusi langsung file biner dropper.
  2. Pengawasan Execution Syscall via Auditd: Aktifkan pengawasan syscall execve menggunakan daemon auditd untuk merekam seluruh eksekusi biner tidak terotorisasi.
  3. Implementasi Aturan Deteksi YARA: Terbitkan YARA Rule berbasis pattern byte dan string unik hasil analisis r2 untuk pemindaian menyeluruh di seluruh armada VPS produksi.
rule Detect_Linux_ReverseShell_ELF {
    meta:
        description = "Mendeteksi biner reverse shell hasil analisis r2"
        author = "Threat Incident Response Team"
        date = "2026-03-30"
    strings:
        $magic = { 7F 45 4C 46 }
        $c2_ip = "192.0.2.14"
        $path = "/etc/persistence_cron"
    condition:
        $magic at 0 and ($c2_ip or $path)
}

Eksplorasi berlanjut pada perintah assembly dan kapabilitas scripting r2 mempercepat proses investigasi insiden siber pada infrastruktur Linux.

๐Ÿ“– Artikel Terkait