Cuando los microondas buenos se vuelven malos: Por qué la seguridad de los sistemas embebidos es la próxima batalla de los desarrolladores

Publicado el 30 de agosto de 2021
por el doctor Matias Madou
ESTUDIO DE CASO

Cuando los microondas buenos se vuelven malos: Por qué la seguridad de los sistemas embebidos es la próxima batalla de los desarrolladores

Publicado el 30 de agosto de 2021
por el doctor Matias Madou
Ver recurso
Ver recurso

Hay muchas referencias en la cultura pop a la IA y a los robots rebeldes, y a los aparatos que se vuelven contra sus amos humanos. Está muy impregnado de diversión y fantasía de ciencia ficción, pero con la IO y los dispositivos conectados cada vez más presentes en nuestros hogares, también debería serlo la conversación en torno a la ciberseguridad y la seguridad. El software nos rodea, y es muy fácil olvidar hasta qué punto dependemos de líneas de código para hacer todas esas cosas inteligentes que nos proporcionan tanta innovación y comodidad. Al igual que el software basado en la web, las API y los dispositivos móviles, el código vulnerable de los sistemas integrados puede ser explotado si un atacante lo descubre. 

Aunque es poco probable que un ejército de microondas venga a esclavizar a la raza humana (aunque, el bot de Tesla es un poco preocupante) como resultado de un ciberataque, los eventos cibernéticos maliciosos siguen siendo posibles. Algunos de nuestros coches, aviones y dispositivos médicos también dependen de un intrincado código de sistemas integrados para realizar tareas clave, y la perspectiva de que estos objetos se vean comprometidos no sólo es alarmante, sino que puede suponer una amenaza para la vida.

Al igual que cualquier otro tipo de software, los desarrolladores son los primeros en tocar el código, justo al principio de la fase de creación. Y al igual que cualquier otro tipo de software, esto puede ser el caldo de cultivo para las vulnerabilidades insidiosas y comunes que podrían pasar desapercibidas antes de que el producto se ponga en marcha. 

Los desarrolladores no son expertos en seguridad, ni ninguna empresa debe esperar que desempeñen ese papel, pero pueden dotarse de un arsenal mucho más potente para hacer frente al tipo de amenazas que les afectan. Los sistemas embebidos -que suelen estar escritos en C y C++- se utilizarán con más frecuencia a medida que nuestras necesidades tecnológicas sigan evolucionando, por lo que es esencial una formación especializada en seguridad para los desarrolladores sobre las herramientas de este entorno. 

Frituras de aire que explotan, vehículos que se desvían... ¿Somos patos sentados?

Aunque existen algunas normas y regulaciones en torno a todo el desarrollo seguro para mantenernos a salvo, necesitamos dar pasos mucho más precisos y significativos hacia todo tipo de seguridad del software. Puede parecer descabellado pensar en un problema que pueda ser causado por alguien que hackea una freidora, pero ya ha ocurrido en forma de un ataque de ejecución remota de código (que permite al actor de la amenaza elevar la temperatura a niveles peligrosos), al igual que las vulnerabilidades que conducen a la toma de posesión de vehículos.

Los vehículos, en particular, son especialmente complejos, con múltiples sistemas integrados a bordo, cada uno de los cuales se encarga de microfunciones; todo, desde los limpiaparabrisas automáticos hasta las capacidades del motor y los frenos. Entrelazado con una pila cada vez mayor de tecnologías de comunicación como WI-Fi, Bluetooth y GPS, el vehículo conectado representa una compleja infraestructura digital que está expuesta a múltiples vectores de ataque. Y con la previsión de que 76,3 millones de vehículos conectados lleguen a las carreteras de todo el mundo en 2023, esto representa un monolito de bases defensivas que hay que sentar para una verdadera seguridad.

MISRA es una organización clave en la buena lucha contra las amenazas de los sistemas embebidos, habiendo desarrollado directrices para facilitar la seguridad del código, la portabilidad y la fiabilidad en el contexto de los sistemas embebidos. Estas directrices son una estrella del norte en los estándares que toda empresa debe perseguir en sus proyectos de sistemas embebidos.

Sin embargo, para crear y ejecutar código que se adhiera a este estándar de oro se necesitan ingenieros de sistemas embebidos que confíen -por no decir que sean conscientes de la seguridad- en las herramientas. 

