Entrar ou criar conta

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.

Segurança industrial avançada com Zeek e Snort
Ligado ao treinamento Segurança industrial avançada com Zeek e Snort
ULC-LAB-INDU-0003 · Status de validaçãoNão validado pela Upnetix: roteiro derivado da documentação oficial, para você executar e validar
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
Objetivo

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/24

Equipamentos e software

ItemRequisito, licença ou versão
VM1: Estação de Engenharia1 vCPU, 1GB RAM, 1 NIC, Kali Linux ou Ubuntu Desktop
VM2: Sensor de Segurança2 vCPU, 2GB RAM, 2 NICs, Ubuntu Server 20.04+
VM3: PLC Simulado1 vCPU, 1GB RAM, 1 NIC, Ubuntu Server 20.04+
ZeekBSD · 5.2
SnortGPLv2 · 2.9
modbus-tkLGPL · a versão estável atual

Roteiro

  1. 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.

  2. 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 snort

    O que você deve ver: Zeek e Snort instalados sem erros.

  3. 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 up

    O que você deve ver: Bridge criada e interfaces conectadas.

  4. 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 502

    O que você deve ver: Servidor Modbus escutando na porta 502.

  5. Testar comunicação Modbus

    Da estação (VM1), teste conexão ao PLC usando telnet ou ferramenta Modbus.

    telnet 192.168.56.20 502

    O que você deve ver: Conexão estabelecida (mesmo sem resposta útil, conexão não é recusada).

  6. 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/modbus

    O que você deve ver: Zeek começa a registrar eventos Modbus em logs.

  7. 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 console

    O que você deve ver: Snort inicializa e exibe alertas em tempo real.

  8. 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.

  9. Analisar logs do Zeek

    Verifique os logs gerados por Zeek para eventos Modbus.

    cat /opt/zeek/logs/current/modbus.log

    O que você deve ver: Entradas detalhando transações Modbus, inclusive o comando Write.

  10. Analisar alertas do Snort

    Veja os alertas de Snort na console ou em arquivo de log.

    cat /var/log/snort/alert

    O que você deve ver: Alerta referente ao comando Write Single Coil.

  11. Simular varredura de portas

    Da estação, rode nmap no PLC para simular reconhecimento hostil.

    nmap -p 502 192.168.56.20

    O que você deve ver: Snort pode gerar alerta de scan, Zeek registra conexão.

  12. 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 br0

    O que você deve ver: Ambiente limpo, sem bridges ativas.

Como saber que funcionou

TesteComandoCritério
Verificar logs do Zeek após ataque simuladocat /opt/zeek/logs/current/modbus.logRegistro do comando Write Single Coil.
Verificar alerta do Snortcat /var/log/snort/alertAlerta com mensagem 'Modbus Write Single Coil'.
Testar comunicação normal Modbustelnet 192.168.56.20 502Conexão aceita sem alerta se não houver comando malicioso.
Verificar logs de Zeek para varreduracat /opt/zeek/logs/current/conn.logRegistro de tentativas de conexão do nmap.

Troubleshooting

SintomaCausa provávelCorreção
Zeek não gera logsInterface errada ou bridge não configuradaConfirme se Zeek monitora a interface br0 e se bridge está ativa.
Snort não alertaRegra mal escrita ou arquivo de configuração não inclui local.rulesRevise sintaxe da regra e inclusão em snort.conf.
PLC simulado não respondemodbus-tk não iniciado ou firewall bloqueando portaVerifique se o processo está rodando e libere porta 502.
Estação não conecta ao PLCBridge mal configurada ou IPs erradosCheque configuração de rede e IPs das VMs.
Snort não iniciaPermissões insuficientes ou conflito de interfaceExecute 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

  1. Zeek Documentation · Docs.zeek (docs.zeek.org)
  2. Snort Users Manual · Docs.snort (docs.snort.org)
Verificação editorial
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
Encontrou um erro? Escreva para comercial@upnetix.com.br com o endereço da página. A revisão semestral por IA nunca altera comandos ou configurações sem passar pela fila de revisão.