Aprende › Vulnerabilidades web

ICS/OT security: Modbus, Siemens S7, Purdue model y lecciones de Stuxnet

· 10 min de lectura

Los sistemas industriales (ICS/OT) usan protocolos sin autenticación (Modbus, DNP3, S7). Aprende el modelo Purdue, cómo auditar con python + pymodbus, casos famosos (Stuxnet, Industroyer, PIPEDREAM) y segmentación defensiva.

Los Sistemas de Control Industrial (ICS) y las Tecnologías Operacionales (OT) controlan plantas de agua, generación eléctrica, refinerías, manufacturing, oleoductos, trenes, puertos y cualquier infraestructura crítica. Desarrollados cuando el término «ciberseguridad» no existía (años 60-90), usan protocolos diseñados para disponibilidad y determinismo, sin autenticación ni cifrado. Modbus (1979), Siemens S7 (1980s), DNP3 (1990s), Profinet, EtherNet/IP: todos funcionan igual de bien cuando reciben comandos de un operador legítimo que de un atacante en la red.

El cambio en 2010 con Stuxnet despertó al mundo: un ciberataque estatal usando técnicas IT clásicas pudo sabotear centrifugadoras de enriquecimiento de uranio en Natanz, Irán. Desde entonces aparecen regularmente incidentes OT (Ukraine power grid 2015 y 2016, Triton 2017 contra planta petroquímica saudí, Colonial Pipeline 2021 forzó shutdown por IT compromise, Oldsmar Florida 2021 intento de envenenamiento de agua). En 2026 ICS/OT security es área crítica con escasez de talento y regulación acelerada (NIS2 en EU, CIRCIA en US).

Esta lección cubre la arquitectura de red industrial (modelo Purdue), los protocolos principales (foco en Modbus), auditoría práctica, casos reales y las defensas aplicables. Es la cuarta lección del bloque hardware/IoT de la Tanda 6.

Prueba solo contra equipos propios o simuladores. Un comando malicioso contra un PLC real puede causar daño físico, lesiones o muerte. Nunca experimentar contra sistemas productivos sin aislamiento total.

El modelo Purdue#

Modelo Purdue: Nivel 0 (sensores/actuadores), 1 (PLCs), 2 (SCADA/HMI), 3 (MES), 4 (ERP), 5 (Internet)
Modelo Purdue: Nivel 0 (sensores/actuadores), 1 (PLCs), 2 (SCADA/HMI), 3 (MES), 4 (ERP), 5 (Internet)

El Purdue Enterprise Reference Architecture define niveles jerárquicos para redes industriales:

  • Nivel 0 — Field devices: sensores (temperatura, presión), actuadores (válvulas, motores). Hardware físico sin CPU típicamente.
  • Nivel 1 — Basic control: PLCs (Programmable Logic Controllers), RTUs. Ejecutan lógica real-time para control de procesos.
  • Nivel 2 — Area supervisory: HMI (Human-Machine Interface), SCADA local. Operadores en sala de control.
  • Nivel 3 — Site operations: MES (Manufacturing Execution System), historians (databases con histórico de sensores).
  • Nivel 3.5 — DMZ: zona desmilitarizada entre OT e IT. Jump servers, firewalls.
  • Nivel 4 — Business planning: ERP, inventory. Mundo IT clásico.
  • Nivel 5 — Enterprise network / Internet.

El principio: tráfico solo baja desde IT a OT, nunca se salta niveles. En práctica, muchas arquitecturas tienen flat networks o atajos que anulan el modelo.

Protocolos industriales clave#

Modbus#

El más usado. Dos variantes:

  • Modbus RTU: serial (RS-232/485). Legacy pero masivo.
  • Modbus TCP: IP sobre puerto 502. El target moderno.

Sin autenticación, sin cifrado. Función codes para lectura/escritura de registros.

Comandos típicos (TCP):

  • 0x01 Read Coils: lee bits.
  • 0x03 Read Holding Registers: lee words.
  • 0x05 Write Single Coil: escribe bit.
  • 0x06 Write Single Register: escribe word.
  • 0x10 Write Multiple Registers.

