Field Manual · Edisi 2026
Framework
Sistem
Anti-Hacker

Panduan teknis keamanan website yang bisa langsung dipakai — dari cara hacker berpikir, sampai cara kamu menutup semua pintu yang mereka cari.

Total Modul 7 Modul
Total Lesson 38 Lesson
Edisi 2026
Platform karsaweb.id
👨‍💻
Zikri
DevSecOps Engineer · @zikri.bangserverid
M00 · Orientasi

Selamat Datang

Kenalan dulu, sebelum kita mulai. Siapa yang bikin framework ini, kenapa formatnya seperti ini, dan bagaimana cara terbaik buat kamu belajar dari sini.

00.1

Selamat Datang

Halo, saya Zikri.

Kalau kamu sampai di sini, berarti kamu sudah ambil langkah yang tepat — dan saya apresiasi itu.

Saya mau mulai dengan satu pertanyaan: kenapa kamu beli ini?

Mungkin website kamu pernah kena hack. Mungkin kamu developer yang sadar bahwa security adalah blind spot terbesar di skill set kamu. Mungkin kamu freelancer yang ingin bisa jual layanan security ke klien. Atau mungkin kamu cuma tidak mau jadi korban berikutnya dari serangan yang makin hari makin masif.

Apapun alasannya — kamu ada di tempat yang tepat.

Sedikit Tentang Saya

Perjalanan saya di dunia ini dimulai dari iseng. Waktu kuliah, saya tertarik dengan bagaimana sebuah sistem bisa dibobol — bukan untuk tujuan jahat, saya memang penasaran secara teknis.

Dari situ saya mulai belajar server management, karena untuk bisa memahami serangan dengan benar, kamu harus paham cara kerja sistem dari dalam. Beruntung, dosen saya waktu itu memberi akses ke lab server — sesuatu yang langka di masa itu.

Lulus kuliah, saya langsung kerja sebagai sysadmin di software house. Dari sana saya makin dalam ke DevOps, dan akhirnya ke DevSecOps — gabungan antara development, operations, dan security. Sekarang saya kerja remote sebagai DevSecOps engineer di startup platform kreator berbasis Jakarta. Lebih dari 6 tahun berkutat dengan server, keamanan, dan insiden nyata — dan framework ini adalah distilasi dari semua yang saya pelajari selama itu.

Kenapa Framework, Bukan Sekadar Ebook?

Ebook memberikan pengetahuan. Framework memberikan sistem.

Setelah baca ebook, kamu tahu apa itu SQL injection. Setelah pakai framework ini, kamu tahu apa yang harus dilakukan setiap kali mau launch website baru, setiap bulan untuk audit rutin, dan apa yang harus dilakukan saat website kamu kena serangan.

Framework ini punya output konkret di setiap langkah:

  • Checklist yang bisa langsung dijalankan
  • Template yang bisa langsung diisi
  • SOP yang bisa langsung diikuti
  • Score card yang bisa dipresentasikan ke klien

Ini bukan materi untuk dibaca sekali lalu disimpan. Ini sistem yang dipakai berulang.

Satu Hal yang Perlu Kamu Tahu Sebelum Mulai

Framework ini dibangun dari dua sudut pandang: hacker dan defender.

Kenapa perlu dua sudut pandang? Karena defender yang tidak pernah berpikir seperti hacker akan selalu selangkah di belakang. Kamu perlu tahu bagaimana penyerang berpikir, apa yang mereka cari, dan bagaimana mereka masuk — supaya kamu bisa menutup pintu-pintu itu sebelum mereka sampai.

⚖️
Penting — Etika & Hukum

Bagian attacking mode di framework ini bukan untuk mengajarkan cara hack orang lain. Semua praktik harus dilakukan di environment yang kamu miliki atau yang kamu punya izin eksplisit untuk test. Kita semua tunduk pada UU ITE — dan kita akan bahas batasan ini lebih detail di Modul 1.

00.2
00.2

Cara Baca Framework Ini

Framework ini punya 7 modul dengan total 38 lesson. Kamu bisa baca semuanya dari atas ke bawah secara berurutan — itu valid. Tapi ada cara yang lebih efisien tergantung tujuan kamu.

Tentukan Jalur Kamu

🛡️
Jalur Defender — "Saya ingin website saya aman"
Untuk developer, pemilik website, atau sysadmin

Kamu fokus pada perlindungan sistem yang sudah ada atau yang sedang dibangun. Mulai dari checklist dan SOP di M06 — ini yang paling langsung bisa dipakai hari ini. Setelah itu perkuat dengan M04 (Hardening), M05 (Monitoring), lalu M01–M03 untuk fondasi.

Urutan: M06 → M04 → M05 → M01 → M02 → M03

⚔️
Jalur Ethical Hacker — "Saya ingin paham cara kerja serangan"
Untuk bug bounty hunter, pentester, security researcher

Kamu ingin memahami perspektif penyerang dan mempersiapkan diri untuk bug bounty atau penetration testing.

Urutan: M01 → M02 → M03 → M04 → M05 → M06

🚀
Jalur Cepat — "Saya butuh hasil sekarang"
Website sudah berjalan, butuh quick wins segera

Langsung buka M06 Lesson 06.1 — jalankan Pre-Launch Security Checklist. Cek berapa item yang belum terpenuhi. Prioritaskan semua item kritis dulu.

Estimasi: 2-4 jam untuk audit dan memperbaiki item kritikal.

Cara Terbaik Belajar dari Framework Ini

✅ Yang Bekerja

Langsung praktik di server atau VM setelah baca materi

Buat catatan personal — apa yang relevan untuk setup kamu

Ikuti urutan jalur yang sudah dipilih

❌ Yang Tidak Bekerja

Baca semua lesson dulu baru praktik — ini yang paling sering bikin tidak selesai

Skip bagian logging dan monitoring — justru ini yang menyelamatkan kamu di momen kritis

00.3
00.3

Tools yang Perlu Disiapkan

Sebelum mulai praktik, ada beberapa tools yang perlu kamu siapkan. Tidak semuanya wajib dari awal — saya tandai mana yang perlu sekarang dan mana yang bisa belakangan.

🔴 Wajib Sekarang

1. Akses SSH ke Server

Kalau kamu punya server/VPS, pastikan kamu bisa akses via SSH dari laptop kamu. Ini adalah syarat untuk hampir semua praktik di modul server.

bash
# Test koneksi SSH ssh username@ip-server-kamu # Kalau belum punya SSH key, generate sekarang ssh-keygen -t ed25519 -C "email@kamu.com"

Belum punya VPS? Dua provider yang sudah saya pakai sendiri:

  • Vultr — mulai $3.50/bulan, infrastruktur solid, datacenter tersebar global
  • IDCloudHost — provider lokal Indonesia, bayar pakai rupiah, support bahasa Indonesia

2. SSH Client — Termius

Saya merekomendasikan Termius sebagai SSH client untuk semua platform — Windows, macOS, Linux, bahkan iOS dan Android.

  • UI yang bersih dan mudah dipakai
  • Bisa simpan semua koneksi server di satu tempat
  • Support SSH key management yang rapi
  • Bisa akses server dari HP saat darurat

Versi gratis sudah lebih dari cukup untuk semua praktik di framework ini.

🟡 Siapkan Sebelum Modul 2

Di framework ini, kita tidak perlu install Kali Linux atau VM khusus. Semua analisis serangan dilakukan dari perspektif konseptual dan menggunakan tools yang tersedia langsung di browser atau terminal — lebih praktis dan cukup untuk memahami konsepnya.

🟢 Nice to Have

Telegram Bot — Di Modul 5 kita akan setup alerting ke Telegram. Siapkan dari sekarang:

  1. Buka Telegram, cari @BotFather
  2. Kirim /newbot, ikuti instruksi
  3. Simpan Bot Token yang diberikan — kamu butuh ini nanti
  4. Cari @userinfobot, kirim pesan apapun, catat Chat ID kamu
📋
Summary Checklist Tools

Sekarang: SSH client (Termius) terinstall dan bisa koneksi ke server
Sebelum M02: Browser extensions untuk security testing terpasang
Nice to have: Telegram Bot token & Chat ID tersimpan

00.4
00.4

Pakai Vercel atau Netlify? Baca Ini Dulu

Banyak pembeli framework ini yang tidak punya VPS atau server sendiri. Mereka deploy di Vercel, Netlify, Railway, Render, atau shared hosting. Dan pertanyaan pertama mereka biasanya sama:

"Framework ini masih relevan buat saya?"

Jawaban singkatnya: ya, dan justru bagian yang paling penting tetap relevan.

Pahami Dulu: Apa yang Vercel Jaga

✅ Yang Diurus Vercel/Netlify

Server uptime & reliability

SSL/HTTPS — otomatis, gratis

CDN — distribusi konten global

DDoS protection — level dasar

Patch server OS & infrastruktur fisik

❌ Yang Masih Tanggung Jawab Kamu

Validasi input di form & API kamu

Rate limiting di endpoint login

Environment variable yang bocor ke client-side

Dependency npm yang outdated & vulnerable

CORS yang terlalu longgar

Security headers di response aplikasi

🏢
Analogi

Bayangkan kamu tinggal di apartemen premium. Pengelola sudah urus keamanan gedung, CCTV lobby, satpam 24 jam, pintu utama yang kokoh. Tapi kalau kamu lupa kunci pintu kamar, taruh kunci di bawah keset, atau kasih kode pintu ke sembarang orang — itu tetap tanggung jawab kamu, bukan pengelola.

Vercel adalah pengelola apartemen yang sangat baik. Framework ini mengajarkan kamu cara mengamankan kamar kamu sendiri.

Modul yang 100% Relevan untuk Kamu

ModulRelevansiCatatan
M01 Fundamental & Mindset✓ PenuhUniversal
M02 Hacking Teori & Praktis✓ PenuhSemua serangan terjadi di app layer
M03 Incident Response✓ PenuhCara deteksi & pulihkan tetap sama
M04 Hardening (kecuali SSH)✓ Sebagian04.5 Server SSH bisa skip kalau no VPS
M05 Monitoring & Alerting✓ PenuhPakai Vercel Analytics + Khaleed
M06 Checklist & SOP✓ Penuh
M00 Selesai — Siap Lanjut

Kamu sudah tahu cara navigasi framework ini sesuai jalur yang kamu pilih. Di Modul 1, kita bahas fondasi: kenapa website selalu jadi target, OWASP Top 10, dan cara berpikir seperti hacker.

M01 · Fundamental

Kenapa Website Selalu Jadi Target

Fondasi mindset security: kenapa website kamu menarik bagi penyerang, peta celah global (OWASP Top 10), cara hacker berpikir, dan batas hukum yang harus kamu pegang.

01.1

Kenapa Website Selalu Jadi Target?

Website Itu Seperti Toko di Pinggir Jalan Raya

Bayangkan kamu punya toko fisik. Toko itu ada di gang kecil, hanya orang-orang tertentu yang tahu lokasinya, dan buka hanya jam 9 pagi sampai 5 sore.

Sekarang bandingkan dengan toko yang ada di pinggir jalan raya besar, buka 24 jam, dan siapapun di seluruh dunia bisa masuk kapan saja.

Website kamu adalah toko kedua itu. Dan konsekuensinya: selain pelanggan yang baik-baik, ada juga yang masuk dengan niat lain.

Siapa yang Menyerang dan Kenapa?

01
Bot Otomatis

Sebagian besar serangan bukan dari manusia yang duduk mengetik — ini script otomatis yang berjalan 24 jam, scanning jutaan website setiap hari. Seperti orang yang keliling kompleks perumahan sambil coba semua gagang pintu. Tidak butuh skill khusus, cukup berjalan terus dan cari yang tidak terkunci.

02
Hacker Oportunis

