بروتوكولات ICS / SCADA — Modbus, DNP3, IEC-104
تحليل بروتوكولات التحكم الصناعي، فحصها واستغلالها بأمان
عالم لا يشبه IT — لماذا ICS مختلف؟
الواقع اليوم: تلك الشبكات لم تعد معزولة. Stuxnet، Industroyer، Pipedream، CHIRP — كل حملة كبرى ضد بنية تحتية حرجة استغلت بروتوكولات صُممت بلا حماية. هذا الدرس يغطي Modbus، DNP3، IEC-104 — الأكثر انتشاراً في الكهرباء، الماء، النقل.
معمارية 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