
مصيدة OPC UA عالية التفاعل لأنظمة ICS/SCADA — متعددة الملفات التعريفية (النفط والغاز، المياه، شبكة الكهرباء)، ومحاكاة عمليات حية، وتقييم تهديدات لكل جلسة، وتكامل مع SIEM (syslog/CEF/webhooks/Elasticsearch). مبنية على .NET 8 وLibUA.
مصيدة OPC UA عالية التفاعل لبيئات ICS/SCADA. مبنية على LibUA — حزمة OPC UA Binary كاملة، وليست محاكياً للبروتوكول. تحاكي أنظمة تحكم صناعية واقعية عبر ملفات تعريف صناعية متعددة مع قيم عملية حية، واكتشاف شامل للتهديدات، وتسجيل جاهز لـ SIEM.
من بناء 0xAJStrike.
📄 محاضرة: Read the Plant like a Blueprint — عرض SecTor 2026 الذي بُنيت هذه الأداة من أجله (سطح هجوم OPC UA، وتصميم المصيدة، وعرض حي).
معظم مصائد ICS (Conpot، GRFICSv2) تقدّم محاكاة جزئية للبروتوكول. أما OpcUaTrap فتنفّذ بروتوكول OPC UA Binary بالكامل — التفاوض على القناة الآمنة، ودورة حياة الجلسة، والاشتراكات، والسجل، وجميع مجموعات الخدمات. تتفاعل معها أدوات الاستغلال والماسحات الحقيقية (OpalOPC، وسكربتات Nmap لـ OPC UA) كما لو كانت نظاماً إنتاجياً.
| منخفض | متوسط | OpcUaTrap | |
|---|---|---|---|
| البروتوكول | لافتة فقط | محاكاة جزئية | حزمة حقيقية كاملة |
| حالة الجلسة | لا شيء | أساسية | دورة حياة كاملة |
| فضاء العناوين | ثابت / فارغ | حفنة من العقد | 100–130 عقدة واقعية |
| الاشتراكات | لا | لا | نعم — بيانات حية تُدفع |
| مرونة الاستغلال | انهيار | جزئية | تصمد أمام الأطر الكاملة |
docker run -d --name opcuatrap -p 4840:4840 \
-e OPCUATRAP_PROFILE=oil-gas \
-v opcuatrap-data:/data \
ghcr.io/0xajstrike/opcuatrap:latest
أصبح الـ honeypot الآن نشطًا على opc.tcp://<host>:4840. بدّل المنشأة باستخدام
-e OPCUATRAP_PROFILE=water-treatment (أو power-grid). الصورة متعددة المعماريات
(amd64 + arm64، لذا تعمل على Raspberry Pi أيضًا)، وتعمل بصلاحيات غير جذرية (non-root)، وتحفظ
شهادتها وسجلات NDJSON في وحدة التخزين opcuatrap-data. التفاصيل الكاملة لـ Docker
(Compose، وجميع متغيرات البيئة) موجودة تحت النشر → Docker.
.NET 9.0 SDK أو أحدث — مطلوب لبناء المشروع من المصدر، لأن LibUA المضمّن يستهدف إصدارات متعددة تصل إلى net9.0. أما الـ honeypot نفسه فيعمل على وقت تشغيل .NET 8. (غير مطلوب إذا كنت تستخدم Docker — فالصورة تبني كل شيء داخليًا.)
LibUA — حزمة OPC UA الأساسية. يُبنى OpcUaTrap اعتمادًا على fork معدّل تعديلًا طفيفًا (0xAJStrike/LibUA، وهو fork من nauful/LibUA) يضيف حدود دفاع في العمق (defense-in-depth) لعدة ثغرات OPC UA CVEs بالإضافة إلى استجابات خداع اختيارية للـ honeypot.
استنسخ كلا المستودعين جنبًا إلى جنب تحت دليل أب مشترك:
git clone https://github.com/0xAJStrike/OpcUaTrap.git
git clone https://github.com/0xAJStrike/LibUA.git
التخطيط المتوقع (يشير OpcUaTrap إلى ../../../LibUA/NET-Core/LibUA/LibUA.csproj
نسبةً إلى ملف مشروعه، أي أن LibUA يقع بجوار OpcUaTrap):
parent/
├── OpcUaTrap/ # this repo
└── LibUA/ # the fork, cloned as a sibling
dotnet build src/OpcUaTrap/OpcUaTrap.csproj
# Oil & gas profile (default, port 4840)
dotnet run --project src/OpcUaTrap
# Water treatment profile
dotnet run --project src/OpcUaTrap -- --profile water-treatment
# Power grid profile
dotnet run --project src/OpcUaTrap -- --profile power-grid
# Custom port
dotnet run --project src/OpcUaTrap -- --port 7718
# Custom log directory
dotnet run --project src/OpcUaTrap -- --log-dir /var/log/opcuatrap
يبدأ الخادم في غضون ~400 مللي ثانية ويبدأ محاكاة قيم العمليات فورًا.
ملفات التعريف هي ملفات JSON في src/OpcUaTrap/Profiles/. يحدد كل منها هوية المنشأة، ومساحة العنوان الكاملة، وتصنيف الوسوم، وقواعد المحاكاة، وإعدادات التقوية.
| الملف التعريفي | --profile | المنشأة | العُقد | هوية المورّد |
|---|---|---|---|---|
oil-gas | (افتراضي) | منشأة المعالجة المركزية PetroVista | ~120 | Schneider Electric SCADAPack 57x |
water-treatment | water-treatment | محطة معالجة المياه البلدية Cascade | ~100 | Rockwell Automation ControlLogix |
power-grid | power-grid | محطة نقل كهرباء Ridgeline 138kV | ~130 | ABB RTU560 |
PetroVista Central Processing Facility/
Site_Information/
Wellheads/ WH_101 – WH_104 (pressure, temp, flow, choke position)
Separators/ SEP_HP_201, SEP_LP_202 (pressure, level, setpoints)
TankFarm/ TK_OIL_301, TK_OIL_302 (level, alarms, inlet/outlet valves)
PumpStations/ PMP_XFER_401 (speed, discharge pressure, start/stop commands)
CompressorStation/ COMP_501 (RPM, vibration, discharge temp, load %)
Pipelines/ PL_EXPORT_601 (pressure, flow, block valve)
SafetySystems/ ESD (status, shutdown valves, trigger/reset methods)
FireAndGas (gas detectors %LEL, flame detectors)
Utilities/ Instrument air, fuel gas, power generation
Cascade Municipal Water Treatment Plant/
Site_Information/
RawWaterIntake/ Flow, turbidity, pH, temp, intake pumps, isolation valve
Coagulation/ Rapid mix, alum dose rate and setpoint
Flocculation/ Slow mixer, polymer feed rate and setpoint
Sedimentation/ Basin levels, turbidity, sludge blanket, scrapers
Filtration/ 4 filters — differential pressure, turbidity, backwash status
Disinfection/ Primary/secondary chlorination, ammonia feed (chloramine)
ClearWell/ Finished water storage — level, turbidity, pH, Cl2 residual
Distribution/ High-service pumps, pressure zones, elevated tank level
SafetySystems/ ESD, chlorine/ammonia leak detectors and isolation valves
Utilities/ Power, backup generator, SCADA system status
Ridgeline 138kV Transmission Substation/
Site_Information/
HV_Bus (138kV)/ Phase voltages, line voltage, frequency, MW/MVAR/PF
CB-101 main breaker, CB-102 bus tie (status, SF6, trip/close)
Transformers/ T1 & T2, 50 MVA each — voltage, current, oil temp, winding temp,
LTC tap position (1–17), loading %, tap raise/lower commands
LV_Bus (13.8kV)/ Bus voltage, frequency, total MW/MVAR/PF
Feeders/ F1 Residential, F2 Industrial, F3 Commercial, F4 Hospital/Critical
(current, MW, MVAR, recloser ops, trip/close commands)
CapacitorBanks/ CAP-1 (energized), CAP-2 (standby) — 5 MVAR each
ProtectionRelays/ SEL-351S overcurrent, SEL-387 differential, SEL-421 distance
All have _ENABLED flag — disabling them is a critical attack target
DC_System/ 125VDC station battery — voltage, SOC, charger status, ground fault
SafetySystems/ 86 Lockout relay (trip-all-breakers), ESD
SCADA_RTU/ ABB RTU560 status, EMS comm link, historian connection