Mereka tidak mengincar kamu secara spesifik. Mereka mencari target yang mudah — website dengan celah umum, password lemah, atau software yang tidak diupdate. Kalau website kamu terlihat lebih sulit dari target sebelah, mereka lanjut ke target lain.

03
Afiliasi Judi Online (Judol)

Ancaman yang sangat nyata dan masif di Indonesia saat ini. Mereka punya insentif finansial besar untuk mengompromis ribuan website sekaligus — untuk pasang backlink, redirect traffic, atau deface halaman. Mereka tidak peduli website kamu kecil atau besar.

04
Kompetitor atau Motif Personal

Lebih jarang, tapi ada. Terutama untuk bisnis yang sudah cukup besar atau punya rival yang tidak bermain bersih.

Apa yang Sebenarnya Mereka Cari?

⚠️
Miskonsepsi Berbahaya

"Website saya kecil, data saya tidak penting, kenapa mau diserang?" — Ini adalah salah satu miskonsepsi paling berbahaya. Penyerang tidak selalu menginginkan data kamu.

Yang lebih sering mereka cari:

  • Server kamu sebagai alat — Server yang dikompromis bisa dipakai untuk kirim spam, serang website lain, atau mining cryptocurrency. Yang bayar tagihan listrik dan bandwidth: kamu.
  • Traffic kamu — Redirect user kamu ke website judol atau phishing. Setiap klik dari pengunjung website kamu = pemasukan buat mereka.
  • Reputasi domain kamu — Domain berumur dengan reputasi baik di Google sangat berharga untuk pasang backlink judol. Setelah mereka pakai, domain kamu masuk blacklist.
  • Data user kamu — Kalau website kamu punya form login, email pelanggan, atau data apapun — itu punya nilai di dark web.
#1
Indonesia di Asia Tenggara untuk tingkat serangan siber
95%
serangan bersifat oportunistik, bukan ditarget khusus
80%
exploit menyasar kerentanan yang sudah ada patch-nya tapi belum di-apply
💡
Kabar Baiknya

Sebagian besar serangan yang berhasil bukan karena penyerangnya canggih — mereka berhasil karena targetnya tidak siap. Kamu tidak perlu punya keamanan seperti bunker militer. Kamu hanya perlu sedikit lebih sulit dari website tetangga.

01.2
01.2

OWASP Top 10 — Peta Celah Keamanan Website

OWASP adalah organisasi yang mengumpulkan data dari ribuan insiden keamanan di seluruh dunia, lalu merangkumnya jadi daftar 10 jenis celah yang paling sering ditemukan dan dieksploitasi. Anggap ini sebagai kartu rapor keamanan web global.

Kalau website kamu aman dari 10 jenis ini, kamu sudah jauh lebih aman dari mayoritas website di internet.

A01
Broken Access Control
Pintu yang Harusnya Terkunci, Tapi Tidak

Celah nomor satu dan paling umum. User biasa bisa akses halaman /admin kalau tahu URL-nya. Ganti angka di URL dari /profile/123 ke /profile/124 dan bisa lihat profil orang lain. Sistem tidak benar-benar memverifikasi hak akses.

A02
Cryptographic Failures
Rahasia yang Tidak Benar-Benar Rahasia

Password disimpan sebagai teks biasa di database. Data dikirim via HTTP bukan HTTPS sehingga bisa disadap. Menggunakan algoritma enkripsi yang sudah ketinggalan zaman.

A03
Injection
Perintah Palsu yang Dieksekusi Sistem

Penyerang menyisipkan perintah ke dalam input biasa — SQL Injection, Command Injection, XSS. Kalau aplikasi tidak memvalidasi input, database akan mengeksekusi perintah berbahaya itu mentah-mentah.

A04
Insecure Design
Aman dari Awal, Bukan Ditambah Belakangan

Bukan soal kode yang buruk, tapi cara berpikir tentang aplikasinya yang salah. Fitur reset password tanpa rate limiting. Alur bisnis yang bisa dimanipulasi untuk skip langkah pembayaran.

A05
Security Misconfiguration
Pengaturan Default yang Berbahaya

Celah paling mudah dicegah dan paling banyak ditemukan. Mode debug aktif di production, password admin masih "admin", folder sensitif bisa diakses publik, versi web server ditampilkan ke publik.

A06
Vulnerable and Outdated Components
Pakai Bahan yang Sudah Kadaluarsa

Library, plugin, framework yang kamu pakai mungkin punya bug yang sudah ditemukan dan ada patch-nya — tapi kalau kamu tidak update, kamu masih pakai versi yang bercelah terbuka.

A07
Identification and Authentication Failures
Pintu yang Tidak Mengenali Siapa yang Masuk

Tidak ada batasan percobaan login sehingga bisa bruteforce. Session tidak expire setelah logout. Token reset password yang bisa ditebak. Tidak ada 2FA untuk akun admin.

A08
Software and Data Integrity Failures
Mempercayai Paket yang Sudah Dimanipulasi

Menggunakan CDN atau library dari sumber tidak terverifikasi. Proses CI/CD tanpa verifikasi integritas kode. Deserialisasi data dari sumber tidak tepercaya.

A09
Security Logging and Monitoring Failures
CCTV yang Tidak Pernah Direkam

Ini tidak langsung membuat website diserang — tapi membuatnya mustahil untuk tahu kalau sudah diserang. Bayangkan toko yang punya CCTV, tapi rekamannya tidak pernah disimpan. Ini kenapa M05 (Monitoring) adalah salah satu modul terpenting di framework ini.

A10
Server-Side Request Forgery (SSRF)
Menyuruh Server Mengambil Sesuatu yang Berbahaya

Penyerang membuat server kamu mengakses URL yang tidak seharusnya. Sering ditemukan di fitur "import dari URL", thumbnail generator, atau webhook.

01.3
01.3

Cara Hacker Berpikir — Dual POV

Ada perbedaan besar antara dokter yang pernah belajar tentang penyakit, dan dokter yang benar-benar mengerti bagaimana virus bekerja dari dalam. Yang kedua jauh lebih baik dalam mencegah dan mengobati.

Hal yang sama berlaku untuk keamanan web. Defender yang tidak pernah melihat dunia dari sudut pandang penyerang akan selalu reaktif — selalu selangkah di belakang.

Lima Prinsip Dasar Mindset Hacker

  1. "No System is Safe" — Hacker memulai dengan asumsi: tidak ada yang sempurna. Yang berbeda hanya seberapa sulit celah itu ditemukan. Sebagai defender, asumsi yang sama harus kamu pegang: bukan apakah ada celah, tapi di mana letak celahnya.
  2. Cari jalan yang paling mudah, bukan yang paling keren — Hacker seperti pencuri yang lebih sering masuk lewat jendela tidak terkunci daripada membobol pintu besi. Kalau kamu punya login berlapis tapi form pencarian bisa di-SQLi, semua verifikasi itu tidak ada gunanya.
  3. Informasi adalah segalanya sebelum menyerang — Fase recon — mengumpulkan informasi — adalah yang paling memakan waktu tapi paling penting. Implikasinya: kurangi informasi yang bisa dikumpulkan tentang sistemmu.
  4. Manusia adalah celah terbesar — Sistem paling canggih pun bisa jatuh karena satu orang yang klik link phishing. Social engineering — manipulasi psikologis — lebih sering dipakai dari exploit teknis.
  5. Persistence beats talent — Hacker yang berhasil bukan selalu yang paling pintar. Mereka adalah yang paling sabar, yang terus mencoba dengan pendekatan berbeda secara sistematis.

Dual POV — Satu Skenario, Dua Sudut Pandang

Skenario: Website toko online dengan form login.

⚔️ Sudut Pandang Hacker

Langkah 1: Coba password umum — admin/admin, admin/password, admin/123456. Kalau tidak ada rate limiting, bisa coba ribuan kombinasi otomatis.

Langkah 2: Lihat URL setelah login. Kalau ada /dashboard?user_id=1, coba ganti ke user_id=2. Bisa lihat akun orang lain?

Langkah 3: Masukkan karakter aneh di form. Error yang terlalu detail bisa bocorkan struktur database.

Langkah 4: Coba fitur "lupa password". Token bisa ditebak? URL bisa dimanipulasi?

🛡️ Sudut Pandang Defender

Respons 1: Rate limiting di form login — maksimal 5 percobaan dalam 1 menit sebelum IP di-block sementara.

Respons 2: Setiap request ke halaman terproteksi harus dicek di sisi server — apakah user ini punya hak akses ke resource yang diminta?

Respons 3: Error message tidak boleh mengandung detail teknis. "Username atau password salah" — bukan "User tidak ditemukan di database".

Respons 4: Token reset harus random, tidak bisa ditebak, punya expiry pendek, dan diverifikasi ulang di sisi server.

Jenis-Jenis Hacker

White Hat

Ethical hacker yang bekerja dengan izin untuk membantu organisasi menemukan celah sebelum pihak jahat. Bug bounty hunter, penetration tester, security researcher masuk kategori ini.

Black Hat

Hacker dengan niat jahat — mencuri data, merusak sistem, atau mengambil keuntungan finansial secara ilegal.

Grey Hat

Di antaranya — tidak punya izin tapi tidak punya niat jahat. Lebih ke hobi atau iseng. Nothing to lose, tapi tetap berpotensi melanggar hukum.

Script Kiddie

Pakai tools orang lain tanpa memahami cara kerjanya. Jangan remehkan — toolsnya nyata, jumlahnya sangat banyak, dan dampaknya bisa sama seriusnya.

🎯
Action Item

Buka website yang kamu kelola. Berpura-puralah kamu adalah hacker yang baru menemukannya. Tanya: Informasi apa yang bisa saya temukan hanya dari tampilan? Ada berapa form input? Kalau saya coba login, apakah ada batasan percobaan? Apakah error message terlalu informatif? Cukup lihat dan catat — jangan lakukan apapun yang teknis.

01.4
01.4

Disclaimer & Etika — UU ITE & Batasan Ethical Hacking

Skill yang akan kamu pelajari di framework ini adalah skill yang sama yang dipakai oleh hacker jahat. Satu-satunya yang membedakan antara ethical hacker dan kriminal siber adalah izin dan niat.

Bukan skillnya. Toolsnya sama. Tekniknya sama.

UU ITE di Indonesia

Indonesia memiliki UU ITE yang mengatur aktivitas digital termasuk keamanan siber. Secara umum, UU ITE melarang akses, intersepsi, dan gangguan terhadap sistem elektronik tanpa hak atau izin. Pelanggarannya bisa berujung pada pidana penjara dan denda yang tidak kecil.

Kata kunci: "tanpa hak". Pastikan kamu melakukan pengujian keamanan pada sistem yang kamu miliki atau yang kamu punya izin tertulis untuk test.

✅ Yang Boleh

Testing pada website/server yang kamu miliki sendiri

Testing pada sistem klien dengan kontrak/perjanjian tertulis yang jelas

Melaporkan vulnerability yang ditemukan melalui jalur responsible disclosure

❌ Yang Tidak Boleh

Akses ke sistem orang lain tanpa izin, sekecil apapun, sebaik apapun niatmu

"Iseng" test keamanan website orang lain meski kamu pikir itu untuk kebaikan mereka

Mengancam akan mempublikasikan vulnerability kalau tidak dibayar — ini pemerasan

Bug Bounty — Cara Legal Uji Skill di Sistem Nyata

Banyak perusahaan punya program di mana mereka secara eksplisit mengizinkan peneliti keamanan untuk mencari celah di sistem mereka, dengan imbalan reward finansial.

  • HackerOne — platform global terbesar
  • Bugcrowd — populer untuk program enterprise
  • BSSN — program disclosure untuk sistem pemerintah Indonesia
🤝
Prinsip yang Saya Pegang

