Unila Sentinel
Sistem "kesehatan siber" berlapis untuk seluruh aset web Universitas Lampung — deteksi, mitigasi, dan investigasi malware (judol/cloaking, backdoor/web‑shell) secara terpusat di bawah CSIRT UNILA.
Ringkasan
Unila Sentinel adalah agen keamanan yang dipasang pada tiap aset web. Ia memindai berkas & database untuk pola berbahaya (doorway judol/cloaking, backdoor & web‑shell, injeksi konten, akun admin liar), mengisolasi temuan secara reversibel ke karantina, mengeraskan titik lemah (mis. blokir eksekusi PHP di folder unggahan), lalu melapor ke Konsol Pusat CSIRT dan menarik "vaksin" (signature terbaru) secara berkala.
- Deteksi: judol/cloaking doorway, backdoor eval/exec, web‑shell, injeksi DB, admin baru mencurigakan.
- Mitigasi: auto‑karantina (reversibel) + hardening folder unggahan.
- Pelaporan: temuan & spesimen dikirim ke Konsol CSIRT; insiden kritis otomatis jadi tiket.
- Kendali jarak jauh: tim CSIRT bisa memicu scan / karantina / pulihkan dari pusat.
Arsitektur Berlapis (analogi rumah sakit)
Model berlapis seperti sistem kesehatan: pasien dirawat sedekat mungkin dengan lokasinya, kasus berat dirujuk ke pusat.
| Lapisan | Peran |
|---|---|
| Agent (Plugin) | "Dokter di tempat" — scan, karantina, hardening pada aset itu sendiri. |
| Klinik Fakultas | Pengelompokan per unit kerja (RBAC) — pantau aset di fakultasnya. |
| Pusat Kendali CSIRT | "Rumah Sakit Rujukan" — fleet seluruh aset, Lab Spesimen, terbitkan vaksin, perintah jarak jauh. |
Cara Kerja
- 1Scan terjadwal (harian) memindai berkas + database memakai ruleset/vaksin terbaru.
- 2Temuan berbahaya diisolasi ke karantina (reversibel, dengan chain‑of‑custody hash SHA‑256).
- 3Ringkasan + spesimen (hash‑first) dikirim ke Konsol CSIRT; temuan kritis → tiket insiden otomatis (terkorelasi per kampanye agar tidak banjir tiket).
- 4Agent menarik perintah dari pusat (scan/karantina/pulihkan/hapus/hardening) dan melapor hasilnya.
- 5Agent menarik vaksin (hash + kata kunci) untuk memperbarui deteksi tanpa update plugin.
Prasyarat
- WordPress 5.6+ dengan PHP 7.4+ (disarankan PHP 8.x).
- Akses Administrator ke wp‑admin situs.
- Server bisa melakukan koneksi keluar (outbound HTTPS) ke Konsol CSIRT.
- URL Konsol CSIRT + Agent Key — diminta ke tim CSIRT UNILA (lihat Dukungan).
Instalasi Plugin WordPress
Cara A — via wp‑admin (paling mudah)
- 1Unduh paket plugin unila-wp-sentinel.zip dari tim CSIRT / repositori TIK.
- 2Masuk wp‑admin → Plugins → Add New → Upload Plugin.
- 3Pilih berkas zip → Install Now → Activate.
- 4Buka menu Unila Sentinel → tab Pengaturan, isi konfigurasi (di bawah).
Cara B — manual / WP‑CLI (untuk admin server)
# Manual: salin ke folder plugin lalu aktifkan
cd /path/ke/wordpress/wp-content/plugins
unzip unila-wp-sentinel.zip
wp plugin activate unila-wp-sentinel
# Atau langsung dari berkas zip
wp plugin install ./unila-wp-sentinel.zip --activatewp-content/uploads. Jalankan Scan Sekarang sekali untuk baseline.Keaslian & Anti‑Tamper
Lapisan pengaman otomatis yang sudah berjalan:
- Gerbang unduhan memverifikasi SHA‑256 paket di server SEBELUM melayani — bila isi berubah, unduhan ditolak & CSIRT mendapat alarm seketika.
- Paket ditandatangani kriptografis (Ed25519) — modifikasi apa pun membatalkan tanda tangan.
- Plugin memeriksa integritas berkasnya sendiri saat aktivasi & tiap scan — bila kode dimodifikasi di situs, ia melapor ke CSIRT (situs mana, berkas apa).
- Setiap unduhan dicatat (audit) & konsol memantau sidik jari kode tiap agent.
1. Verifikasi SHA‑256 (wajib, mudah)
d93aef08a8204842fd77a1659a81ede71552bed312af2e2d36378860f65ff8be# Linux / macOS
sha256sum unila-wp-sentinel-1.8.0.zip
# Windows (PowerShell)
Get-FileHash unila-wp-sentinel-1.8.0.zip -Algorithm SHA256
# Hasilnya HARUS persis sama dengan SHA-256 resmi di atas. Jika beda → JANGAN instal.2. Verifikasi tanda tangan Ed25519 (lanjutan)
MCowBQYDK2VwAyEADOcFzW01g4FnzRAU1MN1szYR2e4xF3iueuNRbaneRCg=# Simpan kunci publik CSIRT ke csirt-pubkey.pem, lalu:
curl -s "https://csirt.unila.ac.id/api/download/plugin?part=sig" -o unila-wp-sentinel-1.8.0.zip.sig
openssl pkeyutl -verify -pubin -inkey csirt-pubkey.pem \
-rawin -in unila-wp-sentinel-1.8.0.zip -sigfile unila-wp-sentinel-1.8.0.zip.sig
# Output yang benar: "Signature Verified Successfully"https://csirt.unila.ac.id/api/download/checksum untuk SHA‑256, sidik jari, & status terkini paket di server.Konfigurasi Agent
Menu Unila Sentinel → Pengaturan:
| Kolom | Isi |
|---|---|
| Label aset (situs) | identitas unik, mis. akuntansi.feb.unila.ac.id |
| URL Konsol CSIRT | alamat Konsol Pusat (diberikan CSIRT) |
| Agent Key | token rahasia milik aset ini (jangan dibagikan) |
| Auto‑karantina | Mati / ≥ Kritis (disarankan) / ≥ Tinggi |
| Jadwal scan | Harian (disarankan) / 2× sehari / tiap jam |
| Monitor realtime | Aktif — pantau upload mencurigakan seketika |
| Webhook / Email alert | opsional — notifikasi ke n8n/WhatsApp/email |
Integrasi Semua Platform (non‑WordPress)
Konsep intinya: platform apa pun yang bisa melakukan HTTP request dapat menjadi agent — cukup melaporkan hasil pemeriksaan dan menarik perintah/vaksin lewat kontrak REST yang sama. Cocok untuk aplikasi Laravel/PHP, Node, Python, situs statis, atau pemindai kustom.
Contoh: lapor hasil scan (curl)
curl -X POST https://csirt.unila.ac.id/api/ingest/sentinel \
-H "Content-Type: application/json" \
-H "X-Sentinel-Token: <AGENT_KEY>" \
-d '{
"site": "app.fmipa.unila.ac.id",
"platform": "laravel",
"unit": "FMIPA",
"scan_id": "scan-2026-0001",
"summary": { "critical": 0, "high": 0, "medium": 0, "low": 0 },
"count": 0,
"scanned": 350
}'Contoh: agent mini (Python)
import requests
KONSOL = "https://csirt.unila.ac.id"; TOKEN = "<AGENT_KEY>"; SITE = "app.fmipa.unila.ac.id"
H = {"X-Sentinel-Token": TOKEN}
# 1) lapor hasil pemeriksaan
requests.post(f"{KONSOL}/api/ingest/sentinel", headers=H, json={
"site": SITE, "platform": "python", "unit": "FMIPA",
"summary": {"critical": 0, "high": 0, "medium": 0, "low": 0}, "scanned": 120})
# 2) tarik vaksin (signature) + perintah dari pusat
vaksin = requests.get(f"{KONSOL}/api/agent/vaccine", headers=H).json()
perintah = requests.get(f"{KONSOL}/api/agent/commands", params={"site": SITE}, headers=H).json()
# 3) eksekusi perintah lalu lapor hasil
for c in perintah.get("commands", []):
ok, msg = True, "selesai" # ... jalankan aksi sesuai c["action"]
requests.post(f"{KONSOL}/api/agent/command-result", headers=H,
json={"id": c["id"], "ok": ok, "message": msg})next_poll untuk mengatur ritme (hemat saat ribuan agent).Kontrak API
Semua endpoint memakai header X-Sentinel-Token: <AGENT_KEY>.
| Metode | Path | Fungsi |
|---|---|---|
| POST | /api/ingest/sentinel | Lapor hasil scan (ringkasan + temuan teratas) |
| POST | /api/agent/alert | Alert realtime (upload diblokir, admin liar, dll) |
| POST | /api/agent/specimen | Kirim spesimen (hash‑first) ke Lab Pusat |
| GET | /api/agent/vaccine | Tarik vaksin/signature (hash + kata kunci) |
| GET | /api/agent/commands?site= | Tarik perintah pending + next_poll |
| POST | /api/agent/command-result | Lapor hasil eksekusi perintah |
| POST | /api/agent/quarantine | Kirim snapshot manifest karantina |
Status Aset di Konsol
terdaftar di inventaris, agent belum terpasang
discan, tidak ada temuan terbuka
ada temuan rendah/sedang
ada temuan tinggi
ada temuan kritis — segera tindak
Saat agent dipasang & melapor pertama kali, status otomatis berubah dari Belum Dipantau ke kondisi nyata.
Keamanan & Privasi
- Karantina bersifat reversibel (bisa dipulihkan) — bukan hapus permanen tanpa konfirmasi.
- Spesimen dikirim hash‑first; berkas penuh hanya bila Lab Pusat memintanya.
- Setiap aset memakai Agent Key sendiri (dapat dicabut tanpa mengganggu aset lain).
- Data PII penanggung jawab (PIC) tidak ikut tersebar ke konsol — tetap di sumber dengan masking per‑role.
- Token tidak pernah ditampilkan utuh di antarmuka (mis. sk-••••last4).
Log Pengembangan (Changelog)
- Antarmuka admin plugin mendukung dual‑view: mode gelap (default) & terang, dengan tombol toggle ☀/🌙 di header.
- Preferensi tema tersimpan per‑pengguna (anti‑kedip, dirender server‑side) dan mengikuti preferensi sistem saat pertama kali.
- Plugin terpasang otomatis mendeteksi versi baru dari konsol → notifikasi "Update tersedia" + changelog di halaman Plugins, update sekali‑klik (paket terverifikasi integritas).
- Konsol: panel manajemen agent — daftar situs enrolled + tombol Cabut kunci.
- Form "Enroll ke Pusat": situs baru mendaftar dengan bootstrap key → menerima kunci agent UNIK (revocable), bukan token bersama.
- Endpoint /api/agent/enroll; semua endpoint agent menerima token bersama (legacy) maupun kunci enrolled.
- Setelah enroll otomatis tarik vaksin + scan baseline → aset langsung muncul di fleet.
- Paket ditandatangani Ed25519 + checksum SHA‑256 publik; unduhan lewat gerbang yang memverifikasi integritas (tolak + alarm bila berkas di server diubah).
- Self‑integrity plugin: manifest hash per‑berkas + cek otomatis saat aktivasi/scan → lapor SITUS yang kodenya dimodifikasi.
- Sidik jari kode dikirim pada tiap laporan; konsol menandai agent dengan plugin tak resmi.
- Audit unduhan (IP/klien) + panel "Integritas & Distribusi" + heartbeat pemantau drift.
- Poll adaptif (read‑before‑claim + next_poll idle/aktif) — hemat beban di ribuan agent.
- Korelasi kampanye di pusat: 1 signature menjangkiti banyak aset = 1 tiket (anti badai tiket).
- Dashboard pusat: agregat per‑fakultas, paginasi & filter, status inventaris "Belum Dipantau".
- Jembatan aman Webometrics → fleet (inventaris non‑PII).
- Allowlist false‑positive ("Tandai Aman") — dismissal menempel lintas‑scan.
- Kecualikan opsi tema/page‑builder (td_*) dari heuristik; supersede temuan lama (anti‑duplikat).
- Pulihkan/Hapus karantina langsung dari dashboard pusat.
- Perintah jarak jauh (pull): scan / karantina / pulihkan / hapus / hardening dari konsol.
- Poller wp‑cron + pelaporan hasil perintah.
- Lapor temuan & spesimen ke Konsol CSIRT (header X‑Sentinel‑Token).
- Tarik vaksin (signature) dari pusat secara berkala.
- Fase 1: scan (judol/cloaking, backdoor/web‑shell, injeksi DB, admin liar) + karantina reversibel + hardening + laporan CSIRT (PDF).
- Fase 2: monitor realtime + alert (webhook/email).
- Fase 3: fondasi konsol terpusat (fleet).
Dukungan & Kontak
Untuk meminta Agent Key, paket plugin, atau bantuan integrasi platform lain, hubungi CSIRT / UPA TIK Universitas Lampung.