◇ OpenCyber Academy
Técnico · Capítulo 15 · Español

Capítulo 15 — Infraestructura crítica y seguridad sectorial: integración y dependencias

Aprendizaje gratuito y abierto para quienes desean proteger a las personas y la tecnología. No se necesita una cuenta para estudiar ni consultar las respuestas.

Capítulo 15 — Infraestructura crítica y seguridad sectorial: integración y dependencias

Mapa de la lección

Lección 15 publicada. Mapa, ejemplo, EX057.

flowchart TD
  N0["Resultados de aprendizaje y conexión"]
  N1["15.1 Interdependencia"]
  N2["15.2 Las dependencias como grafo"]
  N3["15.5 Actividad práctica"]
  N4["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX057"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje y conexión"]
  N1["15.1 Interdependencia"]
  N2["15.2 Las dependencias como grafo"]
  N3["15.5 Actividad práctica"]
  N4["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX057"]
[Resultados de aprendizaje y conexión]
    |
    v
[15.1 Interdependencia]
    |
    v
[15.2 Las dependencias como grafo]
    |
    v
[15.5 Actividad práctica]
    |
    v
[Síntesis del capítulo]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX057]

Resultados de aprendizaje y conexión

Al terminar este capítulo debería ser capaz de:

El capítulo 13 encontró una ruta hacia KW-04 que eludía el cortafuegos a través de la red de un operador de telecomunicaciones. Era una dependencia que nadie había dibujado. Este capítulo las dibuja de forma sistemática.

15.1 Interdependencia

Las infraestructuras críticas dependen unas de otras de forma física (la energía para las bombas), a través de la información (la telemetría sobre la red de un operador), geográfica (conductos e instalaciones compartidos) y lógica (personal, software y administración compartidos). Esta clasificación procede del artículo, ampliamente citado, de Rinaldi, Peerenboom y Kelly (Rinaldi et al., 2001). Para un técnico, las sorpresas más frecuentes son lógicas: un directorio, un clúster de hipervisores, una fuente de hora o un colector de supervisión compartidos por sistemas cuyos responsables creen, cada uno, que es suyo.

Para un técnico, las sorpresas más frecuentes son lógicas: un directorio, un hipervisor o una fuente de hora que comparten varios servicios sin que ningún responsable los reclame. Dibújelos primero, y después los enlaces físicos y de los operadores de telecomunicaciones. El Lab 15 hace visibles los nodos compartidos como recuentos entre servicios.

15.2 Las dependencias como grafo

Escriba cada dependencia como «A necesita B». Para averiguar qué falla cuando falla B, siga las aristas hacia atrás: todo lo que necesita B, todo lo que necesita eso, y así sucesivamente. Es una búsqueda en anchura sobre el grafo invertido. Importan dos resultados: el conjunto de servicios afectados y la ruta por la que se ve afectado cada uno, porque la ruta le dice dónde un control o una redundancia romperían la cadena. La compartición indirecta es el caso importante. En el modelo del KVROC, el servidor del BMS del hospital y el servidor SCADA se autentican ambos contra ad-ops, que se ejecuta en esx-03, mientras que el procesador de comunicaciones de la red eléctrica también se ejecuta en esx-03. Ningún responsable de servicio considera esx-03 como «suyo»; los tres dependen de él.

15.3 Ejemplo resuelto: las dependencias del KVROC (sintético)

Lab 15 (guárdelo como lab15.py y ejecútelo con python3 lab15.py):

# Lab 15 - trace failure impact through technical dependencies (offline, standard library only)
# Synthetic dependency map for the Kestrel Vale operations centre: "A needs B" edges.
from collections import deque
needs = {
 "water-telemetry": ["scada-01", "cell-router-kw", "fw-01"],
 "scada-01": ["ad-ops", "ntp-ops", "hist-02", "esx-02"],
 "hist-02": ["esx-02", "san-01"],
 "hospital-bms": ["bms-server", "fw-02"],
 "bms-server": ["esx-02", "ad-ops"],
 "grid-ss3-telecontrol": ["fep-01", "telco-mpls"],
 "fep-01": ["ntp-ops", "esx-03"],
 "ad-ops": ["esx-03"],
 "ntp-ops": ["gps-clock"],
}
def impacted(failed):
    rev = {}
    for a, bs in needs.items():
        for b in bs: rev.setdefault(b, []).append(a)
    seen, q = set(), deque([failed])
    while q:
        for a in rev.get(q.popleft(), []):
            if a not in seen: seen.add(a); q.append(a)
    return sorted(seen)
