
Honeypot OPC UA de alta interação para ICS/SCADA — multiperfil (petróleo e gás, água, rede elétrica), simulação de processo em tempo real, pontuação de ameaças por sessão e integração com SIEM (syslog/CEF/webhooks/Elasticsearch). Construído em .NET 8 e LibUA.
Um honeypot OPC UA de alta interação para ambientes ICS/SCADA. Construído sobre o LibUA — uma pilha OPC UA Binary completa, não um emulador de protocolo. Simula sistemas de controle industrial realistas em múltiplos perfis de setores, com valores de processo em tempo real, detecção abrangente de ameaças e registro pronto para SIEM.
Criado por 0xAJStrike.
📄 Palestra: Read the Plant like a Blueprint — a apresentação da SecTor 2026 para a qual esta ferramenta foi criada (superfície de ataque OPC UA, design do honeypot e uma demonstração ao vivo).
A maioria dos honeypots ICS (Conpot, GRFICSv2) oferece emulação parcial de protocolo. O OpcUaTrap implementa o protocolo OPC UA Binary completo — negociação de canal seguro, ciclo de vida de sessão, assinaturas, histórico e todos os conjuntos de serviços. Ferramentas e scanners de exploração reais (OpalOPC, scripts OPC UA do Nmap) interagem com ele como fariam com um sistema em produção.
| Baixa | Média | OpcUaTrap | |
|---|---|---|---|
| Protocolo | Apenas banner | Emulação parcial | Pilha real completa |
| Estado da sessão | Nenhum | Básico | Ciclo de vida completo |
| Espaço de endereçamento | Estático / vazio | Punhado de nós | 100–130 nós realistas |
| Assinaturas | Não | Não | Sim — dados ao vivo enviados |
| Resiliência a exploits | Travamentos | 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
O honeypot agora está ativo em opc.tcp://<host>:4840. Troque a instalação com
-e OPCUATRAP_PROFILE=water-treatment (ou power-grid). A imagem é multi-arquitetura
(amd64 + arm64, portanto também roda em um Raspberry Pi), não-root, e persiste seu
certificado e logs NDJSON no volume opcuatrap-data. Detalhes completos do Docker
(Compose, todas as variáveis de ambiente) estão em Implantação → Docker.
.NET 9.0 SDK ou mais recente — necessário para compilar a partir do código-fonte, pois o LibUA incluído tem múltiplos alvos até net9.0. O honeypot em si roda no runtime .NET 8. (Não é necessário se você usar Docker — a imagem compila tudo internamente.)
LibUA — a stack OPC UA. O OpcUaTrap compila contra um fork levemente modificado (0xAJStrike/LibUA, um fork de nauful/LibUA) que adiciona limites de defesa em profundidade para várias CVEs do OPC UA, além de respostas opcionais de decepção do honeypot.
Clone ambos os repositórios lado a lado sob um diretório pai comum:
git clone https://github.com/0xAJStrike/OpcUaTrap.git
git clone https://github.com/0xAJStrike/LibUA.git
Layout esperado (OpcUaTrap referencia ../../../LibUA/NET-Core/LibUA/LibUA.csproj
em relação ao seu arquivo de projeto, ou seja, LibUA fica ao lado de 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
O servidor inicia em ~400ms e começa a simular valores de processo imediatamente.
Os perfis são arquivos JSON em src/OpcUaTrap/Profiles/. Cada um define a identidade da instalação, o espaço de endereçamento completo, a classificação de tags, as regras de simulação e a configuração de hardening.
| Perfil | --profile | Instalação | Nós | Identidade do Fornecedor |
|---|---|---|---|---|
oil-gas | (padrão) | 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