
Honeypot OPC UA de alta interacción para ICS/SCADA — multiperfil (petróleo y gas, agua, red eléctrica), simulación de procesos en vivo, puntuación de amenazas por sesión e integración con SIEM (syslog/CEF/webhooks/Elasticsearch). Construido sobre .NET 8 y LibUA.
Un honeypot OPC UA de alta interacción para entornos ICS/SCADA. Construido sobre LibUA — una pila completa de OPC UA Binary, no un emulador de protocolo. Simula sistemas de control industrial realistas a través de múltiples perfiles de industria con valores de proceso en vivo, detección integral de amenazas y registro listo para SIEM.
Creado por 0xAJStrike.
📄 Charla: Read the Plant like a Blueprint — la presentación de SecTor 2026 para la que se construyó esta herramienta (superficie de ataque de OPC UA, diseño del honeypot y una demostración en vivo).
La mayoría de los honeypots ICS (Conpot, GRFICSv2) ofrecen una emulación parcial del protocolo. OpcUaTrap implementa el protocolo completo OPC UA Binary — negociación de canal seguro, ciclo de vida de sesión, suscripciones, historial y todos los conjuntos de servicios. Las herramientas de explotación y escáneres reales (OpalOPC, scripts de OPC UA de Nmap) interactúan con él como lo harían con un sistema de producción.
| Baja | Media | OpcUaTrap | |
|---|---|---|---|
| Protocolo | Solo banner | Emulación parcial | Pila real completa |
| Estado de sesión | Ninguno | Básico | Ciclo de vida completo |
| Espacio de direcciones | Estático / vacío | Un puñado de nodos | 100–130 nodos realistas |
| Suscripciones | No | No | Sí — datos en vivo enviados |
| Resiliencia ante exploits | Se cae | Parcial | Sobrevive a frameworks completos |
docker run -d --name opcuatrap -p 4840:4840 \
-e OPCUATRAP_PROFILE=oil-gas \
-v opcuatrap-data:/data \
ghcr.io/0xajstrike/opcuatrap:latest
El honeypot ya está activo en opc.tcp://<host>:4840. Cambia la instalación con
-e OPCUATRAP_PROFILE=water-treatment (o power-grid). La imagen es multiarquitectura
(amd64 + arm64, por lo que también se ejecuta en una Raspberry Pi), no root, y persiste su
certificado y los registros NDJSON en el volumen opcuatrap-data. Los detalles completos de Docker
(Compose, todas las variables de entorno) están en Deployment → Docker.
.NET 9.0 SDK o superior — necesario para compilar desde el código fuente, porque el LibUA incluido tiene múltiples destinos hasta net9.0. El honeypot en sí se ejecuta en el runtime de .NET 8. (No es necesario si usas Docker — la imagen compila todo internamente.)
LibUA — la pila de OPC UA. OpcUaTrap se compila contra un fork ligeramente modificado (0xAJStrike/LibUA, un fork de nauful/LibUA) que añade límites de defensa en profundidad para varias CVE de OPC UA, además de respuestas de engaño opcionales para el honeypot.
Clona ambos repositorios uno al lado del otro bajo un directorio padre común:
git clone https://github.com/0xAJStrike/OpcUaTrap.git
git clone https://github.com/0xAJStrike/LibUA.git
Diseño esperado (OpcUaTrap hace referencia a ../../../LibUA/NET-Core/LibUA/LibUA.csproj
en relación con su archivo de proyecto, es decir, LibUA se encuentra junto a 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
El servidor se inicia en ~400 ms y comienza a simular valores de proceso de inmediato.
Los perfiles son archivos JSON en src/OpcUaTrap/Profiles/. Cada uno define la identidad de la instalación, el espacio de direcciones completo, la clasificación de etiquetas, las reglas de simulación y la configuración de endurecimiento.
| Perfil | --profile | Instalación | Nodos | Identidad del proveedor |
|---|---|---|---|---|
oil-gas | (predeterminado) | Instalación Central de Procesamiento PetroVista | ~120 | Schneider Electric SCADAPack 57x |
water-treatment | water-treatment | Planta Municipal de Tratamiento de Agua Cascade | ~100 | Rockwell Automation ControlLogix |
power-grid | power-grid | Subestación de Transmisión 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