Mapa de la lección
Lección 23 publicada. Mapa, ejemplo, EX067.
flowchart TD
N0["Resultados de aprendizaje"]
N1["23.1 El programa puede fallar de forma peligrosa"]
N2["23.2 STRIDE sobre las herramientas del CNHP"]
N3["23.3 Las amenazas a la planta se quedan en el anális"]
N4["Nota práctica"]
N5["23.1b Abuso frente a mal uso y lista de pendientes"]
N6["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
N6 --> EX["Ejemplo resuelto"]
EX --> Q["Ejercicio EX067"]
Dibujo lógico
flowchart LR
N0["Resultados de aprendizaje"]
N1["23.1 El programa puede fallar de forma peligrosa"]
N2["23.2 STRIDE sobre las herramientas del CNHP"]
N3["23.3 Las amenazas a la planta se quedan en el anális"]
N4["Nota práctica"]
N5["23.1b Abuso frente a mal uso y lista de pendientes"]
N6["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX067"]
[Resultados de aprendizaje]
|
v
[23.1 El programa puede fallar de forma peligrosa]
|
v
[23.2 STRIDE sobre las herramientas del CNHP]
|
v
[23.3 Las amenazas a la planta se quedan en el anális]
|
v
[Nota práctica]
|
v
[23.1b Abuso frente a mal uso y lista de pendientes]
|
v
[Síntesis del capítulo]
|
v
[Ejemplo resuelto] --> [Ejercicio EX067]
Resultados de aprendizaje
Usted podrá (1) enumerar los fallos del propio programa de seguridad de TO; (2) aplicar una pasada ligera de STRIDE sobre las herramientas; (3) incorporar los resultados a los requisitos sin construir módulos de explotación.
23.1 El programa puede fallar de forma peligrosa
Listas de permitidos que fallan de forma abierta, integración continua de alcanzabilidad omitida, detectores con tormentas silenciosas de falsas alarmas, aplazamientos de parches sin fecha: todo ello amenaza la seguridad de procesos y la honestidad, no solo la confidencialidad de una herramienta. Lena enumera primero estos fallos en el análisis de amenazas del CNHP porque podrían dañar la planta a través de las herramientas destinadas a protegerla. Un monitor que falla de forma abierta dejaría que escrituras no autorizadas llegaran al PLC-A mientras todos creen que están bloqueadas. Una comprobación de alcanzabilidad omitida en la integración continua dejaría fusionar sin que nadie lo viera un nuevo conducto hacia el SIS-B. Cada fallo recibe un requisito y una prueba.
23.2 STRIDE sobre las herramientas del CNHP
Suplantación (spoofing): cuenta de ingeniería falsa. Manipulación (tampering): editar la exportación del cortafuegos después del sellado. Repudio: eventos de denegación sin actor. Divulgación de información: réplica del historiador legible por cualquiera. Denegación de servicio: un escáner inunda una línea troncal. Elevación de privilegios: una sola persona puede publicar un conducto hacia el SIS. Cada fila recibe un requisito de mitigación. Lena realiza el análisis sobre cada herramienta del CNHP y registra las filas en la lista de pendientes con sus responsables. En ABP, las filas más graves fueron el monitor que falla de forma abierta y una sola persona que publica un conducto hacia el SIS-B; se convirtieron en el requisito S-1 y en el control de doble aprobación de los cambios de conductos. Cada fila se revisa de nuevo cuando se entrega su mitigación.
23.3 Las amenazas a la planta se quedan en el análisis de peligros
Las amenazas al proceso pertenecen al análisis de peligros del proceso de la planta y al HAZOP informado por la ciberseguridad, no a las funciones de una herramienta de estudiante. No construya explotación automatizada para satisfacer una fila de STRIDE.
# Lab 27 - residual CUSUM vs band on batch reactor level (synthetic)
import random
def run(seed, atk, det, k=0.8, h=6.0):
rng=random.Random(seed); true=est=50.0; s=0.0; alarm=None
for t in range(500):
inflow=1.0+rng.gauss(0,0.05)+(0.08 if atk and t>=250 else 0)
true+=inflow-0.02*true
lvl=true+rng.gauss(0,0.3); fm=inflow+rng.gauss(0,0.02)
if atk and t>=250: lvl=50+rng.gauss(0,0.3)
if atk=="B" and t>=250: fm=1.0+rng.gauss(0,0.02)
est+=fm-0.02*est
hit=abs(lvl-50)>2.0 if det=="band" else False
if det=="cusum":
s=max(0.0,s+abs(lvl-est)-k); hit=s>h
if hit and alarm is None: alarm=t
return alarm
for det in ("band","cusum"):
fa=sum(run(i,None,det) is not None for i in range(60))
for atk in ("A","B"):
hits=[a-250 for a in (run(i,atk,det) for i in range(60)) if a is not None and a>=250]
print(f"{det} class{atk} FA={fa}/60 det={len(hits)}/60 mean_delay={sum(hits)/len(hits) if hits else float('nan'):.1f}")
Salida esperada:
band classA FA=0/60 det=0/60 mean_delay=nan
band classB FA=0/60 det=0/60 mean_delay=nan
cusum classA FA=0/60 det=60/60 mean_delay=24.8
cusum classB FA=0/60 det=0/60 mean_delay=nan
Caso sintético — Ashford Batch Plant. La fila de STRIDE «fallo abierto» se convirtió en el requisito de seguridad funcional S-1. La fila «publicación de un conducto por una sola persona» se convirtió en el control de doble aprobación.
Lena traslada las amenazas a la planta al ingeniero de seguridad de procesos para el análisis de peligros. Ella aporta hechos sobre las herramientas y la red, como qué zonas pueden alcanzar el PLC-A, y el ingeniero juzga las consecuencias para el proceso. Nada en las herramientas del CNHP simula un ataque al proceso.
23.4 Errores y límites
STRIDE es un estímulo, no una demostración. Vuelva a él cuando añada un nuevo límite de confianza (por ejemplo, un historiador SaaS de un proveedor). Lena repite el análisis cada vez que el CNHP añade un límite de confianza, como una nueva vía de acceso remoto para un proveedor o un cambio en el destino de las alertas. Las filas de revisiones anteriores se conservan, para que el equipo pueda ver qué amenazas se añadieron, qué mitigaciones se construyeron y cuáles siguen abiertas. Una tabla STRIDE nunca demuestra que una herramienta sea segura; eso lo hacen las pruebas y las revisiones.
Nota práctica
Incluya en el modelo la amenaza «servidor de salto comprometido»: credenciales de corta duración, listas de salida permitida, revocación rápida. Si la respuesta es solo «confiar en el servidor de salto», el análisis está incompleto.
23.1b Abuso frente a mal uso y lista de pendientes
Los casos de abuso son acciones intencionadas de un adversario contra las herramientas del CNHP. Los casos de mal uso son ingenieros honestos que cometen errores peligrosos, como teclear un rango de punto de ajuste más amplio de lo que permite la receta. Diseñe controles para ambos. Las filas de STRIDE se convierten en incidencias vinculadas a requisitos. Las filas de mal uso suelen convertirse en reglas de validación; las de abuso, en controles de acceso. Alimentar la lista de pendientes significa que cada fila de STRIDE tiene un responsable y una fecha límite. En ABP, el caso de mal uso de un ingeniero que pega el CIDR de un socio en el archivo de conductos se convirtió en una regla de validación que rechaza los rangos fuera del plan de direcciones de la planta.
Ambos tipos alimentan la lista de pendientes.
Ejercicios — capítulo 23
- EX067 — Fallo abierto. Una prueba que demuestre el fallo cerrado. Rúbrica: 3 = quitar la política, esperar denegación + alerta; 2 = idea; 1 = vago; 0 = nada.
- EX068 — STRIDE. Mitigación del repudio en los eventos de denegación. Rúbrica: 3 = actor autenticado + registro inmutable; 2 = solo registro; 1 = vago; 0 = nada.
- EX069 — Límite. ¿Por qué el STRIDE del programa no justifica un módulo de explotación? Rúbrica: 3 = objetivo distinto/límite de seguridad; 2 = parcial; 1 = lo justifica; 0 = nada.
Síntesis del capítulo
Analice cómo su programa puede dañar la planta o mentir; mitigue eso primero.
Siga estudiando — capítulo 23 de 50
← Capítulo 22 (borrador) · Índice de capítulos del curso · Capítulo 24 (borrador) →