"Jangan pernah gunakan skill keamanan untuk tujuan yang tidak kamu mau orang lain lakukan ke kamu atau ke orang yang kamu sayangi." — Kalau kamu menemukan vulnerability di UMKM kecil secara tidak sengaja, segera lapor ke pemiliknya dengan cara yang baik.

M01 Selesai — Fondasi Sudah Terbangun

Kamu sudah punya fondasi mindset security: kenapa website jadi target, peta celah OWASP Top 10, cara hacker berpikir, dan batas hukum yang harus dipegang. Di Modul 2, kita lihat langsung bagaimana serangan bekerja dari sudut pandang penyerang.

M02 · Hacking

Cara Hacker Bekerja

Satu siklus serangan lengkap dari sudut pandang penyerang: recon, scanning, serangan injeksi, file upload, DDoS, social engineering, sampai cara mereka mempertahankan akses dan menghapus jejak.

02.1

Reconnaissance — Cara Hacker Mengintai Target

Sebelum satu baris perintah pun diketik, hacker profesional menghabiskan waktu yang jauh lebih lama hanya untuk mengumpulkan informasi. Fase ini disebut reconnaissance — atau disingkat recon.

Analoginya seperti perencana perampokan bank: mereka tidak langsung masuk. Mereka duduk di kafe seberang selama beberapa hari, mengamati jam buka, berapa banyak satpam, pergantian shift, di mana pintu keluar darurat.

Dua Jenis Recon

🔍 Passive Reconnaissance

Mengintai tanpa menyentuh target. Tidak ada request yang dikirim ke server — tidak ada jejak di log mereka. Semua dilakukan dari "jauh" menggunakan sumber publik.

Apa yang bisa ditemukan: source code website, Google Dorking, WHOIS, Certificate Transparency Logs, data breach database

⚡ Active Reconnaissance

Mengintai dengan berinteraksi langsung — mengirim request, probing port, mengecek response. Lebih informatif tapi meninggalkan jejak di log target.

Yang dilakukan: port scanning, web fingerprinting, directory discovery, vulnerability scanning

Teknik Recon dan Implikasinya untuk Defender

Teknik ReconYang Perlu Dilindungi
Source code analysisJangan taruh info sensitif di komentar, sembunyikan versi library
Google DorkingAudit apakah ada file sensitif yang ter-index Google
WHOIS lookupAktifkan WHOIS privacy protection di registrar
Certificate logAudit semua subdomain — hapus yang tidak aktif
Data breach checkCek email admin di haveibeenpwned.com, enforce password unik
Port scanningTutup semua port yang tidak diperlukan via firewall
FingerprintingSembunyikan versi software di header (server_tokens off)
Directory discoveryNonaktifkan directory listing, amankan file sensitif
🔎
Exercise: Recon Website Kamu Sendiri

Langkah 1 — Google Dorking: Ketik site:domainmu.com di Google. Ada halaman yang tidak seharusnya publik?
Langkah 2 — WHOIS: Buka who.is dan masukkan domain kamu. Email pribadimu terekspos?
Langkah 3 — Subdomain: Buka crt.sh, ketik domain kamu. Ada subdomain aktif yang terlupakan?
Langkah 4 — Breach check: Buka haveibeenpwned.com, masukkan email hosting dan CMS kamu. Pernah bocor?

02.2
02.2

Scanning & Enumeration — Pemetaan Sebelum Serangan

Kalau recon adalah "menonton dari jauh", scanning dan enumeration adalah "berjalan keliling gedung dan catat semua pintu, jendela, dan ventilasi yang ada".

Apa yang Di-Scan

Port dan Service

Setiap server punya "pintu-pintu" yang disebut port. Setiap service mendengarkan di port tertentu. Dari perspektif penyerang: setiap port terbuka adalah potensi titik masuk.

PortServiceRisiko jika terbuka ke internet
22SSHBruteforce login langsung ke server
80HTTPTraffic tidak terenkripsi
443HTTPSNormal — harus terbuka
3306MySQLDatabase langsung terekspos ke internet
21FTPTransfer file tanpa enkripsi
6379RedisAkses cache/session database tanpa auth
🔒
Prinsip Defender

Database tidak pernah boleh diakses dari luar — hanya dari localhost atau IP yang sangat spesifik. Deny all, allow specific adalah aturan firewall yang harus selalu dipegang.

Web Application Fingerprinting

Dari response header, penyerang bisa tahu banyak:

  • Header ServerServer: nginx/1.18.0 → langsung cari CVE-nya di exploit-db
  • X-Powered-ByX-Powered-By: PHP/7.4.3 → versi spesifik = bisa dicari celahnya
  • Cookie namesPHPSESSID = PHP, laravel_session = Laravel
  • Error messages — Stack trace yang tampil ke publik adalah goldmine informasi

Directory & File Discovery

Proses mencoba URL satu per satu menggunakan wordlist ribuan path umum. Yang sering ditemukan:

  • Panel admin yang tidak diproteksi dengan benar
  • File backup yang tertinggal: .sql, .zip, .tar.gz
  • File konfigurasi yang terekspos: .env, config.php, wp-config.php.bak
  • Halaman test atau development yang tidak sempat dihapus
⚠️
Tidak Ada yang Benar-Benar Tersembunyi

Tidak ada yang namanya "tersembunyi" di internet hanya karena tidak ada link yang menuju ke sana. Kalau file itu ada dan bisa diakses via URL, penyerang akan menemukannya. Satu-satunya perlindungan: benar-benar tidak ada di sana, atau diproteksi dengan autentikasi yang kuat.

🔍
Cek Exposure Website Kamu Sekarang

1. Cek header: Buka F12 → Network → klik request pertama → lihat Response Headers. Ada Server? Ada X-Powered-By?
2. Cek di securityheaders.com — masukkan domain kamu
3. Cek halaman error: Akses URL yang tidak ada — pesan error apa yang muncul? Terlalu detail?
4. Coba akses: domainmu.com/.env, domainmu.com/phpinfo.php, domainmu.com/backup

02.3
02.3

Serangan Injeksi — SQLi & XSS

SQL Injection — Menyusup Lewat Bahasa Database

🍽️
Analogi

Bayangkan form pemesanan makanan. Kamu isi nama: "Ali". Sistem proses pesanan untuk Ali. Tapi penyerang isi nama: "Ali, hapus semua pesanan". Kalau sistem tidak memvalidasi input, dia mungkin benar-benar hapus semua pesanan karena sistem berpikir ini adalah sebuah perintah.

SQLi bekerja persis seperti itu. Penyerang memasukkan karakter khusus yang "menutup" bagian username dari query, lalu menambahkan kondisi: "ATAU kondisi yang selalu benar." Hasilnya: login berhasil tanpa password yang benar.

Apa yang Bisa Dilakukan Penyerang via SQLi

  • Bypass autentikasi — login tanpa password
  • Dump seluruh database — semua data: username, password hash, data pelanggan
  • Modifikasi data — ubah harga produk, saldo akun, konten halaman
  • Hapus data — drop table atau hapus semua records
  • Di kasus terburuk — eksekusi perintah di sistem operasi server

Pencegahan

php — BERBAHAYA
// ❌ JANGAN — rentan SQLi $query = "SELECT * FROM users WHERE email = '" . $_POST['email'] . "'";
php — AMAN
// ✅ SELALU — prepared statement dengan PDO $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?"); $stmt->execute([$_POST['email']]); $user = $stmt->fetch();

XSS (Cross-Site Scripting) — Menyisipkan Script di Halaman Orang Lain

XSS adalah ketika penyerang berhasil menyisipkan script JavaScript ke halaman website yang legitimate dan script itu dieksekusi di browser user lain.

Jenis XSSCara KerjaDampak
Reflected XSSScript ada di URL yang dikirim ke korban. Dieksekusi sekali saat korban klik link berbahaya.Hanya korban yang klik link yang terdampak
Stored XSSScript tersimpan permanen di server (di komentar, profil, dll). Dieksekusi setiap kali halaman dibuka siapapun.Semua pengunjung halaman terdampak — jauh lebih berbahaya

Yang Bisa Dilakukan Penyerang via XSS

  • Mencuri session cookie — login sebagai user lain tanpa password
  • Keylogging — merekam semua yang diketik user di halaman itu
  • Phishing — menampilkan form login palsu di dalam halaman legitimate

Pencegahan

php
// ❌ BERBAHAYA — langsung echo data dari user echo $_GET['name']; // ✅ AMAN — selalu escape untuk HTML echo htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
Laravel / Blade
{{-- ✅ Auto-escape --}} {{ $variable }} {{-- ❌ Tidak di-escape — hati-hati pakai ini --}} {!! $variable !!}
02.4
02.4

File Upload Abuse, Bruteforce & Open Redirect

File Upload Abuse — Pintu Masuk Lewat Fitur Biasa

Hampir semua website punya fitur upload. Fitur ini terlihat sepele tapi kalau tidak dijaga dengan benar, ini adalah salah satu celah paling berbahaya. Kalau penyerang berhasil mengupload file PHP dan file itu bisa dieksekusi — mereka punya webshell: akses penuh ke server dari browser.

⚔️ Cara Bypass Validasi Lemah

Ganti ekstensi: Upload shell.php.jpg — validasi yang cek ekstensi terakhir saja akan loloskan

Manipulasi MIME: Ubah header Content-Type: application/x-phpimage/jpeg sebelum dikirim menggunakan Tamper Dev

Double extension: shell.php.png — beberapa server eksekusi berdasarkan ekstensi pertama

🛡️ Pencegahan Paling Efektif

Nonaktifkan eksekusi PHP di folder uploads — satu baris konfigurasi Nginx yang bilang "apapun yang ada di folder uploads, jangan pernah eksekusi sebagai PHP"

Meski webshell berhasil diupload, file tidak bisa dieksekusi — hanya bisa didownload sebagai file biasa

nginx — Blokir PHP di folder uploads
location /uploads/ { location ~* \.php$ { deny all; return 403; } }

Bruteforce — Coba Ribuan Kombinasi Sampai Berhasil

Bruteforce adalah pendekatan paling sederhana: coba semua kemungkinan username/password sampai ada yang cocok. Dengan komputer modern dan koneksi cepat, ribuan kombinasi bisa dicoba per menit.

  • Dictionary attack: Pakai daftar password paling umum — "password123", "admin", nama+tahun lahir. Tingkat keberhasilannya mengejutkan karena banyak orang masih pakai password lemah.
  • Credential stuffing: Pakai database username/password yang bocor dari breach lain. Kalau seseorang pakai password sama di mana-mana, ini sangat efektif.

Cara mencegah: Rate limiting di halaman login (setup di M04), Fail2ban, password yang kuat dan unik, 2FA aktif.

Open Redirect — Menyalahgunakan Kepercayaan Domain

URL terlihat berasal dari domain yang dipercaya user — tapi setelah diklik, langsung diarahkan ke situs phishing.

Contoh: domainmu.com/login?redirect=https://situs-phishing.com

Pencegahan: Jangan pernah redirect ke URL eksternal berdasarkan input user. Kalau perlu, validasi bahwa URL tujuan adalah domain kamu sendiri — atau gunakan whitelist URL yang diizinkan.

🔑
Pola yang Sama di Semua Serangan

Kalau kamu perhatikan, ada pola yang berulang: input dari user diproses atau dipercaya tanpa validasi yang cukup. Ini kembali ke prinsip paling fundamental: jangan pernah percaya input dari user. Tidak pernah. Tidak ada pengecualian.

02.5
02.5

DDoS & Social Engineering — Serangan yang Berbeda Dimensinya

DDoS — Distributed Denial of Service

🍞
Analogi

Kamu punya toko roti yang bisa melayani 20 pelanggan sekaligus. Seseorang mengorganisir 2.000 orang untuk datang bersamaan — bukan untuk beli, hanya berdiri di dalam. Tidak ada yang jahat secara individual. Tapi hasilnya: tidak ada pelanggan asli yang bisa masuk, dan kamu terpaksa tutup.