Cualquiera con acceso TCP al puerto 502 puede leer sensores y comandar actuadores. No hay concept de «usuario».

Siemens S7#

Protocol propietario Siemens para PLCs S7-300/400/1200/1500. Puerto 102. Permite:

  • Leer/escribir memoria.
  • Start/stop CPU.
  • Upload/download programa.

Sin auth en versiones antiguas; S7-1500 añade password protection débil. Herramientas: snap7, plcscan.

DNP3#

Usado en power utilities. Puerto 20000. Secure DNP3 añade auth y crypto pero adoption es parcial.

EtherNet/IP#

Allen-Bradley (Rockwell). Puerto 44818. Para controladores ControlLogix.

Profinet#

Siemens real-time ethernet. Discovery via LLDP.

OPC UA#

Modern: cifrado y auth integrados. Transition path desde protocolos legacy. Adopción creciente.

Enumeración#

Primera fase de cualquier audit ICS:

# Nmap scripts específicos
nmap -p 102,502,20000,44818,47808 --script modbus-discover \
  --script s7-info 192.168.1.0/24

# Shodan queries (NUNCA contra activos no autorizados)
# port:502 → Modbus
# port:102 → S7
# "Schneider Electric" → specific vendors

# Herramientas específicas
plcscan 192.168.1.0/24

Un PLC expuesto típicamente responde con:

  • Vendor + model.
  • Firmware version.
  • Sometimes order number / serial.
  • Available function codes.

Lectura con pymodbus#

from pymodbus.client import ModbusTcpClient

client = ModbusTcpClient('192.168.1.100', port=502)
client.connect()

# Leer 10 holding registers desde addr 0
response = client.read_holding_registers(address=0, count=10, slave=1)
print(response.registers)
# [23, 45, 1200, 0, 0, 0, 100, 50, 1, 0]
# Cada uno representa algo: temperatura, presión, estado, etc.

# Leer coils
response = client.read_coils(address=0, count=16, slave=1)
print(response.bits)

client.close()

Sin auth. Para audit legítimo, identificar process variables en documentación del vendor.

Escritura: el riesgo real#

# Escribir register
client.write_register(address=100, value=50, slave=1)

# Escribir multiple
client.write_registers(address=100, values=[50, 100, 200], slave=1)

En un PLC real, escribir en el registro equivocado puede:

  • Abrir una válvula que no debería estar abierta.
  • Cambiar setpoint de temperatura.
  • Detener un motor en caliente.
  • Causar oscilaciones en control loops.

Jamás escribir en PLC productivo sin autorización explícita y plan de rollback. Daño potencial: equipo destruido, producto perdido, personas heridas.

Stuxnet: el canon moderno#

Stuxnet attack chain: USB infection → Windows LPE → S7 PLC → centrifuge sabotage
Stuxnet attack chain: USB infection → Windows LPE → S7 PLC → centrifuge sabotage

Descubierto 2010. Operación conjunta USA-Israel contra programa nuclear iraní. Lecciones técnicas:

  • Air gap bypass: entrada vía USB en PC de contratista.
  • 4 Windows zero-days usados para privesc + lateral.
  • S7 PLC exploit para modificar lógica de centrifugadoras (speed variations imperceptibles para operadores, destruían rotores).
  • HMI deception: reportaba parámetros normales al operador.
  • Payload selectivo: solo activaba si detectaba setup específico (frequency converters Vacon/Fararo Paya).

Nivel de sofisticación nuevo: probablemente $100M+ de inversión, años de desarrollo.

Otros casos famosos#

  • Ukraine power grid (2015): BlackEnergy3 + KillDisk. Primera power outage pública por cyberattack. 225k affected.
  • Ukraine (2016): Industroyer/CrashOverride. Auto-propagante en subestaciones.
  • Triton/TRISIS (2017): contra Safety Instrumented Systems (SIS) en planta petroquímica saudí. Attack contra sistema de seguridad diseñado para prevenir disasters.
  • Colonial Pipeline (2021): IT ransomware forzó shutdown OT por caution. 5 días sin pipeline operation.
  • Oldsmar FL water plant (2021): intento remoto de aumentar lye concentration en agua potable. Detectado por operador alerta.
  • PIPEDREAM / Incontroller (2022): toolkit modular para atacar OT. Primer ejemplo de framework commercial-grade para OT attacks.
  • Industroyer2 (2022): contra Ucrania en guerra. Disrupción parcial.

