Merancang strategi security testing yang utuh: kapan memakai SAST, DAST, SCA, atau pentest berdasarkan fase dan target, cara mengukur coverage yang jujur, mengelola false positive lintas tool, dan menyusun dokumen strategi satu halaman yang bisa dipertahankan ke manajemen

Sepanjang episode 7–13 kita membangun tiap instrumen testing secara individual: SAST, DAST, SCA, review manual, dan remediasi. Episode ini merakit semuanya menjadi satu strategi — karena masalah organisasi nyata bukan "tool mana yang bagus", melainkan "tool mana di tahap mana, dengan budget dan waktu siapa". Strategi yang salah menghasilkan dua kemungkinan sama buruknya: temuan bocor ke production, atau developer mati oleh noise dan mematikan semua scanner.
Di akhir episode kalian akan punya kerangka untuk menjawab pertanyaan klasik manajer: "apakah aplikasi kita sudah cukup dites?" — dengan jawaban yang bisa dibuktikan, bukan perasaan.
Setiap teknik menemukan kelas bug berbeda pada biaya berbeda. Matriks keputusannya:
| Teknik | Kapan Jalan | Menemukan | Buta Terhadap | Kecepatan |
|---|---|---|---|---|
| SAST (ep. 7) | Tiap PR, pre-commit | Injection, taint flows | Logic, config, runtime | Detik–menit |
| SCA (ep. 9) | Tiap PR + harian | CVE dependency, lisensi | Bug kode sendiri | Detik |
| Secret scan (ep. 11) | Push + history | Credential bocor | Semua selain secret | Detik |
| DAST (ep. 8) | Nightly staging, release | Misconfig, header, injection runtime | Kode tak terjangkau crawler | Menit–jam |
| Manual review (ep. 12) | PR prioritas tinggi | Business logic, authz | Skala besar | Jam/PR |
| Pentest eksternal | Tahunan / rilis mayor | Rantai serangan lintas lapisan | Yang tidak ada di scope | Minggu |
Dua prinsip komposisi yang penting:
Pertanyaan "sudah cukup dites?" butuh definisi terukur. Metrik coverage yang saya rekomendasikan, dari paling penting:
Hindari metrik vanity seperti "jumlah scan dijalankan" — scan yang berjalan tanpa triase hanyalah listrik mahal.
Note
Inventory adalah fondasi yang sering dilewati: kalian tidak bisa mengklaim coverage atas aset yang tidak kalian ketahui ada. Mulailah dari daftar sederhana: repo, owner, internet-facing ya/tidak, data sensitif ya/tidak.
Noise adalah pembunuh program testing nomor satu. Pengelolaannya harus sistemik, bukan heroik:
1. Tuning per tool sebelum rollout (prinsip dari episode 7): audit rule set di seluruh codebase, matikan rule dengan rasio false positive > 70%, sempitkan konteks rule bermasalah.
2. Deduplikasi lintas tool: SQL injection yang sama akan dilaporkan Semgrep, ZAP, dan pentester. Tanpa dedup, satu bug = tiga tiket = kepercayaan runtuh. Solusi pragmatis: normalisasi temuan ke satu format (repo + file/endpoint + kategori CWE) sebelum masuk tracker.
3. Routing berbeda untuk noise level berbeda:
High confidence (taint confirmed) → tiket + gate PR langsung
Medium confidence → dashboard triase mingguan AppSec
Low confidence (pattern only) → report bulanan, tidak masuk tracker4. Umpan balik permanen: setiap kali kalian memvalidasi false positive, tulis alasannya di konfigurasi suppression. Enam bulan kemudian orang lain akan membaca alasan itu alih-alih mengulang investigasi.
Strategi yang tidak muat satu halaman tidak akan dibaca siapa pun. Struktur yang saya pakai:
Contoh keputusan konkret yang harus tertulis — dan yang paling sering diperdebatkan tim:
Tip
Uji strategi kalian dengan satu pertanyaan: kalau besok CVE Log4Shell kedua terbit pukul 6 pagi, berapa lama sampai kalian tahu service mana saja yang terdampak? Jika jawabannya bukan "menit lewat SBOM query", strategi kalian belum selesai.
Inti yang harus dibawa pulang:
Di episode 15 kita bawa strategi ini ke arsitektur modern: AppSec in Cloud-Native — keamanan serverless, hardening aplikasi di Kubernetes, dan runtime detection dengan Falco untuk menangkap perilaku abnormal saat produksi berjalan. Sampai jumpa di episode 15!