services = {"water-telemetry", "hospital-bms", "grid-ss3-telecontrol"}
for comp in ["esx-02", "esx-03", "gps-clock", "san-01", "telco-mpls"]:
    hit = impacted(comp)
    print(f"{comp:<10} -> services {sorted(services & set(hit))} via {len(hit)} dependants")
counts = {c: len(services & set(impacted(c))) for c in {b for bs in needs.values() for b in bs}}
print("shared by all three services:", sorted(c for c, n in counts.items() if n == 3))

Salida esperada (Python 3.13.5):

esx-02     -> services ['hospital-bms', 'water-telemetry'] via 5 dependants
esx-03     -> services ['grid-ss3-telecontrol', 'hospital-bms', 'water-telemetry'] via 7 dependants
gps-clock  -> services ['grid-ss3-telecontrol', 'water-telemetry'] via 5 dependants
san-01     -> services ['water-telemetry'] via 3 dependants
telco-mpls -> services ['grid-ss3-telecontrol'] via 1 dependants
shared by all three services: ['esx-03']

esx-02 aloja el servidor SCADA, el historiador y el servidor del BMS, de modo que su fallo afecta a la supervisión del agua y del hospital. esx-03 es el único componente que afecta a los tres servicios: directamente al procesador de comunicaciones de la red eléctrica e indirectamente, a través del directorio, a los otros dos. gps-clock, la referencia de ntp-ops, afecta al agua y a la red eléctrica: perderlo no detiene nada de inmediato, pero el capítulo 7 mostró lo que hacen los relojes a la deriva con toda investigación posterior. telco-mpls solo afecta a la red eléctrica, y san-01 solo al agua.

De ahí se siguen acciones técnicas: el directorio necesita un segundo controlador de dominio en otro servidor (y hay que probar el comportamiento del servidor SCADA cuando el directorio no está accesible: ¿pueden los operadores seguir iniciando sesión en la HMI?); ntp-ops necesita una segunda referencia independiente y supervisión del desfase; la capacidad de esx-03 y su grupo de administradores pasan a ser una cuestión intersectorial que se revisa con los tres responsables.

15.4 Los puntos de integración son límites

Cada lugar en el que el servicio se conecta con algo que no controla es un límite:

El trabajo de CISA sobre las funciones críticas nacionales enmarca estas dependencias a escala nacional (National Critical Functions); el técnico aplica el mismo razonamiento a un centro de operaciones.

15.5 Actividad práctica

Añada un nodo power-ups-a que necesitan tanto esx-02 como esx-03, y un nodo cell-carrier que necesitan tanto cell-router-kw como telco-mpls. Vuelva a ejecutar el Lab 15 y anote qué componentes comparten ahora los tres servicios. Proponga después un cambio técnico para cada uno. Tras el cambio, anote qué componentes comparten los tres servicios y proponga una respuesta técnica para cada uno, como un segundo controlador de dominio o una segunda acometida eléctrica. Mantenga las aristas nuevas en el mismo formato que el laboratorio para que el grafo siga ejecutándose. Revise las propuestas con los tres responsables de servicio antes de cualquier cambio.

15.6 Errores comunes y límites

Ejercicios — capítulo 15

EX057 — Las rutas importan. Objetivo: trazar una ruta de impacto. Entradas: el Lab 15. Pasos: modifique el programa para que imprima, para esx-03, una ruta de dependencia desde él hasta cada servicio afectado. Evidencia esperada: código y tres rutas. Rúbrica: 3 = por ejemplo, esx-03 → fep-01 → grid-ss3-telecontrol; esx-03 → ad-ops → scada-01 → water-telemetry; esx-03 → ad-ops → bms-server → hospital-bms; explica que un segundo directorio en otro servidor rompe dos de las tres; 2 = rutas sin interpretación; 1 = intentado; 0 = nada.

EX058 — Nuevos componentes compartidos. Objetivo: realizar la actividad. Entradas: la actividad 15.5. Pasos: ejecútela e interprétela. Evidencia esperada: salida y dos cambios técnicos. Rúbrica: 3 = power-ups-a y esx-03 compartidos por los tres (y cell-carrier afectando al agua y a la red eléctrica); cambios como alimentaciones de SAI separadas para los dos servidores y un segundo operador o una ruta de radio para las estaciones más críticas; 2 = solo la salida; 1 = parcial; 0 = nada.

