La seguridad sigue siendo una preocupación primordial para una amplia gama de sistemas integrados en Internet de las cosas (IoT). Si se infiltran, los sistemas enterrados en la red eléctrica, la generación de energía, la fabricación, los sistemas automotrices, los dispositivos médicos, la administración de edificios, las bombas de gas, las tostadoras y mucho más, pueden representar un riesgo significativo, Mark Pitchford de LDRA informes.

Afortunadamente, con seguridad, el viejo adagio "más vale prevenir que curar" es ciertamente cierto, ¡y la base de la frase de moda mucho más reciente de "cambio a la izquierda"! La previsión de ingeniería ayuda a construir sistemas seguros a un costo menor que las pruebas reactivas posteriores. De hecho, dado que la creación de software seguro tiene mucho en común con la creación de aplicaciones funcionalmente seguras, el desarrollo de software seguro comienza siguiendo los procesos de seguridad funcional.

Considere estas mejores prácticas para ayudar a producir código de alta calidad y mejorar la seguridad de los sistemas integrados:

1. Incorpore la seguridad al ciclo de vida del desarrollo de software

La verificación tradicional de código seguro es en gran medida reactiva. El código se desarrolla de acuerdo con pautas relativamente flexibles y luego se prueba para identificar vulnerabilidades. Ya sea que se utilice un desarrollo ágil o un modelo de ciclo de vida de desarrollo tradicional, existe un enfoque más proactivo para la seguridad integrada.

Con el desarrollo tradicional, los requisitos fluyen hacia el diseño, el código (quizás a través de un modelo) y las pruebas. Con un desarrollo ágil, los requisitos se crean de manera iterativa en capas desde adentro hacia afuera, cada una con su propio ciclo de requisitos, diseño, código y prueba. Con cualquiera de las dos metodologías, asegurar que los requisitos de seguridad sean una parte integral del proceso de desarrollo conducirá a un resultado mucho más satisfactorio que simplemente buscar vulnerabilidades al final.

2. Garantizar la trazabilidad bidireccional

La mayoría de los estándares de seguridad funcional requieren evidencia de trazabilidad bidireccional, confirmación de una cobertura completa y exhaustiva entre las fases de desarrollo entre todas las etapas de desarrollo, desde los requisitos hasta el diseño, el código y la prueba. Con tal transparencia, el impacto de cualquier cambio en los requisitos o de casos de prueba fallidos se puede evaluar con un análisis de impacto y luego abordarlo.

Los artefactos se pueden volver a generar automáticamente para presentar evidencia de cumplimiento continuo con el estándar apropiado. Donde la seguridad es primordial, la trazabilidad bidireccional también asegura que no haya código redundante o funcionalidad no especificada y eso incluye métodos de puerta trasera. Estas ventajas subrayan el valor del desarrollo sistemático para aumentar la capacidad de construir sistemas seguros.

3. Elija un subconjunto de idioma seguro

Al desarrollar con C o C ++, alrededor del 80% de los defectos del software se pueden atribuir al uso incorrecto del 20% de las construcciones del lenguaje. Los subconjuntos de idiomas mejoran tanto la seguridad como la seguridad al prevenir o marcar el uso de construcciones no seguras. Dos estándares de codificación populares, MISRA C y Carnegie Mellon Software Engineering Institute (SEI) CERT C, ayudan a los desarrolladores a producir código seguro.

La aplicación de MISRA C o CERT C resultará en un código más seguro que si no se aplicara ninguno. Sin embargo, la aplicación manual de estas pautas tiene el precio de tiempo, esfuerzo, dinero e, irónicamente, calidad, ya que el proceso manual es complejo y propenso a errores. Para reducir los costos y mejorar la productividad, las organizaciones de desarrollo deben automatizar el soporte para el cumplimiento.

4. Utilice un estándar de proceso centrado en la seguridad

Los estándares de seguridad proporcionan otra pieza de la solución de desarrollo segura, aunque los estándares de seguridad no están tan bien desarrollados ni probados con el tiempo como los estándares de seguridad funcional, que han tenido décadas de uso. Sin embargo, esto cambiará a medida que se desarrollen los estándares de seguridad específicos de la industria.

La industria automotriz, por ejemplo, está desarrollando actualmente ISO / SAE 21434 “Ingeniería de ciberseguridad de vehículos de carretera” para mitigar el problema de los vehículos conectados como objetivos de ataques cibernéticos. La promesa de un documento sustancial con más detalles que los principios rectores de alto nivel de SAE J3061 “Guía de ciberseguridad para sistemas de vehículos cibernéticos” hace que ISO / SAE 21434 sea ampliamente anticipado.

5. Automatice tanto como sea posible

En cada etapa del proceso de desarrollo de software, la automatización reduce las vulnerabilidades en los sistemas integrados y ahorra una gran cantidad de tiempo y costos. Los desarrolladores pueden conectarse a herramientas de requisitos (por ejemplo, IBM Rational DOORS), importar construcciones de simulación y modelado y probarlas con el código para ver de un vistazo cómo y si se cumplen los requisitos, qué falta y dónde está el código muerto que no lo hace. t cumplir un requisito.

Un motor de análisis estático puede verificar el cumplimiento de los estándares de codificación y los estándares funcionales de seguridad y protección. Con la automatización y el diseño seguro, las pruebas reactivas como las pruebas de penetración tienen un lugar, pero su función es confirmar que el código es seguro para no descubrir dónde no lo está.

6. Seleccione una base de software segura

El software integrado seguro debe ejecutarse en una plataforma segura, por lo que si una aplicación es atacada, se ejecuta en su propio silo, aislada de otros componentes de software ("separación de dominio"). Las herramientas de verificación y prueba de software automatizadas se integran en entornos de desarrollo comunes desde la especificación de requisitos hasta el diseño y modelado, pasando por la codificación y la documentación. Esto asegura que los desarrolladores puedan construir sistemas seguros en un entorno familiar y con las herramientas ya especificadas para su sistema.

Seguir estos seis procesos proporciona un enfoque cohesivo para desarrollar software integrado para el IoT que sea seguro y confiable.

El autor es Mark Pitchford de LDRA.

Dejar respuesta

Please enter your comment!
Please enter your name here