Penyerang tidak punya ribuan komputer sendiri — mereka mengendalikan botnet: jaringan komputer yang terinfeksi malware tanpa sepengetahuan pemiliknya. Dan server yang tidak aman bisa menjadi bagian dari botnet tanpa kamu sadari.

📊 Volumetric

Banjiri bandwidth server dengan data dalam jumlah sangat besar. Koneksi internet server habis untuk menerima traffic garbage.

🎯 Application Layer (L7)

Request yang membutuhkan resources besar untuk diproses — pencarian lambat, generate halaman berat — sampai server kehabisan CPU atau memory.

Mitigasi: Tidak ada cara mencegah DDoS sepenuhnya di level server sendiri. Mitigasi harus dilakukan di depan server — dan Cloudflare adalah jawabannya. Setup lengkap di M04.

Social Engineering — Serangan ke Manusianya, Bukan Sistemnya

Ini yang paling sering diabaikan. Targetnya bukan kode, bukan server — targetnya adalah manusia. Kevin Mitnick (salah satu hacker paling terkenal dalam sejarah) berkata bahwa social engineering adalah teknik paling efektif yang pernah ia gunakan — bukan exploit teknis.

TeknikCara KerjaTanda Bahaya
PhishingEmail/pesan yang terlihat dari sumber tepercaya, minta klik link atau masukkan credentialsAda rasa urgensi, link tidak sesuai domain asli
Spear PhishingPhishing yang sangat ditargetkan — pakai nama yang dikenal korban, konteks yang relevanTerlalu personal untuk email random
PretextingBuat skenario palsu — pura-pura jadi support hosting untuk reset passwordAda yang minta akses atau credentials via telepon
VishingSocial engineering via telepon, sering di jam tidak wajar saat korban ngantukTelepon tidak dikenal dengan skenario urgent

Cara mitigasi: Verifikasi out-of-band (konfirmasi via jalur berbeda dari yang diminta), skeptisisme terhadap urgensi, prinsip least privilege, dan jangan berbagi info sensitif secara tidak perlu. Support yang legitimate tidak akan pernah minta password kamu.

02.6
02.6

Maintaining Access & Covering Tracks

Ada dua tipe penyerang yang berhasil masuk: yang langsung bikin kerusakan terlihat — cepat ketahuan. Dan yang masuk dengan diam, pasang pintu cadangan, ambil perlahan, hapus jejak — ini yang jauh lebih berbahaya.

Maintaining Access — Cara Mereka Memastikan Bisa Kembali

A
Webshell

File PHP kecil yang ditanam di server dan bisa menerima perintah via browser. Sering disembunyikan di dalam file yang terlihat sah — disisipkan di tengah file functions.php yang panjang. Yang dicari: file PHP dengan nama random di folder uploads, tmp, cache.

B
Akun Backdoor

Buat akun admin baru dengan nama yang tidak mencolok. Di WordPress: username seperti wp_maintenance atau admin_backup. Yang dicari: akun admin yang tidak kamu buat sendiri.

C
Modifikasi File Konfigurasi

Sisipkan kode berbahaya ke file yang di-load setiap kali website berjalan — functions.php, index.php. Kode diobfuscate sehingga tidak terbaca manusia. Tanda: fungsi eval(), base64_decode(), gzinflate() di tempat yang tidak wajar.

D
Scheduled Task / Cron Job

Tambahkan cron job yang re-install backdoor secara berkala. Bahkan setelah kamu "bersihkan" server, backdoor kembali terpasang otomatis. Yang dicek: semua cron job yang terdaftar di server.

E
SSH Authorized Keys

Tambahkan SSH public key mereka ke ~/.ssh/authorized_keys. Akses SSH permanen meski password sudah diganti. Yang dicek: isi authorized_keys semua user di server, hapus key yang tidak dikenal.

Covering Tracks — Cara Mereka Menghapus Jejak

  • Manipulasi Log — Hapus baris log yang berisi aktivitas mereka, atau modifikasi timestamp. Inilah kenapa log harus di-backup ke lokasi terpisah yang tidak bisa diakses dari server yang dikompromis.
  • Manipulasi Timestamp File — Ubah timestamp file backdoor agar terlihat seperti file lama. Implikasi: jangan hanya cari file yang baru dibuat — cari juga file yang dimodifikasi di waktu tidak wajar.
  • Obfuscation — Kode backdoor dibuat tidak terbaca manusia menggunakan encoding, enkripsi, atau variabel dinamis. Tanda mencurigakan: eval(), base64_decode(), str_rot13() di konteks tidak wajar.
🔐
Prinsip: Assume Persistence

Kalau website kamu pernah dikompromis, asumsikan penyerang sudah tanam backdoor. Bukan hanya satu — mungkin beberapa, di beberapa lokasi. Jangan anggap sudah bersih hanya karena sudah hapus satu file mencurigakan. Log yang tidak bisa dimanipulasi adalah aset berharga.

M02 Selesai — Satu Siklus Serangan Lengkap

Kamu sudah melihat serangan dari sudut pandang penyerang: recon, scanning, injeksi, file upload, DDoS, social engineering, sampai maintaining access. Di Modul 3, kita balik ke sisi defender — apa yang harus dilakukan saat insiden terjadi.

M03 · Incident Response

Incident Response

Apa yang harus dilakukan saat website kamu diserang — detik per detik. Dari deteksi tanda-tanda compromise, containment, forensik dasar, eradikasi, sampai post-incident review.

03.1

Tanda-Tanda Website Kamu Sudah Dikompromis

🚨
Skenario yang Lebih Seram dari Deface

Website kamu terlihat normal, berjalan seperti biasa, tidak ada yang aneh di permukaan. Tapi di baliknya, hacker sudah ada yang masuk — mereka diam, hanya mengamati dan pelan-pelan mengambil apa yang mereka butuhkan. Kamu baru tahu setelah tagihan server melonjak atau ada laporan dari pengguna.

Tanda yang Terlihat Langsung

  • Deface — tampilan website berubah, halaman depan diganti konten judol atau pesan dari penyerang
  • Redirect ke website lain — user diarahkan ke website judol atau phishing. Sering hanya terjadi untuk traffic dari Google, bukan akses langsung — supaya lebih susah terdeteksi pemilik
  • Konten asing muncul — link, teks, atau iklan yang tidak pernah kamu pasang, biasanya tersembunyi di footer atau halaman yang jarang dikunjungi
  • Email dari Google Search Console atau hosting — notifikasi bahwa website kamu terdeteksi mengandung malware atau konten berbahaya

Tanda yang Tersembunyi — Ini yang Lebih Berbahaya

  • Performa server menurun tanpa sebab jelas — website tiba-tiba lambat, atau tagihan server melonjak padahal traffic tidak naik. Kemungkinan server dipakai untuk mining, mengirim spam, atau menyerang target lain.
  • Ada file baru yang tidak kamu buat — file dengan nama random seperti x7f2k.php atau file yang mirip nama sistem tapi ada di folder yang tidak seharusnya
  • Ada akun admin baru yang tidak kamu buat — di CMS atau panel admin, tiba-tiba ada user baru dengan level akses tinggi
  • Login dari lokasi atau waktu yang tidak wajar — riwayat login dari negara yang tidak pernah kamu kunjungi, atau jam 3 pagi saat kamu tidur
  • Traffic aneh di log — banyak request ke URL seperti /etc/passwd atau string panjang yang terlihat seperti kode injeksi
  • Email server masuk blacklist — user laporan email dari domain kamu masuk ke spam. Kemungkinan server sudah dipakai untuk spam.
🔍
Cara Cek Kondisi Website Secara Berkala

Dari luar: Cek reputasi di transparencyreport.google.com/safe-browsing, virustotal.com, dan sitecheck.sucuri.net
Satu kebiasaan terpenting: Kenali kondisi normal website kamu — rata-rata traffic, ukuran folder uploads, load time normal. Kamu tidak bisa mendeteksi yang abnormal kalau tidak tahu apa yang normal.

03.2
03.2

Langkah Pertama Saat Diserang — Containment

🔥
Analogi: Kebakaran di Dapur

Kompor tiba-tiba terbakar. Reaksi pertama kebanyakan orang: panik, ambil air, siram. Tapi kalau apinya dari minyak — air membuat api menyebar lebih besar. Yang benar: matikan sumber gas dulu, gunakan APAR, baru evakuasi. Urutan dan metode yang tepat adalah segalanya.

SOP DICER — Urutan yang Benar

Saya pakai akronim ini untuk mudah diingat saat kondisi panik:

D
Detect & Document — Konfirmasi dan catat

Pastikan ini insiden nyata, bukan false alarm. Buka dari browser berbeda, cek status server di panel hosting. Sebelum sentuh apapun, catat waktu deteksi dan screenshot kondisi awal. Ini adalah langkah yang paling sering dilewati tapi paling penting untuk forensik dan laporan.

I
Isolate — Batasi kerusakan

Level 1: blokir IP mencurigakan. Level 2: aktifkan "Under Attack" mode di Cloudflare. Level 3: matikan fitur yang diserang. Level 4: offline sepenuhnya kalau situasi serius. Jangan hapus log dulu — itu bukti forensik kamu.

C
Change Credentials — Ganti semua akses

Asumsi: semua kredensial sudah diketahui penyerang. Urutan: password VPS (dari panel hosting) → SSH key → password database → API key → password CMS → password email dan domain registrar.

E
Eradicate — Bersihkan

Hapus semua backdoor, bersihkan database dari injeksi, tutup celah yang dipakai masuk. Detail di Lesson 03.4.

R
Recover — Pulihkan

Kembali online secara bertahap, monitor lebih ketat dari biasanya, dan notifikasi pihak terkait.

03.3
03.3

Forensik Dasar — Analisa Log & Temukan Jejak Hacker

Forensik digital hanya berarti satu hal: mencari tahu apa yang terjadi berdasarkan bukti yang ada. Kamu tidak butuh tools canggih — kamu hanya perlu tahu di mana bukti tersimpan dan cara membacanya.

Tiga Pertanyaan yang Ingin Dijawab

  1. Bagaimana mereka masuk? — Celah apa yang dieksploitasi? Kalau tidak tahu ini, tidak bisa mencegahnya terjadi lagi.
  2. Sudah seberapa jauh mereka masuk? — Apakah hanya melihat-lihat, atau sudah mengambil data? Menentukan scope pemulihan.
  3. Kapan ini dimulai? — Sejak kapan mereka ada di sistem? Penting untuk tahu backup mana yang masih bersih.

Membaca Log dengan Cepat

bash — Access Log Analysis
# Top 20 IP yang paling banyak akses awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20 # Request ke file sensitif grep -E "(\.env|wp-config|phpmyadmin|\.git|backup\.sql)" /var/log/nginx/access.log | tail -20 # Scanning tools di User-Agent grep -iE "sqlmap|nikto|masscan|nmap|zgrab" /var/log/nginx/access.log # Failed SSH login dari satu IP grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -10

Mencari File Mencurigakan

bash — File Integrity Check
# File PHP baru yang muncul di folder uploads/tmp find /var/www -name "*.php" -newer /var/www/html/index.php 2>/dev/null # File yang berubah dalam 48 jam terakhir find /var/www -type f -mtime -2 -ls 2>/dev/null # Tanda webshell — fungsi eksekusi obfuscated find /var/www -name "*.php" | xargs grep -l "eval(base64_decode" 2>/dev/null find /var/www -name "*.php" | xargs grep -l "system\|exec\|passthru\|shell_exec" 2>/dev/null

Template Dokumentasi Temuan

LAPORAN INVESTIGASI INSIDEN
Tanggal Investigasi
____ / ____ / ________
Dilakukan oleh
________________________________
Waktu awal masuk (perkiraan)
________________________________
Titik masuk (dugaan)
________________________________
File mencurigakan
________________________________
IP mencurigakan
________________________________
Akun mencurigakan
________________________________
Estimasi data terekspos
________________________________
03.4
03.4