EX059 — Prueba en modo degradado. Objetivo: probar el comportamiento cuando falla una dependencia. Entradas: ad-ops no disponible. Pasos: redacte un plan de prueba delimitado, en una ventana de mantenimiento, para establecer si los operadores pueden seguir iniciando sesión en la HMI y si continúa el sondeo del SCADA. Evidencia esperada: plan de prueba con condiciones de parada. Rúbrica: 3 = probar primero en una réplica de reserva o de laboratorio; en producción, bloquear solo la ruta de la HMI hacia el directorio durante una ventana breve con operaciones presente; comprobar los inicios de sesión en caché, las cuentas locales de emergencia y la continuidad del sondeo; condiciones de parada; evidencia; 2 = sin el paso de la réplica; 1 = «apagar el controlador de dominio»; 0 = nada.

EX060 — Sentido de la exportación. Objetivo: configurar correctamente un límite. Entradas: actualmente, el servidor corporativo de informes inicia sesión cada noche en hist-02 con una contraseña guardada para extraer el CSV. Pasos: rediséñelo y enumere los cambios de configuración en ambos equipos y en fw-01. Evidencia esperada: diseño y cambios. Rúbrica: 3 = hist-02 envía por HTTPS a un único punto de destino; se elimina la credencial corporativa dentro de Z2; se invierte el sentido de la regla de fw-01 (solo Z2 → Z6, equipo y puerto específicos); se comprueba la integridad del envío (resumen en la carga útil o archivo firmado); supervisión de los envíos fallidos; 2 = envío sin eliminar la credencial antigua; 1 = vago; 0 = nada.

Síntesis del capítulo

Los servicios fallan a través de aquello de lo que dependen, y las dependencias más peligrosas son las compartidas que ningún responsable reclama. Modele las dependencias como un grafo, recórralo hacia atrás desde cada componente y examine las rutas, no solo los recuentos. Trate cada punto de integración (routers de estación, operadores de telecomunicaciones, pasarelas de proveedores, exportaciones, directorio y hora) como un límite sujeto a la misma disciplina de control, cambio y supervisión que el cortafuegos.

Siga estudiando — capítulo 15 de 18

← Capítulo 14 · Índice de capítulos del curso · Capítulo 16 →

Continúe con la siguiente lección escrita.

Respuestas desarrolladas

EX057 — Las rutas importan. Mantenga un mapa parent en la búsqueda en anchura y recórralo hacia atrás desde cada servicio. Rutas: esx-03 → fep-01 → grid-ss3-telecontrol; esx-03 → ad-ops → scada-01 → water-telemetry; esx-03 → ad-ops → bms-server → hospital-bms. Un segundo servidor de directorio en otro equipo rompe las rutas del agua y del hospital; la ruta de la red eléctrica necesita redundancia de fep-01 en otro servidor.

EX058 — Nuevos componentes compartidos. Tras añadir los nodos, compartidos por los tres servicios: esx-03 y power-ups-a (verificado). cell-carrier afecta al agua y a la red eléctrica. Cambios: alimentar esx-02 y esx-03 desde SAI y circuitos separados; dar a las estaciones más críticas y al telecontrol de SS-3 una segunda ruta de comunicación independiente (otro operador o radio con licencia).

EX059 — Prueba en modo degradado. Primero en una réplica o en una HMI de reserva: bloquear su tráfico hacia el directorio y probar el inicio de sesión con credenciales en caché y con la cuenta local de emergencia documentada. En producción, en una ventana acordada y con operaciones de Kestrel Water presente: bloquear durante 10 minutos en fw-01 la ruta de la HMI hacia ad-ops; confirmar que los operadores pueden iniciar sesión y actuar y que el sondeo de scada-01 continúa (recuento del historiador). Condiciones de parada: cualquier pérdida de la visión o del control del operador, cualquier alarma; eliminación inmediata de la regla como reversión. Evidencia: registro del cambio de regla, registros de inicio de sesión, recuentos del historiador.

EX060 — Sentido de la exportación. hist-02 envía el CSV por HTTPS a report-01 con una credencial de servicio que solo puede subir archivos; se eliminan la cuenta corporativa y la contraseña guardada que se usaban para iniciar sesión en hist-02, y se rota la contraseña; fw-01 solo permite hist-02 → report-01 tcp/443, y nada desde Z6 hacia hist-02; incluir un resumen SHA-256 del archivo en los metadatos de la subida y comprobarlo al recibirlo; alertar si no ha llegado ningún envío a las 06:30.