
Hochinteraktiver OPC-UA-Honeypot für ICS/SCADA — Multi-Profil (Öl & Gas, Wasser, Stromnetz), Live-Prozesssimulation, Bedrohungsbewertung pro Sitzung und SIEM-Integration (syslog/CEF/Webhooks/Elasticsearch). Basiert auf .NET 8 und LibUA.
Ein High-Interaction-OPC-UA-Honeypot für ICS/SCADA-Umgebungen. Basiert auf LibUA — einem vollständigen OPC UA Binary Stack, keinem Protokoll-Emulator. Simuliert realistische industrielle Steuerungssysteme über mehrere Branchenprofile hinweg mit Live-Prozesswerten, umfassender Bedrohungserkennung und SIEM-fähiger Protokollierung.
Entwickelt von 0xAJStrike.
📄 Vortrag: Read the Plant like a Blueprint — die SecTor-2026-Präsentation, für die dieses Tool entwickelt wurde (OPC-UA-Angriffsfläche, Honeypot-Design und eine Live-Demo).
Die meisten ICS-Honeypots (Conpot, GRFICSv2) bieten nur partielle Protokoll-Emulation. OpcUaTrap implementiert das vollständige OPC UA Binary Protocol — Secure-Channel-Aushandlung, Session-Lebenszyklus, Subscriptions, History und alle Service-Sets. Echte Exploit-Tools und Scanner (OpalOPC, Nmap-OPC-UA-Skripte) interagieren damit wie mit einem Produktionssystem.
| Niedrig | Mittel | OpcUaTrap | |
|---|---|---|---|
| Protokoll | Nur Banner | Partielle Emulation | Vollständiger echter Stack |
| Session-Status | Keiner | Grundlegend | Vollständiger Lebenszyklus |
| Adressraum | Statisch / leer | Eine Handvoll Knoten | 100–130 realistische Knoten |
| Subscriptions | Nein | Nein | Ja — Live-Daten werden gepusht |
| Exploit-Resistenz | Abstürze | Teilweise | Übersteht vollständige Frameworks |
docker run -d --name opcuatrap -p 4840:4840 \
-e OPCUATRAP_PROFILE=oil-gas \
-v opcuatrap-data:/data \
ghcr.io/0xajstrike/opcuatrap:latest
Der Honeypot ist jetzt live unter opc.tcp://<host>:4840. Wechseln Sie die Anlage mit
-e OPCUATRAP_PROFILE=water-treatment (oder power-grid). Das Image ist Multi-Arch
(amd64 + arm64, läuft also auch auf einem Raspberry Pi), läuft als Non-Root und persistiert
sein Zertifikat und seine NDJSON-Logs im Volume opcuatrap-data. Vollständige Docker-Details
(Compose, alle Umgebungsvariablen) finden Sie unter Deployment → Docker.
.NET 9.0 SDK oder neuer — erforderlich, um aus dem Quellcode zu bauen, da das mitgelieferte LibUA Multi-Targeting bis net9.0 unterstützt. Der Honeypot selbst läuft auf der .NET 8-Runtime. (Nicht erforderlich, wenn Sie Docker verwenden — das Image baut alles intern.)
LibUA — der OPC UA-Stack. OpcUaTrap baut gegen einen leicht modifizierten Fork (0xAJStrike/LibUA, ein Fork von nauful/LibUA), der Defense-in-Depth- Limits für mehrere OPC UA-CVEs sowie optionale Honeypot-Täuschungsantworten hinzufügt.
Klonen Sie beide Repositories nebeneinander unter einem gemeinsamen übergeordneten Verzeichnis:
git clone https://github.com/0xAJStrike/OpcUaTrap.git
git clone https://github.com/0xAJStrike/LibUA.git
Erwartetes Layout (OpcUaTrap referenziert ../../../LibUA/NET-Core/LibUA/LibUA.csproj
relativ zu seiner Projektdatei, d. h. LibUA liegt neben 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
Der Server startet in ~400 ms und beginnt sofort mit der Simulation von Prozesswerten.
Profile sind JSON-Dateien in src/OpcUaTrap/Profiles/. Jedes definiert die Anlagenidentität, den vollständigen Adressraum, die Tag-Klassifizierung, Simulationsregeln und die Härtungskonfiguration.
| Profile | --profile | Facility | Nodes | Vendor Identity |
|---|---|---|---|---|
oil-gas | (default) | PetroVista Central Processing Facility | ~120 | Schneider Electric SCADAPack 57x |
water-treatment | water-treatment | Cascade Municipal Water Treatment Plant | ~100 | Rockwell Automation ControlLogix |
power-grid | power-grid | Ridgeline 138kV Transmission Substation | ~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