Vea qué solución de pruebas de API resultó ganadora en el informe GigaOm Radar. Obtenga su informe analítico gratuito >>

Vea qué solución de pruebas de API resultó ganadora en el informe GigaOm Radar. Obtenga su informe analítico gratuito >>
Saltar a la sección
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.
Saltar a la sección
Saltar a la sección
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 un software de seguridad crítica 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 implicados implican riesgos mucho mayores y algunas fricciones con las metodologías modernas. Entonces, ¿qué pasa con el desarrollo de software crítico para la seguridad?
El software crítico para la seguridad suele ser una aplicación de software integrada diseñada específicamente para sistemas que, en caso de fallo, cuentan con medidas para evitar lesiones y pérdidas de vidas. Esto significa que cualquier software de este tipo requiere verificación, validación y confiabilidad en cada paso del ciclo de vida del desarrollo.
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.
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.
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.
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.
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 y IEC 62443 por 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.
Hay cinco pilares esenciales para los requisitos en el desarrollo de software crítico para la seguridad.
Además, existen otras cinco mejores prácticas a tener en cuenta al desarrollar software para sistemas críticos 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”.
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:
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.
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 trazabilidad de requisitos y repetibilidad. Las soluciones automatizadas y certificadas por TÜV SÜD como C/C++test y C/C++test CT pueden reducir la carga de trabajo de los desarrolladores y evaluadores por igual, al tiempo que mejoran 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:
Herramientas como Prueba C/C++ y CT de prueba C/C++ Permiten a los equipos detectar defectos de forma temprana, automatizar el cumplimiento de los estándares de la industria y realizar pruebas de forma inteligente. Un excelente 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 los EE. UU. en la industria aeroespacial y de defensa aprovechó una canalización de DevOps para mejorar la cobertura del código, la minuciosidad de las pruebas y la sostenibilidad.
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.
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.