¿Por qué es tan específica la formación en seguridad de los sistemas empotrados?

Los lenguajes de programación C y C++ son geriátricos para los estándares actuales, pero siguen siendo ampliamente utilizados. Forman el núcleo de funcionamiento de la base de código de los sistemas embebidos, y C/C++ embebido disfruta de una vida brillante y moderna como parte del mundo de los dispositivos conectados.

A pesar de que estos lenguajes tienen raíces bastante antiguas - y muestran comportamientos de vulnerabilidad similares en términos de problemas comunes como los fallos de inyección y el desbordamiento del búfer - para que los desarrolladores tengan realmente éxito en la mitigación de los errores de seguridad en los sistemas embebidos, deben ponerse manos a la obra con el código que imita los entornos en los que trabajan. La formación genérica en C sobre prácticas generales de seguridad simplemente no será tan potente y memorable como si se dedicara tiempo y atención extra a trabajar en un contexto de C embebido.

Con entre una docena y más de un centenar de sistemas integrados en un vehículo moderno, es imprescindible que los desarrolladores reciban una formación precisa sobre lo que deben buscar y cómo solucionarlo, directamente en el IDE.

¿Qué aspecto tiene un fallo de lógica de negocio en C/C++ embebido? Echa un vistazo y comprueba si eres capaz de identificarlo y solucionarlo como un profesional.

Proteger los sistemas integrados desde la base es responsabilidad de todos

El statu quo en muchas organizaciones es que la velocidad de desarrollo triunfa sobre la seguridad, al menos cuando se trata de la responsabilidad de los desarrolladores. Rara vez se les evalúa por su capacidad de producir código seguro, pero el desarrollo rápido de características impresionantes es el estándar de oro. La demanda de software no va a hacer más que aumentar, pero esta es una cultura que nos ha preparado para una batalla perdida contra las vulnerabilidades, y los consiguientes ciberataques que permiten. 

Si los desarrolladores no están formados, no es culpa suya, y es un hueco que alguien del equipo de AppSec tiene que ayudar a llenar recomendando los programas adecuados y accesibles (por no hablar de evaluables) de actualización de conocimientos para toda la comunidad de desarrolladores. Desde el principio de un proyecto de desarrollo de software, la seguridad debe ser una de las principales consideraciones, y todos, especialmente los desarrolladores, deben recibir lo que necesitan para desempeñar su papel. 

Cómo abordar los problemas de seguridad de los sistemas embebidos

El desbordamiento del búfer, los fallos de inyección y los errores de lógica de negocio son escollos comunes en el desarrollo de sistemas embebidos. Cuando están enterrados en un laberinto de microcontroladores en un solo vehículo o dispositivo, pueden significar un desastre desde el punto de vista de la seguridad.

El desbordamiento del búfer es especialmente frecuente, y si quieres profundizar en cómo ayudó a comprometer esa freidora de la que hablamos antes (permitiendo la ejecución remota de código), echa un vistazo a este informe sobre CVE-2020-28592.

Ahora, es el momento de ponerte manos a la obra con una vulnerabilidad de desbordamiento de búfer, en código C/C++ embebido real. Juega este desafío para ver si puedes localizar, identificar y arreglar los malos patrones de codificación que conducen a este insidioso error:

Hacer un historial de desbordamiento del búfer.



¿Cómo lo ha hecho? Visite www.securecodewarrior.com para obtener una formación precisa y eficaz sobre la seguridad de los sistemas integrados.

Ver recurso
Ver recurso

Autor

Doctor Matias Madou

Matías es un investigador y desarrollador con más de 15 años de experiencia práctica en seguridad de software. Ha desarrollado soluciones para empresas como Fortify Software y su propia empresa Sensei Security. A lo largo de su carrera, Matías ha dirigido múltiples proyectos de investigación sobre seguridad de aplicaciones que han dado lugar a productos comerciales y cuenta con más de 10 patentes en su haber. Cuando está lejos de su escritorio, Matias ha servido como instructor para la formación de seguridad de aplicaciones avanzadas courses y regularmente habla en conferencias mundiales como la Conferencia RSA, Black Hat, DefCon, BSIMM, OWASP AppSec y BruCon.

