graph TD subgraph Origen ["Red SCADA (Nivel 3)"] HMI["Estación HMI
IP: 192.168.10.5"] end subgraph Conducto ["Firewall Industrial (DPI Activado)"] FW["Reglas del Firewall"] ACL{"ACL L3/L4:
IP Dest = 10.0?
Puerto = 502?"} DPI{"DPI L7:
¿Es Lectura o Escritura?"} FW --> ACL ACL -- "SÍ" --> DPI ACL -- "NO" --> Drop1(("Bloqueado")) DPI -- "Lectura (FC 03)" --> Allow(("Permitido")) DPI -- "Escritura (FC 05)" --> Drop2(("Bloqueado")) end subgraph Destino ["Red de Control (Nivel 1)"] PLC["PLC Control
IP: 192.168.10.0"] end HMI -- "Envía Trama Modbus" --> FW Allow --> PLC style FW fill:#34495e,color:white style Drop1 fill:#e74c3c,color:white style Drop2 fill:#e74c3c,color:white style Allow fill:#27ae60,color:white

1. ¿Qué hace "Industrial" a un Firewall?

Un Firewall (cortafuegos) es el guardián o "Conducto" principal entre dos zonas de seguridad. A nivel de hardware, los firewalls industriales (como los SCALANCE S de Siemens o los Stratix de Rockwell) se diferencian de los de IT en que se montan en carril DIN, soportan temperaturas extremas y pueden funcionar con fuentes redundantes de 24V DC. Pero la diferencia verdaderamente crucial para un técnico de UF1794 está en el software: su capacidad para entender los protocolos de la fábrica.



2. El Filtrado Tradicional (ACLs) y su Problema

Los firewalls tradicionales operan en las Capas 3 y 4 del modelo OSI usando Listas de Control de Acceso (ACL). Una regla típica dice: "Permitir tráfico desde la IP del SCADA hacia la IP del PLC, solo si el puerto de destino es el 502 (TCP)".

El problema: Los protocolos industriales clásicos como Modbus TCP, EtherNet/IP o PROFINET fueron diseñados hace décadas, cuando la ciberseguridad no existía. Carecen de cifrado y de autenticación de comandos. Si abres el puerto 502 en un firewall tradicional para que el SCADA pueda leer la temperatura (lo cual es legítimo), un atacante que haya comprometido el SCADA puede usar ese mismo puerto 502 para enviar un comando de "Escribir un 0 en la válvula de refrigeración" o "Detener CPU". El firewall tradicional verá IP correcta y puerto correcto, y dejará pasar el ataque letal.



3. La Solución: Inspección Profunda de Paquetes (DPI)

Para proteger redes OT modernas, necesitamos Deep Packet Inspection (DPI). Un firewall con DPI no se detiene en la Capa 4 (puertos). Abre el "sobre" de los datos (Payload) y lee la Capa 7 (Aplicación).

El firewall industrial está programado para entender el "idioma" de Modbus, DNP3, CIP, etc. Con DPI activado, podemos crear reglas de seguridad granulares, casi quirúrgicas:

  • Regla 1: Permitir conexión por puerto 502, PERO sólo si el código de función Modbus es 03 (Read Holding Registers) o 04 (Read Input Registers).
  • Regla 2: Bloquear y registrar cualquier trama Modbus cuyo código de función sea 05 (Write Single Coil) o 06 (Write Single Register).

De esta manera, la HMI puede seguir monitorizando la planta en tiempo real, pero es matemáticamente imposible que un malware envíe una orden de escritura dañina a través del firewall.



4. Desafíos de Implementar DPI en OT

El poder de la DPI tiene un coste. "Abrir y leer" todos los paquetes consume muchos recursos de CPU en el firewall. En el mundo IT esto introduce un pequeño retraso que nadie nota, pero como vimos en la lección de la brecha IT/OT, en la planta la latencia (Jitter) puede romper el proceso.

Por eso, la DPI se suele colocar en la frontera (Conduit) entre la Red de Supervisión (SCADA) y la Red de Control (PLCs). Nunca se debe colocar un firewall con DPI "en medio" de una comunicación de E/S de tiempo real (como entre un PLC y sus servos por PROFINET RT), ya que el retraso introducido por el análisis de los paquetes provocaría fallos de Watchdog y detendría la máquina.

FIREWALL TRADICIONAL vs INSPECCIÓN PROFUNDA (DPI) MOTOR DE INSPECCIÓN DEL FIREWALL TCP 502 FC=03 (Read) TCP 502 FC=05 (Write) ACL L3/L4 Si Port == 502 Entonces PASS DPI Capa 7 Si FC == 03 (Read) Entonces PASS Si FC == 05 (Write) Entonces DROP Pasa al PLC Bloqueado por DPI Un Firewall tradicional dejaría pasar la escritura maliciosa porque el puerto (502) es correcto.
Figura 1: La mecánica de la Inspección Profunda de Paquetes (DPI). El filtro ACL básico (Capa 4) solo ve que ambos paquetes usan el puerto Modbus TCP legítimo (502) y los deja pasar. Es el motor DPI (Capa 7) el que desensambla el paquete, "lee" las instrucciones del protocolo Modbus y puede bloquear quirúrgicamente comandos peligrosos (FC 05) mientras permite la monitorización normal (FC 03).
Fuente: Elaboración Propia. Licencia: CC BY-NC 4.0.

📝 Evaluación Técnica: Filtrado y DPI

1. Tienes un firewall tradicional configurado con una ACL que permite todo el tráfico TCP en el puerto 502 desde la red corporativa hacia la red de PLCs para que los ingenieros puedan monitorizar el proceso usando Modbus. ¿Cuál es la grave vulnerabilidad de esta configuración?

2. ¿Qué ventaja aporta la tecnología DPI (Deep Packet Inspection) en un firewall industrial frente a las Listas de Control de Acceso (ACL) estándar?

3. Sabiendo que el motor DPI de un firewall necesita mucha potencia de procesamiento para "abrir y leer" cada paquete, ¿dónde sería un ERROR arquitectónico colocar un firewall con inspección DPI estricta?

🤖 Ejercicio Práctico 7: Simulador Lógico de Firewall DPI en Python

Objetivo: Programar la lógica que usa un motor DPI para destripar un paquete y tomar decisiones basadas en su interior.

Copia el siguiente *prompt* y pégalo en un modelo de IA (como ChatGPT, Gemini o Claude).

Actúa como ingeniero de ciberseguridad desarrollando el firmware de un firewall industrial. Escribe un script en Python que simule un motor de Inspección Profunda (DPI) para el protocolo Modbus TCP. El script debe: 1. Definir una estructura (ej. clase o diccionario) que represente un paquete de red con los campos: `ip_origen`, `ip_destino`, `puerto_dst`, y `payload_hex` (cadena hexadecimal simulando los datos Modbus). 2. Crear una función de "Filtro ACL" que retorne True solo si el `puerto_dst` es 502. 3. Crear una función de "Filtro DPI" que extraiga el 8º byte del `payload_hex` (que en Modbus TCP corresponde al Function Code - FC). 4. La regla DPI debe ser: "Permitir solo lecturas (FC 03 o 04). Bloquear escrituras o diagnósticos (Cualquier otro FC)". 5. Simula dos paquetes: Uno con payload `000100000006010300000002` (FC=03) y otro con payload `00020000000601050000FF00` (FC=05). 6. Pasa ambos paquetes por el ACL y luego por el DPI, imprimiendo en consola el veredicto final: [PASS] o [DROP] justificando la razón. Comenta el código para que un estudiante de automatización entienda que el DPI es básicamente buscar un byte específico dentro de una larga cadena de datos.