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

Capítulo 18 — Proyecto técnico supervisado

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 18 — Proyecto técnico supervisado

Mapa de la lección

Lección 18 publicada. Mapa, ejemplo, EX071.

flowchart TD
  N0["Resultados de aprendizaje y conexión"]
  N1["18.1 Elegir un proyecto"]
  N2["18.2 Fases"]
  N3["18.3 Sellar la evidencia"]
  N4["18.5 Rúbrica de evaluación del proyecto"]
  N5["18.6 Práctica continua"]
  N6["Síntesis del capítulo"]
  N7["Capítulo 1: EX001–EX004"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX071"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje y conexión"]
  N1["18.1 Elegir un proyecto"]
  N2["18.2 Fases"]
  N3["18.3 Sellar la evidencia"]
  N4["18.5 Rúbrica de evaluación del proyecto"]
  N5["18.6 Práctica continua"]
  N6["Síntesis del capítulo"]
  N7["Capítulo 1: EX001–EX004"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX071"]
[Resultados de aprendizaje y conexión]
    |
    v
[18.1 Elegir un proyecto]
    |
    v
[18.2 Fases]
    |
    v
[18.3 Sellar la evidencia]
    |
    v
[18.5 Rúbrica de evaluación del proyecto]
    |
    v
[18.6 Práctica continua]
    |
    v
[Síntesis del capítulo]
    |
    v
[Capítulo 1: EX001–EX004]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX071]

Resultados de aprendizaje y conexión

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

Este capítulo cierra el curso. Aplica todo lo anterior a una única tarea realista, y su resultado es lo que un empleador o un evaluador pediría ver: no una afirmación de competencia, sino la evidencia de ella.

18.1 Elegir un proyecto

Un buen proyecto supervisado es acotado, valioso y comprobable. Ejemplos tomados de este libro: bastionar el conducto entre la red corporativa y el centro de control y verificarlo (capítulos 10–11); cerrar la elusión por los routers de estación en todas las estaciones (capítulo 13); desplegar la detección de derivas en los servidores del centro de control (capítulo 14); construir y probar la cadena de detección con una captura saneada y reproducida (capítulo 17). Todo proyecto necesita un supervisor (aquí L. Ferreira) y un autorizador responsable de los sistemas afectados (aquí A. Mensah, por Kestrel Water).

Acuerde antes del primer día el supervisor, el responsable que firma el alcance y los criterios de éxito. Elija un conducto o una clase de equipos, no el programa entero. Anote los puntos abiertos que espera dejar, de modo que la honestidad sobre los límites se planifique en lugar de improvisarse en la evaluación.

18.2 Fases

  1. Alcance (capítulo 5): propósito, sistemas, acciones, ventana, personas, condiciones de parada, tratamiento de la evidencia, firmado.
  2. Línea base: exportaciones de configuración y resúmenes antes de cambiar nada (capítulo 14); resultados actuales de las pruebas (capítulo 11).
  3. Cambio: bajo un registro de cambio con marcha atrás (capítulo 10).
  4. Verificación: pruebas positivas y negativas, cada requisito verificado, fallido o sin probar.
  5. Registro de diagnóstico durante todo el proyecto, con las cuatro etiquetas (capítulo 13).
  6. Traspaso: registro de la configuración tal como se construyó, instrucciones de trabajo, puntos abiertos con responsables (capítulo 16).
  7. Paquete de evidencias: todo lo anterior, sellado.

No omita los resúmenes de la línea base aunque el cambio parezca pequeño; sin ellos no puede demostrar qué cambió. Mantenga abierto el registro de diagnóstico durante toda la ventana, incluidas las interrupciones y los intentos fallidos. El paquete de evidencias va al final, cuando ya existen los documentos de traspaso que incluir en él.

18.3 Sellar la evidencia

Un manifiesto enumera cada elemento con su resumen SHA-256 (FIPS 180-4). El sello es el resumen del propio manifiesto. Registre el sello fuera del paquete (en el registro de cambio, en un correo al supervisor, en el formulario de evaluación), porque quien pueda editar el paquete también puede editar un manifiesto guardado dentro de él. Más adelante, recalcular los resúmenes de los elementos muestra si algo ha cambiado; recalcular el resumen del manifiesto y compararlo con el sello registrado externamente muestra si el manifiesto se ha alterado.