Matías es doctor en Ingeniería Informática por la Universidad de Gante, donde estudió la seguridad de las aplicaciones mediante la ofuscación de programas para ocultar el funcionamiento interno de una aplicación.

¿Quieres más?

Sumérjase en nuestras últimas ideas sobre codificación segura en el blog.

Nuestra amplia biblioteca de recursos tiene como objetivo potenciar el enfoque humano de la mejora de la codificación segura.

Ver blog
¿Quieres más?

Obtenga las últimas investigaciones sobre la seguridad impulsada por los desarrolladores

Nuestra amplia biblioteca de recursos está repleta de recursos útiles, desde libros blancos hasta seminarios web, que le ayudarán a iniciarse en la codificación segura orientada a los desarrolladores. Explórela ahora.

Centro de recursos

Cuando los microondas buenos se vuelven malos: Por qué la seguridad de los sistemas embebidos es la próxima batalla de los desarrolladores

Publicado el 30 de agosto de 2021
Por el doctor Matias Madou

Hay muchas referencias en la cultura pop a la IA y a los robots rebeldes, y a los aparatos que se vuelven contra sus amos humanos. Está muy impregnado de diversión y fantasía de ciencia ficción, pero con la IO y los dispositivos conectados cada vez más presentes en nuestros hogares, también debería serlo la conversación en torno a la ciberseguridad y la seguridad. El software nos rodea, y es muy fácil olvidar hasta qué punto dependemos de líneas de código para hacer todas esas cosas inteligentes que nos proporcionan tanta innovación y comodidad. Al igual que el software basado en la web, las API y los dispositivos móviles, el código vulnerable de los sistemas integrados puede ser explotado si un atacante lo descubre. 

Aunque es poco probable que un ejército de microondas venga a esclavizar a la raza humana (aunque, el bot de Tesla es un poco preocupante) como resultado de un ciberataque, los eventos cibernéticos maliciosos siguen siendo posibles. Algunos de nuestros coches, aviones y dispositivos médicos también dependen de un intrincado código de sistemas integrados para realizar tareas clave, y la perspectiva de que estos objetos se vean comprometidos no sólo es alarmante, sino que puede suponer una amenaza para la vida.

Al igual que cualquier otro tipo de software, los desarrolladores son los primeros en tocar el código, justo al principio de la fase de creación. Y al igual que cualquier otro tipo de software, esto puede ser el caldo de cultivo para las vulnerabilidades insidiosas y comunes que podrían pasar desapercibidas antes de que el producto se ponga en marcha. 

Los desarrolladores no son expertos en seguridad, ni ninguna empresa debe esperar que desempeñen ese papel, pero pueden dotarse de un arsenal mucho más potente para hacer frente al tipo de amenazas que les afectan. Los sistemas embebidos -que suelen estar escritos en C y C++- se utilizarán con más frecuencia a medida que nuestras necesidades tecnológicas sigan evolucionando, por lo que es esencial una formación especializada en seguridad para los desarrolladores sobre las herramientas de este entorno. 

Frituras de aire que explotan, vehículos que se desvían... ¿Somos patos sentados?

Aunque existen algunas normas y regulaciones en torno a todo el desarrollo seguro para mantenernos a salvo, necesitamos dar pasos mucho más precisos y significativos hacia todo tipo de seguridad del software. Puede parecer descabellado pensar en un problema que pueda ser causado por alguien que hackea una freidora, pero ya ha ocurrido en forma de un ataque de ejecución remota de código (que permite al actor de la amenaza elevar la temperatura a niveles peligrosos), al igual que las vulnerabilidades que conducen a la toma de posesión de vehículos.

Los vehículos, en particular, son especialmente complejos, con múltiples sistemas integrados a bordo, cada uno de los cuales se encarga de microfunciones; todo, desde los limpiaparabrisas automáticos hasta las capacidades del motor y los frenos. Entrelazado con una pila cada vez mayor de tecnologías de comunicación como WI-Fi, Bluetooth y GPS, el vehículo conectado representa una compleja infraestructura digital que está expuesta a múltiples vectores de ataque. Y con la previsión de que 76,3 millones de vehículos conectados lleguen a las carreteras de todo el mundo en 2023, esto representa un monolito de bases defensivas que hay que sentar para una verdadera seguridad.