Cada uno añade dimensión: Stuxnet mostró feasibilidad, Ukraine mostró scale, Triton mostró targeting de safety, Oldsmar mostró accesibilidad desde Internet (TeamViewer expuesto), PIPEDREAM mostró industrialización.

Defensa: lo que funciona#

  • Segmentación Purdue estricta: firewalls entre niveles, deep packet inspection para protocolos industriales.
  • OT DMZ: data diodes para flujo unidireccional cuando es posible.
  • No RDP/VPN directo a OT desde corporate: jump servers con MFA + session recording.
  • Allow list network: cada endpoint con lista de peers permitidos.
  • IDS específico OT: Nozomi, Claroty, Dragos, Tenable OT. Entienden protocolos industriales.
  • Patching tolerante: equipos OT a veces no pueden parcharse (certified, uptime). Compensar con segmentation.
  • Change management: cambios en PLC logic documentados, version controlled, revisados.
  • Backups de PLC programs: para recovery rápido tras compromise.
  • USB policy estricta: contratistas con media sanitizada.
  • Training: operators trained para reconocer anomalías.

Normativa y estándares#

  • NIST SP 800-82 Rev 3: Guide to OT Security.
  • IEC 62443: estándar internacional ICS security. Múltiples partes.
  • ISA/IEC 62443-3-3: system security requirements.
  • NERC CIP: regulación power industry USA.
  • NIS2 Directive (EU 2024): critical infrastructure requirements extensa.
  • CIRCIA (US 2022): 72-hour reporting de cyber incidents.

Walkthrough: audit de PLC simulado#

Para fijar el patrón en laboratorio seguro.

Paso 1 — levantar simulador OpenPLC:

docker run -d -p 502:502 -p 8080:8080 openplc/openplc_v3
# PLC accesible en puerto 502 Modbus, 8080 web UI

Paso 2 — scan:

nmap -p 502,8080 --script modbus-discover 127.0.0.1
# Devuelve: Modbus, slave ID: 1, software: OpenPLC

Paso 3 — leer registros:

python3 -c "
from pymodbus.client import ModbusTcpClient
c = ModbusTcpClient('127.0.0.1', 502)
c.connect()
r = c.read_holding_registers(address=0, count=10, slave=1)
print('Registers 0-9:', r.registers)
c.close()
"

Paso 4 — identificar process: ver web UI OpenPLC, revisar ladder logic cargado, correlacionar registros con process variables.

Paso 5 — escribir con cautela (simulador, no equipo real):

python3 -c "
from pymodbus.client import ModbusTcpClient
c = ModbusTcpClient('127.0.0.1', 502)
c.connect()
c.write_register(address=100, value=50, slave=1)
c.close()
"

Paso 6 — reporte: ninguna autenticación, acceso TCP directo al 502, control total del process. Mitigación: segmentación de red, OT firewall, monitoring con IDS específico OT.

Rol de IT/OT convergence#

Trend creciente en 2026: convergencia IT/OT. Antes OT era mundo aislado con sus propios stacks. Ahora:

  • Historians en cloud (AWS, Azure Industrial IoT).
  • SCADA en Windows modernos con updates (y por tanto vulns IT).
  • PLCs modernos con Ethernet + web UIs.
  • OT data a analytics IT (predictive maintenance via ML).

Resultado: superficie de ataque IT se extiende a OT. Un ransomware que llega vía phishing a IT puede alcanzar HMIs si segmentation falla. Colonial Pipeline 2021 es ejemplo canónico: IT compromise forzó shutdown OT por caution.

Defensores deben entender ambos mundos: IT security + OT expertise combinados son el skill premium.

