Skip to content

Purple Team ptBR

André Henrique edited this page Jun 8, 2026 · 1 revision

Idioma: Português (pt-BR) | English: Purple-Team

Purple Team - Detecção e Análise em OT

Os módulos de purple team no IXF geram artefatos de detecção, analisam tráfego capturado e produzem regras para IDS/IPS em ambientes OT/ICS. Eles fazem a ponte entre a avaliação ofensiva e o monitoramento defensivo.


Índice


Analisador PCAP Modbus

Analisa tráfego Modbus/TCP capturado em busca de operações de escrita não autorizadas, padrões de reconhecimento e uso anômalo de function codes.

Caminho: assessment/detection/modbus_pcap_analyzer

Capturar o tráfego primeiro

# No segmento de rede que hospeda o CLP (Linux/Mac)
tcpdump -i eth0 -w /tmp/modbus_capture.pcap 'tcp port 502'

# Windows com Wireshark CLI
tshark -i "Ethernet" -w C:\tmp\modbus_capture.pcap -f "tcp port 502"

# Ou usar captura passiva MiTM do IXF
ixf > use assessment/lateral/modbus_mitm_inline
ixf (ModbusMiTM) > set TARGET 192.168.1.10
ixf (ModbusMiTM) > set simulate false
ixf (ModbusMiTM) > run   # Registra todos os frames Modbus - sem injeção

Analisar a captura

ixf > use assessment/detection/modbus_pcap_analyzer
ixf (ModbusPCAP) > set PCAP_FILE /tmp/modbus_capture.pcap
ixf (ModbusPCAP) > set OUTPUT_JSON /tmp/analysis.json
ixf (ModbusPCAP) > run

[*] Analyzing Modbus PCAP: /tmp/modbus_capture.pcap
[+] Parsed 847 Modbus transactions

Summary:
  Total transactions:       847
  Unique source IPs:        3
  Write operations:         12
  DANGEROUS operations:     4  <- FC5/6/15/16
  Recon operations:         2  <- FC43/FC17

[!] ALERT: 4 DANGEROUS Modbus write operations detected

Source       Destination  FC   Name                   Reg   Flag
10.0.1.100   10.0.1.10   16   Write Multiple Regs    100   [DANGEROUS]
10.0.1.100   10.0.1.10   5    Write Single Coil      1     [DANGEROUS]
10.0.1.200   10.0.1.10   43   Read Device ID         -     [RECON]
10.0.1.200   10.0.1.10   17   Report Server ID       -     [RECON]

[+] JSON report saved: /tmp/analysis.json

Estrutura do JSON de saída

{
  "summary": {
    "total_transactions": 847,
    "unique_src_ips": ["10.0.1.100", "10.0.1.50", "10.0.1.200"],
    "write_ops": 12,
    "dangerous_ops": 4,
    "recon_ops": 2
  },
  "dangerous_transactions": [
    {
      "src": "10.0.1.100", "dst": "10.0.1.10",
      "fc": 16, "fc_name": "Write Multiple Regs",
      "register": 100, "flag": "DANGEROUS"
    }
  ]
}

Gerador de Regras Suricata para OT

Gera regras Suricata IDS para detecção de anomalias em protocolos OT/ICS, incluindo assinaturas baseadas em CVE para malware ICS conhecido.

Caminho: assessment/detection/suricata_ot_rules_generator

Gerar as regras

ixf > use assessment/detection/suricata_ot_rules_generator
ixf (SuricataOT) > set OUTPUT_FILE /tmp/ics_rules.rules
ixf (SuricataOT) > set PROTOCOLS modbus,dnp3,bacnet,enip
ixf (SuricataOT) > set INCLUDE_CVE_RULES true
ixf (SuricataOT) > run

[*] Generating Suricata OT/ICS rules
[+] Modbus rules:    18 (write ops, function code abuse, broadcast)
[+] DNP3 rules:       9 (unsolicited response, unauthorized control)
[+] BACnet rules:    11 (who-is flood, foreign device abuse)
[+] EtherNet/IP:     8 (identity object abuse, forward open flood)
[+] CVE-based rules: 14 (TRITON, FrostyGoop, INCONTROLLER signatures)
[+] Total rules:     60

[+] Rules written to: /tmp/ics_rules.rules
[*] Test against capture: suricata -r /tmp/modbus_capture.pcap -S /tmp/ics_rules.rules -l /tmp/suricata_logs/

Exemplo de regra gerada

# Modbus Write Multiple Registers (FC16) - escrita não autorizada
alert tcp any any -> any 502 (
  msg:"ICS/OT Modbus FC16 Write Multiple Registers - Potential Unauthorized Write";
  content:"|00 00|"; depth:2; offset:2;
  byte_test:1,=,16,7;
  flow:established,to_server;
  classtype:attempted-admin;
  sid:9100016; rev:1;
)

Carregar no Suricata

