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
- EX088 — Fila. Escriba la fila de laboratorio del fallo cerrado. Rúbrica: 3 = fila completa; 2 = parcial; 1 = vago; 0 = nada.
- EX089 — Parada. ¿Qué ocurre si el SIS es alcanzable desde L4? Rúbrica: 3 = parada, bloqueante, ningún uso en planta; 2 = solo una nota; 1 = continuar; 0 = nada.
- EX090 — Evidencia. Tres hashes que adjuntar. Rúbrica: 3 = política, binario/versión, registro de resultados; 2 = dos; 1 = uno; 0 = nada.
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) →