ULC Lab · implementação reproduzível
Laboratório: Monitoramento e detecção de ameaças OT com Zeek e Snort em rede industrial simulada
Você terá um ambiente virtual com Zeek e Snort monitorando tráfego entre uma estação de engenharia e um PLC simulado, detectando e registrando possíveis ameaças OT. A execução completa leva cerca de 120 minutos.

- Duração estimada
- 120 min
- Passos
- 12
- Validações
- 4
- Versões da documentação consultada
- Zeek 5.2 · Snort 2.9 · modbus-tk a versão estável atual
Este laboratório ensina a montar um ambiente de monitoramento ativo para redes industriais, usando Zeek e Snort em uma máquina Linux para inspecionar e detectar tráfego suspeito entre uma estação de engenharia e um PLC virtual. O objetivo é mostrar, na prática, como identificar ataques comuns em OT, como varreduras e comandos não autorizados, utilizando apenas ferramentas de código aberto.
Topologia
Três máquinas virtuais em uma rede isolada: uma representa a estação de engenharia (192.168.56.10), outra simula um PLC (192.168.56.20) com um servidor Modbus, e a terceira é o sensor de segurança (192.168.56.100) rodando Zeek e Snort em modo bridge, interceptando todo o tráfego entre as duas primeiras.
[Estação] [Sensor] [PLC]
192.168.56.10 <-> 192.168.56.100 <-> 192.168.56.20
| | |
VM1 (Kali) VM2 (Ubuntu) VM3 (Ubuntu)
| [Zeek+Snort] |
Rede: 192.168.56.0/24Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM1: Estação de Engenharia | 1 vCPU, 1GB RAM, 1 NIC, Kali Linux ou Ubuntu Desktop |
| VM2: Sensor de Segurança | 2 vCPU, 2GB RAM, 2 NICs, Ubuntu Server 20.04+ |
| VM3: PLC Simulado | 1 vCPU, 1GB RAM, 1 NIC, Ubuntu Server 20.04+ |
| Zeek | BSD · 5.2 |
| Snort | GPLv2 · 2.9 |
| modbus-tk | LGPL · a versão estável atual |
Roteiro
- Preparar as VMs e a rede virtual
Crie três VMs na mesma rede virtual (ex: VirtualBox rede interna 192.168.56.0/24). O sensor deve ter duas interfaces para atuar em bridge.
O que você deve ver: As três VMs se pingam entre si.
- Instalar Zeek e Snort no sensor
No sensor (VM2), instale Zeek e Snort. Ambos são essenciais para inspeção profunda e detecção de assinaturas.
sudo apt update && sudo apt install zeek snortO que você deve ver: Zeek e Snort instalados sem erros.
- Configurar bridge no sensor
Configure o sensor para atuar como bridge, interceptando o tráfego entre estação e PLC.
sudo apt install bridge-utils sudo brctl addbr br0 sudo brctl addif br0 eth0 eth1 sudo ip link set br0 upO que você deve ver: Bridge criada e interfaces conectadas.
- Instalar e configurar servidor Modbus no PLC simulado
No PLC (VM3), instale modbus-tk para simular um servidor Modbus TCP, protocolo comum em OT.
sudo apt install python3-pip pip3 install modbus-tk python3 -m modbus_tk.modbus_tcp -p 502O que você deve ver: Servidor Modbus escutando na porta 502.
- Testar comunicação Modbus
Da estação (VM1), teste conexão ao PLC usando telnet ou ferramenta Modbus.
telnet 192.168.56.20 502O que você deve ver: Conexão estabelecida (mesmo sem resposta útil, conexão não é recusada).
- Configurar Zeek para monitorar tráfego Modbus
No sensor, ative o script Modbus do Zeek para analisar tráfego OT.
sudo zeekctl deploy sudo zeek -i br0 policy/protocols/modbusO que você deve ver: Zeek começa a registrar eventos Modbus em logs.
- Configurar Snort para detectar ataques Modbus
No sensor, adicione regra simples de detecção de comando Modbus Write Single Coil.
echo 'alert tcp any any -> any 502 (content:"\x05\x00"; msg:"Modbus Write Single Coil"; sid:1000001;)' | sudo tee -a /etc/snort/rules/local.rules sudo snort -i br0 -c /etc/snort/snort.conf -A consoleO que você deve ver: Snort inicializa e exibe alertas em tempo real.
- Executar ataque simulado da estação
Na estação, envie pacote Modbus Write Single Coil usando script Python ou ferramenta Modbus.
python3 -c 'from pymodbus.client.sync import ModbusTcpClient; c=ModbusTcpClient("192.168.56.20"); c.write_coil(1, True); c.close()'O que você deve ver: Snort gera alerta e Zeek registra evento Modbus Write.
- Analisar logs do Zeek
Verifique os logs gerados por Zeek para eventos Modbus.
cat /opt/zeek/logs/current/modbus.logO que você deve ver: Entradas detalhando transações Modbus, inclusive o comando Write.
- Analisar alertas do Snort
Veja os alertas de Snort na console ou em arquivo de log.
cat /var/log/snort/alertO que você deve ver: Alerta referente ao comando Write Single Coil.
- Simular varredura de portas
Da estação, rode nmap no PLC para simular reconhecimento hostil.
nmap -p 502 192.168.56.20O que você deve ver: Snort pode gerar alerta de scan, Zeek registra conexão.
- Desligar e limpar ambiente
Pare os serviços e remova as bridges para restaurar as VMs.
sudo ip link set br0 down sudo brctl delbr br0O que você deve ver: Ambiente limpo, sem bridges ativas.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar logs do Zeek após ataque simulado | cat /opt/zeek/logs/current/modbus.log | Registro do comando Write Single Coil. |
| Verificar alerta do Snort | cat /var/log/snort/alert | Alerta com mensagem 'Modbus Write Single Coil'. |
| Testar comunicação normal Modbus | telnet 192.168.56.20 502 | Conexão aceita sem alerta se não houver comando malicioso. |
| Verificar logs de Zeek para varredura | cat /opt/zeek/logs/current/conn.log | Registro de tentativas de conexão do nmap. |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Zeek não gera logs | Interface errada ou bridge não configurada | Confirme se Zeek monitora a interface br0 e se bridge está ativa. |
| Snort não alerta | Regra mal escrita ou arquivo de configuração não inclui local.rules | Revise sintaxe da regra e inclusão em snort.conf. |
| PLC simulado não responde | modbus-tk não iniciado ou firewall bloqueando porta | Verifique se o processo está rodando e libere porta 502. |
| Estação não conecta ao PLC | Bridge mal configurada ou IPs errados | Cheque configuração de rede e IPs das VMs. |
| Snort não inicia | Permissões insuficientes ou conflito de interface | Execute como root e confirme interface correta (br0). |
Segurança e hardening
- Nunca rode Zeek ou Snort como root em produção; use usuários dedicados.
- Restrinja acesso SSH às VMs apenas à máquina de administração.
- Desative serviços e bridges após o laboratório para evitar exposição.
- Use senhas fortes nas VMs e atualize o sistema antes de iniciar.
Checklist final
Referências
- Zeek Documentation · Docs.zeek (docs.zeek.org)
- Snort Users Manual · Docs.snort (docs.snort.org)
- Publicado
- 09/09/2026
- Última revisão
- 09/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 2 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
