Seminario web destacado: MISRA C++ 2023: todo lo que necesita saber | Vea ahora

Proceso de desarrollo de software para sistemas críticos para la seguridad

Foto de cabeza de Ricardo Camacho, Director de Cumplimiento de Seguridad y Seguridad
13 de septiembre de 2023
7 min leer

Examinar las mejores prácticas para el desarrollo de software crítico para la seguridad. Conozca factores importantes, tecnologías avanzadas y tendencias de la industria para desarrollar sistemas que sean seguros, confiables y cumplan con las normas.

Cuando se trata de diseñar y programar software para cosas como vehículos de conducción autónoma, hay que considerar la seguridad como una máxima prioridad. Esto se aplica a mucho más que a las ideas futuristas de transporte. De hecho, se aplica a muchos artículos que millones de personas utilizan cada día. Aviones y líneas ferroviarias. Una máquina de resonancia magnética. La señal de giro o el limpiaparabrisas de su propio automóvil.

Todos estos sistemas complejos (y muchos más) dependen de software crítico para la seguridad desarrollado teniendo en mente tantos escenarios de falla como sea posible para mitigar las consecuencias. Pero ¿qué diferencia a este tipo de desarrollo de otros? Los desafíos, las mejores prácticas y los estándares de seguridad involucrados implican riesgos mucho mayores y cierta fricción con las metodologías modernas. Entonces, ¿cuál es el problema con el desarrollo de software crítico para la seguridad?

¿Qué es el software crítico para la seguridad?

Algo que se considera software crítico para la seguridad suele ser una aplicación de software integrada diseñada específicamente para sistemas que, en caso de falla, existen medidas para evitar lesiones y la pérdida de vidas. Esto significa que cualquier software de este tipo requiere verificación, validación y confiabilidad en cada paso del ciclo de vida de desarrollo.

¿Cuáles son ejemplos de dispositivos críticos para la seguridad?

Un ejemplo de un sistema crítico para la seguridad sería un marcapasos u otros dispositivos médicos y de salud. Otros tipos incluyen funciones avanzadas de seguridad del automóvil, como una cámara retrovisora ​​o sistemas de asistencia de carril. Ejemplos más complejos son los controles de vuelo de los aviones y los sistemas nucleares.

¿En qué se diferencia el desarrollo de software crítico para la seguridad?

Los sistemas críticos para la seguridad requieren que cualquier software relacionado cumpla con rígidos estándares de seguridad durante el desarrollo. Los estándares de seguridad también se actualizan periódicamente para abordar los problemas y vulnerabilidades que surgen. Esto requiere que los desarrolladores de software de sistemas críticos para la seguridad se mantengan al día y sean ágiles en lo que respecta al desarrollo.

Además, el objetivo de este tipo de desarrollo no es la velocidad ni siquiera las prestaciones, sino la seguridad. Durante el ciclo de vida, los desarrolladores deben considerar tantos escenarios de fallas del mundo real como sea posible, además de cumplir con los estándares de seguridad dentro de su industria. Esto también requiere pruebas, validación y verificación sólidas.

Desarrollo de software en industrias con altos requisitos de seguridad

Si bien pueden venir a la mente industrias como la de dispositivos médicos y sistemas nucleares, muchas más utilizan estándares de seguridad rigurosos. Las industrias, donde las fallas pueden provocar pérdidas catastróficas, deben confiar en estándares de seguridad que faciliten el software más seguro posible. Esto incluye, por supuesto, la automoción y la aeroespacial. Sin embargo, esto también se aplica a industrias como la ferroviaria e incluso a la ciberseguridad o los sistemas financieros.

¿Cuáles son las industrias donde se utiliza ampliamente el software crítico para la seguridad?

Como se mencionó anteriormente, tanto la industria automotriz como la aeroespacial dependen en gran medida de sistemas críticos para la seguridad para operar. Cosas como los frenos ABS, el conductor autónomo en constante desarrollo e incluso luces simples contribuyen a la seguridad de los vehículos en lo que respecta al desarrollo de software. En el sector aeroespacial, los desarrolladores deben considerar los estándares de seguridad en una variedad de sistemas, desde el reciclaje de oxígeno y aire hasta la combustión de motores y la comunicación por telemetría.

Pero otras industrias también emplean en gran medida altos requisitos de seguridad, como la atención médica, el transporte, la energía nuclear y la defensa. El fracaso podría significar la pérdida de vidas humanas, daños a la propiedad o daños al medio ambiente, incluso en pequeña escala. Esto es inaceptable cuando se trata de desarrollo de software en estas industrias.

¿Cuáles son los estándares y regulaciones que rigen el desarrollo de software crítico para la seguridad?

La Organización Internacional de Normalización (ISO), establecida en 1947, establece estándares de seguridad en muchas industrias con el aporte de más de 160 miembros de muchos países. Junto con otros organismos, ISO trabaja constantemente para desarrollar y reevaluar sus estándares de seguridad en miles de sistemas en muchas industrias.

