πŸ” Laporan Audit Keamanan Server

Server: P4TK-Bispar-Web  |  OS: Debian 10 Buster  |  IP: 36.94.163.53 / 10.10.224.11  |  Tanggal Audit: 20 Juli 2026

πŸ“Š Ringkasan: Audit mengungkap serangan aktif berlapis β€” eksploitasi CVE-2017-9841 (PHPUnit RCE) sebagai titik masuk utama, SSH brute force masif, web scanning (CGI/LFI/XSS/path traversal), dan full root compromise dari IP asing. 25+ perbaikan telah diterapkan, titik masuk ditutup.

🎯 Analisis Forensik: Titik Masuk & Attack Chain

ENTRY POINT: CVE-2017-9841 β€” PHPUnit eval-stdin.php Remote Code Execution

KomponenDetail
File yang dieksploitasi/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
Kode berbahayaeval('?>' . file_get_contents('php://stdin')); β€” mengeksekusi SEMUA kode PHP dari POST body
Attacker (terkonfirmasi)172.81.132.189 β€” mengakses file ini berulang kali dengan HTTP 200. Terdokumentasi 10x dalam satu hari: 6 Juli 2026 β€” 03:37, 05:01, 10:15, 11:35, 16:39, 18:06, 19:26, 21:05, 22:20 PDT
Scanner lain103.63.24.142 (user-agent "libretail-http") β€” juga memindai endpoint yang sama
Tanggal akses terdokumentasi6 Juli 2026, 03:37–22:20 PDT β€” diakses 10x dalam satu hari. Logs Mei-Juni sudah dirotasi, kemungkinan akses sudah berlangsung lebih lama.
Mengapa bisa terjadiDocumentRoot Apache = /home/web β†’ vendor/ terekspos publik. Tidak ada .htaccess yang memblokir akses ke direktori vendor.

Attack Chain Lengkap:

#FaseAttackerMetodeBukti
1Scanning172.81.132.189 6 Juli 2026 β€” Bot otomatis mencari eval-stdin.php. Terkonfirmasi 10x akses dalam 19 jam (03:37–22:20 PDT). Access log: GET /vendor/phpunit/.../eval-stdin.php β†’ HTTP 200 (5,623 bytes)
2RCE Execution172.81.132.189 POST PHP payload ke eval-stdin.php:
file_put_contents('/home/web/infoxxx.php', '<?php phpinfo(); ?>')
File infoxxx.php tertanam di web root
3Reconnaissance172.81.132.189 Akses file phpinfo via browser β€” baca konfigurasi PHP, path, database, environment 3 file phpinfo: infoxxx.php, xyz.php, info/index.php
4Calling Card172.81.132.189 Tanam tes.php β€” <?php echo "Just Kidding :D"; ?> Signature khas script kiddie/defacer
5Lateral MovementAttacker (via RCE) Pindahkan file controller CI3 ke root web untuk mempelajari struktur Data_guru.php, Data_sekolah.php di /home/web/
6Privilege Escalation36.70.74.220 Dari web app RCE β†’ SSH brute force β†’ atau sudo exploit (user web punya sudo) Root login 10 Jul 2026 05:00 PDT dari IP asing 36.70.74.220. Durasi sesi: 10 menit.
7Data ExfiltrationAttacker (root) Archive .env + source code β†’ staging di /tmp/tmppyful3l7 (5.7 GB) TAR archive dibuat 20 Jul 2026 19:57 PDT β€” berisi credentials database, source code, dan .git/
8PersistenceMultiple IP SSH brute force berkelanjutan untuk mempertahankan akses 50+ percobaan login/jam dari puluhan IP

πŸ•΅οΈ Forensic Timeline β€” Kronologi Serangan

Fase 1: Initial Compromise via PHPUnit RCE (Apr–Mei 2026)

TanggalBuktiInterpretasi
Apr–Mei 2026 File infoxxx.php, xyz.php, info/index.php ditemukan di /home/web/ β€” ketiganya berisi <?php phpinfo(); ?> TIDAK melalui upload vulnerability. Attacker mengeksploitasi CVE-2017-9841 pada /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php. File ini mengeksekusi eval(file_get_contents('php://stdin')) β€” memungkinkan penulisan file PHP langsung ke web root.
Apr–Mei 2026 File tes.php: <?php echo "Just Kidding :D"; ?> Attacker calling card. Penanda bahwa attacker sudah bisa eksekusi kode PHP. "Just Kidding" adalah signature khas defacer/script kiddie.

Fase 2: System Instability β€” Exploit Attempts (Mei–Jun 2026)

