Mapa de la lección
Lección 03 publicada. Mapa, ejemplo, EX015.
flowchart TD
N0["Resultados de aprendizaje y conexión"]
N1["3.1 Tipos de contribución"]
N2["3.2 El mecanismo como invariante físico"]
N3["3.3 Modelo de atacante"]
N4["3.4 Hipótesis y umbrales"]
N5["3.5 Líneas de base y rivales"]
N6["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
N6 --> EX["Ejemplo resuelto"]
EX --> Q["Ejercicio EX015"]
Dibujo lógico
flowchart LR
N0["Resultados de aprendizaje y conexión"]
N1["3.1 Tipos de contribución"]
N2["3.2 El mecanismo como invariante físico"]
N3["3.3 Modelo de atacante"]
N4["3.4 Hipótesis y umbrales"]
N5["3.5 Líneas de base y rivales"]
N6["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX015"]
[Resultados de aprendizaje y conexión]
|
v
[3.1 Tipos de contribución]
|
v
[3.2 El mecanismo como invariante físico]
|
v
[3.3 Modelo de atacante]
|
v
[3.4 Hipótesis y umbrales]
|
v
[3.5 Líneas de base y rivales]
|
v
[Síntesis del capítulo]
|
v
[Ejemplo resuelto] --> [Ejercicio EX015]
Resultados de aprendizaje y conexión
Después de este capítulo usted podrá (1) elegir el tipo de contribución que hace su tesis, (2) expresar un mecanismo de detección como un invariante físico, (3) definir un modelo de atacante explícito, (4) enunciar hipótesis con umbrales y explicaciones rivales y (5) declarar de antemano las condiciones en las que su contribución falla. Convierte la laguna del capítulo 2 en un estudio que el capítulo 4 puede pilotar.
3.1 Tipos de contribución
Una tesis de seguridad de TO puede aportar un mecanismo (un nuevo detector o protección), una medición (una forma de cuantificar el impacto o la exposición), un hallazgo empírico (cómo se comportan realmente los operadores o las plantas) o un principio validado (una regla de diseño que se mantiene en distintos contextos). El Setpoint Study aporta una comparación respaldada por mediciones: no inventa la prueba CUSUM (Page, 1954) ni la detección basada en residuos (revisada por Giraldo et al.); comprueba cuándo un invariante entre sensores ayuda frente a un objetivo adversario específico y documentado —la manipulación de la vista— y cuantifica dónde deja de ayudar. Un posicionamiento honesto de este tipo es una fortaleza en una defensa, no una debilidad.
3.2 El mecanismo como invariante físico
El tanque de la planta A obedece un balance de masa discreto: nivel siguiente = nivel + caudal de entrada − caudal de salida, con un caudal de salida ≈ 0,02 × nivel a través de un orificio fijo en el modelo sintético (equilibrio de 50 unidades cuando el caudal de entrada es 1,0). Un transmisor de nivel y un caudalímetro miden magnitudes distintas producidas por la misma física. Si un atacante repite lecturas antiguas de nivel mientras fuerza la bomba, la estimación de nivel predicha a partir del caudalímetro diverge del nivel informado. El residuo r = nivel informado − nivel predicho debería estar cerca de cero en operación normal y alejarse bajo ese ataque. Un CUSUM acumula la magnitud del residuo por encima de una holgura k y alarma cuando la suma supera un umbral h; está diseñado para captar desplazamientos pequeños y persistentes que una banda fija no detecta.
El invariante lleva una suposición incorporada: el caudalímetro es honesto. Si el atacante controla ambos sensores (o el PLC que los informa), el invariante puede satisfacerse con una mentira coherente. Enunciar esta suposición es el comienzo del modelo de atacante.
3.3 Modelo de atacante
Escriba el modelo como capacidades, conocimiento y objetivo:
Tabla de la lección; desplázate para ver todas las columnas →
| Elemento | Suposición del Setpoint Study |
|---|---|
| Capacidades | Acceso de escritura al comando de la bomba y a la lectura de nivel en el enlace SCADA (coherente con Modify Parameter y Spoof Reporting Message de ATT&CK for ICS); clase A: solo el sensor de nivel; clase B: sensores de nivel y de caudal. |
| Conocimiento | Conoce los límites de alarma de la banda; la clase B también conoce el detector. |
| Objetivo | Elevar el nivel real manteniendo normales los valores mostrados (manipulación de la vista). |
| Fuera de alcance | Compromiso de la válvula mecánica de flotador; manipulación física. |
3.4 Hipótesis y umbrales
- H1 (detección): frente a la repetición de clase A, el CUSUM de residuos detecta ≥95 % de los episodios con un retardo medio ≤ 60 pasos, mientras que la alarma de banda detecta ≤ 10 %.
- H2 (falsas alarmas): en 100 ejecuciones nominales, el CUSUM de residuos no produce más ejecuciones con falsa alarma que la alarma de banda.
- H3 (impacto): el sobrellenado real máximo en el momento de la detección es menor con CUSUM que con la alarma de banda.
- H4 (condición de fallo): frente a la clase B, la detección del CUSUM cae a ≤ 10 %, la frontera prevista de la contribución.
Los umbrales se justifican, no son decorativos: 60 pasos corresponden, en la base de tiempo sintética, al tiempo que tarda el sobrellenado en alcanzar la mitad del margen hasta el disparo por nivel muy alto. H4 es una hipótesis que usted quiere poder confirmar: un método cuyos límites se han medido es más útil que uno cuyos límites se desconocen.
3.5 Líneas de base y rivales
Las líneas de base son (a) la alarma de banda que la planta ya tiene, (b) un detector de red que señala cualquier escritura en el registro de nivel —trivialmente eficaz si las escrituras son raras, inútil si el atacante repite en el sensor— y (c) un oráculo con acceso al nivel real, que da el mejor retardo posible. Las explicaciones rivales de cualquier ventaja del CUSUM incluyen el ajuste del umbral con datos de prueba, un simulador demasiado limpio y magnitudes de ataque elegidas a la medida del método. Cada rival recibe una prueba en el capítulo 4 o 5.
3.6 Ejemplo resuelto y laboratorio 3
El laboratorio 3 implementa el modelo y ambos detectores en 100 ejecuciones con semilla por condición.
# Lab 3 - Setpoint Study (synthetic): fixed-band alarm vs. physics-residual CUSUM on one tank.
# Python 3 standard library only. Attack: pump forced to over-fill while the level sensor replays
# nominal values ("replay"); variant "replay+flow" also spoofs the inflow meter.
import random
def run(seed, attack, detector, steps=600, onset=300):
rng = random.Random(seed)
true_level, s, first_alarm, max_dev = 50.0, 0.0, None, 0.0
est = 50.0
for t in range(steps):
inflow = 1.0 + rng.gauss(0, 0.05)
if attack and t >= onset:
inflow += 0.05 # forced pump: hidden extra inflow
true_level += inflow - 0.02 * true_level
level_meas = true_level + rng.gauss(0, 0.3)
flow_meas = inflow + rng.gauss(0, 0.02)
if attack and t >= onset:
level_meas = 50.0 + rng.gauss(0, 0.3) # replayed nominal level
if attack == "replay+flow":
flow_meas = 1.0 + rng.gauss(0, 0.02)
est = est + flow_meas - 0.02 * est # mass-balance prediction from flow meter
if detector == "band":
hit = abs(level_meas - 50.0) > 1.5
else:
s = max(0.0, s + abs(level_meas - est) - 0.6)
hit = s > 6.0
if hit and first_alarm is None:
first_alarm = t
if t >= onset:
max_dev = max(max_dev, true_level - 50.0)
return first_alarm, max_dev
for det in ("band", "cusum"):
fa = sum(run(k, None, det)[0] is not None for k in range(100))
for atk in ("replay", "replay+flow"):
res = [run(k, atk, det) for k in range(100)]
hits = [a - 300 for a, _ in res if a is not None and a >= 300]
delay = f"{sum(hits)/len(hits):.1f}" if hits else "n/a"
print(f"{det:5s} {atk:11s} false_alarm_runs={fa}/100 detected={len(hits)}/100 "
f"mean_delay={delay} worst_true_overfill={max(d for _, d in res):.2f}")
Salida esperada:
band replay false_alarm_runs=9/100 detected=0/100 mean_delay=n/a worst_true_overfill=3.36
band replay+flow false_alarm_runs=9/100 detected=0/100 mean_delay=n/a worst_true_overfill=3.26
cusum replay false_alarm_runs=0/100 detected=100/100 mean_delay=31.8 worst_true_overfill=3.36
cusum replay+flow false_alarm_runs=0/100 detected=0/100 mean_delay=n/a worst_true_overfill=3.26
Lectura de la salida frente a las hipótesis: H1 queda respaldada en el modelo (100/100, retardo 31,8 frente a 0/100); H2 queda respaldada (0 frente a 9 ejecuciones con falsa alarma: la banda estrecha de ±1,5 se dispara con el ruido); H4 se confirma (la clase B evade por completo). El «peor sobrellenado real» es el máximo sobre toda la ventana de ataque, así que H3 requiere una medición aparte del sobrellenado en el momento de la alarma, un ejercicio más abajo. Todas las cifras son propiedades de un modelo sintético, no de ninguna planta.
3.7 Errores comunes y límites
Afirmar que un mecanismo es novedoso cuando solo lo es su aplicación; omitir la suposición del sensor honesto; elegir las magnitudes de ataque después de ver el comportamiento del detector; no tener ninguna condición en la que la hipótesis falle. Cada uno de estos errores tiene un síntoma visible en una propuesta: una frase de contribución que afirma inventar el CUSUM, un modelo de atacante sin clase B, una ganancia de ataque cambiada después de ejecutar el laboratorio 3 o una lista de hipótesis sin H4. Lea la propuesta buscando esos síntomas antes de enviarla al comité y corríjalos mientras el estudio todavía es barato de cambiar.
Ejercicios — capítulo 3
- EX015 — Posicione la contribución del Setpoint Study. Clasifique el tipo de contribución del Setpoint Study y escriba una declaración de posicionamiento de dos frases que cite el trabajo previo.
Mostrar criterios de evaluación
Rúbrica: 3 = comparación respaldada por mediciones + cita Page 1954 y Giraldo et al. 2018; 2 = tipo sin citas; 1 = afirma inventar el CUSUM; 0 = nada. - EX016 — Nivel de equilibrio con caudal de entrada adicional. Derive el nivel de equilibrio del tanque del laboratorio 3 cuando el caudal de entrada es 1,05 y explique qué significa para el objetivo del atacante.
Mostrar criterios de evaluación
Rúbrica: 3 = L*=52,5 y el atacante necesita un forzamiento mayor/salida bloqueada; 2 = solo 52,5; 1 = equilibrio erróneo; 0 = nada. - EX017 — Atacante de clase C frente a los detectores. Amplíe la tabla del modelo de atacante con un atacante de clase C que controla la propia lógica del PLC; prediga el resultado para cada detector.
Mostrar criterios de evaluación
Rúbrica: 3 = la clase C evade la banda/CUSUM dentro del PLC; un CUSUM externo independiente sigue detectando; 2 = evasión sin el caso externo; 1 = vago; 0 = nada. - EX018 — Sobrellenado en el momento de la alarma para H3. Modifique el laboratorio 3 para registrar el sobrellenado real en el momento de la alarma y pruebe H3.
Mostrar criterios de evaluación
Rúbrica: 3 = sobrellenado≈1,22 de media/1,60 máximo en la alarma del CUSUM; la banda nunca se dispara; H3 respaldada en esa configuración; 2 = cifras sin H3; 1 = solo cualitativo; 0 = nada. - EX019 — Justifique un umbral de retardo para H1. Justifique un umbral de retardo distinto para H1 usando un nivel de disparo por nivel muy alto declarado y la tasa de sobrellenado.
Mostrar criterios de evaluación
Rúbrica: 3 = disparo/margen/tasa → umbral ≈60 pasos con razonamiento; 2 = umbral sin derivación; 1 = número arbitrario; 0 = nada. - EX020 — Tres rivales para una ventaja del CUSUM. Enumere tres explicaciones rivales de una ventaja del CUSUM y la prueba que descartaría cada una.
Mostrar criterios de evaluación
Rúbrica: 3 = tres rivales (ajuste, simulación limpia, elección de ganancia) cada uno con una prueba que lo descarta; 2 = rivales sin pruebas; 1 = un rival; 0 = nada.
Síntesis del capítulo
Una propuesta sólida se posiciona con honestidad, expresa el mecanismo como un invariante físico, hace explícita la suposición del sensor honesto mediante un modelo de atacante y declara de antemano sus hipótesis, incluida la que marca dónde falla la contribución.
Siga estudiando — capítulo 03 de 08
← Capítulo 02 (borrador) · Índice de capítulos del curso · Capítulo 04 (borrador) →