
Pot de miel OPC UA à forte interaction pour ICS/SCADA — multi-profils (pétrole et gaz, eau, réseau électrique), simulation de processus en temps réel, notation des menaces par session et intégration SIEM (syslog/CEF/webhooks/Elasticsearch). Basé sur .NET 8 et LibUA.
Un honeypot OPC UA à forte interaction pour les environnements ICS/SCADA. Construit sur LibUA — une pile OPC UA Binary complète, et non un émulateur de protocole. Simule des systèmes de contrôle industriel réalistes à travers plusieurs profils sectoriels avec des valeurs de processus en direct, une détection complète des menaces et une journalisation prête pour le SIEM.
Développé par 0xAJStrike.
📄 Présentation : Read the Plant like a Blueprint — la présentation SecTor 2026 pour laquelle cet outil a été conçu (surface d'attaque OPC UA, conception du honeypot et démonstration en direct).
La plupart des honeypots ICS (Conpot, GRFICSv2) n'offrent qu'une émulation partielle du protocole. OpcUaTrap implémente le protocole OPC UA Binary complet — négociation de canal sécurisé, cycle de vie des sessions, abonnements, historique et tous les ensembles de services. Les outils d'exploitation et scanners réels (OpalOPC, scripts Nmap OPC UA) interagissent avec lui comme avec un système de production.
| Faible | Moyenne | OpcUaTrap | |
|---|---|---|---|
| Protocole | Bannière uniquement | Émulation partielle | Pile réelle complète |
| État de session | Aucun | Basique | Cycle de vie complet |
| Espace d'adressage | Statique / vide | Quelques nœuds | 100–130 nœuds réalistes |
| Abonnements | Non | Non | Oui — données en direct poussées |
| Résilience aux exploits | Crashes | Partielle | Survit aux frameworks complets |
docker run -d --name opcuatrap -p 4840:4840 \
-e OPCUATRAP_PROFILE=oil-gas \
-v opcuatrap-data:/data \
ghcr.io/0xajstrike/opcuatrap:latest
Le honeypot est maintenant actif sur opc.tcp://<host>:4840. Changez d'installation avec
-e OPCUATRAP_PROFILE=water-treatment (ou power-grid). L'image est multi-arch
(amd64 + arm64, elle fonctionne donc aussi sur un Raspberry Pi), non-root, et persiste son
certificat et ses journaux NDJSON dans le volume opcuatrap-data. Les détails complets de Docker
(Compose, toutes les variables d'environnement) se trouvent dans Déploiement → Docker.
.NET 9.0 SDK ou plus récent — requis pour compiler depuis les sources, car le LibUA fourni cible plusieurs frameworks jusqu'à net9.0. Le honeypot lui-même s'exécute sur le runtime .NET 8. (Non nécessaire si vous utilisez Docker — l'image compile tout en interne.)
LibUA — la pile OPC UA. OpcUaTrap se compile à partir d'un fork légèrement modifié (0xAJStrike/LibUA, un fork de nauful/LibUA) qui ajoute des limites de défense en profondeur pour plusieurs CVE OPC UA ainsi que des réponses de tromperie optionnelles pour le honeypot.
Clonez les deux dépôts côte à côte sous un répertoire parent commun :
git clone https://github.com/0xAJStrike/OpcUaTrap.git
git clone https://github.com/0xAJStrike/LibUA.git
Disposition attendue (OpcUaTrap référence ../../../LibUA/NET-Core/LibUA/LibUA.csproj
relativement à son fichier projet, c'est-à-dire que LibUA se trouve à côté d'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
Le serveur démarre en ~400 ms et commence immédiatement à simuler les valeurs de processus.
Les profils sont des fichiers JSON dans src/OpcUaTrap/Profiles/. Chacun définit l'identité de l'installation, l'espace d'adressage complet, la classification des tags, les règles de simulation et la configuration de durcissement.
| Profil | --profile | Installation | Nœuds | Identité du fournisseur |
|---|---|---|---|---|
oil-gas | (par défaut) | Installation de traitement central PetroVista | ~120 | Schneider Electric SCADAPack 57x |
water-treatment | water-treatment | Usine de traitement des eaux municipale Cascade | ~100 | Rockwell Automation ControlLogix |
power-grid | power-grid | Poste de transformation 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