MISRA es una organización clave en la buena lucha contra las amenazas de los sistemas embebidos, habiendo desarrollado directrices para facilitar la seguridad del código, la portabilidad y la fiabilidad en el contexto de los sistemas embebidos. Estas directrices son una estrella del norte en los estándares que toda empresa debe perseguir en sus proyectos de sistemas embebidos.

Sin embargo, para crear y ejecutar código que se adhiera a este estándar de oro se necesitan ingenieros de sistemas embebidos que confíen -por no decir que sean conscientes de la seguridad- en las herramientas. 

¿Por qué es tan específica la formación en seguridad de los sistemas empotrados?

Los lenguajes de programación C y C++ son geriátricos para los estándares actuales, pero siguen siendo ampliamente utilizados. Forman el núcleo de funcionamiento de la base de código de los sistemas embebidos, y C/C++ embebido disfruta de una vida brillante y moderna como parte del mundo de los dispositivos conectados.

A pesar de que estos lenguajes tienen raíces bastante antiguas - y muestran comportamientos de vulnerabilidad similares en términos de problemas comunes como los fallos de inyección y el desbordamiento del búfer - para que los desarrolladores tengan realmente éxito en la mitigación de los errores de seguridad en los sistemas embebidos, deben ponerse manos a la obra con el código que imita los entornos en los que trabajan. La formación genérica en C sobre prácticas generales de seguridad simplemente no será tan potente y memorable como si se dedicara tiempo y atención extra a trabajar en un contexto de C embebido.

Con entre una docena y más de un centenar de sistemas integrados en un vehículo moderno, es imprescindible que los desarrolladores reciban una formación precisa sobre lo que deben buscar y cómo solucionarlo, directamente en el IDE.

¿Qué aspecto tiene un fallo de lógica de negocio en C/C++ embebido? Echa un vistazo y comprueba si eres capaz de identificarlo y solucionarlo como un profesional.

Proteger los sistemas integrados desde la base es responsabilidad de todos

El statu quo en muchas organizaciones es que la velocidad de desarrollo triunfa sobre la seguridad, al menos cuando se trata de la responsabilidad de los desarrolladores. Rara vez se les evalúa por su capacidad de producir código seguro, pero el desarrollo rápido de características impresionantes es el estándar de oro. La demanda de software no va a hacer más que aumentar, pero esta es una cultura que nos ha preparado para una batalla perdida contra las vulnerabilidades, y los consiguientes ciberataques que permiten. 

Si los desarrolladores no están formados, no es culpa suya, y es un hueco que alguien del equipo de AppSec tiene que ayudar a llenar recomendando los programas adecuados y accesibles (por no hablar de evaluables) de actualización de conocimientos para toda la comunidad de desarrolladores. Desde el principio de un proyecto de desarrollo de software, la seguridad debe ser una de las principales consideraciones, y todos, especialmente los desarrolladores, deben recibir lo que necesitan para desempeñar su papel. 

Cómo abordar los problemas de seguridad de los sistemas embebidos

El desbordamiento del búfer, los fallos de inyección y los errores de lógica de negocio son escollos comunes en el desarrollo de sistemas embebidos. Cuando están enterrados en un laberinto de microcontroladores en un solo vehículo o dispositivo, pueden significar un desastre desde el punto de vista de la seguridad.

El desbordamiento del búfer es especialmente frecuente, y si quieres profundizar en cómo ayudó a comprometer esa freidora de la que hablamos antes (permitiendo la ejecución remota de código), echa un vistazo a este informe sobre CVE-2020-28592.

Ahora, es el momento de ponerte manos a la obra con una vulnerabilidad de desbordamiento de búfer, en código C/C++ embebido real. Juega este desafío para ver si puedes localizar, identificar y arreglar los malos patrones de codificación que conducen a este insidioso error:

Hacer un historial de desbordamiento del búfer.



¿Cómo lo ha hecho? Visite www.securecodewarrior.com para obtener una formación precisa y eficaz sobre la seguridad de los sistemas integrados.

Nos gustaría contar con su permiso para enviarle información sobre nuestros productos y/o temas relacionados con la codificación segura. Siempre trataremos sus datos personales con el máximo cuidado y nunca los venderemos a otras empresas con fines de marketing.

Enviar
Para enviar el formulario, habilite las cookies "Analytics". Siéntase libre de desactivarlas de nuevo una vez que haya terminado.