OpenCyber Academy
Investigación doctoral · Capítulo 3 · Español
Código del curso: OCA-206Capítulo 03: OCA-206-C003

Capítulo 3 — Propuesta de contribución original

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.

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

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

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

Respuestas desarrolladas

EX015. Tipo de contribución: comparación respaldada por mediciones con límites caracterizados. «No proponemos un detector nuevo; a partir del CUSUM (Page, 1954) y de la detección basada en residuos (Giraldo et al., 2018), medimos cuándo un invariante de balance de masa entre sensores detecta la manipulación de la vista y la capacidad del atacante con la que falla».

EX016. Equilibrio L* = caudal de entrada/0,02 = 1,05/0,02 = 52,5 unidades. Un caudal de entrada adicional persistente de 0,05 eleva el nivel solo 2,5 unidades en régimen estacionario; el atacante necesita un forzamiento mayor (o una salida bloqueada) para llegar a un disparo, lo que afecta a qué ganancias son realistas en el capítulo 6.

EX017. La clase C modifica la lógica del PLC, así que puede falsificar ambos valores informados de forma coherente y suprimir las alarmas calculadas en el PLC. Alarma de banda: evadida. CUSUM en el PLC: evadido. CUSUM calculado fuera del PLC sobre sensores cableados de forma independiente: sigue detectando. Conclusión: la ubicación del detector importa tanto como el algoritmo.

EX018. Registrar true_level − 50 en la primera alarma da, para el CUSUM y una ganancia de 0,05, un sobrellenado medio de 1,22 unidades y un máximo de 1,60 en el momento de la alarma; la alarma de banda nunca se dispara después del inicio, así que su sobrellenado crece hasta el máximo de la ventana, 3,36. H3 queda respaldada en el modelo.

EX019. Suponga que el disparo por nivel muy alto está en 56 (margen 6) y que el ataque eleva el nivel inicialmente hasta ≈0,05 unidades/paso. La mitad del margen (3 unidades) se alcanzaría en unos 60–80 pasos una vez considerada la aproximación exponencial; un umbral de 60 pasos es conservador. Un nivel de disparo distinto justifica un umbral distinto con la misma aritmética.

EX020. (1) Ajuste del umbral con datos de prueba → ajustar con semillas separadas (laboratorio 6) y congelar. (2) Simulador demasiado limpio → añadir sesgo de calibración y validar en T2. (3) Magnitud de ataque elegida a la medida del método → barrer las ganancias (EX034) e informar la curva completa.