OpenCyber Academy
Ingeniería · Capítulo 14 · Español
Código del curso: OCA-138Capítulo 14: OCA-138-C014

Capítulo 14 — Ingeniería de software

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 14 publicada. Mapa, ejemplo, EX027.

flowchart TD
  N0["Resultados de aprendizaje y conexión"]
  N1["14.1 Por qué importa el proceso"]
  N2["14.2 Un ciclo de vida de desarrollo seguro"]
  N3["14.3 Revisiones e inspecciones"]
  N4["14.4 Dependencias y cadena de suministro"]
  N5["14.5 Versiones para sistemas de larga vida"]
  N6["14.7 Actividad práctica"]
  N7["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX027"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje y conexión"]
  N1["14.1 Por qué importa el proceso"]
  N2["14.2 Un ciclo de vida de desarrollo seguro"]
  N3["14.3 Revisiones e inspecciones"]
  N4["14.4 Dependencias y cadena de suministro"]
  N5["14.5 Versiones para sistemas de larga vida"]
  N6["14.7 Actividad práctica"]
  N7["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX027"]
[Resultados de aprendizaje y conexión]
    |
    v
[14.1 Por qué importa el proceso]
    |
    v
[14.2 Un ciclo de vida de desarrollo seguro]
    |
    v
[14.3 Revisiones e inspecciones]
    |
    v
[14.4 Dependencias y cadena de suministro]
    |
    v
[14.5 Versiones para sistemas de larga vida]
    |
    v
[14.7 Actividad práctica]
    |
    v
[Síntesis del capítulo]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX027]

Resultados de aprendizaje y conexión

Al terminar este capítulo, usted podrá (1) aplicar un ciclo de vida de desarrollo seguro al software de infraestructura; (2) gestionar requisitos, revisiones de diseño, revisiones de código e inspecciones; (3) gestionar las dependencias y la cadena de suministro de software con SBOM y procedencia; y (4) planificar versiones y actualizaciones para software embebido y de TO de larga vida. Se apoya en los capítulos 5 y 9 y prepara los capítulos 28, 31 y 39.

14.1 Por qué importa el proceso

Brooks (1987) sostuvo que las dificultades esenciales del software (complejidad, conformidad, mutabilidad, invisibilidad) no admiten un único avance decisivo. El proceso no las elimina; hace visibles los errores pronto, cuando corregirlos es barato, y deja evidencia de que el trabajo se hizo. En la infraestructura crítica, la evidencia forma parte del producto: los reguladores, las aseguradoras y los propietarios de los activos la pedirán. Para la pasarela del TMRP, esa evidencia incluye la revisión del modelo de amenazas, los resultados de las pruebas y la compilación firmada, que van todos al expediente.

14.2 Un ciclo de vida de desarrollo seguro

El NIST Secure Software Development Framework (SP 800-218) agrupa las prácticas en preparar a la organización, proteger el software, producir software bien protegido y responder a las vulnerabilidades. En concreto: requisitos de seguridad y modelos de amenazas con cada funcionalidad; normas de codificación segura; revisión por pares; análisis estático automatizado y pruebas en la integración continua; sistemas de compilación protegidos; recepción y divulgación de vulnerabilidades; y parches con avisos claros. Los principios Secure by Design de CISA añaden que los fabricantes deben asumir la responsabilidad de los resultados de seguridad de sus clientes: valores predeterminados seguros, sin contraseñas predeterminadas, lenguajes con seguridad de memoria cuando sea factible.

14.3 Revisiones e inspecciones

Fagan (1976) describió inspecciones formales de diseño y de código con roles y listas de comprobación definidos, e informó de que encontraban defectos antes y con menor costo que las pruebas. La revisión de código moderna es más ligera, pero conserva los principios: una segunda persona competente lee cada cambio, con una lista de comprobación que incluye la validación de entradas, la autenticación, el manejo de errores y el registro. Las métricas de complejidad, como la complejidad ciclomática de McCabe (McCabe, 1976), señalan las funciones difíciles de probar.

En LRWA, cada cambio en el código de la pasarela lo lee un segundo ingeniero con una lista de comprobación.

14.4 Dependencias y cadena de suministro

La mayor parte del software se ensambla a partir de componentes de terceros. Una lista de materiales de software (SBOM) los enumera para que, cuando se anuncie una vulnerabilidad, pueda saber si le afecta (recursos sobre SBOM de CISA). La procedencia, evidencia verificable de cómo y a partir de qué se construyó un artefacto, protege contra compilaciones manipuladas; el marco SLSA define niveles de integridad de la compilación, y las compilaciones reproducibles permiten a terceros independientes confirmar que un binario corresponde a su código fuente.

14.5 Versiones para sistemas de larga vida

