◇ OpenCyber Academy
Grado · Capítulo 25 · Español

Capítulo 25 — Laboratorio I

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 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

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) →