Capítulo 25 — Laboratorio I
Mapa de la lección
Lección 25 publicada. Mapa, ejemplo, EX073.
flowchart TD
N0["Resultados de aprendizaje"]
N1["25.1 El experimento"]
N2["25.2 Interpretar la salida"]
N3["25.3 Comunicar con honestidad"]
N4["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Ejemplo resuelto"]
EX --> Q["Ejercicio EX073"]
Dibujo lógico
flowchart LR
N0["Resultados de aprendizaje"]
N1["25.1 El experimento"]
N2["25.2 Interpretar la salida"]
N3["25.3 Comunicar con honestidad"]
N4["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX073"]
[Resultados de aprendizaje]
|
v
[25.1 El experimento]
|
v
[25.2 Interpretar la salida]
|
v
[25.3 Comunicar con honestidad]
|
v
[Síntesis del capítulo]
|
v
[Ejemplo resuelto] --> [Ejercicio EX073]
Resultados de aprendizaje
Usted podrá (1) ejecutar un experimento reproducible de detectores con semillas fijas; (2) comparar una banda fija con un detector CUSUM en falsas alarmas, detección y retardo; (3) comunicar resultados con sus denominadores; y (4) relacionar los resultados con la crítica de la evaluación de Urbina et al. (2016).
25.1 El experimento
El laboratorio simula la temperatura de impulsión de LDHP a 90 °C con ruido gaussiano (σ = 1 °C). En las ejecuciones con ataque, a partir de la muestra 100 una rampa lenta añade 0,08 °C por muestra: una deriva sigilosa del punto de consigna en el espíritu de ATT&CK for ICS T0836. El detector de banda da la alarma cuando la lectura sale de 90 ± 3,5 °C. CUSUM acumula las desviaciones positivas menos una holgura de 0,5 °C y da la alarma por encima de 12.
"""Lab 25: compare a fixed band and a CUSUM detector on synthetic supply temperature."""
import random
def run(seed, attack):
rnd = random.Random(seed); s = 0.0; band = cus = None
for t in range(200):
x = 90 + rnd.gauss(0, 1.0) + (0.08 * (t - 100) if attack and t >= 100 else 0)
if band is None and abs(x - 90) > 3.5: band = t
s = max(0.0, s + (x - 90) - 0.5)
if cus is None and s > 12: cus = t
return band, cus
fa_b = sum(run(s, False)[0] is not None for s in range(40)); fa_c = sum(run(s, False)[1] is not None for s in range(40))
det = [run(1000 + s, True) for s in range(40)]
db = [b for b, _ in det if b is not None and b >= 100]; dc = [c for _, c in det if c is not None and c >= 100]
print(f"band : false alarms {fa_b}/40, detections {len(db)}/40, mean delay {sum(b-100 for b in db)/max(1,len(db)):.1f}")
print(f"cusum: false alarms {fa_c}/40, detections {len(dc)}/40, mean delay {sum(c-100 for c in dc)/max(1,len(dc)):.1f}")
Ejecútelo con python3 lab_detect.py. Salida verificada:
band : false alarms 9/40, detections 37/40, mean delay 28.8
cusum: false alarms 0/40, detections 40/40, mean delay 23.1
Con σ = 1 °C, los límites de ±3,5 °C de la banda están a 3,5 desviaciones típicas, así que las falsas alarmas son raras por muestra, pero no por ejecución de 200 muestras.
25.2 Interpretar la salida
En 40 ejecuciones tranquilas, la banda dio falsas alarmas en 9 ejecuciones —con σ = 1 °C, una sola muestra más allá de 3,5 σ es rara, pero en 200 muestras por ejecución ocurre—, mientras que CUSUM no dio ninguna. Frente a la rampa, CUSUM detectó las 40 ejecuciones con un retardo medio de 23,1 muestras; la banda detectó 37 de 40 (contando solo las alarmas en la muestra 100 o después) con un retardo medio de 28,8. Como la banda también se dispara con el ruido, algunas de sus «detecciones» son desviaciones afortunadas del ruido.
Las cotas de Wilson concretan la comparación: las 9 ejecuciones con falsa alarma de 40 de la banda dan aproximadamente entre un 12 % y un 38 %.
25.3 Comunicar con honestidad
Escriba: «CUSUM 0/40 ejecuciones con falsa alarma (cota superior de Wilson al 95 % ≈ 8,8 %), 40/40 detecciones, retardo medio de 23,1 muestras, semillas 0–39 tranquilas y 1000–1039 con ataque». No escriba «CUSUM es perfecto». Urbina et al. preguntarían además qué rampa podría sostener un atacante por debajo del umbral de CUSUM: una pendiente menor podría evadirlo durante mucho más tiempo. La línea de la banda debe comunicarse de la misma forma: «banda 9/40 ejecuciones con falsa alarma (intervalo de Wilson al 95 % de aproximadamente un 12 % a un 38 %), 37/40 detecciones en la muestra 100 o después, retardo medio de 28,8 muestras». El seguimiento de Maya, que reduce la pendiente a la mitad, a 0,04 °C por muestra, con las mismas semillas, responde a la pregunta de Urbina para un punto de la curva.
Ejemplo resuelto (LDHP sintética)
Maya reduce la pendiente del ataque a la mitad, a 0,04 °C/muestra, en una copia del script y registra el cambio en el retardo, conservando las semillas. Así convierte un resultado en una curva y muestra el compromiso del atacante entre velocidad y sigilo.
Caso sintético — Lakeside District Heating Plant. Todos los datos son simulados; las semillas hacen reproducible la salida.
Errores y límites
El ruido gaussiano e independiente es optimista. Los umbrales se fijaron a mano sobre la misma familia de datos con la que se evalúan.
Ejercicios — capítulo 25
- EX073 — Leer las ejecuciones con falsa alarma. Indique el recuento de falsas alarmas del detector de banda y dé una cota superior al 95 % para el de CUSUM. Rúbrica: 3 = 9/40 la banda; CUSUM 0/40 con una cota superior de ≈7,5–8,8 %; 2 = uno; 1 = «CUSUM 0 %»; 0 = nada.
- EX074 — ¿Para qué el término de holgura? Explique el papel de la holgura de 0,5 °C en CUSUM. Rúbrica: 3 = resta el ruido esperado para que la suma tienda a cero en operación normal y solo crezca ante un desplazamiento sostenido; 2 = parcial; 1 = «reduce las alarmas»; 0 = nada.
- EX075 — Aplicar la crítica del sigilo. Describa un experimento adicional inspirado en Urbina et al. Rúbrica: 3 = barrer la pendiente/el tamaño del ataque para encontrar el mayor impacto no detectado dentro de una ventana de tiempo; 2 = variar el umbral; 1 = solo más semillas; 0 = nada.
Síntesis del capítulo
Un resultado de laboratorio es un recuento sobre semillas con cotas y un modelo de atacante; cambiar el atacante es el siguiente experimento, no una ocurrencia tardía.
Siga estudiando — capítulo 25 de 40
← Capítulo 24 (borrador) · Índice de capítulos del curso · Capítulo 26 (borrador) →