El software de TO puede mantenerse durante veinte años. Planifique: actualizaciones firmadas; reversión; despliegue por etapas (banco de pruebas, un sitio, flota); ventanas de compatibilidad; fechas de fin de soporte publicadas con antelación; y un proceso de actualización que funcione cuando un sitio solo es alcanzable de forma intermitente. Un mecanismo de actualización es en sí mismo una superficie de ataque y debe estar autenticado. Para el TMRP, el plan es concreto: la pasarela pasa del banco a PS2 y luego a PS1, se conserva una imagen de reversión en cada etapa, y las actualizaciones deben llegar a estaciones que solo son alcanzables de forma intermitente por LTE. Como las pasarelas están registradas como deuda técnica con un horizonte de tres años, la fecha de fin de soporte se publica desde el principio.

14.6 Ejemplo resuelto: el proyecto de la pasarela de telemetría (sintético)

El TMRP debe construir una pequeña pasarela que añada autenticación HMAC para las RTU heredadas de PS1 y PS2. El plan: los requisitos R1, R2 y R7, trazados hasta las pruebas; un modelo de amenazas revisado por un segundo ingeniero; solo la biblioteca estándar de Python, evitando dependencias de terceros; análisis estático y pruebas unitarias en la integración continua; compilaciones en un ejecutor dedicado, con artefactos firmados y una SBOM (trivialmente corta en este caso); despliegue en un banco, luego en PS2 y luego en PS1; y una imagen de reversión conservada. Cada paso deja un registro en el expediente de evidencia (capítulo 48).

14.7 Actividad práctica

Escriba un plan de una página, mapeado al SSDF, para una pequeña herramienta que haya escrito: para cada uno de los cuatro grupos de prácticas, enumere dos prácticas concretas y la evidencia que produce cada una. Elija algo real que haya escrito, como su analizador del Lab 3, para que las prácticas sean concretas. Para cada práctica, nombre la evidencia que deja: un registro de revisión, un informe de pruebas, una compilación firmada o una plantilla de aviso. Si una práctica no dejara ninguna evidencia, cámbiela o admita que es solo una intención. Compare su plan con el plan de la pasarela del TMRP y anote una práctica que añadiría.

14.8 Errores comunes y límites

El plan de la pasarela del TMRP se redactó para evitar cada uno de estos errores. Usa solo la biblioteca estándar, así que no hay dependencias sin fijar; las revisiones siguen una lista de comprobación; las compilaciones se firman con una SBOM; el despliegue conserva una imagen de reversión; y las pasarelas tienen un horizonte publicado de tres años.

Ejercicios — capítulo 14

EX027 — Lista de comprobación de revisión. Objetivo: crear una lista de comprobación de revisión para el código de infraestructura. Entradas: el código del Lab 3 y del Lab 8. Pasos: escriba una lista de diez puntos y aplíquela a ambos laboratorios, registrando un hallazgo para cada uno. Evidencia esperada: lista y dos hallazgos. Rúbrica: 3 = lista específica (validación de entradas, comparación en tiempo constante, manejo de claves, caminos de error, registro, límites) y hallazgos reales; 2 = lista genérica; 1 = sin hallazgos; 0 = nada.

EX028 — Simulacro de respuesta con SBOM. Objetivo: usar una SBOM en la respuesta a una vulnerabilidad. Entradas: una SBOM sintética que enumera libmodbus 3.1.6, openssl 3.0.8 y zlib 1.2.13 para el firmware de RTU-B, y un aviso sobre uno de ellos. Pasos: describa los pasos de triaje desde el aviso hasta la decisión, incluido cómo determina la explotabilidad en su despliegue. Evidencia esperada: procedimiento. Rúbrica: 3 = coincidencia, análisis de alcanzabilidad, contacto con el proveedor, control compensatorio, comunicación; 2 = sin alcanzabilidad; 1 = «actualizar todo»; 0 = nada.

Síntesis del capítulo

El proceso hace visibles los errores pronto y deja evidencia. Use un marco de desarrollo seguro reconocido, revise con listas de comprobación, mida la complejidad y trate las dependencias y las compilaciones como parte de su superficie de ataque, con SBOM y procedencia. Diseñe las versiones y las actualizaciones para décadas, con autenticación, despliegue por etapas y reversión.

Respuestas desarrolladas

EX027. Lista de comprobación: longitud de la entrada comprobada antes de indexar; integridad comprobada antes del uso; comparación de secretos en tiempo constante; ningún secreto en el código fuente; los caminos de error rechazan; las excepciones no se silencian; límites en bucles y tamaños; registro de los rechazos sin secretos; orden de bytes explícito; pruebas para cada camino de rechazo. Hallazgos: Lab 3: las tramas truncadas informan «crc» en lugar de la forma (claridad del diagnóstico); Lab 8: clave escrita en el código fuente (aceptable solo como demostración etiquetada).

EX028. Haga coincidir el aviso con las entradas y versiones de la SBOM; confirme que la función o característica vulnerable está presente y es alcanzable en la configuración de RTU-B (p. ej., ¿está habilitado el servidor TLS?, ¿se usa el analizador vulnerable de la biblioteca?); pida al proveedor una evaluación y un firmware corregido; aplique controles compensatorios (restringir el conducto, deshabilitar la característica); comunique a operaciones; programe la actualización mediante despliegue por etapas; registre la decisión.