La comprensión del software consiste en el análisis e interpretación del comportamiento, la estructura y la funcionalidad de los sistemas de software, especialmente cuando se trabaja con documentación o código fuente incompletos. [ 1 ] Este campo abarca prácticas técnicas como la ingeniería inversa , el análisis de código y la verificación formal para garantizar que el software funcione de forma segura y fiable.
Definición y alcance
La comprensión del software implica examinar los sistemas de software para verificar su funcionalidad, seguridad y protección en diversas condiciones operativas. Esto incluye tanto el análisis estático del código como la observación dinámica del comportamiento en tiempo de ejecución.
Esta práctica ha cobrado cada vez más importancia a medida que los sistemas de software se han vuelto más complejos e interconectados, incorporando a menudo componentes de terceros y bibliotecas de código abierto que las organizaciones no desarrollaron internamente.
Historia
Desarrollo inicial (décadas de 1960 a 1980)
La necesidad de comprender sistemáticamente el software surgió durante la " crisis del software " de los años 60 a 80, cuando la complejidad de los sistemas de software comenzó a superar la capacidad de los desarrolladores para mantenerlos y verificarlos de forma fiable.
Los incidentes más destacados ocurridos durante este período pusieron de relieve la importancia de un análisis exhaustivo del software:
- Los accidentes de radioterapia con el equipo Therac-25 en la década de 1980, causados por fallos de software que escaparon a los métodos de prueba tradicionales, provocaron sobredosis de radiación fatales.
En respuesta, las prácticas de ingeniería de software evolucionaron para hacer hincapié en la comprensión y el mantenimiento de los programas mediante la programación estructurada , las inspecciones de código y los primeros métodos de verificación formal.
Retos modernos (desde la década de 1990 hasta la actualidad)
La adopción generalizada de componentes de código abierto , las complejas cadenas de suministro de software y los ciclos de implementación rápidos han generado nuevos desafíos para la comprensión del software. Las organizaciones suelen utilizar software que no han desarrollado, lo que dificulta la comprensión total del comportamiento del sistema.
La brecha en la comprensión del software
La “brecha de comprensión del software” se refiere a la creciente disparidad entre la dependencia de la sociedad del software complejo y la capacidad de analizar y verificar el comportamiento de dicho software. [ 2 ]
El informe de 2025 titulado «Cerrando la brecha en la comprensión del software» instó a una acción nacional coordinada, incluyendo la creación de un consejo ejecutivo interinstitucional y una mayor rendición de cuentas para el software seguro desde el diseño. El informe también solicitó la introducción de innovaciones técnicas, como la inteligencia artificial, para desarrollar capacidades confiables y asequibles para analizar software a gran escala. [ 3 ] El subsecretario de Defensa para Investigación e Ingeniería, Emil Michael, destacó este informe en sus comentarios al Coloquio de Sistemas de Software Resilientes de DARPA en junio de 2025. [ 4 ]
Además de los esfuerzos gubernamentales, el tema de la comprensión del software también ha captado la atención de la comunidad investigadora. En 2025, se celebrará el Taller de Comprensión del Software e Ingeniería Inversa (SURE) para reunir a académicos y profesionales que trabajan en desafíos técnicos en análisis de programas , verificación formal e ingeniería inversa . [ 5 ]
Factores contribuyentes
Varios factores contribuyen a esta brecha:
- Falta de inversión en herramientas de análisis: Décadas de priorizar el desarrollo rápido de software sobre las capacidades de análisis integrales han creado una acumulación de software que no se puede comprender completamente con las herramientas actuales.
- Exceso de dependencia de las pruebas: Las organizaciones suelen confiar en las pruebas funcionales y las certificaciones de los proveedores en lugar de en un análisis profundo del código, lo que puede pasar por alto vulnerabilidades ocultas o funcionalidades maliciosas.
- Limitaciones de escalabilidad: Las herramientas actuales de análisis de programas se enfrentan a limitaciones de escala y precisión cuando se aplican a sistemas de software modernos, que pueden tener un número astronómicamente grande de posibles estados de ejecución.
- Evolución rápida: Las continuas actualizaciones de software dificultan la comprensión de los esfuerzos por mantenerse al día con los cambios.
- Mentalidad: No comprender completamente el software se considera inevitable; una norma, tal vez como una cuestión científica derivada del problema de la parada ; o económica porque es inviable abordarlo.
Iniciativas gubernamentales
Esfuerzos de Estados Unidos
En marzo de 2023, se celebró en Arlington, Virginia, un taller sobre "Comprensión del software para la seguridad nacional" (SUNS, por sus siglas en inglés), que reunió a expertos de 18 agencias gubernamentales para evaluar el estado de las capacidades de comprensión del software. [ 6 ]
En enero de 2025, cuatro agencias estadounidenses ( CISA , NSA , DARPA y OUSD (R&E) ) publicaron un informe conjunto titulado "Cerrando la brecha en la comprensión del software", que describe la comprensión del software como una prioridad de seguridad nacional y pide una acción gubernamental coordinada. [ 7 ]
El informe propuso varios enfoques:
- Promover prácticas de diseño seguras y la certificación independiente por parte de terceros.
- Implementar cambios en las políticas y los procesos de adquisición para exigir estándares de transparencia de software más elevados.
- Invertir en innovación técnica e I+D para herramientas de análisis automatizadas.
- Desarrollar las capacidades de la fuerza laboral y la colaboración intersectorial.
En 2025, un estudio de consenso de las Academias Nacionales sobre problemas cibernéticos complejos enfatizó la necesidad de comprender el software. [ 8 ]
Métodos y técnicas
Los métodos para comprender un tema pueden considerarse en un espectro que refleja la importancia de la participación del creador. Esta lista está ordenada según la dependencia creciente de dicha participación.
Análisis dinámico
El análisis dinámico observa el comportamiento del software durante su ejecución en entornos controlados. Entre las técnicas empleadas se incluyen el sandboxing, las pruebas de fuzzing y la monitorización en tiempo de ejecución. Este enfoque puede revelar comportamientos emergentes, pero solo abarca las rutas de ejecución específicas analizadas.
Ingeniería inversa
La ingeniería inversa analiza el software compilado sin acceso al código fuente, utilizando herramientas como desensambladores y descompiladores. Esto es fundamental para analizar malware, sistemas heredados y software de terceros.
Análisis asistido por IA
El aprendizaje automático y la inteligencia artificial se aplican cada vez más a tareas de comprensión de software, incluyendo el reconocimiento de patrones, la predicción de vulnerabilidades y la generación automática de resúmenes de código. [ 9 ]
Análisis estático
El análisis estático examina el código sin ejecutarlo, utilizando herramientas automatizadas para identificar posibles vulnerabilidades, errores de codificación o patrones sospechosos. Si bien es exhaustivo, el análisis estático puede generar falsos positivos y presentar dificultades con interacciones complejas entre programas.
Modelado de amenazas
El modelado de amenazas implica la creación de modelos para mostrar la intención del creador. Si estos modelos se documentan y comparten, pueden facilitar la comprensión del software. Sin embargo, puede presentar dificultades, ya que la salida rara vez se captura en un formato legible por máquina. El modelado de amenazas es más útil para mostrar el diseño que la funcionalidad empresarial prevista.
Métodos formales
La verificación formal utiliza técnicas matemáticas para demostrar las propiedades del software o encontrar contraejemplos. Si bien requieren muchos recursos, los métodos formales pueden proporcionar sólidas garantías sobre el comportamiento del software bajo condiciones específicas.
Incidentes notables
Varios casos de gran repercusión han demostrado las consecuencias de una comprensión insuficiente del software:
Escándalo de emisiones de Volkswagen (2015)
Volkswagen programó el software de control del motor en vehículos diésel para detectar las condiciones de las pruebas de emisiones y reducir temporalmente la contaminación, permitiendo al mismo tiempo mayores emisiones durante la conducción normal. Este código engañoso pasó desapercibido para los reguladores durante años.
Ataque a la cadena de suministro de SolarWinds (2019)
Los atacantes insertaron código malicioso en las actualizaciones del software SolarWinds Orion, que posteriormente fueron firmadas digitalmente y distribuidas a miles de clientes, incluidas agencias del gobierno estadounidense. El software comprometido pasó desapercibido durante meses a pesar de contar con la firma digital adecuada.
Vulnerabilidad de Log4j (2021)
Una grave vulnerabilidad en la biblioteca de registro Log4j, ampliamente utilizada (CVE-2021-44228), permitía la ejecución remota de código y afectaba a miles de aplicaciones. El fallo estaba presente en el código desde 2013, pero permaneció sin detectarse debido a la complejidad del análisis de las dependencias del software.
Investigación y desarrollo
La investigación actual se centra en varias áreas:
- Fundamentos matemáticos: Desarrollo de métodos formales para modelar y razonar sobre el comportamiento del software.
- Análisis escalable: Creación de marcos de análisis modulares y componibles que puedan manejar sistemas de software a gran escala.
- Modelado de ejecución: Mejora de la simulación de entornos operativos de software
- Generación automatizada de modelos: Uso de IA para generar modelos de análisis a partir de código existente.
- Colaboración humano-máquina: Diseño de herramientas que combinan eficazmente el análisis automatizado con la experiencia humana.
Véase también
Referencias
- ↑ "Cerrando la brecha de comprensión del software" . Agencia de Ciberseguridad y Seguridad de Infraestructura; DARPA; OUSD(R&E); NSA. 2025. Consultado el 1 de septiembre de 2025 .
- ↑ "Agencias del gobierno de EE. UU. piden cerrar la brecha de comprensión del software" . SecurityWeek . 17 de enero de 2025. Consultado el 1 de septiembre de 2025 .
- ↑ "NSA y CISA recomiendan cerrar la brecha en la comprensión del software con una estrategia nacional coordinada" . ExecutiveGov . 18 de enero de 2025. Consultado el 1 de septiembre de 2025 .
- ↑ Michael, Emil (2025). Clausura: HON. Emil Michael, Subsecretario de Defensa para Investigación e Ingeniería . YouTube . Recuperado el 1 de septiembre de 2025 .
- ↑ "Taller de Comprensión de Software e Ingeniería Inversa (SURE)" . Taller SURE . 2025. Consultado el 1 de septiembre de 2025 .
- ↑ Ghormley, D. (2025). "La necesidad nacional de comprender el software" . Laboratorios Nacionales Sandia . Recuperado el 1 de septiembre de 2025 .
- ↑ "Cerrando la brecha de comprensión del software" . Agencia de Ciberseguridad y Seguridad de Infraestructura; DARPA; OUSD(R&E); NSA. 2025. Consultado el 1 de septiembre de 2025 .
- ↑ Problemas cibernéticos complejos: Pasos concretos hacia un futuro digital resiliente . Washington, DC: Academias Nacionales de Ciencias, Ingeniería y Medicina. 2025. doi : 10.17226/29056 . ISBN 978-0-309-29056-2. Consultado el 1 de septiembre de 2025 .
- ↑ "NSA y CISA recomiendan cerrar la brecha en la comprensión del software con una estrategia nacional coordinada" . ExecutiveGov . 18 de enero de 2025. Consultado el 1 de septiembre de 2025 .
- Desarrollo de software