Lo que un sello demuestra: que los elementos son, byte a byte, lo que eran cuando se sellaron. Lo que no demuestra: que fueran ciertos, completos o creados cuando afirman. Eso depende de cómo se recogieron (capítulo 5) y de registros independientes (registros del cortafuegos en el recolector, tickets de cambio en su propio sistema). Para garantías más sólidas, las organizaciones usan firmas con claves custodiadas por un tercero o un sellado de tiempo de confianza; el principio es el mismo.

18.4 Ejemplo resuelto: el proyecto del conducto de KW-04 (sintético)

El proyecto de R. Kaur eliminó la regla corporativa amplia R4 de fw-01 (CHG-2215), verificó el resultado e investigó por el camino el evento de KW-09. El paquete de evidencias se sella y, una semana después, se vuelve a verificar. Lab 18 (guárdelo como lab18.py y ejecútelo con python3 lab18.py):

# Lab 18 - seal and re-verify a project evidence package (offline, standard library only)
# Synthetic artefacts from the supervised project; written only inside a temporary directory.
import hashlib, pathlib, tempfile
artefacts = {
 "01-scope.md": "Scope: KW-04 conduit hardening; authorized by A. Mensah (Kestrel Water) 2026-10-05.\n",
 "02-before-fw.txt": "R4 allow 10.30.0.0/16 10.20.0.0/24 tcp any\n",
 "03-after-fw.txt": "R4 removed CHG-2215\n",
 "04-tests.csv": "test,result\nT4,pass\nT5,pass\nT9,pass\n",
 "05-troubleshooting-log.md": "07:05Z KW-09 missing; H4 consistent; RTU config preserved as E-17.\n",
}
with tempfile.TemporaryDirectory() as tmp:
    d = pathlib.Path(tmp)
    for n, t in artefacts.items(): (d / n).write_text(t)
    lines = [f"{hashlib.sha256((d / n).read_bytes()).hexdigest()}  {n}" for n in sorted(artefacts)]
    (d / "MANIFEST.sha256").write_text("\n".join(lines) + "\n")
    seal = hashlib.sha256((d / "MANIFEST.sha256").read_bytes()).hexdigest()
    print("manifest:")
    for l in lines: print(" ", l[:16] + "...", l.split("  ")[1])
    print("seal (record this outside the package):", seal[:24])
    (d / "04-tests.csv").write_text("test,result\nT4,pass\nT5,pass\nT9,pass\nT10,pass\n")   # later edit
    for l in (d / "MANIFEST.sha256").read_text().splitlines():
        h, n = l.split("  ")
        ok = hashlib.sha256((d / n).read_bytes()).hexdigest() == h
        print(f"verify {n:<26} {'OK' if ok else 'MISMATCH'}")

Salida esperada (Python 3.13.5):

manifest:
  72d8be01e70067c7... 01-scope.md
  8d52d15a3e02b7f8... 02-before-fw.txt
  2cd59665641b4779... 03-after-fw.txt
  d6eccc2e2ac61ecb... 04-tests.csv
  6d2525605f11521c... 05-troubleshooting-log.md
seal (record this outside the package): 062b9a1fd700dd0eac04b3a8
verify 01-scope.md                OK
verify 02-before-fw.txt           OK
verify 03-after-fw.txt            OK
verify 04-tests.csv               MISMATCH
verify 05-troubleshooting-log.md  OK

Cuatro elementos se verifican; 04-tests.csv no. Alguien añadió una línea T10 después del sellado. Puede ser una prueba posterior legítima, pero debe añadirse como un elemento nuevo, fechado por separado y con su propia entrada, no editando un archivo sellado. El evaluador pide a R. Kaur que restaure la versión sellada desde el archivo (su resumen debe coincidir con el manifiesto) y que presente T10 como 06-tests-addendum.csv en una versión nueva y resellada del paquete, con ambos sellos registrados.

18.5 Rúbrica de evaluación del proyecto

Criterio 3 (cumple el resultado técnico) 1
Alcance y autorización Alcance firmado con responsable, ventana y condiciones de parada Aprobación verbal
Corrección técnica El cambio cumple los requisitos; sin daños colaterales Parcial o perjudicial
Verificación Todos los requisitos verificados o explícitamente abiertos, pruebas positivas y negativas con evidencia Solo recuentos de aprobados
Diagnóstico Hipótesis, predicciones, descartes, conservación Narración
Documentación Instrucciones de trabajo ejecutables, registro de la configuración tal como se construyó, sin secretos Notas de memoria
Evidencia Manifiesto, sello externo, ejecución de verificación Carpeta de capturas de pantalla
Honestidad sobre los límites Puntos abiertos con responsables; puntos ciegos declarados «Todo hecho»

18.6 Práctica continua