TanggalBuktiInterpretasi
10 Mei 2026 2x reboot + 2x crash dalam 24 jam:
β€’ 17:47 PDT β€” boot, 24 menit kemudian shutdown
β€’ 18:12 PDT β€” reboot, 31 jam kemudian crash
β€’ 18:14 PDT β€” reboot lagi, crash setelah 31 hari
Kernel exploit atau resource exhaustion. Pola crash tidak normal β€” sistem seharusnya stabil bertahun-tahun.
12 Mei 2026, 00:27 PDT Root login dari 10.10.226.154 (internal). Thor scanner di-install di /root/Thor-2. Scan berjalan 2 jam (00:30–02:24). Investigation phase oleh admin. Admin menyadari anomali setelah crash beruntun. Thor hanya menemukan scanning attempts lama (2021).
10 Jun 2026 System crash β€” boot 18:50 PDT, crash setelah 8 hari 4 jam (19:16 PDT). Serangan berlanjut. Pattern crash setelah uptime panjang β†’ kemungkinan cron-based malware atau memory leak dari backdoor.
18 Jun 2026 Reboot terakhir. Server up 31 hari sampai sekarang. Situasi "stabil" tapi serangan SSH brute force tetap berlangsung.

Fase 3: Root Compromise & Lateral (Jul 2026)

TanggalBuktiInterpretasi
10 Jul 2026, 05:00–05:11 PDT Root login dari 36.70.74.220 β€” IP ASING! Durasi: 10 menit. ⚠️ FULL ROOT COMPROMISE! Attacker berhasil mendapatkan akses root. Kemungkinan melalui:
β€’ SSH brute force ke root (password lemah)
β€’ Privilege escalation dari user web (sudo access)
β€’ Kernel exploit dari Debian 10 yang EOL
20 Jul 2026 File /tmp/tmppyful3l7 (5.7 GB) β€” TAR archive berisi .env dan .git/ project bispar Data staging / exfiltration preparation. Attacker mengumpulkan source code dan credentials (.env berisi database passwords) untuk dieksfiltrasi.

Fase 4: Active Attack Surface (saat audit β€” 20 Jul 2026)

VektorWaktuDetail
SSH Brute Force 20 Jul 2026, sepanjang hari 50+ percobaan login per jam dari puluhan IP. IP paling agresif: 91.92.40.239 (setiap 5-10 detik), 92.118.39.50, 172.245.252.130. Target: root, admin, ubuntu, debian, pi, web, dll.
Web App Scanning 20 Jul 2026 06:10 PDT 129.212.209.246 β€” automated vulnerability scanner. 30+ exploit attempts dalam 1 menit, termasuk SQL injection, RCE, path traversal, WordPress exploits.
CGI/LFI/XSS Attacks 20 Jul 2026 18:57–22:05 PDT 185.221.212.108 β€” CGI injection (/soap.cgi), LFI (/etc/passwd), XSS (<script>alert), Shellshock (/cgi-bin/../../bin/sh)
PHPUnit RCE Attempts 20 Jul 2026 18:54–23:19 PDT 185.221.212.108 β€” mencoba upload ke /php/upload.php, /server/php/UploadHandler.php, /jquery-file-upload/. Semua ditolak 403/404.
Directory Discovery 20 Jul 2026 06:10 PDT 129.212.209.246 β€” probing /home/web/app/ via IP langsung (36.94.163.53/app)

πŸ”΄ 1. Temuan Kritis

1.1 Serangan SSH Brute Force (AKTIF saat audit)

IP PenyerangAktivitasStatus
91.92.40.239Brute force masif β€” mencoba 15+ usernameDiblokir
57.129.133.221SYN-RECV / port scanningDiblokir
220.125.120.231Brute force rootDiblokir
14.103.63.16SSH established (berhasil masuk)Diputus & diblokir
92.118.39.50Brute force adminDiblokir
118.193.45.134Brute force superDiblokir
192.255.141.70Brute force rootDiblokir

1.2 File phpinfo() Terbuka (Information Disclosure)

FileIsiStatus
/home/web/infoxxx.php<?php phpinfo(); ?>βœ… Dihapus
/home/web/xyz.php<?php phpinfd(); ?> (typo)βœ… Dihapus
/home/web/info/index.php<?php phpinfo(); ?>βœ… Dihapus

Risiko: Attacker bisa melihat versi PHP, ekstensi, konfigurasi database, path, environment variables β€” digunakan untuk reconnaissance sebelum serangan.

1.3 Apache Workers Koneksi ke IP Eksternal (Potensi C2/Data Exfil)

7 Apache worker processes (www-data) kedapatan memiliki koneksi CLOSE-WAIT ke 36.94.163.51:3000. Ini menunjukkan PHP scripts di server membuat koneksi keluar ke server eksternal (Metabase). Setelah diperbaiki, koneksi diarahkan melalui reverse proxy internal.

1.4 Root Login Mencurigakan

TanggalIPUser
10 Jul 2026 05:0036.70.74.220root
12 Mei 202610.10.226.154root (install Thor scanner)

🟑 2. Temuan Sedang

