Tutorial Reverse Engineering Malware ELF Linux Pakai Radare2 di VPS
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).
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, strippedStatus 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.elfElemen 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) atauDYN(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 Rabin2 | Karakteristik Biner Normal | Indikator Malware / Packed Binary |
|---|---|---|
| Entropi Seksi (.text) | 4.5 - 6.5 | > 7.2 (Terindikasi terenkripsi/terkompresi) |
| Daftar Seksi | .text, .rodata, .data, .bss, .got | UPX0, 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, debugging | Stripped 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.elfDisassembly & 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.elfDi 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]> pdfBerikut 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]> VVKontrol pada Mode Visual Graph:
- Navigasi blok kode: gunakan tombol
h,j,k,latau tombol arah panah. - Ganti mode tampilan visual: tekan
psecara 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 EngineEkstraksi 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 binerMalware 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 3145ff2. 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 ACCEPTJalankan 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.elfAnalisis 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) = 4Hasil 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-0x10Kesimpulan & 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
afldan selidiki entry point serta instruksimain. - [ ] Dekode string terobfuskasi dan petakan alur kontrol visual graph (
VV). - [ ] Lakukan dynamic tracing via
stracedan debugging interaktif viar2 -d. - [ ] Dokumentasikan IoC (IP C2, domain, lokasi persistensi, dan hash biner).
Strategi Mitigasi Jangka Panjang Server Linux
- Hardening Direktori Temporer: Konfigurasi mount point
/tmpdan/dev/shmdi/etc/fstabdengan opsinoexec,nosuid,nodevguna menggagalkan eksekusi langsung file biner dropper. - Pengawasan Execution Syscall via Auditd: Aktifkan pengawasan syscall
execvemenggunakan daemonauditduntuk merekam seluruh eksekusi biner tidak terotorisasi. - 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.


