Investigadores de NCC Group resultados de la auditoría del proyecto libre , un sistema operativo en tiempo real (RTOS) diseñado para equipar dispositivos que se alinean con el concepto de «Internet de las Cosas» (IoT, Internet of Things). Durante la auditoría se identificaron en Zephyr y 1 vulnerabilidad en MCUboot. El desarrollo de Zephyr se lleva a cabo con la participación de empresas como Intel.
En total, se identificaron 6 vulnerabilidades en la pila de red, 4 en el núcleo, 2 en el shell, 5 en los manejadores de llamadas al sistema, 5 en la subestructura USB y 3 en el mecanismo de actualización de firmware. A dos problemas se les asignó un nivel crítico de peligro, a dos se les asignó un alto, 9 moderado, 9 bajo y 4 para su consideración. Los problemas críticos afectan la pila IPv4 y el analizador MQTT, mientras que los peligrosos afectan a los controladores de almacenamiento masivo USB y USB DFU. En el momento de la divulgación, se habían preparado arreglos solo para las 15 vulnerabilidades más peligrosas; los problemas que conducen a la denegación de servicio o relacionados con deficiencias en los mecanismos de protección del núcleo siguen sin resolverse.
Se identificó una vulnerabilidad en la pila IPv4 de la plataforma que puede ser explotada de forma remota, lo que provoca corrupción de memoria al procesar paquetes ICMP modificados de cierta manera. Otro problema grave se encontró en el analizador del protocolo MQTT, causado por la falta de validación adecuada de la longitud de los campos en el encabezado, lo que puede llevar a la ejecución remota de código. Se encontraron problemas menos graves, que conducen a la denegación de servicio, en la pila IPv6 y en la implementación del protocolo CoAP.
Los demás problemas pueden ser explotados localmente para provocar denegación de servicio o ejecutar código a nivel del núcleo. La mayor parte de estas vulnerabilidades está relacionada con la falta de validaciones adecuadas de los argumentos de las llamadas al sistema, lo que puede llevar a la escritura y lectura de áreas arbitrarias de la memoria del núcleo. Los problemas también afectan el código que procesa las llamadas al sistema: la llamada con un número negativo de llamada al sistema provoca un desbordamiento de enteros. También se encontraron problemas en el núcleo relacionados con la implementación de la protección ASLR (aleatorización del espacio de direcciones) y el mecanismo de colocación de etiquetas de canario en la pila, lo que vuelve ineficaces estos mecanismos.
Muchos problemas afectan al stack USB y a controladores individuales. Por ejemplo, un problema en el almacenamiento masivo USB permite provocar un desbordamiento de búfer y ejecutar código a nivel del núcleo al conectar un dispositivo a un host USB controlado por el atacante. Una vulnerabilidad en USB DFU, el controlador para cargar un nuevo firmware por USB, permite cargar una imagen de firmware modificada en la memoria Flash interna del microcontrolador sin la aplicación de cifrado y eludiendo el modo de arranque seguro que verifica los componentes mediante una firma digital. Además, se ha estudiado el código del cargador de arranque abierto. , en el cual se encontró una vulnerabilidad no crítica,
que puede llevar a un desbordamiento de búfer al utilizar el protocolo SMP (Protocolo de Gestión Simple) a través de UART.
Cabe recordar que en Zephyr se proporciona un único espacio de direcciones virtual global compartido para todos los procesos (SASOS, Sistema Operativo de Espacio de Direcciones Único). El código específico de las aplicaciones se combina con un núcleo adaptado a la aplicación en particular y forma un archivo ejecutable monolítico para ser cargado y ejecutado en un hardware determinado. Todos los recursos del sistema se definen en la etapa de compilación, lo que reduce el tamaño del código y aumenta el rendimiento. Solo se pueden incluir en la imagen del sistema las capacidades del núcleo que se requieren para ejecutar la aplicación.
Es notable que entre las principales ventajas de Zephyr se encuentra el desarrollo con un enfoque en la seguridad. , lo que implica que todas las etapas del desarrollo pasan por procesos obligatorios de verificación de la seguridad del código: pruebas de fuzzing, análisis estático, pruebas de penetración, revisión de código, análisis de inserción de backdoors y modelado de amenazas.
Fuente: opennet.ru
