Skip to content
← Blog

Dari Memory Dump Menjadi Graph: Pipeline Deteksi Malware dengan GNN

Alur memory dump menuju graph dan sistem deteksi
Memory dump tidak langsung menjadi input model. Ia melewati akuisisi, ekstraksi artefak, konstruksi graph, validasi, dan baru kemudian inferensi.

Sebuah memory dump adalah snapshot RAM pada suatu waktu. Di dalamnya terdapat process, command line, DLL, socket, handle, dan region memori. GNN tidak membaca berkas dump mentah. Kita harus mengubah artefak tersebut menjadi graph: objek menjadi node, sedangkan relasi menjadi edge. Tujuan akhirnya bukan menggantikan analis, melainkan memberi skor prioritas pada process atau snapshot yang perlu diperiksa lebih dulu.

1. Akuisisi dan integritas#

Ambil RAM dengan tool yang sesuai lingkungan, misalnya WinPmem atau FTK Imager. Catat waktu, hostname, operator, tool dan versinya. Hitung hash segera setelah akuisisi dan kerjakan analisis pada salinan. Contoh:

sha256sum host-07-2026-08-11.raw
python3 vol.py -f host-07-2026-08-11.raw windows.info

Jika ukuran atau hash salinan berubah tanpa penjelasan, hentikan pipeline. Model yang akurat tidak berguna bila input tidak dapat dipertanggungjawabkan.

2. Ekstraksi artefak dengan Volatility#

Mulai dari beberapa pandangan yang saling melengkapi. pslist melihat process aktif melalui linked list; psscan memindai struktur process sehingga dapat menemukan process yang sudah berakhir atau disembunyikan; dlllist menampilkan modul; netscan melihat koneksi; dan malfind menyorot region yang patut diperiksa.

python3 vol.py -f memory.raw windows.pslist > pslist.txt
python3 vol.py -f memory.raw windows.psscan > psscan.txt
python3 vol.py -f memory.raw windows.dlllist > dlllist.txt
python3 vol.py -f memory.raw windows.netscan > netscan.txt
python3 vol.py -f memory.raw windows.malfind --dump

Dokumentasi resmi Volatility 3 Windows Tutorial juga menegaskan bahwa framework menganalisis tetapi tidak mengakuisisi RAM.

3. Membentuk node dan edge#

Skema minimum yang mudah dipahami:

TipeContohFeature
Processpowershell.exe:4120parent, thread count, signed path, entropy region
DLLkernel32.dllpath, signer, load count
Socket203.0.113.24:443private/public, port class, state
Memory region0x1f400000protection, size, entropy, PE header

Edge dapat berupa SPAWNED, LOADED, CONNECTED_TO, dan OWNS_REGION. Arah edge penting: winword.exe spawned powershell.exe berbeda dengan kebalikannya.

Contoh nyata yang disederhanakan#

Dokumen membuka WINWORD.EXE, kemudian muncul powershell.exe -enc ..., process itu memiliki region PAGE_EXECUTE_READWRITE dan berkomunikasi ke IP eksternal. Empat fakta ini lemah jika dibaca terpisah, tetapi subgraph gabungannya kuat:

WINWORD.EXE --SPAWNED--> powershell.exe
powershell.exe --OWNS_REGION--> RWX_region_0x1f400000
powershell.exe --CONNECTED_TO--> 203.0.113.24:443

Alamat 203.0.113.0/24 adalah blok dokumentasi; contoh ini konkret tetapi tidak menuduh infrastruktur sungguhan.

4. Feature engineering tanpa label leakage#

Encode kategori, normalisasi angka, dan pisahkan feature yang hanya diketahui setelah investigasi. Jangan memasukkan nama keluarga malware atau keputusan analis ke input. Split data berdasarkan host atau waktu, bukan sekadar node acak, agar process dari satu insiden tidak bocor ke train dan test.

5. Inferensi dan interpretasi#

data = Data(x=node_features, edge_index=edge_index, edge_attr=edge_types)
logits = model(data.x, data.edge_index)
probability = logits.softmax(dim=-1)[:, 1]
suspicious = probability >= 0.80

Output terbaik bukan hanya “malware 91%”, melainkan process, tetangga paling relevan, feature pemicu, model version, dan hash input. Threshold harus dipilih berdasarkan biaya false negative dan false positive.

Checklist keberhasilan#

  • Hash dump dan salinan cocok.
  • Node ID stabil dan edge punya arah serta tipe.
  • Split mencegah leakage antar-host.
  • Baseline sederhana dibandingkan dengan GNN.
  • Prediksi dapat ditelusuri kembali ke artefak.
  • Analis tetap mengambil keputusan akhir.

Latihan: buat graph kecil dari lima process, tiga DLL, dan dua socket. Tandai subgraph paling mencurigakan dan jelaskan alasan Anda sebelum melihat skor model.

Bagaimana memvalidasi graph sebelum training#

Lakukan pemeriksaan data contract. Setiap process harus memiliki PID, capture ID, dan timestamp yang valid. Edge SPAWNED harus menghubungkan dua process dalam capture yang sama. DLL tanpa process owner dan socket tanpa endpoint harus masuk antrean error, bukan diam-diam menjadi node kosong. Visualisasikan sampel benign dan suspicious secara manual; kesalahan parser jauh lebih sering daripada “model gagal belajar”.

assert graph.num_nodes > 0
assert graph.edge_index.max() < graph.num_nodes
assert not torch.isnan(graph.x).any()
assert set(graph.edge_type.tolist()) <= {0, 1, 2, 3}

Pertanyaan pemahaman#

  1. Mengapa nama process saja tidak cukup menjadi feature?
  2. Apa risiko bila node dari capture yang sama tersebar pada train dan test?
  3. Artefak apa yang akan Anda tampilkan agar analis dapat memverifikasi skor?

Jawaban ideal menyebut konteks relasional, label leakage, dan traceability. Jika model tidak bisa menghubungkan prediksi ke dump, PID, edge, serta model version, pipeline belum siap dipakai untuk keputusan operasional.

💬 Comments (0)

No comments yet. Be the first to share your thoughts!

Related reading

Aug 11, 2026 · 3 min Anatomi Memory Forensics: Process Injection, DLL, dan Artefak Mencurigakan Cara membangun hipotesis process injection dari process tree, VAD, proteksi halaman, DLL, thread, dan network artefact tanpa bergantung pada satu indikator. Aug 11, 2026 · 3 min Inductive vs Transductive Learning dalam Malware Detection Mengapa split graph mengubah arti hasil eksperimen, bagaimana menguji host baru secara jujur, dan kapan evaluasi transductive masih berguna. Aug 11, 2026 · 3 min GGNN vs GCN untuk Deteksi Malware: Apa Perbedaannya? Perbandingan cara kerja, biaya, asumsi, dan penggunaan GGNN serta GCN pada graph process–DLL dengan contoh PyTorch Geometric yang mudah ditelusuri.
Now Playing Loading...