Después del curso, mantenga tres hábitos: verificar antes de informar, conservar antes de cambiar y corregir los relojes antes de ordenar los eventos. Mantenga los laboratorios contenidos y no pruebe nunca una infraestructura real sin la autorización escrita de su responsable. Revise las normas y orientaciones cuando cambien; todas las fuentes de este libro están fechadas en octubre de 2026. Convierta el trabajo del curso en un portafolio: planes con alcance, salidas de los laboratorios con sus versiones de Python, registros de diagnóstico y el paquete sellado de este capítulo, con cada sello registrado fuera de su paquete. Cuando pase a una versión nueva de Python, vuelva a ejecutar los laboratorios y compare las salidas; una diferencia es un hallazgo que hay que explicar, no ocultar. Busque trabajo supervisado en el que pueda repetir el ciclo completo (alcance, línea base, cambio, verificación, traspaso) sobre un sistema real con la firma de su responsable, y pida a su supervisor que lo puntúe con la rúbrica de 18.5.

18.7 Errores comunes y límites

Comprobaciones que detectan estos errores:

Ejercicios — capítulo 18

EX069 — Alcance del proyecto. Objetivo: definir un proyecto supervisado. Entradas: elija un proyecto de 18.1. Pasos: redacte el alcance, los requisitos (comprobables) y la lista de elementos que contendrá el paquete de evidencias. Evidencia esperada: plan de una página. Rúbrica: 3 = todos los elementos del alcance, al menos cuatro requisitos comprobables con pruebas positivas y negativas, elementos asociados a las fases, supervisor y autorizador nombrados; 2 = una laguna; 1 = genérico; 0 = nada.

EX070 — Verifique un sello. Objetivo: usar el sello correctamente. Entradas: el Lab 18. Pasos: modifique el programa para que, al final, recalcule también el resumen del manifiesto y lo compare con el sello registrado; después edite también MANIFEST.sha256 para que coincida con el archivo de pruebas manipulado y muestre lo que informa la comparación del sello. Evidencia esperada: código y salidas de ambos casos. Rúbrica: 3 = primer caso: el sello coincide (manifiesto intacto) mientras un elemento no coincide; segundo caso: todos los elementos «OK» frente al manifiesto editado, pero la comparación del sello falla; explica por qué el sello debe guardarse fuera; 2 = un caso; 1 = intentado; 0 = nada.

EX071 — Gestione la adición tardía. Objetivo: gestionar los cambios en la evidencia. Entradas: la edición de T10. Pasos: redacte paso a paso el procedimiento que describió el evaluador, incluido qué se registra y dónde. Evidencia esperada: procedimiento. Rúbrica: 3 = restaurar el original sellado desde el archivo y comprobar su resumen; añadir el anexo como elemento nuevo con fecha y recolector; generar una nueva versión del manifiesto y un nuevo sello; registrar ambos sellos externamente con el motivo; no sobrescribir nunca la versión 1; 2 = falta el registro externo; 1 = «editar y resellar»; 0 = nada.

EX072 — Autoevaluación. Objetivo: aplicar la rúbrica con honestidad. Entradas: el proyecto de R. Kaur tal como se describe en este capítulo y en los capítulos 10–13. Pasos: puntúe cada criterio de la rúbrica con una frase de evidencia y enumere los puntos abiertos. Evidencia esperada: tabla puntuada y puntos abiertos. Rúbrica: 3 = puntuaciones justificadas a partir del texto (por ejemplo, verificación limitada por REQ-4 hasta que se elimine R6; criterio de evidencia rebajado por la edición posterior al sellado hasta que se corrija), los puntos abiertos incluyen R6, la elusión por el router de KW-04 en las demás estaciones, la cobertura de REQ-6 y el desenlace del incidente de KW-09, cada uno con responsable; 2 = puntuaciones sin evidencia; 1 = todo 3; 0 = nada.

Síntesis del capítulo

Un proyecto supervisado muestra la competencia técnica como evidencia: un alcance firmado, una línea base, un cambio controlado, la verificación de cada requisito, un registro de diagnóstico, documentación ejecutable y un paquete sellado. Un sello demuestra que la evidencia no ha cambiado desde el sellado, si se registra fuera del paquete; no demuestra que la evidencia fuera cierta. Declare qué queda abierto, quién es su responsable y qué no pudo ver.

Siga estudiando — capítulo 18 de 18

← Capítulo 17 · Índice de capítulos del curso · Siguiente curso desde el índice de capítulos →

Este es el último capítulo de este curso; el índice enlaza con el siguiente curso del itinerario completo de estudio.