Cada industria tiene sus propios organismos que practican la supervisión y regulación de dispositivos y software críticos para la seguridad. Por ejemplo, en la industria automotriz, existe la norma internacional ISO 26262 para seguridad funcional y la norma ISO/SAE 21434 para seguridad automotriz. Para dispositivos médicos, tiene IEC 62304 e IEC 62443 para seguridad. También existen estándares de codificación como MISRA y AUTOSAR C++ 14 que se sabe que se aplican a una variedad de otras industrias como la aeroespacial, militar, ferroviaria y médica. Otros estándares de seguridad para varios tipos de aplicaciones incluyen CERT, CWE y OWASP.

Esencialmente, existen distintos estándares de oro que los desarrolladores deben seguir dentro de cada industria, y algunos que son transversales. Estos estándares se actualizan constantemente en función de la última tecnología y las formas de explotar esa tecnología.

Mejores prácticas para el desarrollo de software en sistemas críticos para la seguridad

Hay cinco pilares esenciales para los requisitos en el desarrollo de software crítico para la seguridad.

  1. Inequívoco. Tanto en la documentación como en el código mismo, es necesario que haya un acuerdo sobre lo que significan los requisitos, sin interpretaciones ni conjeturas.
  2. Trazable. Los programadores y administradores deberían poder rastrear los requisitos hacia arriba y hacia abajo al revisar el código o durante el proceso de prueba.
  3. Repetible. Lo mínimo indispensable es que el programa y el software devuelvan los resultados esperados. Los dispositivos deben funcionar según los requisitos y, al mismo tiempo, devolver los datos y resultados esperados durante cualquier tipo de falla.
  4. Consistente. No debería haber características de requisitos conflictivas en lo que respecta a tiempos, rendimiento, priorización, etc. La terminología también es uniforme y coherente en la documentación para evitar confusiones.
  5. Comprobable. Los programas críticos para la seguridad bien desarrollados cumplirán con los requisitos de todos los tipos de pruebas.

Además, existen otras cinco mejores prácticas a tener en cuenta al desarrollar software para sistemas críticos para la seguridad.

  1. Mantener registros precisos y un historial documentado o trazabilidad.
  2. Educar a los programadores sobre las mejores prácticas, la metodología y la importancia de la documentación.
  3. Trabaje con los mejores y más apropiados estándares de codificación para su proyecto.
  4. Mantenga baja la complejidad del código, ya que el código complejo en sistemas complejos es difícil de probar, lo que podría generar más errores.
  5. Desarrollar el software pensando en el usuario final.

¿Cuáles son las posibles consecuencias de los errores en el funcionamiento del software crítico para la seguridad?

Las consecuencias de los errores críticos para la seguridad no son algo tan simple como que una bombilla no funcione cuando debería. Los errores pueden variar desde que la batería se caliente demasiado durante el funcionamiento hasta algo como una falla catastrófica en el motor de un avión. También puede haber un costo humano, daños a la propiedad y al medio ambiente, pérdidas financieras o incluso amenazas a la seguridad nacional.

Es por eso que seguir las mejores prácticas anteriores no sólo es recomendable, sino obligatorio. Lograr la aprobación regulatoria no es una situación en la que funcione lo “suficientemente bueno”.

Factores a tener en cuenta al desarrollar software para sistemas críticos para la seguridad

Recuerde: el objetivo del desarrollo de software crítico para la seguridad no es la velocidad ni las funciones, sino la seguridad. Este es el aspecto más crítico que hay que recordar al codificar normas de seguridad. Una falla en el desarrollo de software crítico para la seguridad en estos sistemas puede llevar a que cosas como el Mars Climate Orbiter de la NASA ingresen a la atmósfera marciana demasiado rápido y demasiado bajo, causando destrucción. Problemas como este se reducen a varios factores importantes que los equipos deben tener en cuenta durante el ciclo de vida del desarrollo para mitigar las fallas del software críticas para la seguridad.

Además de nuestras localidaded en Cumpliendo con los requisitos de seguridad. y métodos formales, tenga en cuenta lo siguiente:

  • Considere la arquitectura del software porque un buen diseño puede facilitar la actualización.
  • Las preocupaciones de seguridad, la mitigación de peligros y la garantía del cumplimiento de las regulaciones harán que su proyecto sea más complejo.
  • Un diseño a prueba de fallas significa que su dispositivo y/o software pueden fallar de manera segura o esperada y predecible.
  • Sólo se permite un nivel específico de peligro y fallo.
  • El desarrollo de software crítico para la seguridad se puede realizar utilizando varias metodologías de ciclo de vida de desarrollo como espiral, cascada, ágil y en conjunto.
  • Vaya más lejos de lo que cree necesario en términos de probar su software y luego continúe.
  • Se requieren datos prácticos de campo para mejorar el software del sistema crítico para la seguridad.

Potenciar el desarrollo de software crítico para la seguridad con herramientas y tecnologías avanzadas

