◇ OpenCyber Academy
Técnico · Capítulo 7 · Español

Capítulo 7 — Infraestructura crítica y seguridad sectorial: datos y telemetría

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 7 — Infraestructura crítica y seguridad sectorial: datos y telemetría

Mapa de la lección

Lección 07 publicada. Mapa, ejemplo, EX025.

flowchart TD
  N0["Resultados de aprendizaje y conexión"]
  N1["7.1 Fuentes y puntos ciegos"]
  N2["7.2 Estructura de syslog"]
  N3["7.3 Tiempo"]
  N4["7.5 Actividad práctica"]
  N5["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5
  N5 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX025"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje y conexión"]
  N1["7.1 Fuentes y puntos ciegos"]
  N2["7.2 Estructura de syslog"]
  N3["7.3 Tiempo"]
  N4["7.5 Actividad práctica"]
  N5["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX025"]
[Resultados de aprendizaje y conexión]
    |
    v
[7.1 Fuentes y puntos ciegos]
    |
    v
[7.2 Estructura de syslog]
    |
    v
[7.3 Tiempo]
    |
    v
[7.5 Actividad práctica]
    |
    v
[Síntesis del capítulo]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX025]

Resultados de aprendizaje y conexión

Al terminar este capítulo debería ser capaz de:

El capítulo 6 dijo dónde están las cosas. Este capítulo trata de lo que le cuentan y de si usted puede poner sus relatos en el orden correcto.

7.1 Fuentes y puntos ciegos

Fuente Muestra No muestra
Datos del proceso (historiador) Valores y alarmas a lo largo del tiempo Quién causó un cambio
Registros de eventos de la HMI y del SCADA Acciones del operador, reconocimientos de alarmas Acciones realizadas directamente sobre el controlador
Registros del controlador/RTU Sesiones de configuración, cambios de modo (si se admiten y están activados) A menudo nada; muchos dispositivos registran poco
Registros del cortafuegos Conexiones permitidas y denegadas en el límite Tráfico dentro de una zona
Registros de los equipos (servidor de salto, servidores) Inicios de sesión, órdenes, eventos de servicio Actividad en dispositivos sin registro
Captura pasiva / registros de flujos Quién habló con quién y con qué función Contenido cifrado; tráfico que no pasa por el sensor

La guía de gestión de registros del NIST describe la recogida, la conservación y la protección de estos registros (SP 800-92). La primera tarea del técnico es saber qué fuente responde a qué pregunta, y qué preguntas no responde ninguna fuente.

7.2 Estructura de syslog

La RFC 5424 define el formato moderno de syslog: <PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROCID MSGID STRUCTURED-DATA MSG (RFC 5424). El valor de prioridad es instalación × 8 + severidad: <38> es la instalación 4 (seguridad/autorización), severidad 6 (informativa). La marca de tiempo es RFC 3339 con desfase, y un guion (-) significa «nulo»; en una marca de tiempo, el emisor no conocía la hora. Muchos dispositivos siguen enviando el formato BSD antiguo (<13>Oct 11 23:15:02 host app: ...), sin año ni zona; cuente esas líneas y analícelas por separado en lugar de descartarlas.

7.3 Tiempo

Una cronología solo es tan buena como sus relojes. NTP (RFC 5905) permite a los equipos medir su desfase respecto a una referencia (RFC 5905). En los entornos de control, algunos dispositivos no tienen cliente NTP, derivan varios minutos o están aislados deliberadamente de las fuentes de hora. Registre, para cada equipo que aporte datos a una cronología, su desfase medido en un momento conocido, y corrija sus marcas de tiempo restándolo: corregida = notificada − (reloj del equipo − referencia). Convierta todo a UTC antes de ordenar; los desfases locales como +01:00 son correctos, pero es fácil ordenarlos mal a simple vista.

7.4 Ejemplo resuelto: la secuencia de las 23:14 (sintético)

La noche del 11 de octubre, un operador informó de que la bomba 2 de KW-04 había arrancado de forma inesperada. Usted recogió seis líneas y midió los desfases de los relojes a la mañana siguiente (la RTU iba 212 s por detrás de la referencia). Lab 7 (guárdelo como lab07.py y ejecútelo con python3 lab07.py):

