◇ OpenCyber Academy
Ingeniería · Capítulo 30 · Español

Capítulo 30 — Laboratorio de verificación 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 30 — Laboratorio de verificación I

Mapa de la lección

Lección 30 publicada. Mapa, ejemplo, EX088.

flowchart TD
  N0["Resultados de aprendizaje"]
  N1["30.1 Plan"]
  N2["30.2 Ejecución"]
  N3["30.3 Informe"]
  N4["Nota práctica"]
  N5["30.1b Datos de prueba de referencia e inventario"]
  N6["Nota de campo: verde independiente"]
  N7["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX088"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje"]
  N1["30.1 Plan"]
  N2["30.2 Ejecución"]
  N3["30.3 Informe"]
  N4["Nota práctica"]
  N5["30.1b Datos de prueba de referencia e inventario"]
  N6["Nota de campo: verde independiente"]
  N7["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX088"]
[Resultados de aprendizaje]
    |
    v
[30.1 Plan]
    |
    v
[30.2 Ejecución]
    |
    v
[30.3 Informe]
    |
    v
[Nota práctica]
    |
    v
[30.1b Datos de prueba de referencia e inventario]
    |
    v
[Nota de campo: verde independiente]
    |
    v
[Síntesis del capítulo]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX088]

Resultados de aprendizaje

Usted podrá (1) ejecutar un plan de verificación sobre el monitor y la zonificación de ABP; (2) registrar aprobado/suspenso con hashes de evidencia; (3) detener el laboratorio si falla una prueba de seguridad funcional.

30.1 Plan

Pruebas: permitir las lecturas dentro del alcance; denegar los códigos de función indebidos; denegar las escrituras fuera de rango; fallo cerrado si falta la política; la alcanzabilidad del SIS desde L4 es falsa; tiempo de ciclo dentro del presupuesto con la derivación. Cada fila: identificador, preparación, acción, resultado esperado, ruta de la evidencia. En ABP, cada fila del plan nombra el requisito que comprueba, como S-1 para la fila de política ausente y R-12 para la fila de alcanzabilidad. La fila del tiempo de ciclo usa la copia de banco de la línea troncal hacia el PLC-A con la derivación instalada y comprueba que el tiempo se mantiene muy por debajo de la parada de 50 ms. Las filas se escriben antes de ejecutar el laboratorio.

30.2 Ejecución

Use solo equipos y bancos sintéticos. Capture la salida estándar y los hashes de configuración. Cualquier fallo de seguridad funcional (fallo abierto o SIS alcanzable) detiene el laboratorio y abre un bloqueante: no se continúa para reunir datos.

# Lab 23 - reachability count on a synthetic Purdue-layered OT network
# Nodes: L5-ERP, L4-Office, L3.5-DMZ, L3-Hist, L2-SCADA, L1-PLC, L1-SIS, L0-IO
edges_flat=[("L5","L4"),("L4","L3"),("L3","L2"),("L2","L1-PLC"),("L2","L1-SIS"),("L1-PLC","L0"),("L1-SIS","L0"),("L4","L2")]
edges_zoned=[("L5","L4"),("L4","L3.5"),("L3.5","L3"),("L3","L2"),("L2","L1-PLC"),("L1-SIS","L0"),("L1-PLC","L0")]  # SIS not reachable from SCADA
def reach(edges, start):
    g={};
    for a,b in edges: g.setdefault(a,[]).append(b)
    seen=set(); stack=[start]
    while stack:
        n=stack.pop()
        if n in seen: continue
        seen.add(n); stack.extend(g.get(n,[]))
    return seen
for name,e in (("flat",edges_flat),("zoned",edges_zoned)):
    r=reach(e,"L4")
    print(f"{name}: L4 reaches {sorted(r)} count={len(r)} writes_to_SIS={'L1-SIS' in r}")

Salida esperada:

flat: L4 reaches ['L0', 'L1-PLC', 'L1-SIS', 'L2', 'L3', 'L4'] count=6 writes_to_SIS=True
zoned: L4 reaches ['L0', 'L1-PLC', 'L2', 'L3', 'L3.5', 'L4'] count=6 writes_to_SIS=False

El laboratorio de Lena en ABP se ejecuta en el entorno de banco con equipos y datos de prueba sintéticos. Cuando la fila de política ausente falló una vez, el laboratorio se detuvo y se abrió un bloqueante contra S-1; no se ejecutaron más filas hasta corregirlo, porque continuar habría producido resultados sobre un monitor que ya se sabía inseguro.

