
Высокоинтерактивная приманка 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), запускается от непривилегированного пользователя и сохраняет свой
сертификат и NDJSON-логи в томе opcuatrap-data. Полные сведения о Docker
(Compose, все переменные окружения) приведены в разделе Развёртывание → Docker.
.NET 9.0 SDK или новее — требуется для сборки из исходного кода, поскольку входящая в комплект LibUA имеет несколько целевых платформ вплоть до net9.0. Сам honeypot работает на среде выполнения .NET 8. (Не требуется, если вы используете Docker — образ собирает всё внутри себя.)
LibUA — стек OPC UA. OpcUaTrap собирается на основе слегка изменённого форка (0xAJStrike/LibUA, форк nauful/LibUA), который добавляет ограничения эшелонированной защиты для нескольких CVE в OPC UA, а также необязательные ответы-обманки 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 | Подстанция передачи 138 кВ Ridgeline | ~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