# Lab 7 - parse RFC 5424 syslog, correct clock offsets and build a UTC timeline (offline, stdlib)
# Synthetic lines from the Kestrel Vale operations centre; offsets measured against the NTP reference.
import re
from datetime import datetime, timedelta, timezone
lines = [
 "<38>1 2026-10-11T23:14:05.120Z fw-01 filterlog - - - block tcp 10.30.3.7:51544 -> 10.10.4.2:502",
 "<86>1 2026-10-12T00:13:58+01:00 jump-01 sshd 812 - - Accepted publickey for jtan from 10.90.0.40",
 "<134>1 2026-10-11T23:16:40Z hmi-02 hmi - - - operator setpoint change KW-04 PUMP2 start",
 "<38>1 2026-10-11T23:15:31Z rtu-kw04 auth - - - config session opened user=eng",
 "<13>Oct 11 23:15:02 eng-ws-15 app: project download started",
 "<38>1 - hist-02 histd - - - archive rollover",
]
offset_s = {"fw-01": 0.0, "jump-01": 0.4, "hmi-02": 0.0, "rtu-kw04": -212.0}   # host clock minus reference
pat = re.compile(r"^<(\d{1,3})>1 (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) ?(.*)$")
events, unparsed = [], []
for ln in lines:
    m = pat.match(ln)
    if not m: unparsed.append(("not RFC 5424", ln)); continue
    pri, ts, host, app, _pid, _msgid, _sd, msg = m.groups()
    if ts == "-": unparsed.append(("no timestamp", ln)); continue
    t = datetime.fromisoformat(ts.replace("Z", "+00:00")).astimezone(timezone.utc)
    t_corr = t - timedelta(seconds=offset_s.get(host, 0.0))
    fac, sev = divmod(int(pri), 8)
    events.append((t_corr, host, f"fac={fac} sev={sev}", msg, offset_s.get(host, 0.0)))
for t, host, fs, msg, off in sorted(events):
    note = f" (clock corrected {-off:+.1f} s)" if off else ""
    print(f"{t.strftime('%H:%M:%S.%f')[:-3]}Z {host:<9} {fs:<11} {msg}{note}")
for why, ln in unparsed: print("UNPARSED", why, "|", ln)

Salida esperada (Python 3.13.5):

23:13:57.600Z jump-01   fac=10 sev=6 Accepted publickey for jtan from 10.90.0.40 (clock corrected -0.4 s)
23:14:05.120Z fw-01     fac=4 sev=6 block tcp 10.30.3.7:51544 -> 10.10.4.2:502
23:16:40.000Z hmi-02    fac=16 sev=6 operator setpoint change KW-04 PUMP2 start
23:19:03.000Z rtu-kw04  fac=4 sev=6 config session opened user=eng (clock corrected +212.0 s)
UNPARSED not RFC 5424 | <13>Oct 11 23:15:02 eng-ws-15 app: project download started
UNPARSED no timestamp | <38>1 - hist-02 histd - - - archive rollover

Antes de la corrección, la línea de la RTU (23:15:31Z) aparecía antes del cambio de punto de consigna en la HMI (23:16:40Z), lo que sugería que alguien configuró la RTU y que después actuó el operador. Tras la corrección, la sesión de la RTU ocurrió a las 23:19:03Z, después de la orden de arranque del operador. El relato pasa de «alguien manipuló primero» a «una sesión de ingeniería siguió a la acción del operador», lo que lleva a otra pregunta (quién abrió una sesión de configuración a las 23:19 y por qué). Dos líneas no pudieron situarse: la línea en formato BSD de la estación de ingeniería no tiene año ni zona, y la línea del historiador tiene una marca de tiempo nula. Se notifican, no se descartan; el «project download started» de la estación de ingeniería es posiblemente la línea más importante de todas, y situarla requiere su propia comprobación de reloj y los registros locales de la estación de trabajo.

7.5 Actividad práctica

Mida el desfase de una máquina de su propiedad frente a un servidor NTP público o local (por ejemplo, chronyc tracking o ntpq -p en Linux, w32tm /stripchart en Windows), regístrelo con la hora de la medición y repita al cabo de 24 horas para ver la deriva. Registre el equipo, la referencia, el desfase y la hora de la medición. Al cabo de veinticuatro horas, compare el nuevo desfase con el anterior para ver la deriva. Guarde ambas lecturas junto con el trabajo de cronología del Lab 7, para que una investigación posterior sepa cuán incierta sería una corrección hecha a partir de una sola medición.

7.6 Errores comunes y límites

Ejercicios — capítulo 7