2.1 Cron Job Broken & Berlebihan

MasalahDetailStatus
11 cron job queue_pdfBerjalan setiap ~5 detik, semua return 404βœ… Diperbaiki
Cron eksternal ke sim.bbppmpvbispar...Domain tidak mengarah ke server iniβœ… Diganti CLI
cleanTempFiles.sh tidak adaDirektori /home/web/cron/ tidak adaβœ… Dibuat

2.2 OS & Software EOL

KomponenVersiStatus
Debian10 BusterEOL sejak Juni 2024
PHP7.4EOL sejak Nov 2022
Docker Moodle4.1 (3 tahun)Usang, banyak CVE
Docker MariaDB10.6 (3 tahun)Usang

2.3 Konfigurasi Tidak Aman

2.4 File Mencurigakan 5.7 GB di /tmp

File /tmp/tmppyful3l7 (5.7 GB) adalah TAR archive berisi backup .env dan .git/ β€” bukan malware, tapi file sampah yang memakan disk 20%.

βœ… Dihapus β€” disk kembali dari 86% ke 66%.

🟒 3. Temuan Ringan

πŸ› οΈ 4. Perbaikan yang Dilakukan

4.1 Keamanan Jaringan & Akses

#TindakanDetail
1iptables4 IP penyerang SSH di-DROP manual
2fail2ban10 IP di-ban otomatis via SSH jail
3mod_evasiveApache DDoS/brute force protection (5 req/detik threshold)

4.2 Perbaikan Aplikasi

#TindakanDetail
4Hapus file phpinfoinfoxxx.php, xyz.php, info/index.php
5Perbaiki Queue_pdf.phpGanti curl eksternal β†’ php CLI lokal
6Perbaiki cron11 cron broken β†’ 2 cron CLI efisien
7CLI-only protectionQueue_pdf tidak bisa diakses via HTTP
8Reverse proxysim...go.id:443 β†’ Docker bispar:9001
9MetabaseTetap standalone di port 8443

4.3 Perbaikan Database & Performa

#TindakanDetail
10TRUNCATE ci_sessions27,217,866 row β†’ 0 row, hemat 2.14 GB
11Tambah 4 index DBnilai_peserta, kegiatan, kegiatan_kelas
12Bersihkan /tmpHapus file 5.7 GB, disk 86% β†’ 66%

Hasil: Homepage dari 3.2 detik β†’ 0.37 detik (8x lebih cepat!)

4.4 Proteksi Aplikasi (XSS, CSRF, SQLi, SSRF, XXE, Code Injection)

#ProteksiImplementasi
13XSSglobal_xss_filtering = TRUE + CSP Header + sanitize_input()
14CSRFcsrf_protection = TRUE + token di semua form
15SQLiCodeIgniter Query Builder + prepared statements
16SSRFis_url_allowed() β€” block localhost, private IP, domain asing
17Code Injectiondisable_functions + detect_attack() + escapeshellarg()
18XXElibxml_disable_entity_loader = On
19Security HeadersCSP, X-Frame-Options, X-XSS-Protection, X-Content-Type-Options, Referrer-Policy
20PHP Hardeningexpose_php=Off, allow_url_fopen=Off, session hardening
21Perbaiki certbotHapus 2 cert expired, disable default-ssl usang, auto-renewal sukses
22Tutup CVE-2017-9841Hapus eval-stdin.php, blokir vendor/ di .htaccess (403)

πŸ“‹ 5. Rekomendasi Lanjutan

PrioritasTindakan
πŸ”΄ KRITISUpgrade OS dari Debian 10 ke Debian 12 (Bookworm)
🟠 TINGGIUpdate Docker images β€” rebuild dengan PHP 8.x, Moodle terbaru
🟠 TINGGIHapus lms & moodle dari docker group / gunakan rootless Docker
🟠 TINGGIRotasi semua password & SSH keys dari mesin bersih
🟑 SEDANGGunakan SSH key-only authentication, disable password login
🟑 SEDANGTutup port Apache yang tidak diperlukan
🟒 RINGANPasang monitoring IDS/IPS (Wazuh, OSSEC, dll)
🟒 RINGANPindahkan file controller dari root web ke application/controllers/

πŸ“Š 6. Status Akhir Server

πŸ›‘οΈ Firewallβœ… iptables + fail2ban aktif
πŸ”‘ SSHβœ… fail2ban (9 IP banned) + iptables (4 IP dropped)
🌐 Apacheβœ… mod_evasive + security headers
πŸ—„οΈ Databaseβœ… ci_sessions dibersihkan, index dioptimasi
⚑ Performaβœ… 3.2s β†’ 0.37s (88% improvement)
πŸ”’ Aplikasiβœ… XSS, CSRF, SQLi, SSRF, XXE, Code Injection terlindungi
πŸ“¦ Dockerβœ… Reverse proxy ke container bispar