ICS/SCADA — Modbus و DNP3 و IEC-104
بروتوكولات الصناعة من جوّه — فحص واستغلال آمن في الـ Lab
عالم تاني خالص — ليه ICS مش زي IT؟
طب لو بنفس منطق IT، ليه ما نأمّنش الـ ICS كده وخلاص؟
طب نحط فيه EDR. نحط patches. نعمل MFA على كل سيرفر.
لو السيرفر اتـ patch reboot لمدة 30 ثانية، إيه اللي هيحصل؟
محطة الكهرباء هتفصل. الغلاية هتنفجر. القطر هيتصدم. كده كده.
لأن في عالم OT، الـ availability أهم من السرية، والـ safety أهم من الاتنين. ثانية تأخير في إشارة alarm = موت بشر.
النهارده؟ الشبكات دي بقت متوصّلة. Stuxnet، Industroyer، Pipedream، CHIRP — كل حملة كبيرة على البنية التحتية الحرجة استغلت بروتوكولات اتعملت من غير حماية. الدرس ده هيغطي Modbus، DNP3، IEC-104 — اللي بتشتغل في الكهربا والمياه والمواصلات.
- بيشغّل nmap -sS على شبكة OT شغّالة. الـ PLC بيقع. الخط بيقفل. الخسارة بالملايين.
- بيوصّل الـ engineering workstation بالإنترنت "عشان تحديث الـ TIA Portal".
- بيستخدم default password على Schneider/Siemens/Rockwell.
- بيظن إن "air gap" موجود لأنه "ماحدش وصّل cable". الـ USB في حياة المهندس بيكسره كل أسبوع.
- بيشغّل Modbus client من غير ما يفهم إن أي write command ممكن يقلب valve في محطة مياه.
قصة من الواقع — Stuxnet و Triton
2010. Stuxnet. أول malware معروف هدفه الفعلي تدمير معدات فيزيائية. الهدف: مفاعلات نووية إيرانية في Natanz.
الـ malware دخل عبر USB لـ engineering workstation. عرف نفسه إنه على الشبكة الصح بس لما لاقى Siemens S7-300 PLCs بيتحكموا في centrifuges من نوع IR-1. شغّل الـ centrifuges بسرعات غلط، بس عرض في الـ HMI قراءات طبيعية. المهندسين كانوا يبصوا للشاشة، يلاقوا كل حاجة عادية، والمعدات بتتدمّر فعلياً.
تقريباً 1000 centrifuge اتدمّروا قبل ما حد ياخد باله.
2017. Triton (TRISIS). مجموعة مدعومة من روسيا (Xenotime) دخلوا محطة بتروكيماويات في السعودية. الهدف ماكانش يقفل المحطة. الهدف كان تعطيل الـ Safety Instrumented System (SIS) بتاع Schneider Triconex. ليه؟
عشان لو الـ SIS اتعطّل، ساعتها لو حصل حادثة (تسرّب غاز، حرارة عالية)، الإنذار مش هيشتغل. المحطة هتنفجر بدل ما تقفل.
اتمسكوا بالصدفة لأن السكربت بتاعهم فيه bug. لو ماكانش الـ bug ده، كانوا قتلوا ناس.
ده الفرق بين IT attack و OT attack. في IT بتسرق بيانات. في OT بتقتل ناس.
معمارية ICS — Purdue Model
Level 5 — Internet / cloud
Level 4 — Enterprise IT (ERP, email)
Level 3.5 — DMZ (jump servers, historians)
─── الحدود الكلاسيكية ───
Level 3 — Operations management (SCADA HMIs)
Level 2 — Process supervisory (HMI, alarms)
Level 1 — Basic control (PLC, RTU, IED)
Level 0 — Physical (sensors, actuators, valves)Modbus / DNP3 / IEC-104 تعمل في Level 1-2. هدف المهاجم: عبور Level 3.5 (المخترق غالباً عبر phishing على IT) إلى Level 1 لإصدار أوامر فعلية للعتاد.
Modbus — البروتوكول الأكثر انتشاراً
Modbus TCP Frame:
+--------+--------+--------+--------+--------+--------+
| Trans | Proto | Length | UnitID | FCode | Data |
| 2 byte | 2 byte | 2 byte | 1 byte | 1 byte | n byte |
+--------+--------+--------+--------+--------+--------+
Function Codes:
01 = Read Coils (digital outputs)
02 = Read Discrete Input (digital inputs)
03 = Read Holding Reg (analog values)
04 = Read Input Reg
05 = Write Single Coil ← XX خطر: قلب valve
06 = Write Single Reg ← XX خطر: تغيير setpoint
15 = Write Multiple Coils
16 = Write Multiple Regs# READ ONLY على lab IP — لا تنفذ هذا على شبكة حية أبداً
# nmap NSE
nmap -p 502 --script modbus-discover 192.168.50.10
# python pymodbus
python3 -c "
from pymodbus.client import ModbusTcpClient
c = ModbusTcpClient('192.168.50.10', port=502)
c.connect()
r = c.read_holding_registers(0, 10, slave=1)
print(r.registers)"DNP3 — أكثر تطوراً، نفس المشاكل
DNP3 يدعم unsolicited reporting (PLC يرسل alert تلقائياً)، event timestamps، و reliable delivery. لكن النسخة الأساسية بدون مصادقة. DNP3-SA (Secure Authentication) أُضيفت في 2007، لكن انتشارها بطيء.
DNP3 على TCP port 20000
Application Layer Function Codes:
0x01 = Read — قراءة data points
0x02 = Write — تحديث قيم
0x05 = Direct Operate — تنفيذ control فوري ← خطر
0x06 = Direct Op No Ack
0x0D = Cold Restart — إعادة تشغيل PLC ← خطرIEC-104 — معيار الكهرباء الأوروبي
IEC 60870-5-104 هو الـ standard المهيمن في شبكات الكهرباء الأوروبية والآسيوية. Industroyer (2016 هجوم Ukraine) و Industroyer2 (2022) كلاهما استهدفه.
IEC-104 على TCP port 2404
ASDU Type IDs المثيرة للقلق:
M_SP_NA_1 (1) — Single point information
C_SC_NA_1 (45) — Single command ← يقلب breakers
C_DC_NA_1 (46) — Double command ← يفتح/يغلق switches
C_RC_NA_1 (47) — Regulating step
C_SE_NA_1 (48) — Setpoint command ← يغير threshold relaysهجوم نمطي على ICS — ما يبدو عليه
# أدوات مثل GRASSMARLIN، ICSpector، Bandolier
nmap -p 502,20000,2404,44818,47808 10.10.10.0/24 --script default
# CIP/EtherNet/IP = 44818
# BACnet = 47808 (HVAC, building automation)- Network segmentation: data diodes (one-way) بين IT و OT، ليس firewalls فقط
- Passive monitoring: Claroty، Nozomi، Dragos — لا يولد packets جديدة
- Asset inventory: لا يمكن حماية ما لا تعرف وجوده — كثير من ICS shops لا يعرفون عدد PLCs لديهم
- Engineering workstations: تعامل معها كـ Tier 0، لا يمكن استخدامها للبريد أو الويب
- Backup configurations للـ PLCs offline — قد تكون فقدت حياة عند هجوم wiper
- Adopt المعيار IEC 62443 + NIST SP 800-82
مصادر
- Robert M. Lee — SANS ICS courses (ICS410, ICS515)
- Dragos — Threat Intelligence Reports
- CISA — ICS Advisories Database
- MITRE ATT&CK for ICS — مصفوفة منفصلة عن enterprise
- Andrew Ginter — books on OT security architecture
الخلاصة الناشفة
الـ ICS مش IT بأسماء جديدة.
هو هندسة تانية، فلسفة تانية، ومخاطرها مادية مش مالية.
أي pentester بيدوس على شبكة OT كأنها شركة عادية = خطر على أرواح. فعلياً.
اكتبها على الحيطة اللي قدامك: الـ passive monitoring أولاً (Claroty، Nozomi، Dragos). الـ active scan أبداً من غير maintenance window ومهندس OT جنبك.
والأهم: متخلّيش مهندس OT يفكّر إن "الـ network مش بتاعتي". هي شبكته. لو وقعت، اللي هيتحاسب هو، مش الـ IT team.
المعدات اللي بقالها 20 سنة شغّالة من غير update مش "نظام صامد" — دي قنبلة موقوتة. والمهاجمين الجدد فاهمين ده كويس.