EX025 — Decodifique prioridades. Objetivo: calcular la instalación y la severidad. Entradas: <86>, <134>, <11>, <165>. Pasos: calcule cada una. Evidencia esperada: cuatro pares con sus nombres. Rúbrica: 3 = 86 → 10/6 (authpriv, informativa); 134 → 16/6 (local0, informativa); 11 → 1/3 (user, error); 165 → 20/5 (local4, aviso); 2 = aritmética correcta, faltan los nombres; 1 = parcial; 0 = nada.

EX026 — Corrija un reloj. Objetivo: aplicar la fórmula del desfase. Entradas: fep-01 registra un evento a las 02:10:00Z; su desfase, medido una hora después, era de +47 s (el equipo iba adelantado). Pasos: dé la hora corregida y la incertidumbre que indicaría. Evidencia esperada: hora corregida y una frase sobre la incertidumbre. Rúbrica: 3 = 02:09:13Z; incertidumbre porque el desfase se midió más tarde y la deriva es desconocida, p. ej., «± unos segundos; desfase medido a las 03:10Z»; 2 = hora correcta sin incertidumbre; 1 = sentido equivocado; 0 = nada.

EX027 — Sitúe la línea BSD. Objetivo: tratar con seguridad los formatos heredados. Entradas: la línea de eng-ws-15 del Lab 7. Pasos: enumere lo que necesita para situarla en la cronología y escriba la regla de análisis que añadiría. Evidencia esperada: lista y regla. Rúbrica: 3 = el año a partir del contexto de la recogida, la zona horaria configurada en el equipo y su desfase medido; analizar con asignación explícita de zona y marcar el resultado como «zona supuesta»; 2 = regla sin registrar las suposiciones; 1 = descartarla; 0 = nada.

EX028 — Pregunta de punto ciego. Objetivo: emparejar preguntas con fuentes. Entradas: «¿Escribió alguien en KW-04 directamente desde el puerto local para portátil de la estación?». Pasos: indique qué fuentes podrían responderla, cuáles no y qué tendría que añadir. Evidencia esperada: análisis breve. Rúbrica: 3 = el cortafuegos y la captura del centro de control no pueden ver el tráfico local de la estación; los registros de la RTU podrían, si registra la configuración y las escrituras; añadir un sensor en la estación o el registro de la RTU y los registros de acceso físico; 2 = en parte; 1 = «revisar el cortafuegos»; 0 = nada.

Síntesis del capítulo

La telemetría es un conjunto de testigos parciales. Sepa lo que puede ver cada fuente, analice los formatos de forma estricta contando lo que no puede analizar y corrija cada reloj frente a una referencia antes de ordenar los eventos. Una cronología construida sobre relojes sin corregir puede invertir la causa y el efecto; una construida sobre relojes corregidos, con sus incertidumbres indicadas, es evidencia.

Siga estudiando — capítulo 07 de 18

← Capítulo 06 · Índice de capítulos del curso · Capítulo 08 →

Continúe con la siguiente lección escrita.

Respuestas desarrolladas

EX025 — Decodifique prioridades. <86>: 86 = 10 × 8 + 6 → instalación 10 (authpriv), severidad 6 (informativa). <134>: 16 × 8 + 6 → local0, informativa. <11>: 1 × 8 + 3 → user, error. <165>: 20 × 8 + 5 → local4, aviso.

EX026 — Corrija un reloj. Un desfase de +47 s significa que el equipo va adelantado; corregida = 02:10:00 − 47 s = 02:09:13Z. Indique la incertidumbre: «desfase medido hacia las 03:10Z; deriva durante esa hora desconocida; tratar como ±5 s salvo que se disponga de datos de deriva».

EX027 — Sitúe la línea BSD. Se necesitan: el año (a partir del contexto de la recogida, la fecha de la exportación), la zona horaria configurada en la estación de trabajo y su desfase medido. Regla: las líneas que coinciden con ^<\d+>[A-Z][a-z]{2} [ \d]\d \d\d:\d\d:\d\d se analizan con un año y una zona explícitos tomados de una tabla por equipo, y el evento se marca con assumed_zone=true en la cronología. Si se desconocen la zona o el desfase del equipo, póngalo en una lista aparte de «sin situar» en lugar de adivinar.

EX028 — Pregunta de punto ciego. Los registros del cortafuegos del centro de control y el sensor de Z2 no pueden ver el tráfico entre un portátil y la RTU por el conmutador local o el puerto serie de la estación. Los registros de la propia RTU podrían, si registra las sesiones de configuración y las escrituras y si el registro está activado. Añadir: registro de eventos de la RTU reenviado cuando el enlace está activo, un sensor pasivo en la estación donde esté justificado y registros de acceso físico (alarmas de puertas, registro de visitas a la instalación).