Respuestas desarrolladas

EX001 — Clasificación de rutas. HMI → scada-01 «arrancar la bomba 2»: control; el peor caso es un arranque o una parada no autorizados de una bomba (desbordamiento, transitorio de presión). KW-04 → scada-01 lectura: supervisión; el peor caso es que los operadores actúen sobre un nivel falso. eng-ws-15 → KW-04 descarga del proyecto: gestión (e indirectamente control); el peor caso es la sustitución de la lógica del controlador, la acción más peligrosa de la lista, porque cambia lo que hace el controlador aunque no se envíe ninguna orden más. jump-01 → hist-02 SSH: gestión; el peor caso son registros históricos alterados o borrados, o un punto de apoyo en Z2. hist-02 → CSV corporativo: datos de supervisión que salen de la zona de control; el peor caso es la divulgación de datos operativos o, si se implementa como extracción iniciada desde fuera, una credencial corporativa dentro de Z2 (capítulo 15).

EX004 — Lista de plataformas compartidas. Servidores de virtualización: «¿Qué margen de capacidad queda si falla un servidor y qué invitados se reinician y dónde?». Directorio: «¿Quién está en los grupos de administradores y pueden los operadores iniciar sesión en la HMI si el directorio no está accesible?». Fuente de hora: «¿Cuál es la referencia, hay una segunda y se supervisa el desfase?». Colector de supervisión: «¿Qué ocurre cuando se llena su disco o se detiene? ¿Almacenan en búfer las fuentes y recibe alguien una alerta?».

EX069 — Alcance del proyecto. Ejemplo (elusión por los routers de estación): propósito: eliminar las rutas no autorizadas hacia el Modbus de las estaciones a través de routers celulares; sistemas: doce routers de estación (lectura), cambios solo en los routers con hallazgos; ventana: acordada por estación con Kestrel Water; autorizador A. Mensah; supervisor L. Ferreira; condiciones de parada: cualquier pérdida de comunicación o alarma. Requisitos: ninguna redirección de puerto a tcp/502 en ningún router (negativa: comprobación de la configuración y prueba de conexión con un cliente VPN); el SCADA sondea todas las estaciones (positiva: recuento del histórico); configuraciones de los routers bajo detección de derivas (prueba: se detecta un cambio inocuo inyectado); gestión de los routers solo desde jump-01 (prueba negativa). Elementos: alcance, exportaciones de la línea base y resúmenes, registros de cambio, resultados de las pruebas, registro de diagnóstico, registro de la configuración tal como se construyó, manifiesto y sello.

EX070 — Verifique un sello. Tras la verificación, calcule hashlib.sha256((d / "MANIFEST.sha256").read_bytes()).hexdigest() y compárelo con seal: el caso 1 imprime «seal OK» mientras 04-tests.csv no coincide. Caso 2: reescriba la línea del manifiesto de 04-tests.csv con el nuevo resumen; ahora todos los elementos se verifican «OK», pero el resumen del manifiesto difiere del sello registrado, así que la comprobación del sello falla. Solo un sello guardado externamente revela que se editó el propio manifiesto.

EX071 — Gestione la adición tardía. (1) Recupere la versión 1 del paquete desde el archivo; compruebe cada elemento y el manifiesto frente al sello registrado externamente. (2) Restaure 04-tests.csv al contenido sellado. (3) Guarde los resultados de T10 como 06-tests-addendum.csv con el recolector y la hora UTC. (4) Cree la versión 2 del manifiesto con los seis elementos; calcule el sello 2. (5) Registre el sello 2 en el registro de cambio y en el formulario de evaluación con el motivo, conservando el sello 1. (6) No sobrescriba nunca la versión 1.

EX072 — Autoevaluación. Alcance 3 (firmado, responsable y condiciones de parada). Corrección técnica 2 (R4 eliminada; R6 sigue presente). Verificación 2 (REQ-4 falla hasta que se elimine R6; REQ-6 solo se probó después de EX042). Diagnóstico 3 (hipótesis, predicciones y conservación en KW-09). Documentación 2 (registro de la configuración tal como se construyó pendiente para los hallazgos de los routers). Evidencia 2 hasta que se corrija la edición posterior al sellado; después, 3. Honestidad 3 si se enumeran los puntos abiertos. Puntos abiertos: eliminar R6 (R. Kaur); comprobación de la elusión por los routers en todas las estaciones (responsable de red); prueba de regresión mensual de REQ-6 (J. Tan); desenlace del incidente de KW-09 (L. Ferreira).