Eradikasi & Recovery — Bersihkan dan Pulihkan

Jangan Buru-Buru Online

Terburu-buru di fase ini adalah cara paling pasti bikin insiden terjadi lagi. Eradikasi yang benar butuh waktu — dan itu tidak apa-apa, yang penting komunikasikan dengan baik ke klien.

Dua Pendekatan Recovery

✅ Pendekatan 1: Restore dari Backup Bersih

Lebih cepat dan lebih bersih. Kamu tidak perlu berburu setiap jejak satu per satu.

Syarat: Ada backup bersih sebelum insiden, dan kamu sudah tahu celah yang dipakai sehingga bisa ditutup sebelum restore selesai.

⚠️ Pendekatan 2: Bersihkan di Tempat

Kalau tidak ada backup bersih, atau downtime untuk restore terlalu lama, atau perlu preserve data tertentu.

Risiko: Lebih memakan waktu, dan ada kemungkinan ada yang terlewat.

Checklist Sebelum Kembali Online

  • Semua file backdoor/webshell sudah dihapus dan terverifikasi
  • Database dibersihkan dari injeksi dan user asing
  • Celah yang dipakai masuk sudah ditutup
  • Semua password sudah diganti (server, DB, CMS, panel)
  • SSH key lama sudah dihapus, key baru sudah dipasang
  • API key sudah di-revoke dan diganti
  • 2FA sudah diaktifkan di semua akun penting
🛡️
Khaleed — IR Checklist Interaktif

Saat insiden terjadi, kamu tidak perlu scroll-scroll mencari checklist ini. Khaleed menyediakan IR Checklist interaktif yang bisa diikuti step-by-step saat kondisi panik sekalipun — lengkap dengan setiap item yang bisa dicentang dengan timestamp otomatis dan summary yang bisa dikirim ke klien. Tersedia di tier gratis.

03.5
03.5

Post-Incident Review — Belajar dari Insiden

"Insiden yang tidak menghasilkan pelajaran adalah insiden yang terbuang."

Kamu sudah bayar dengan waktu, stres, dan mungkin uang. Kalau tidak memetik pelajaran, kamu meninggalkan bagian terbesar dari nilainya.

Empat Pertanyaan Utama

  1. Apa yang sebenarnya terjadi? — Tulis timeline lengkap. Gap antara "penyerang masuk" dan "kamu menyadari ada masalah" adalah angka paling penting — makin kecil gap, makin baik sistem deteksi kamu.
  2. Bagaimana mereka masuk? — Dari sini langsung keluar action item konkret: celah apa yang dieksploitasi, apakah bisa dicegah dengan kontrol yang ada?
  3. Kenapa tidak terdeteksi lebih cepat? — Kalau insiden terdeteksi dari laporan user, bukan dari monitoring kamu, itu adalah temuan penting. Ada gap di monitoring yang perlu ditutup.
  4. Apa yang bisa dilakukan berbeda? — Untuk pencegahan, deteksi, dan response. Ini yang menghasilkan perubahan nyata.

Action Items Post-Incident

ACTION ITEMS POST-INCIDENT
Insiden
________________________________
Tanggal Review
____ / ____ / ________
Segera (48 jam)
________________________________
Minggu ini
________________________________
Bulan ini
________________________________
Jadwal audit rutin berikutnya
________________________________
📄
Khaleed — Incident Doc Generator

Setelah insiden selesai ditangani, kamu perlu laporan formal untuk klien atau dokumentasi internal. Khaleed Incident Doc Generator membantu kamu generate laporan profesional secara otomatis — isi form singkat, AI draft laporannya berdasarkan data dari IR Checklist yang sudah kamu jalankan. Export ke PDF siap kirim ke klien.

M03 Selesai — Kamu Siap Menghadapi Skenario Terburuk

Deteksi tanda compromise, langkah containment, forensik dasar, eradikasi, recovery, dan post-incident review — semuanya sudah kamu punya. Di Modul 4, kita bangun sistem pencegahan agar insiden seperti ini tidak perlu terjadi lagi.

M04 · Hardening

Pencegahan & Hardening

Delapan layer pertahanan dari dalam ke luar: input validation, security headers, WAF, domain security, server hardening, patch management, Cloudflare Zero Trust, dan Cloudflare Block Rules.

04.1

Hardening Aplikasi — Input Validation & Sanitasi

⚠️
Aturan Nomor Satu

Jangan pernah percaya input dari user. Tidak pernah. Tidak ada pengecualian. Hampir semua serangan web yang berhasil berawal dari satu hal: aplikasi mempercayai data yang dikirim user tanpa memvalidasinya dulu.

Whitelist vs Blacklist

❌ Blacklist — Lemah

Tolak input yang mengandung karakter berbahaya. Masalahnya: kamu tidak bisa list semua yang berbahaya. Hacker selalu menemukan cara baru: <ScRiPt>, unicode encoding, dan ratusan bypass lainnya.

✅ Whitelist — Kuat

Hanya terima input yang sesuai format yang diharapkan. Definisikan apa yang boleh, bukan apa yang tidak boleh. Pendekatan ini jauh lebih solid.

Validasi Berdasarkan Tipe Data

