Threat Modeling dengan STRIDE — Security

Apa itu Threat Modeling? Threat modeling adalah proses terstruktur untuk mengidentifikasi, mendaftar, dan memprioritaskan ancaman terhadap sebuah sistem —…

Threat modeling adalah cara terstruktur buat menebak ancaman ke sistemmu sebelum penyerang menemukannya. Daripada nebak-nebak "kira-kira apa yang bisa dibobol", kamu pakai daftar pertanyaan yang sama untuk tiap bagian sistem. Bayangin kamu mau nutup rumah sebelum pergi: kamu keliling ke tiap pintu dan jendela dan nanya hal yang sama, "ini bisa dibuka dari luar gak?" STRIDE adalah daftar keliling itu untuk software.

🧪 Tebakan cepat: penyerang mengirim ulang request terus-menerus sampai server kehabisan tenaga dan tumbang. Huruf STRIDE mana ini? Tebak dulu, jawabannya ada di bagian "Enam huruf STRIDE".

Enam huruf STRIDE

STRIDE adalah model dari Microsoft yang membagi ancaman jadi enam kategori. Tiap huruf mengingatkan kamu menanyakan satu jenis ancaman ke tiap komponen.

Penyerang yang membanjiri server sampai tumbang itu huruf D: Denial of Service. Itu jawaban tebakannya. Dan huruf T adalah Tampering, mengubah data tanpa izin.

Mengklasifikasikan ancaman dengan kata kunci

Di latihan, kamu bikin fungsi classifyStride(threat) yang membaca deskripsi ancaman (huruf kecil semua) dan mengembalikan kategorinya. Aturannya pakai kata kunci sederhana. Lab juga memakai aturan yang sama:

function classifyStride(threat) {
  const t = threat.toLowerCase()
  if (/(impersonat|fake identity|stolen token|phish)/.test(t)) return 'spoofing'
  if (/(modif|alter|change price|forge)/.test(t)) return 'tampering'
  if (/(den(y|ies|ied)|repudiat|no log|audit)/.test(t)) return 'repudiation'
  if (/(leak|expose|disclose|stack trace)/.test(t)) return 'info-disclosure'
  if (/(flood|exhaust|denial|crash)/.test(t)) return 'dos'
  if (/(privilege|admin|escalat|idor)/.test(t)) return 'elevation'
  return 'unknown'
}

Ini hasil fungsi pada contoh-contohnya:

Panggilan Kata kunci cocok Hasil
classifyStride('Attacker floods login endpoint') flood 'dos'
classifyStride('Change price in POST body') change price 'tampering'
classifyStride('User denies they made the transaction') denies 'repudiation'
classifyStride('Stack trace leak in error response') stack trace, leak 'info-disclosure'
classifyStride('IDOR lets user become admin') idor, admin 'elevation'
classifyStride('Impersonate another user with stolen token') impersonat, stolen token 'spoofing'

Menilai risiko: likelihood kali impact

Setelah tahu kategorinya, tiap ancaman dinilai dengan likelihood (seberapa mungkin terjadi, skala 1 sampai 5) dikali impact (seberapa parah kalau terjadi, 1 sampai 5). Hasilnya skor risiko: makin besar, makin didahulukan diperbaiki. Lab memakai enam ancaman yang sama dengan tabel di atas, dengan skor seperti ini:

Ancaman Kategori L I Skor Tingkat
IDOR lets user become admin elevation 4 5 20 CRITICAL
Change price in POST body tampering 4 4 16 CRITICAL
Impersonate with stolen token spoofing 3 4 12 HIGH
Attacker floods login endpoint dos 3 3 9 HIGH
User denies the transaction repudiation 2 3 6 MEDIUM
Stack trace leak info-disclosure 3 2 6 MEDIUM

⚠️ Jebakan yang sering ketemu

TL;DR: STRIDE adalah enam kategori ancaman: Spoofing (autentikasi), Tampering (integritas), Repudiation (non-repudiation), Information Disclosure (kerahasiaan), Denial of Service (ketersediaan), Elevation of Privilege (otorisasi). classifyStride mencocokkan kata kunci dari atas ke bawah, lalu 'unknown' kalau tak ada yang cocok. Nilai tiap ancaman dengan likelihood kali impact (IDOR jadi admin 4 kali 5 sama dengan 20, CRITICAL), lalu perbaiki yang skornya paling tinggi dulu.

Yang akan kamu pelajari