Un gran obstáculo que los desarrolladores pueden evitar cuando se trata de herramientas para el desarrollo de software crítico para la seguridad es la certificación. El uso de una herramienta certificada por la organización adecuada puede ofrecer tranquilidad. Las herramientas certificadas permiten lograr el cumplimiento de forma fiable. Sin embargo, el software compatible requiere las metodologías de desarrollo adecuadas para evitar plazos y costos de desarrollo prolongados. Además, ahí es donde mentalidad de desplazamiento a la izquierda entra en juego.

Un gran ejemplo de metodologías ágiles es DevOps CI/CD y Scrum que coexisten en paralelo, eliminando silos, promoviendo la comunicación, permitiendo la productividad y automatizando la verificación y validación.

Mantener la calidad y la asequibilidad se han convertido en prioridades y desafíos únicos para muchos equipos de desarrollo. Un ejemplo es la automatización de pruebas de software integrada en una implementación de CI/CD DevOps en automoción. Los canales de CI/CD ofrecen pruebas continuas que pueden reducir los costos y los cronogramas del proyecto. Incluso si se cumplen rigurosos estándares de seguridad como ISO 26262, las pruebas automatizadas aportan mayor cobertura de código, seguridad y datos procesables.

Proporcionar a sus desarrolladores las mejores herramientas para el trabajo sólo puede hacer que su trabajo sea más sencillo. Esto, a su vez, puede conducir a más documentación simplificada, coherencia y entrega de su producto a tiempo y dentro del presupuesto, o incluso antes de tiempo y por debajo del presupuesto.

El papel de Parasoft en el proceso de desarrollo de software para sistemas críticos para la seguridad

Parasoft ofrece una variedad de soluciones en muchas industrias cuando se trata de desarrollar software crítico para la seguridad. Estos sistemas complejos requieren documentación consistente e inequívoca, datos de prueba procesables y herramientas que capaciten a los desarrolladores.

Las pruebas unitarias, las pruebas basadas en requisitos, las pruebas de regresión, las pruebas de seguridad y las pruebas de integración deben incluir la trazabilidad y repetibilidad de los requisitos. Automatizado y certificado TÜV SÜD soluciones como prueba C/C++ puede reducir la carga de trabajo de los desarrolladores y evaluadores al mismo tiempo que mejora la calidad del código, la cobertura y la calidad general del producto.

Nuestras herramientas respaldan directamente muchos estándares de seguridad que incluyen, entre otros:

  • ISO 26262
  • IEC 62304
  • DO-178C
  • IEC 61508
  • UL 2900
  • DISA ASD STIG
  • OWASP
  • Misra
  • AUTOSAR
  • CERT
  • CWE
  • PCI DSS

Herramientas como la prueba C/C++ permiten a los equipos detectar defectos tempranamente, automatizar el cumplimiento de los estándares de la industria y realizar pruebas de manera inteligente. Un gran ejemplo del mundo real de cómo las soluciones de Parasoft se integran en sistemas críticos para la seguridad es cómo un contratista del Departamento de Defensa de EE. UU. en la industria aeroespacial y de defensa aprovechó un proceso de DevOps para mejorar la cobertura del código, la minuciosidad de las pruebas y la sostenibilidad.

¿Cómo está evolucionando el software crítico para la seguridad en respuesta a las tendencias de la industria?

Como ocurre con todo, la tendencia visible que todos pueden ver al desarrollar sistemas críticos para la seguridad es el costo creciente de hacer negocios. Además, la complejidad también es cada vez mayor. Esto significa que los desarrolladores deberán ser más diligentes con la documentación y los gerentes deberán estar dispuestos a educar a sus equipos según sea necesario con respecto a los estándares de seguridad y de forma regular para garantizar conocimientos actualizados.

Sin embargo, cuando se trata de cómo el software en sí tendrá que responder a las tendencias de la industria, las aguas se vuelven un poco más turbias. Podemos agradecer esto al Internet de las cosas, al aprendizaje automático y a la IA, tanto de manera beneficiosa como onerosa. Si bien es útil tener más cosas para poder hablar entre sí o incluso adaptarse según sea necesario a diferentes escenarios, esto puede generar vulnerabilidades de seguridad adicionales. La planificación para la inevitable explotación de estos nuevos vectores de amenazas hace que los sistemas ya complejos en ingeniería de software sean aún más complejos. La automatización de pruebas ha comenzado a trasladarse a la inteligencia artificial y el aprendizaje automático para llenar este vacío antes de que se haga demasiado amplio.

Conclusión

Edsger W. Dijkstra nos dio la clave para el desarrollo de software moderno con esta cita:

"Aquellos que quieran un software realmente fiable descubrirán que, para empezar, deben encontrar formas de evitar la mayoría de los errores..."

Después de todo, prevenir los problemas desde el principio es más fácil que combatir los incendios a medida que aparecen. Este aspecto de la metodología Agile cambia las reglas del juego cuando se trata del desarrollo de software crítico para la seguridad. Las herramientas adecuadas pueden agilizar aún más el proceso.

Crear una arquitectura de código sólida, mantener un lenguaje coherente y sistemático para la documentación y realizar pruebas continuas y adecuadas pueden ayudar a su equipo a cumplir con los estándares de cumplimiento.

La guía esencial para la generación de pruebas automatizadas para sistemas integrados