php — String Validation
$username = trim($_POST['username']); // Panjang 3-50 karakter if (strlen($username) < 3 || strlen($username) > 50) { throw new Exception("Username harus 3-50 karakter"); } // Hanya huruf, angka, underscore, dash if (!preg_match('/^[a-zA-Z0-9_-]+$/', $username)) { throw new Exception("Username mengandung karakter tidak valid"); }
php — File Upload Validation
function validateFileUpload($file, $allowedTypes, $maxSizeMB = 5) { // 1. Cek MIME type yang sebenarnya (bukan dari header — bisa dipalsukan) $finfo = new finfo(FILEINFO_MIME_TYPE); $mimeType = $finfo->file($file['tmp_name']); if (!in_array($mimeType, $allowedTypes)) { throw new Exception("Tipe file tidak diizinkan: {$mimeType}"); } // 2. Generate nama file baru — jangan pakai nama asli dari user $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); $newFilename = bin2hex(random_bytes(16)) . '.' . $ext; return $newFilename; }
nginx — Blokir PHP di folder uploads
location /uploads/ { location ~* \.php$ { deny all; return 403; } }

Sanitasi Output — Escape Sesuai Konteks

php — Output Escaping
// ❌ BERBAHAYA echo $_GET['name']; // ✅ AMAN — escape untuk HTML echo htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8'); // ✅ AMAN — prepared statement untuk SQL $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?"); $stmt->execute([$_POST['email']]);
04.2
04.2

CSP, CORS & Security Headers

Security headers adalah instruksi yang kamu kirim ke browser: "Ini aturan mainnya di website saya." Validasi input melindungi server dari serangan. Security headers melindungi user dari serangan yang terjadi di browser mereka.

HeaderMelindungi dariNilai Rekomendasi
X-Frame-OptionsClickjacking — website di-embed di iframe pihak ketigaSAMEORIGIN
X-Content-Type-OptionsMIME sniffing — browser "menebak" tipe file berbahayanosniff
Referrer-PolicyKebocoran URL sensitif ke website tujuanstrict-origin-when-cross-origin
Permissions-PolicyScript berbahaya yang minta akses kamera/mikrofoncamera=(), microphone=(), geolocation=()
Strict-Transport-SecuritySSL stripping — downgrade HTTPS ke HTTPmax-age=31536000; includeSubDomains
Content-Security-PolicyXSS — script dari sumber tidak sahWhitelist per kebutuhan

Template Lengkap — security-headers.conf

nginx — /etc/nginx/snippets/security-headers.conf
# Sembunyikan versi Nginx server_tokens off; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # CSP — sesuaikan dengan kebutuhan website kamu add_header Content-Security-Policy " default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self'; frame-ancestors 'self'; " always;
bash — Test dan reload Nginx
nginx -t && systemctl reload nginx # Verifikasi headers sudah aktif curl -I https://domainmu.com | grep -E "X-Frame|X-Content|Strict|Content-Security"
🔍
Cek Skor Headers Kamu

Setelah implementasi, cek di securityheaders.com — masukkan domain kamu. Target: Grade A atau A+.

04.3
04.3

WAF & Rate Limiting

Kalau validasi input adalah pagar di dalam rumah, WAF adalah satpam di pintu gerbang.

WAF — Pilihan dan Setup

Cloudflare WAF — Rekomendasi Utama

Cloudflare Dashboard — Custom Rules
# Block request dengan User-Agent kosong (hampir selalu bot/scanner) Rule: (http.user_agent eq "") Action: Block # Block akses ke file sensitif Rule: (http.request.uri.path contains "/.env" or http.request.uri.path contains "/wp-config.php" or http.request.uri.path contains "/.git") Action: Block

Rate Limiting — Batasi Jumlah Request

nginx — Rate Limiting Setup
# Di nginx.conf, dalam blok http {} limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s; limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m; limit_req_zone $binary_remote_addr zone=api:10m rate=30r/m; # Terapkan di location block location /login { limit_req zone=login burst=3 nodelay; limit_req_status 429; } location /api/ { limit_req zone=api burst=10 nodelay; limit_req_status 429; }
⚙️
Checklist WAF & Rate Limiting

☐ Cloudflare aktif dengan proxy enabled (orange cloud)
☐ SSL/TLS mode: Full (Strict)
☐ WAF Managed Rules aktif
☐ Bot Fight Mode aktif
☐ Rate limit zone didefinisikan di nginx.conf
☐ Rate limit ketat di /login dan /admin
☐ Test: coba login salah 10x → harus kena rate limit

04.4
04.4

Domain & DNS Security

🌐
Domain adalah Pintu Masuk ke Segalanya

Kamu bisa hardening server sampai sempurna, tapi kalau domain kamu dibajak — semua itu tidak ada artinya. Seorang developer pernah mengalami kasus domain diambil alih lewat akun registrar yang tidak punya 2FA. Dalam hitungan jam semua traffic diarahkan ke server palsu dan semua user memberikan credentials mereka ke penyerang.

Amankan Akun Registrar

  • Aktifkan 2FA — gunakan authenticator app (Google Authenticator, Authy), bukan SMS yang bisa di-intercept via SIM swap
  • Aktifkan Domain Lock — mencegah transfer domain tanpa otorisasi eksplisit dari kamu
  • Gunakan email registrar yang aman — email dengan password unik dan 2FA aktif, bukan email bisnis umum

SSL/TLS — Konfigurasi yang Benar

bash — Setup Let's Encrypt
# Install Certbot apt install certbot python3-certbot-nginx -y # Generate certificate certbot --nginx -d domainmu.com -d www.domainmu.com # Verifikasi auto-renewal certbot renew --dry-run

Email Security — SPF, DKIM, DMARC

Tanpa konfigurasi ini, siapapun bisa kirim email yang seolah-olah berasal dari domain kamu.

DNS Records
# SPF — server mana yang boleh kirim email atas nama domain kamu Name: @ Type: TXT Value: v=spf1 include:_spf.google.com ~all # DMARC — policy untuk email yang gagal SPF/DKIM Name: _dmarc Type: TXT Value: v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@domainmu.com; pct=100
📧
Cek Konfigurasi Email Security

Gunakan mxtoolbox.com/emailhealth/domainmu.com untuk cek SPF, DKIM, dan DMARC sekaligus.

04.5
04.5

Server Hardening — SSH, Firewall & Privilege

Server yang baru diprovision itu seperti rumah baru tanpa kunci, tanpa pagar, pintu terbuka semua. Hardening adalah proses memasang semua pengamanan itu.

⚠️
Urutan Hardening Penting

Ikuti urutan ini dengan benar agar tidak lock diri sendiri keluar dari server: Update sistem → Setup user non-root → Hardening SSH → Setup firewall → Install Fail2ban → Konfigurasi lanjutan

1. Update Sistem Pertama Kali

bash
apt update && apt upgrade -y apt install -y ufw fail2ban unattended-upgrades curl git

2. Hardening SSH

sshd_config — Konfigurasi yang Direkomendasikan
# Ganti port dari default 22 Port 2222 # Nonaktifkan login root via SSH PermitRootLogin no # Nonaktifkan password authentication — hanya key PasswordAuthentication no PubkeyAuthentication yes # Maksimum percobaan auth per koneksi MaxAuthTries 3 # Hanya izinkan user tertentu SSH AllowUsers namauser

3. Setup Firewall dengan UFW

bash
ufw default deny incoming ufw default allow outgoing ufw allow 2222/tcp comment 'SSH custom port' ufw allow 80/tcp comment 'HTTP' ufw allow 443/tcp comment 'HTTPS' ufw enable ufw status verbose

4. Setup Fail2ban

jail.local
[DEFAULT] bantime = 3600 # Ban 1 jam findtime = 600 # Dalam 10 menit maxretry = 5 # Kalau gagal 5 kali [sshd] enabled = true port = 2222 # Sesuaikan dengan port SSH kamu maxretry = 3 # Lebih ketat untuk SSH bantime = 86400 # Ban 24 jam untuk SSH
04.6
04.6

Bug Patch & Manajemen Dependensi

⏱️
Fakta yang Perlu Kamu Tahu

Ketika patch dirilis, dalam hitungan jam sudah ada bot otomatis yang scan internet untuk mencari sistem yang belum di-patch. Patching bukan soal sempurna — soal lebih cepat dari bot scanner.

Apa yang Perlu Di-Patch

bash — OS & Web Server Update
# Cek security updates yang tersedia apt list --upgradable 2>/dev/null | grep -i security # Apply semua update apt update && apt upgrade -y
bash — Dependency Audit
# PHP/Composer — cek CVE di dependencies composer audit composer outdated # Node.js/npm npm audit npm audit fix # Kalau ada critical/high severity — ini prioritas
FrekuensiYang Perlu Dilakukan
MingguanCek security advisory untuk tech stack utama, composer audit / npm audit
BulananOS update, web server update, PHP update, dependency update (setelah test di staging)
Segera (CVE kritis)Evaluasi apakah teraffect, test patch di staging, apply di production dalam 48-72 jam
04.7
04.7

Cloudflare Zero Trust — Proteksi Halaman Internal

Banyak yang lupa: halaman-halaman internal seperti staging site, panel admin, phpMyAdmin, tools internal — semua ini butuh proteksi khusus yang lebih dari sekadar basic auth.

Cloudflare Access adalah solusi Zero Trust yang bisa dipasang di depan URL apapun tanpa mengubah kode aplikasi — dan gratis untuk 50 user pertama.

Cara Kerjanya

1
User Coba Akses staging.domainmu.com

Cloudflare Access mencegat request sebelum sampai ke server kamu

2
Halaman Login Cloudflare Ditampilkan

User verifikasi identitas via email OTP, Google, atau GitHub

3
Akses Diberikan atau Ditolak

Kalau email ada di daftar yang diizinkan → akses. Kalau tidak → ditolak, titik. Setiap akses tercatat dengan detail.

Basic AuthCloudflare Access
Password managementManual, rawan dibagi sembarangTidak ada password — pakai email/OTP
Audit trailTidak adaAda — siapa akses kapan tercatat
Revoke aksesHarus ganti password (semua kena)Hapus satu email, yang lain tidak terganggu
Brute forceTergantung konfigurasi serverDitangani Cloudflare sebelum sampai server
HargaGratisGratis untuk 50 user pertama
04.8
04.8

Cloudflare Block Rules — Blokir File & Direktori Berbahaya

Filosofi lesson ini: hardening maksimal, perubahan kode minimal. Cloudflare sebagai firewall layer pertama sebelum request sampai ke server kamu.

Setiap hari, bot scanner mencoba akses ke /.env, /wp-config.php, /phpinfo.php, /.git/config, dan ratusan path lainnya. Dengan Cloudflare Custom Rules, semua ini diblokir di edge Cloudflare — tidak pernah sampai ke server kamu.

Custom Rules yang Perlu Dibuat

Cloudflare Expression — Rule 1: Config & Credential Files
(http.request.uri.path contains "/.env") or (http.request.uri.path contains "/wp-config.php") or (http.request.uri.path contains "/.htpasswd") or (http.request.uri.path contains "/config.php") or (http.request.uri.path contains "/.aws/credentials") Action: Block
Cloudflare Expression — Rule 2: PHP Execution di Upload Dirs
(http.request.uri.path matches "(?i)/uploads?/.*\.(php|php3|phtml|shtml|cgi|sh)$") or (http.request.uri.path matches "(?i)/files?/.*\.(php|phtml)$") or (http.request.uri.path matches "(?i)/wp-content/uploads/.*\.(php|phtml)$") Action: Block
Cloudflare Expression — Rule 3: WordPress Attack Surface
(http.request.uri.path contains "/xmlrpc.php") or (http.request.uri.path contains "/wp-json/wp/v2/users") or (http.request.uri.path eq "/readme.html") or (http.request.uri.path eq "/license.txt") Action: Block
Verifikasi Rules Bekerja

curl -I https://domainmu.com/.env → harus dapat 403 Forbidden dari Cloudflare
curl -I https://domainmu.com/phpinfo.php → harus dapat 403 Forbidden
curl -I https://domainmu.com/.git/config → harus dapat 403 Forbidden

M04 Selesai — Semua Layer Pertahanan Aktif

Input validation, security headers, WAF, domain security, server hardening, patch management, Zero Trust, dan Cloudflare Block Rules — kamu sekarang punya pertahanan berlapis dari semua arah. Di Modul 5, kita setup monitoring agar kamu tahu lebih cepat dari siapapun kalau ada yang tidak beres.

M05 · Monitoring

Monitoring & Alerting

Kamu tidak bisa melindungi apa yang tidak kamu lihat. Setup log management, alerting ke Telegram, uptime monitoring, anomaly detection, dan strategi backup 3-2-1.

05.1

Kenapa Monitoring Itu Wajib, Bukan Opsional

📊
Cerita Nyata

Sebuah website e-commerce kena hack. Data ribuan pelanggan bocor. Pemiliknya baru tahu tiga minggu setelah kejadian — dari laporan pelanggan yang tiba-tiba dapat spam. Penyerang sudah ada di dalam sistem selama 23 hari, masuk lewat plugin outdated, pasang backdoor, dan pelan-pelan exfiltrate data setiap malam. Website tampak berjalan normal. Tidak ada alert. Tidak ada yang cek log. Kalau ada monitoring yang proper, ini bisa terdeteksi di hari pertama.

Tiga Lapis Monitoring

1
Availability Monitoring

Apakah website bisa diakses? Cek apakah website respond dan mengembalikan status code yang benar. Kalau down, langsung alert. Yang paling basic tapi paling sering tidak ada.

2
Log Monitoring

Apa yang sedang terjadi di dalam? Log adalah rekaman semua aktivitas di server dan aplikasi. Di sinilah jejak penyerang tersimpan — kalau kamu tahu cara membacanya. Yang paling sering dilewati.

3
Anomaly Detection

Ada yang tidak biasa? Sistem mendeteksi pola yang menyimpang dari normal: lonjakan traffic tiba-tiba, banyak login gagal dari satu IP, file yang berubah tanpa sebab. Level monitoring tertinggi.

~200
hari rata-rata breach tidak terdeteksi tanpa monitoring yang proper
Rp0
biaya setup uptime monitoring dasar yang berfungsi dengan baik
🛡️
Khaleed — Platform Monitoring & Security Kamu
Bonus untuk pembeli FSAH · Free Tier tersedia

Alih-alih setup semuanya manual dari nol, Khaleed menyediakan semua lapis monitoring ini dalam satu platform. Dari uptime monitoring, passive security scan, log review checklist, sampai alerting — semuanya sudah terintegrasi dan siap dipakai.

Sebagai pembeli FSAH, kamu mendapatkan akses ke Khaleed free tier yang mencakup:

Passive Security Scan (headers, SSL, DNS, CVE) IR Checklist Interaktif Log Review Checklist Guided next steps dari hasil scan Uptime Monitoring (interval 10 menit) Alert Email & Telegram
05.2
05.2

Setup Log Management — Centralized Logging

Log adalah blackbox pesawat kamu. Kamu akan paham betapa pentingnya ini saat crash terjadi.

Tiga Log yang Wajib Dipantau

LogLokasi DefaultYang Dipantau
Access Log/var/log/nginx/access.logSemua request masuk — IP, URL, method, status code, user-agent
Auth Log/var/log/auth.logLogin SSH, sudo, autentikasi sistem. Brute force paling kelihatan di sini.
Error Log/var/log/nginx/error.logError server dan aplikasi. Injection attempt sering muncul di sini.
nginx — Format Log yang Informatif
http { log_format detailed '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '$request_time'; access_log /var/log/nginx/access.log detailed; error_log /var/log/nginx/error.log warn; }

Backup Log ke Lokasi Terpisah

bash — Backup log harian ke cloud storage
cat > /usr/local/bin/backup-logs.sh << 'EOF' #!/bin/bash DATE=$(date +%Y-%m-%d) HOSTNAME=$(hostname) tar -czf /tmp/logs-${HOSTNAME}-${DATE}.tar.gz /var/log/nginx/ aws s3 cp /tmp/logs-${HOSTNAME}-${DATE}.tar.gz s3://nama-bucket/logs/ rm -f /tmp/logs-${HOSTNAME}-${DATE}.tar.gz EOF # Jalankan setiap hari jam 1 pagi echo "0 1 * * * root /usr/local/bin/backup-logs.sh" >> /etc/cron.d/log-backup

Membaca Log dengan Cepat

bash — Quick Log Analysis
# Top 20 IP yang paling banyak akses awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20 # Scanning tools di User-Agent grep -iE "sqlmap|nikto|masscan|nmap|zgrab" /var/log/nginx/access.log # Probing ke file sensitif grep -E "(\.env|wp-config|phpmyadmin|\.git|backup\.sql)" /var/log/nginx/access.log | tail -20 # Failed SSH login grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -10
05.3
05.3

Alert via Telegram & Email

Monitoring yang tidak punya alerting sama saja dengan alarm kebakaran yang tidak berbunyi.

Setup Telegram Bot

  1. Buka Telegram, cari @BotFather
  2. Kirim /newbot, masukkan nama dan username bot
  3. Simpan Bot Token yang diberikan
  4. Chat bot kamu, lalu buka https://api.telegram.org/botTOKEN/getUpdates untuk dapat Chat ID
bash — Script Alert Telegram
cat > /usr/local/bin/telegram-alert.sh << 'SCRIPT' #!/bin/bash TELEGRAM_TOKEN="ISI_TOKEN_KAMU" TELEGRAM_CHAT_ID="ISI_CHAT_ID_KAMU" LEVEL="${1:-INFO}" MESSAGE="${2:-Test}" case $LEVEL in "CRITICAL") EMOJI="🔴" ;; "WARNING") EMOJI="🟡" ;; "INFO") EMOJI="🟢" ;; esac TEXT="${EMOJI} [${LEVEL}] $(hostname) ━━━━━━━━━━━━━━━━━ ${MESSAGE} ━━━━━━━━━━━━━━━━━ 🕐 $(date '+%d/%m/%Y %H:%M:%S')" curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \ -d chat_id="${TELEGRAM_CHAT_ID}" \ -d text="${TEXT}" > /dev/null 2>&1 SCRIPT chmod +x /usr/local/bin/telegram-alert.sh

5 Alert Rules yang Perlu Aktif

AlertTriggerInterval CekLevel
SSH Bruteforce>10 failed login dalam 5 menitSetiap 5 menitCritical
Disk Usage TinggiDisk >85%Setiap 6 jamWarning
File PHP Baru di UploadsFile .php baru di folder uploads/tmpSetiap 30 menitCritical
SSL ExpirySSL <30 hari expiredSetiap hariWarning
Nginx DownService nginx tidak berjalanSetiap 5 menitCritical
🔔
Khaleed — Monitoring Agent

Kalau kamu tidak ingin setup semua script ini secara manual, Khaleed Monitoring Agent menangani ini semua secara otomatis. Berbasis Cloudflare Workers, agent melakukan check ke domain kamu setiap 10 menit (free tier) atau 5 menit (paid tier) dari multiple region — dan langsung kirim notifikasi ke email dan Telegram kamu jika terdeteksi down atau SSL hampir expired. Tidak perlu setup script bash apapun.

05.4
05.4

Uptime Monitoring & Anomaly Detection

Uptime Monitoring — Setup dalam 5 Menit

🟢
Better Stack
Gratis untuk 50 monitor, cek setiap 5 menit, alert ke email/Telegram, include status page. Rekomendasi utama.
🔵
Better Uptime
10 monitor gratis, interval 3 menit, UI yang bagus, ada fitur status page bawaan.
🟡
UptimeRobot
50 monitor gratis, interval 5 menit, sudah sangat populer dan reliable.
🔑
Lebih dari Sekadar Up/Down

Selain cek status code, setup keyword monitoring — monitor bahwa kata kunci tertentu (nama brand kamu) ada di halaman. Kalau website kena deface dan kata kunci itu hilang, kamu langsung dapat alert meski status code masih 200 OK.

Anomaly Detection

bash — Traffic Spike Detection
# Hitung request dalam 5 menit terakhir CURRENT=$(awk -v d="$(date --date='5 minutes ago' '+%d/%b/%Y:%H:%M')" \ '$4 > "["d' /var/log/nginx/access.log | wc -l) # Alert kalau traffic 3x lebih tinggi dari baseline if [ "$CURRENT" -gt "$(( BASELINE * 3 ))" ]; then /usr/local/bin/telegram-alert.sh "WARNING" "Traffic Spike: ${CURRENT} req/5min" fi
📡
Khaleed — Uptime & SSL Monitoring Terintegrasi

Khaleed Monitoring Agent menangani uptime monitoring dan SSL expiry reminder secara otomatis dari infrastruktur Cloudflare Workers — check dari multiple region sekaligus untuk eliminasi false positive. Tersedia di paid tier dengan interval 5 menit, notifikasi ke email dan Telegram bot yang sudah terintegrasi di platform.

05.5
05.5

Backup Berkala dengan Strategi 3-2-1

💾
Prinsip yang Tidak Bisa Ditawar

"Backup yang tidak pernah di-test adalah backup yang tidak ada." Backup adalah last line of defense — dari ransomware, deface, human error, sampai hardware failure.

Strategi 3-2-1

3️⃣
3 Copy Data
Satu yang aktif di production, dua backup. Kalau hanya satu backup, kamu belum punya backup yang sesungguhnya.
2️⃣
2 Media Berbeda
Misalnya: satu snapshot di server yang sama, satu di cloud storage terpisah (S3, Backblaze, Google Drive). Jangan taruh semua di satu tempat.
1️⃣
1 Offsite
Minimal satu backup harus berada di lokasi atau provider berbeda. Kalau datacenter kebakaran, backup offsite yang menyelamatkan.
bash — Script Backup Otomatis Harian
cat > /usr/local/bin/daily-backup.sh << 'SCRIPT' #!/bin/bash DATE=$(date +%Y%m%d-%H%M) BACKUP_DIR="/backup" # 1. Database backup mysqldump --all-databases -u root -p"PASSWORD" 2>/dev/null | \ gzip > "${BACKUP_DIR}/db-${DATE}.sql.gz" # 2. Files backup tar -czf "${BACKUP_DIR}/files-${DATE}.tar.gz" \ /var/www/html/uploads /var/www/html/.env /var/www/html/storage # 3. Upload ke cloud aws s3 cp "${BACKUP_DIR}/db-${DATE}.sql.gz" s3://nama-bucket/ --quiet # 4. Hapus backup > 30 hari find "$BACKUP_DIR" -name "*.gz" -mtime +30 -delete # 5. Alert sukses /usr/local/bin/telegram-alert.sh "INFO" "✅ Backup harian selesai" SCRIPT # Jalankan setiap hari jam 2 pagi echo "0 2 * * * root /usr/local/bin/daily-backup.sh" >> /etc/cron.d/backup

Test Restore — Wajib Dilakukan

bash — Test Restore Database
# 1. Buat database test mysql -u root -p -e "CREATE DATABASE test_restore;" # 2. Restore dari backup gunzip -c /backup/db-20240115-0200.sql.gz | mysql -u root -p test_restore # 3. Verifikasi data ada mysql -u root -p test_restore -e "SHOW TABLES; SELECT COUNT(*) FROM users;" # 4. Hapus database test mysql -u root -p -e "DROP DATABASE test_restore;"
M05 Selesai — Monitoring Stack Lengkap

Log management, alerting Telegram, uptime monitoring, anomaly detection, dan backup 3-2-1 — semuanya sudah ada. Modul ini yang paling sering jadi pembeda antara website yang survive insiden dan yang tidak. Di Modul 6, kita satukan semuanya dalam bentuk checklist, SOP, dan template laporan yang bisa langsung dipakai.

M06 · Checklist & SOP

Checklist, SOP & Laporan

Tools operasional yang langsung bisa dipakai: pre-launch checklist, audit bulanan, SOP incident response, security score card, dan template laporan profesional untuk klien.

06.1

Pre-Launch Security Checklist

🚀
Pertanyaan Sebelum Website Live

Saya pernah dapat telepon dari klien jam 11 malam — website portal berita mereka baru saja live sore tadi, dan malam itu sudah kena deface. Masalahnya sepele: password database masih pakai default dari masa testing. Tidak ada yang mengecek. Tidak ada checklist. Langsung launch. Satu item yang terlewat = satu pintu yang terbuka untuk hacker.

Gunakan checklist ini setiap kali launch website baru, atau setiap kali deploy fitur besar. 🔴 Wajib tidak ada alasan untuk skip. 🟡 Sangat direkomendasikan. 🟢 Nice to have.

Bagian 1 — Domain & SSL

Domain & SSL Checklist
Wajib   SSL/TLS Certificate aktif dan valid ssllabs.com → Grade A+
Wajib   HTTP otomatis redirect ke HTTPS
Wajib   HSTS header aktif max-age=31536000
Rekomendasi   WWW dan non-WWW redirect ke satu arah
Rekomendasi   DNS tidak expose informasi sensitif atau subdomain lama

Bagian 2 — Security Headers

Security Headers Checklist
Wajib   X-Frame-Options: SAMEORIGIN
Wajib   X-Content-Type-Options: nosniff
Rekomendasi   Content Security Policy dikonfigurasi (minimal level 1)
Rekomendasi   Referrer-Policy dikonfigurasi
Rekomendasi   server_tokens off — versi Nginx tidak tampil
Nice to have   Skor di securityheaders.com minimal B

Bagian 3 — Konfigurasi Server

Server Configuration Checklist
Wajib   SSH tidak menggunakan password authentication
Wajib   Login root via SSH dinonaktifkan
Wajib   Firewall aktif — hanya port 22/80/443 terbuka
Rekomendasi   Port SSH diganti dari default (22)
Rekomendasi   Fail2ban atau rate limiting untuk SSH aktif

Bagian 4 — Aplikasi & Kode

Application Checklist
Wajib   Tidak ada kredensial hardcoded di dalam kode
Wajib   Mode debug/development dimatikan di production (APP_DEBUG=false)
Wajib   Semua input user divalidasi dan disanitasi di sisi server
Rekomendasi   Directory listing dinonaktifkan (autoindex off)
Rekomendasi   File sensitif (.env, .git, backup.sql) tidak bisa diakses publik

Bagian 5 — Backup & Monitoring

Backup & Monitoring Checklist
Wajib   Backup otomatis sudah dikonfigurasi sebelum launch
Wajib   Backup pernah ditest restore setidaknya sekali
Rekomendasi   Backup disimpan di lokasi terpisah dari server utama
Rekomendasi   Uptime monitoring aktif sebelum launch
Rekomendasi   Error logging aktif dan bisa diakses
🛡️
Khaleed — Jalankan Passive Scan Sebelum Launch

Sebelum website kamu live, jalankan Khaleed Passive Scan untuk cek kondisi keamanan secara menyeluruh — headers, SSL, DNS, CVE, subdomain exposure, dan file sensitif yang terekspos. Hasilnya terstruktur per kategori dengan severity dan guided next steps. Tersedia gratis, tidak butuh verifikasi domain.

06.2
06.2

Monthly Security Audit Checklist

Keamanan bukan event. Keamanan adalah kebiasaan. Jadwalkan satu jam di awal setiap bulan, masukkan ke kalender, dan treat ini seperti meeting penting — karena memang penting.

Estimasi waktu: 30-60 menit per bulan untuk website ukuran sedang.

Bagian 1 — Akun & Akses

Audit Akun & Akses
Review semua user yang punya akses SSH ke server
Hapus akun developer yang sudah tidak aktif bekerja dengan kamu
Review akun admin di CMS — ada yang tidak kamu kenal?
Hapus akun demo/test yang masih aktif dari masa development

Bagian 2 — Update & Patch

Update & Patch Audit
OS update diterapkan (apt list --upgradable)
Dependencies diaudit (composer audit / npm audit) — tidak ada critical/high yang belum di-fix
Plugin CMS yang tidak dipakai sudah dihapus (bukan cuma deactivate)
Plugin yang tidak ada update 6+ bulan sudah dievaluasi untuk diganti

Bagian 3 — SSL & Domain

SSL & Domain Audit
SSL certificate tidak expired dalam 30 hari ke depan
Auto-renewal certbot sudah dikonfirmasi berjalan (certbot renew --dry-run)
Domain expiry dicek di registrar — tidak expired dalam 60 hari
DNS record snapshot disimpan dan dibandingkan dengan bulan lalu

Bagian 4 — Log Review (10 menit)

bash — Monthly Log Review Commands
# IP yang paling banyak hit (potensi scanner) awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20 # Request ke URL mencurigakan grep -E "(\.\.\/|wp-admin|phpmyadmin|eval\(|base64)" /var/log/nginx/access.log | tail -50 # Failed SSH login grep "Failed password" /var/log/auth.log | tail -50 # Successful SSH login — siapa yang masuk? grep "Accepted" /var/log/auth.log | tail -20

Bagian 5 — File Integrity

File Integrity Audit
Tidak ada file PHP baru yang tidak dikenal di folder uploads/tmp/cache
Permission file sudah benar — file: 644, folder: 755, config sensitif: 600
Backup terbaru ada dan ukurannya wajar (tidak tiba-tiba jauh lebih kecil)
Test restore sample dilakukan minimal sekali bulan ini

Template Dokumentasi Audit Bulanan

AUDIT KEAMANAN BULANAN
Tanggal
____ / ____ / ________
Domain
________________________________
Dilakukan oleh
________________________________
SSL Expiry
________________________________
Domain Expiry
________________________________
Temuan di Log
________________________________
Tindak Lanjut
________________________________
Status Keseluruhan
☐ AMAN    ☐ PERLU PERHATIAN    ☐ KRITIS
06.3
06.3

SOP Incident Response

🚨
Print Halaman Ini

Saat website kamu kena hack, kamu tidak akan punya waktu untuk berpikir jernih. SOP ini harus sudah ada sebelum insiden terjadi. Print halaman ini. Simpan di tempat yang mudah diakses — bukan cuma di server yang mungkin sedang tidak bisa diakses.

🛡️
Khaleed — IR Checklist Interaktif

Daripada mengikuti SOP di kertas saat kondisi panik, gunakan Khaleed IR Checklist — panduan step-by-step interaktif yang bisa diikuti langsung dari HP atau laptop. Setiap item bisa dicentang dengan timestamp otomatis, ada severity selector di awal, dan summary bisa langsung di-export ke Incident Doc Generator untuk laporan klien. Tersedia di free tier.

Definisi Tingkat Keparahan

LevelKondisiTarget Response Time
KritisData aktif dicuri, penyerang masih di dalam, deface aktif, ransomwareSegera — kurang dari 15 menit
TinggiWebsite down total, ada backdoor tapi tidak aktif, login dari IP asingKurang dari 1 jam
SedangFile mencurigakan tapi tidak aktif, anomali di log, SSL bermasalahKurang dari 24 jam

FASE 1 — Deteksi & Dokumentasi (0–15 menit)

Form Dokumentasi Awal — Isi Sebelum Sentuh Apapun
Waktu Deteksi
____ / ____ / ________   Jam: ____:____
Dilaporkan oleh
☐ Uptime monitor   ☐ User laporan   ☐ Saya temukan sendiri
Jenis Insiden
☐ Deface   ☐ DDoS   ☐ Data breach   ☐ Malware   ☐ Account compromise   ☐ Lainnya
Tingkat Keparahan
☐ Kritis   ☐ Tinggi   ☐ Sedang
Screenshot kondisi awal
☐ Sudah diambil dan disimpan
Log sudah di-backup
☐ Sudah dicopy ke /tmp/incident-[tanggal]

FASE 2 — Containment (15–45 menit)

  • Blokir IP penyerang yang teridentifikasi dari log via UFW atau Cloudflare
  • Evaluasi: perlu offline atau tidak? (lihat kriteria di atas)
  • Aktifkan "Under Attack" mode di Cloudflare kalau ada serangan aktif
  • Jangan hapus log — ini bukti forensik

FASE 3 — Ganti Semua Kredensial

Credential Replacement Checklist
Password server/VPS (dari panel hosting — bukan dari dalam server)
SSH key — generate baru, hapus semua authorized_keys lama
Password database — update juga di file konfigurasi aplikasi
Semua API key — revoke semua, generate baru
Password CMS — semua akun admin
Password email dan domain registrar

FASE 4 — Investigasi & Eradikasi

Investigasi & Eradikasi Checklist
Analisa log untuk temukan titik masuk
Semua file backdoor/webshell sudah dihapus
Database dibersihkan dari injeksi dan user asing
Celah yang dipakai masuk sudah DITUTUP sebelum kembali online
Semua cron job mencurigakan sudah dihapus
Authorized_keys dibersihkan dari key yang tidak dikenal

FASE 5 — Recovery

  • Scan malware: sitecheck.sucuri.net (dari luar)
  • Cek Google Safe Browsing sebelum online
  • Kembalikan online secara bertahap — monitor log real-time selama 2 jam pertama
  • Kirim notifikasi ke klien bahwa layanan sudah pulih

Kontak Darurat — Isi Sekarang, Sebelum Terjadi

Kontak Darurat
Hosting Provider
________________________________
Nomor Support 24/7
________________________________
Domain Registrar
________________________________
Kontak Tim Internal
________________________________
06.4
06.4

Security Score Card

Security Score Card adalah cara mengukur kondisi keamanan website secara objektif — tidak berdasarkan perasaan, tapi berdasarkan checklist yang terstruktur.

🎯 Untuk Diri Sendiri

Audit mandiri setiap bulan. Lihat tren — apakah skor naik atau turun? Bagian mana yang masih lemah?

💼 Untuk Klien

Presentasikan kondisi keamanan secara profesional. Diferensiasi besar kalau kamu freelancer — klien bisa melihat nilai pekerjaan kamu.

Sistem Penilaian

Isi setiap item dengan nilai: 2 = sudah ada dan berfungsi baik, 1 = ada tapi belum optimal, 0 = belum ada.

Domain & SSL
__ / 20
SSL/TLS grade A+
0 / 1 / 2
HSTS aktif dengan includeSubDomains
0 / 1 / 2
2FA di akun registrar domain
0 / 1 / 2
SPF, DKIM, DMARC dikonfigurasi
0 / 1 / 2
Tidak ada subdomain abandoned yang aktif
0 / 1 / 2
Security Headers
__ / 20
X-Frame-Options dikonfigurasi
0 / 1 / 2
X-Content-Type-Options: nosniff
0 / 1 / 2
Content Security Policy (minimal level 1)
0 / 1 / 2
Referrer-Policy dikonfigurasi
0 / 1 / 2
Versi server tidak ditampilkan
0 / 1 / 2
Server & Infrastruktur
__ / 25
SSH key-only, password auth dinonaktifkan
0 / 1 / 2
Root login via SSH dinonaktifkan
0 / 1 / 2
Firewall aktif, hanya port yang diperlukan terbuka
0 / 1 / 2
Fail2ban aktif dan dikonfigurasi
0 / 1 / 2
Auto security updates aktif
0 / 1 / 2
WAF aktif (Cloudflare atau ModSecurity)
0 / 1 / 2
Block rules untuk file sensitif di Cloudflare
0 / 1 / 2
Aplikasi & Web
__ / 20
Input validation di sisi server untuk semua form
0 / 1 / 2
Prepared statements untuk semua query database
0 / 1 / 2
Debug mode off di production
0 / 1 / 2
File sensitif tidak bisa diakses publik
0 / 1 / 2
Dependencies tidak ada CVE critical/high yang belum di-fix
0 / 1 / 2
Monitoring & Response
__ / 15
Uptime monitoring aktif dengan alert
0 / 1 / 2
Log management dan backup log aktif
0 / 1 / 2
Backup otomatis berjalan dengan strategi 3-2-1
0 / 1 / 2
Backup pernah ditest restore dalam 30 hari terakhir
0 / 1 / 2
SOP Incident Response sudah ada dan diketahui tim
0 / 1 / 2

Interpretasi Skor

SkorGradeStatusArtinya
85–100AAmanSetup keamanan solid, pertahankan dan audit rutin
70–84BBaikAda beberapa gap kecil, prioritaskan perbaikan
50–69CPerlu PerhatianGap signifikan, website rentan terhadap serangan umum
30–49DBerisikoCelah besar yang perlu diperbaiki segera
0–29FKritisHampir tidak ada keamanan — hentikan semua lalu hardening
📊
Khaleed — Passive Scan untuk Data Score Card yang Akurat

Daripada mengisi score card ini secara manual berdasarkan ingatan, jalankan Khaleed Passive Scan ke domain kamu — hasilnya langsung memberikan data akurat untuk mengisi score card di atas: grade SSL, security headers yang ada/tidak ada, CVE yang ditemukan, dan subdomain yang terekspos. Semua terstruktur per kategori dengan severity. Gratis, tidak butuh registrasi domain.

06.5
06.5

Template Laporan Vulnerability untuk Klien

Pekerjaan bagus yang tidak terdokumentasi = pekerjaan yang tidak ada. Saya pernah hardening server klien selama seminggu — hasilnya bagus. Tapi klien cuma lihat: "Oh, website-nya jalan lagi ya." Mereka tidak tahu apa yang saya lakukan, tidak mengerti nilainya, dan mempertanyakan invoice-nya. Sejak saat itu, saya selalu buat laporan. Laporan yang baik = klien yang happy = repeat order + referral.

Template A — Laporan Vulnerability Assessment

Untuk sebelum/sesudah audit keamanan rutin.

HEADER LAPORAN
Jenis Dokumen
LAPORAN VULNERABILITY ASSESSMENT · Website Security Audit
Disiapkan oleh
________________________________
Untuk (Klien)
________________________________
Domain yang Diaudit
________________________________
Tanggal Audit
____ / ____ / ________
Klasifikasi
CONFIDENTIAL
RINGKASAN EKSEKUTIF — Bagian ini untuk pemilik bisnis, bukan untuk developer
Skor Keamanan
____ / 100     Grade: ____
Temuan Kritis
____ temuan Kritis
Temuan Tinggi
____ temuan Tinggi
Risiko Bisnis Jika Tidak Ditangani
________________________________
Rekomendasi Prioritas
1. ________________________________
2. ________________________________
3. ________________________________
FORMAT DETAIL TEMUAN — Ulangi untuk setiap temuan
Judul Temuan
________________________________
Tingkat Risiko
☐ Kritis   ☐ Tinggi   ☐ Sedang   ☐ Info
Lokasi / URL
________________________________
Deskripsi (bahasa awam)
________________________________
Dampak Bisnis
________________________________
Bukti / Evidence
________________________________
Rekomendasi Perbaikan
________________________________

Template B — Laporan Insiden

Digunakan setelah insiden terjadi dan sudah ditangani.

LAPORAN INSIDEN KEAMANAN
Nomor Insiden
INC-____-____
Tipe Insiden
________________________________
Tingkat
☐ Kritis   ☐ Tinggi   ☐ Sedang
Waktu Deteksi
____ / ____ / ________   Jam: ____:____
Waktu Resolved
____ / ____ / ________   Jam: ____:____
Total Downtime
____ jam ____ menit
Data Terekspos?
☐ Tidak ada   ☐ Ya — detail: ________________
Timeline Kejadian
________________________________
Penyebab Utama (Root Cause)
________________________________
Tindakan yang Diambil
________________________________
Langkah Pencegahan ke Depan
________________________________
📄
Khaleed — Generate Laporan Profesional Otomatis

Template di atas bisa diisi manual dan dicetak. Tapi kalau ingin output yang lebih profesional dan cepat, Khaleed Incident Doc Generator membantu kamu generate laporan insiden dalam format PDF branded — cukup isi form singkat dan AI draft laporannya secara otomatis berdasarkan data dari IR Checklist yang sudah dijalankan. Untuk Vulnerability Assessment Report, Khaleed Active Scan (paid tier) menghasilkan laporan lengkap dengan Attack Surface Map, prioritized action list, dan PDF siap kirim ke klien.

Tips Menulis Laporan yang Baik

  1. Tulis untuk dua audiens sekaligus — Ringkasan eksekutif untuk pemilik bisnis (non-teknis), detail teknis untuk developer yang akan implementasi.
  2. Fokus ke dampak bisnis, bukan jargon teknis — Bukan: "HSTS header tidak terkonfigurasi menyebabkan vulnerability terhadap SSL stripping attack." Tapi: "Koneksi ke website ini bisa disadap di jaringan publik seperti WiFi kafe, memungkinkan pencurian password pengguna."
  3. Berikan rekomendasi yang actionable — Bukan: "Perbaiki konfigurasi keamanan." Tapi: "Tambahkan baris server_tokens off; di file /etc/nginx/nginx.conf, lalu restart nginx."
  4. Sertakan estimasi effort — Klien perlu tahu berapa lama dan berapa biaya untuk fix setiap item. Ini juga membantu mereka prioritize.
  5. Follow up setelah implementasi — Tawarkan audit ulang setelah semua rekomendasi diimplementasikan. Ini kesempatan untuk tunjukkan improvement.
🎉
Selamat — FSAH Field Manual Selesai

Kamu sekarang punya pre-launch checklist, monthly audit checklist, SOP incident response, security score card, dan template laporan profesional. Yang membedakan kamu dari developer biasa: kamu tidak cuma bisa bikin website — kamu bisa membuktikan dan mendokumentasikan bahwa website yang kamu buat aman. Terus belajar, terus audit, dan ingat: keamanan bukan destination — ini proses yang tidak pernah berhenti.

Framework Sistem Anti-Hacker Website · 2026
Dibuat oleh Zikri · karsaweb.id · @zikri.bangserverid