Apa itu Threat Modeling?
Threat modeling adalah proses terstruktur untuk mengidentifikasi, mendaftar, dan memprioritaskan ancaman terhadap sebuah sistem — sebelum attacker menemukannya. Daripada menebak-nebak "kira-kira apa yang bisa dihack", kita memakai framework untuk memetakan ancaman secara sistematis.
Kapan Dilakukan?
- Saat design awal — paling murah memperbaiki arsitektur yang salah
- Saat menambah fitur besar — payment, upload, integrasi pihak ketiga
- Saat audit berkala — setahun sekali atau setelah insiden
Framework STRIDE
STRIDE adalah model dari Microsoft yang membagi ancaman menjadi enam kategori. Setiap huruf mengingatkan kita menanyakan satu jenis pertanyaan pada setiap komponen sistem.
- S — Spoofing — Identitas palsu (login sebagai user lain, email spoofing, token dicuri)
- T — Tampering — Modifikasi data (ubah harga di request, corrupt file di storage)
- R — Repudiation — Penyangkalan (user mengklaim tidak melakukan aksi karena log tidak ada)
- I — Information Disclosure — Kebocoran data (error stack trace, database dump, response berlebihan)
- D — Denial of Service — Bikin layanan tidak tersedia (flood request, resource exhaustion)
- E — Elevation of Privilege — Naik hak akses (user jadi admin, sandbox escape)
Langkah Praktis
- Gambar Data Flow Diagram (DFD) — User → Frontend → API → Database, plus pihak ketiga (payment, email). Tandai trust boundary (titik dimana data berpindah zona kepercayaan).
- Identifikasi aset — Apa yang berharga? Data user, uang, reputasi.
- Jalankan STRIDE pada tiap komponen — Untuk setiap boundary crossing, tanyakan keenam huruf.
- Bangun threat tree — Akar = goal attacker ("curi saldo"), cabang = cara mencapainya.
- Nilai dengan risk matrix — Likelihood × Impact → prioritas mitigasi.
Risk Matrix
// Skor likelihood (1-5) × impact (1-5) = risk score
// Contoh:
// - SQL Injection di login: L=4, I=5 → 20 (CRITICAL, fix dulu)
// - XSS di halaman admin: L=2, I=4 → 8 (HIGH)
// - Log disclosure di debug endpoint: L=3, I=2 → 6 (MEDIUM)
// - DoS via slow endpoint: L=2, I=2 → 4 (LOW)
STRIDE vs OWASP Top 10
STRIDE dan OWASP Top 10 saling melengkapi. STRIDE memandu pertanyaan sistematis ("apa yang harus saya khawatirkan?"), OWASP Top 10 memberi katalog vulnerability konkret ("ini jenis bug yang paling umum"). Mapping kasar: Spoofing↔A07 Auth Failures, Tampering↔A08 Data Integrity, Info Disclosure↔A02 Crypto Failures, Elevation↔A01 Broken Access Control.
Best Practices
- Lakukan threat modeling sebelum coding, bukan setelah deploy
- Libatkan dev, security, dan product — perspektif berbeda menemukan ancaman berbeda
- Dokumentasikan asumsi: "kami asumsikan admin tidak jahat" — kalau asumsi ini runtuh?
- Review ulang setiap ada perubahan arsitektur besar
- Mulai sederhana: whiteboard + sticky notes lebih baik daripada tidak sama sekali