Errores comunes#

  • Flat network sin segmentation.
  • Jump servers compartidos entre IT y OT.
  • Antivirus en PLC o HMI sin whitelisting (interfiere con determinism).
  • Remote access tools (TeamViewer, AnyDesk) expuestas a Internet.
  • Protocolo legacy no monitorizado por IDS tradicional.
  • Patches diferidos indefinidamente sin compensating controls.

Preguntas frecuentes#

¿Es ilegal auditar Modbus en Shodan?#

Scanning general es gris. Interactuar con sistemas ajenos (lectura, escritura) es delito en jurisdicciones mayoría. Nunca contra sistemas no autorizados.

¿Cómo empiezo en ICS security?#

Lectura: «Hacking Exposed ICS» de Clint Bodungen. Cert: GICSP (SANS) o ISA/IEC 62443. Lab: Factory IO simulator, OpenPLC, Modbus simulators Python.

¿Qué certificaciones son relevantes?#

GICSP (GIAC Industrial Cyber Security Professional) es estándar. ISA/IEC 62443 Specialist/Expert para enterprise. Certified SCADA Security Architect (IACRB) también.

¿Trabajo OT paga bien?#

Sí, muy. Escasez de talento combinando IT + OT knowledge. Salarios 20-40% mayores que IT puro para roles senior. Contratistas en energy, water, chemical plants.

¿Dónde practico?#

El laboratorio armageddon de whoami-labs incluye simulación de red ICS con Modbus TCP server (PLC simulado) y HMI web. Practicas enumeración con nmap+scripts, lectura con pymodbus, identificación de process variables y propuesta defensiva.

¿Equipos físicos para lab personal?#

PLCs usados de eBay: Siemens S7-1200 (200-400 EUR), Allen-Bradley Micro820 (300 EUR), Schneider Modicon M221 (200 EUR). Combinado con Raspberry Pi + sensors básicos simulan proceso real. Inversión ~500 EUR para lab decente.

¿Simuladores gratis?#

OpenPLC (open source). Factory IO (comercial, excellent 3D). Modbus Pal. Snap7 server. Conpot (honeypot ICS). Cubren casos sin hardware.

¿Un PLC compromise se repara fácil?#

No siempre. Firmware malicioso persiste a power cycles. Rollback requiere flash original + authorized tools + possibly vendor support. En casos Stuxnet-like, hardware debió reemplazarse.

¿Qué pasa con Industrial IoT (IIoT)?#

IIoT (Rockwell FactoryTalk, Siemens MindSphere, GE Predix) añade cloud connectivity + analytics. Beneficio: predictive maintenance. Riesgo: ampliar superficie de ataque. Buenas plataformas cifran y autentican; mal integradas abren OT a Internet.

¿Cómo comunicar riesgo OT a ejecutivos?#

Traducir a business impact: $/día de downtime, safety incidents potenciales, regulatory fines (NIS2 hasta 10M€ o 2% revenue). Scenarios específicos: «si atacante llega a nuestro HMI de boiler, podría forzar sobrepresión que requeriría 72h recovery».

Resumen#

  • ICS/OT controla infraestructura crítica: agua, energía, manufacturing, oil/gas.
  • Modelo Purdue jerarquiza niveles 0-5; segmentación estricta es la defensa clave.
  • Protocolos clave: Modbus (puerto 502), Siemens S7 (102), DNP3, EtherNet/IP, Profinet.
  • Ninguno tiene autenticación nativa en versiones clásicas; OPC UA es excepción moderna.
  • Stuxnet (2010) inauguró era moderna; Ukraine, Triton, PIPEDREAM son escalones posteriores.
  • Defensa: segmentación, OT DMZ, IDS específico (Nozomi/Claroty/Dragos), MFA en jump servers, change management.
  • IEC 62443 + NIST 800-82 son referencias normativas.
  • Mercado con alta demanda, escasez de talento, salarios premium.

Fuentes y lecturas recomendadas#

Practícalo en estos laboratorios

Ver todos los laboratorios de esta categoría