OpenCyber Academy
Grado · Capítulo 9 · Español
Código del curso: OCA-114Capítulo 09: OCA-114-C009

Capítulo 9 — Datos y bases de datos

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 09 publicada. Mapa, ejemplo, EX025.

flowchart TD
  N0["Resultados de aprendizaje"]
  N1["9.1 El papel del historiador"]
  N2["9.2 Un esquema mínimo"]
  N3["9.3 Los agregados ocultan eventos"]
  N4["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX025"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje"]
  N1["9.1 El papel del historiador"]
  N2["9.2 Un esquema mínimo"]
  N3["9.3 Los agregados ocultan eventos"]
  N4["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX025"]
[Resultados de aprendizaje]
    |
    v
[9.1 El papel del historiador]
    |
    v
[9.2 Un esquema mínimo]
    |
    v
[9.3 Los agregados ocultan eventos]
    |
    v
[Síntesis del capítulo]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX025]

Resultados de aprendizaje

Usted podrá (1) modelar los datos del historiador como tiempo, etiqueta y valor; (2) agregar y filtrar con SQL en SQLite; (3) detectar huecos de muestreo; y (4) explicar por qué el historiador es a la vez un activo y un riesgo de seguridad.

9.1 El papel del historiador

Un historiador de proceso almacena series temporales de los controladores para tendencias, informes e investigaciones. Como se sitúa entre las redes de control y las de negocio, suele ser el puente que usa un intruso, y también el mejor registro del que dispone un investigador. NIST SP 800-82r3 recomienda colocar los datos que necesitan los usuarios de negocio en una copia en la DMZ, para que los usuarios corporativos nunca consulten directamente el historiador de la zona de control. En LDHP, HIST-1 está en el nivel 3 de Purdue. Los usuarios de facturación y analítica deberían leer una réplica en la DMZ, de modo que una cuenta de oficina comprometida nunca abra una sesión con el historiador que también recoge datos de PLC-H.

9.2 Un esquema mínimo

Tres columnas —marca de tiempo, etiqueta, valor— contienen la mayor parte del contenido de un historiador; los sistemas de producción añaden códigos de calidad y compresión. SQLite, integrado en Python, basta para aprender las consultas.

"""Lab 09: query a synthetic historian in an in-memory SQLite database."""
import sqlite3
db = sqlite3.connect(":memory:")
db.execute("create table h(ts integer, tag text, v real)")
rows = [(t, "TT-101", 90 + (t % 5)) for t in range(0, 60, 5)] + [(t, "PT-201", 9.5) for t in range(0, 60, 10)]
rows.append((35, "TT-101", 128.0))
db.executemany("insert into h values(?,?,?)", rows)
for tag, n, mx, mean in db.execute("select tag,count(*),max(v),round(avg(v),2) from h group by tag order by tag"):
    print(f"{tag}: n={n} max={mx} mean={mean}")
print("excursions >120:", db.execute("select ts,v from h where tag='TT-101' and v>120").fetchall())
print("gap check PT-201 samples:", [r[0] for r in db.execute("select ts from h where tag='PT-201' order by ts")])

Ejecútelo con python3 lab_hist.py. Salida verificada:

PT-201: n=6 max=9.5 mean=9.5
TT-101: n=13 max=128.0 mean=92.92
excursions >120: [(35, 128.0)]
gap check PT-201 samples: [0, 10, 20, 30, 40, 50]

La tabla del laboratorio contiene muestras de TT-101 y PT-201 con marcas de tiempo enteras, suficientes para responder las dos preguntas que más hace un operador: cuál fue el extremo y si falta algo. La respuesta de Maya sobre la sobretemperatura salió de una sola consulta sobre esta tabla: select ts, v from h where tag='TT-101' and v > 120, que devolvió una fila en t = 35, 128 °C, de 13 muestras examinadas. El panel de medias horarias no había mostrado nada inusual para el mismo turno.

9.3 Los agregados ocultan eventos

La media de TT-101, 92,92 °C, parece normal; el máximo de 128,0 °C en t = 35, no. Acompañe siempre una media con un extremo y un recuento. La comprobación de huecos confirma que PT-201 se muestreó cada 10 unidades de tiempo sin pérdidas; una marca de tiempo ausente en esa lista sería la primera señal de un fallo de recogida o de una supresión deliberada. El informe de Maya enuncia las tres cosas: una desviación a 128,0 °C en t = 35, 13 muestras examinadas, y que no se alcanzó el punto de disparo de SIS-H, supuesto en 135 °C. El panel de medias horarias había respondido «sin sobretemperatura» a la misma pregunta.

Ejemplo resuelto (LDHP sintética)

A Maya le preguntan: «¿Hubo alguna sobretemperatura en el último turno?». Un panel con medias horarias dice que no. Su consulta select ts, v from h where tag='TT-101' and v > 120 devuelve una desviación en t = 35, 128 °C. Ella la comunica con el recuento de muestras examinadas (13) y señala que no se alcanzó el punto de disparo de SIS-H (supuesto en 135 °C en esta planta sintética).

Caso sintético — Lakeside District Heating Plant. Los valores, las etiquetas y el punto de disparo de 135 °C son inventados con fines didácticos.

Errores y límites

La compresión del historiador (banda muerta o puerta oscilante) puede descartar puntos que no cambiaron «lo suficiente», así que los picos breves pueden no aparecer. Las marcas de tiempo pueden provenir del historiador, no del controlador. Nunca conceda acceso de escritura a las tablas del historiador para trabajos de análisis.

Ejercicios — capítulo 9

Síntesis del capítulo

Pida al historiador extremos, recuentos y huecos, no solo medias, y trate su ubicación y sus permisos como diseño de seguridad.

Siga estudiando — capítulo 09 de 40

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

Respuestas desarrolladas

EX025. Se insertan doce filas regulares de TT-101 para t = 0, 5, …, 55, y el script añade una fila extra (35, 128.0), lo que da 13.

EX026. select ts from (select ts, lead(ts) over (order by ts) as nxt from h where tag='PT-201') where nxt - ts > 10; (SQLite ≥ 3.25 admite LEAD; una autounión sobre la siguiente marca de tiempo mayor también funciona). Con los datos del laboratorio no devuelve ninguna fila.

EX027. Con compresión por banda muerta (por excepción), un valor nuevo solo se archiva cuando difiere del último valor archivado en más que la banda muerta; si un pico sube y baja entre dos puntos archivados —o el punto archivado posterior vuelve a caer dentro de la banda—, el máximo nunca se almacena, así que el historiador muestra una tendencia suave.