# Testar contra PCAP
suricata -r /tmp/modbus_capture.pcap -S /tmp/ics_rules.rules -l /tmp/suricata_logs/

# Interface ao vivo
suricata -i eth0 -S /tmp/ics_rules.rules -l /var/log/suricata/

Gerador de Regras Zeek para Modbus

Gera scripts Zeek/Bro para análise de tráfego Modbus/TCP e alertas comportamentais.

Caminho: assessment/detection/modbus_zeek_rule_generator

Gerar os scripts

ixf > use assessment/detection/modbus_zeek_rule_generator
ixf (ModbusZeek) > set OUTPUT_DIR /tmp/zeek_scripts
ixf (ModbusZeek) > set ALERT_WRITE_OPS true
ixf (ModbusZeek) > set ALERT_BROADCAST true
ixf (ModbusZeek) > set BASELINE_WINDOW 3600
ixf (ModbusZeek) > run

[*] Generating Zeek Modbus analysis scripts
[+] modbus-write-monitor.zeek     Alert on FC5/6/15/16 write operations
[+] modbus-broadcast-detect.zeek  Detect broadcast unit_id=255 recon
[+] modbus-function-log.zeek      Full function code audit log
[+] modbus-anomaly-detect.zeek    Statistical baseline deviation (window: 3600s)

[+] Scripts saved to: /tmp/zeek_scripts/
[*] Run: zeek -i eth0 /tmp/zeek_scripts/
[*] Replay: zeek -r /tmp/modbus_capture.pcap /tmp/zeek_scripts/

Exemplo de script: monitor de escritas

# modbus-write-monitor.zeek
# Generated by IXF Modbus Zeek Rule Generator

event modbus_write_registers(c: connection, headers: ModbusHeaders,
                              start_address: count, registers: ModbusRegisters)
{
    local msg = fmt("Modbus FC16 Write: src=%s dst=%s start=%d count=%d",
                    c$id$orig_h, c$id$resp_h,
                    start_address, |registers|);
    NOTICE([$note=Modbus::WriteOperation, $msg=msg,
            $conn=c, $identifier=cat(c$id$orig_h)]);
}

Fluxo de Trabalho Combinado

Um engajamento típico de purple team em uma avaliação OT:

Etapa 1 - Capturar tráfego de linha de base

# 1 hora de operações normais
tcpdump -i eth0 -w /tmp/baseline.pcap 'tcp port 502' &
sleep 3600
kill %1

Etapa 2 - Executar módulo ofensivo em modo simulate

ixf > use exploits/protocols/modbus_write_multiple_registers
ixf (ModbusWriteMultiple) > set TARGET 192.168.1.10
ixf (ModbusWriteMultiple) > set simulate true
ixf (ModbusWriteMultiple) > run
# Anotar os FC e valores de registrador utilizados

Etapa 3 - Gerar regras de detecção com base no padrão de ataque

ixf > use assessment/detection/suricata_ot_rules_generator
ixf (SuricataOT) > set OUTPUT_FILE /tmp/ics_detection.rules
ixf (SuricataOT) > set PROTOCOLS modbus
ixf (SuricataOT) > run

Etapa 4 - Validar as regras contra a linha de base (deve estar limpa)

suricata -r /tmp/baseline.pcap -S /tmp/ics_detection.rules -l /tmp/baseline_results/
# Esperado: 0 alertas para tráfego normal

Etapa 5 - Capturar tráfego de ataque (somente lab autorizado) e validar detecção

# Capturar enquanto executa módulo ao vivo no lab
tcpdump -i eth0 -w /tmp/attack_session.pcap 'tcp port 502'
# ... executar módulo ao vivo contra o Conpot ...
suricata -r /tmp/attack_session.pcap -S /tmp/ics_detection.rules -l /tmp/attack_results/
# Esperado: alertas disparados em escritas FC16

Etapa 6 - Analisar com o analisador de PCAP

ixf > use assessment/detection/modbus_pcap_analyzer
ixf (ModbusPCAP) > set PCAP_FILE /tmp/attack_session.pcap
ixf (ModbusPCAP) > run
# Comparar operações perigosas com o cenário de ataque

Referência de Módulos

Módulo Caminho Direção Saída
modbus_pcap_analyzer assessment/detection/ Azul (Blue) Relatório JSON
suricata_ot_rules_generator assessment/detection/ Azul (Blue) Arquivo .rules
modbus_zeek_rule_generator assessment/detection/ Azul (Blue) Scripts .zeek
conpot_integration assessment/detection/ Ambos Detecção de honeypot / alvo de lab

Aviso Legal: O uso desta ferramenta é restrito a ambientes autorizados, laboratórios isolados e atividades legítimas de pesquisa e avaliação de segurança. A utilização não autorizada contra sistemas reais constitui crime federal. Os autores e a União Geek não assumem qualquer responsabilidade por uso indevido.

Autor: André Henrique (@mrhenrike) | União Geek | https://uniaogeek.com.br/

Clone this wiki locally