30.3 Informe

Informe de laboratorio de una página: versiones del entorno, tabla de resultados, bloqueantes abiertos, aprobación. Adjunte los hashes.

Caso sintético — Ashford Batch Plant. El laboratorio I falló una vez en la fila de política ausente; la publicación de la versión se detuvo hasta corregir S-1.

El informe de Lena para cada ejecución del laboratorio I enumera las versiones de las herramientas, el hash del conjunto de datos de prueba, el resultado de cada fila y los bloqueantes abiertos, y lo firma el ejecutor independiente. Se adjuntan los hashes de los registros y de las exportaciones, para que un revisor pueda confirmar que la evidencia coincide con lo ejecutado. Un informe sin hashes no es evidencia.

30.4 Errores y límites

Los laboratorios en bancos compartidos chocan entre sí; reserve el entorno sintético. Lena reserva en el calendario compartido el entorno de banco de ABP para cada ejecución del laboratorio, con la versión en prueba indicada en la reserva. Una vez, dos equipos ejecutaron compilaciones distintas en el mismo banco en horarios solapados, y sus registros se volvieron imposibles de separar. Desde entonces, una ejecución sin reserva no cuenta como evidencia de versión, y el banco se restablece a un estado conocido antes de cada ejecución reservada.

Nota práctica

El laboratorio I de un cambio en el monitor o en la lista de permitidos lo ejecuta alguien que no lo implementó. El aprobado registrado necesita una lista de comprobación en verde independiente.

30.1b Datos de prueba de referencia e inventario

Mantenga un directorio sellado de datos de prueba sintéticos con decisiones esperadas conocidas. Una ejecución en el banco solo cuenta como evidencia de versión del monitor cuando sus datos de prueba coinciden por hash con el conjunto sellado. Fotografíe o exporte el inventario del entorno del laboratorio al informe. «Pasó en mi máquina» sin inventario no es una evidencia transferible. Los cambios en los datos de prueba se revisan como el código: una nueva decisión esperada debe nombrar el requisito del que procede. Los registros de resultados del laboratorio son evidencia; consérvelos con la etiqueta de la versión.

El conjunto de datos de prueba de Lena está sellado y tiene hash.

Nota de campo: verde independiente

El autor de una corrección urgente se ofreció a ejecutar el laboratorio I para ganar tiempo. El revisor se negó, ejecutó personalmente las filas de seguridad funcional y encontró un camino que seguía dando ALLOW cuando el archivo de política era un directorio en lugar de un archivo. Los ejecutores independientes detectan los supuestos que los autores dejan de ver.

30.5 Ejemplo resuelto: leer con honestidad un resultado de laboratorio (ABP sintética)

El laboratorio I reproduce un día grabado de tráfico de ABP más 40 intentos de escritura inyectados a través de la función de permiso y de la lógica de alarmas. Resultados: 40 de 40 escrituras inyectadas bloqueadas; 2 escrituras de ingeniería legítimas bloqueadas porque la estación de ingeniería faltaba en la lista de permitidos durante la puesta en marcha; 0 alarmas suprimidas. Lena informa de los dos bloqueos falsos como un defecto de diseño, no como ruido —en una planta en servicio habrían detenido un cambio de receta programado— y añade un conjunto de vectores para el modo de puesta en marcha. El informe del laboratorio indica lo que no se probó: el rendimiento bajo carga, los enlaces serie y el SIS-B, que queda fuera del alcance por diseño.

Ejercicios — capítulo 30

Síntesis del capítulo

Verifique primero la seguridad funcional; deténgase ante un fallo abierto o una exposición del SIS; calcule el hash de todo.

Siga estudiando — capítulo 30 de 50

← Capítulo 29 (borrador) · Índice de capítulos del curso · Capítulo 31 (borrador) →

Respuestas desarrolladas

EX088. ID V-04; preparación: montaje vacío de la lista de permitidos; acción: permit(cualquier escritura); resultado esperado: DENY policy-unavailable + alerta; evidencia: hash del registro.

EX089. Detener el laboratorio, abrir un bloqueante, revocar la aprobación de la ventana en planta hasta que se corrija y se supere de nuevo el laboratorio.

EX090. Hash del archivo de la lista de permitidos/política, hash de la compilación/versión del monitor, hash del registro de resultados del laboratorio.