Para el 2030, se estima que la cantidad de dispositivos conectados en el mundo alcance los 24 mil millones, cifra entre la que se incluyen multitud de sistemas y accesorios domésticos: relojes inteligentes, pulseras de actividad, altavoces con asistentes de voz y todos los dispositivos que controlan. También abarca los cajeros automáticos inteligentes, los terminales de punto de venta, las cámaras de videovigilancia, etc. Es decir, todos los dispositivos a los que los usuarios suelen confiar sus datos confidenciales, a pesar de no poder controlar su seguridad. A su vez, los dispositivos del Internet de las cosas (IdC) se están convirtiendo cada vez más en objetivos de los atacantes y, aunque sus proveedores intenten restarle importancia, el problema de la seguridad del IdC cada vez es más importante, sobre todo en el caso de los ecosistemas con varios dispositivos conectados.
Por ejemplo, en el 2020, los investigadores de Check Point experimentaron con un ataque a una red a través de una bombilla inteligente. Lograron cargar firmware modificado en una bombilla inteligente y usarlo para instalar malware en un dispositivo que controlaba el sistema de iluminación. A partir de ahí, penetraron en la red local. La vulnerabilidad se cerró rápidamente, pero ¿qué garantía hay de que no se pueda lograr un truco similar utilizando otras lagunas de seguridad del IdC?
Este otro ejemplo parece aún peor: la situación que generó una vulnerabilidad en las cerraduras inteligentes coreanas KeyWe. Además de los errores en el proceso de generación de claves, los investigadores descubrieron algunos problemas de diseño fundamentales que facilitaban a los atacantes la intercepción y el descifrado de las contraseñas de las cerraduras. También se descubrió que era imposible actualizar el firmware con un parche de seguridad: la vulnerabilidad solo se podía parchear en cerraduras nuevas que no tuvieran el ya mencionado error de diseño.
Este último ejemplo muestra que las filtraciones de seguridad del IdC pueden generarse durante el diseño del sistema. Para evitar este tipo de problemas, ya son varios los proveedores que se han pasado a los sistemas operativos basados en microkernel en los últimos años. En la arquitectura microkernel, el kernel contiene menos código que el de un sistema tradicional y realiza solo las funciones estrictamente necesarias, lo que lo hace más confiable y a prueba de fallos.
La popularidad de los sistemas operativos con Microkernel supera a la de Windows y Android
Si pides a los usuarios de ordenadores de escritorio que nombren el sistema operativo más popular, seguramente su respuesta sea Windows y lo cierto es que, si se tienen en cuenta la cantidad de ordenadores con Windows integrado, su presencia en el mercado mundial de sistemas operativos es del 72 %. Pero muy pocos usuarios conocen lo que sucede en un nivel más profundo: en el firmware del microchip y del microcontrolador, donde el sistema operativo más utilizado es MINIX, basado en arquitectura microkernel y acompañado del firmware Intel ME 11, que hoy está presente en todos los ordenadores de escritorio y portátiles equipados con el CPU Intel, lo que representa dos tercios del mercado del CPU х86.
Algo similar sucede en el mercado de los dispositivos embebidos, móviles y portátiles, donde el favorito es Android. Sin embargo, si profundizamos un poco, descubrimos que los sistemas operativos con microkernel no son menos comunes en este mercado, aunque permanecen en un segundo plano. Una de las implementaciones de arquitectura microkernel más antiguas en el mercado móvil es QNX. Este sistema operativo surgió en la década de los 80 en la maquinaria industrial crítica y después se usó en estaciones de radar navales. Su versión más actual, QNX Neutrino, la puedes encontrar en los routers de Cisco y en el firmware de millones de vehículos de motor.
No podemos olvidar otros dispositivos con firmware microkernel, como, por ejemplo, los sistemas basados en la familia del núcleo L4, que incluyen los módems Qualcomm y los sistemas automotrices basados en OKL4, cuya popularidad alcanzó su punto máximo en el 2012.
Pero MINIX y L4 no son las aplicaciones más relevantes, de hecho, algunos incluso podrían considerarlas vintage. La evolución de los sistemas operativos con microkernel no se detuvo allí: su desarrollo siguió de la mano de una serie de proveedores actuales de ecosistemas inteligentes:
- Un sistema operativo microkernel cuyo nombre de código es Horizon forma la columna vertebral de las videoconsolas Nintendo Switch. La información sobre este sistema operativo es limitada, ya que se trata de un sistema propietario.
- En enero del 2023, los periodistas de 9to5google descubrieron que lo más probable es que el nuevo altavoz Google Nest incluyera Fuchsia, un sistema operativo con el microkernel Zircon en su núcleo.
- En noviembre del 2022, Huawei anunció que 320 millones de sus dispositivos estaban equipados con HarmonyOS, un sistema operativo microkernel basado en el núcleo HongMeng para dispositivos portátiles e IdC. A finales de ese mismo año, los dispositivos equipados con HarmonyOS representaban el 2 % de la venta global de smartphones y en abril del 2023 se lanzó la nueva versión HarmonyOS 3.1. Según los desarrolladores, han trabajado duro para lograr la optimización del sistema.
¿Por qué los proveedores están tan activos en este campo? Por un lado, esto se debe al desarrollo del mercado del IdC y, por otro, a una crisis de confianza en su protección, que no es lo suficientemente efectiva.
Cosas que ayudan a los proveedores del firmware microkernel a proteger los sistemas IdC
Como ya hemos visto en el caso del secuestro de bombillas inteligentes mencionado anteriormente, los ecosistemas del IdC a menudo se basan en múltiples microcontroladores y sensores interconectados. Los atacantes suelen dirigirse específicamente a los dispositivos finales desprotegidos para usarlos como punto de entrada y luego tomar el control de todo el sistema a través de la escalada de privilegios. Pero equipar todos los dispositivos con sofisticados mecanismos de protección es económicamente inviable, lo que da lugar a dos problemas fundamentales:
- Todos queremos confiar en la protección integrada del sistema, pero en el IdC, nos enfrentamos a varios elementos en los que no se puede confiar. Hay dos formas de abordar este problema: intentar que todos los dispositivos estén lo mejor protegidos o comenzar por reconocer sus limitaciones y diseñar el sistema para que siga siendo seguro, incluso con estos elementos a bordo.
- Control de interacciones. En un gran sistema, normalmente ningún elemento opera de forma aislada: se “comunican” y, a menudo, tienen privilegios para realizar ciertas acciones entre sí. En un sistema en el que no podemos confiar en todos los elementos, estas interacciones y privilegios deben limitarse y monitorizarse con algún medio de control.
Así es cómo se pueden abordar estos problemas con los sistemas operativos con microkernel:
- Los sistemas operativos con microkernel distinguen entre componentes confiables y no confiables. Su arquitectura se basa en múltiples componentes aislados que se comunican entre sí y que pueden clasificarse como confiables o no confiables. El kernel se encuentra entre los componentes de confianza: realiza solo las funciones más necesarias y contiene la menor cantidad de código posible; y todos los controladores, sistemas de archivos y similares se eliminan para separar los componentes fuera del kernel. Esto permite limitar al mínimo necesario y suficiente los elementos del sistema en cuyo código nos vemos obligados a confiar.
Cuanto menos código de confianza contenga el sistema, mejor, ya que así será más sencillo y rápido comprobar si hay errores en él. Esta es la razón por la que los proveedores intentan hacer que el microkernel sea lo más pequeño posible: simplificando la validación de la confianza (hablaremos sobre sobre esto más adelante).
- Los sistemas operativos con microkernel aíslan la mayoría de los componentes privilegiados y los operan en modo de usuario. En los sistemas operativos microkernel, el kernel es el responsable del aislamiento de los componentes: cada uno reside dentro de su propio espacio de direcciones. El microkernel proporciona un mecanismo para intercambiar mensajes entre componentes, planifica los flujos y controla la memoria, los temporizadores y las interrupciones.
Los componentes confiables y no confiables operados en modo de usuario tienen tantos privilegios como sea necesario para realizar sus funciones.
- Los sistemas operativos con microkernel cuentan con capacidades y herramientas adicionales para el control de la interacción. En un sistema operativo microkernel, cualquier acción equivale al envío de un mensaje (comunicación). Como ya hemos mencionado, el microkernel controla el mecanismo de mensajería clave. Aparte de eso, a menudo los sistemas operativos con microkernel utilizan el mecanismo de “capacidades de objeto”, que permite, entre otras cosas, controlar el establecimiento de nuevos canales de comunicación.
Lo único que no suelen incluir todos estos mecanismos son las opciones de verificación de la confianza. Simplemente toca confiar en algunos componentes porque sí, pero ¿y si “probamos antes de confiar”? ¿Cómo cambiamos de “confiable” a “digno de confianza”?
Hay diferentes formas de asegurarse de que un elemento es de confianza: pruebas, métodos de análisis, especificación formal y verificación. Todos estos métodos permiten implementar una seguridad verificable en la que basar nuestra confianza no en la reputación del proveedor sino en los resultados de la verificación. Esto ya se encuentra en el corazón de muchos modelos de seguridad reconocidos, por ejemplo, MILS o estándares y criterios de evaluación de la seguridad, como los “criterios comunes”. Podemos dar por hecho que estos métodos y modelos se utilizarán cada vez más.
Próximamente las nuevas generaciones de sistemas operativos con microkernel ayudarán a lograr una seguridad verificable y la ciberinmunidad
Tras un estudio a largo plazo de las mejores prácticas de protección, hemos utilizado principios de seguridad verificables para desarrollar nuestra propia estrategia ciberinmune, que vamos a utilizar para crear sistemas TI inherentemente seguros. Cyber Immunity es una implementación de la estrategia Secure by Design, donde la seguridad de la información está en el centro de todas y cada una de las etapas de desarrollo.
En los sistemas Cyber Immune, todas las interacciones se tipifican y verifican: en concreto, un monitor especial controla todas las comunicaciones entre procesos. Este módulo es capaz de hacer una introspección de todos los datos intercambiados entre los procesos y usarlos a la hora de tomar decisiones en materia de seguridad. La confianza se valida a través de pruebas, análisis estáticos y dinámicos, fuzzing, pruebas de penetración y otros métodos formales.
El KasperskyOS basado en microkernel es el primer sistema operativo que admite esta estrategia, actuando como una plataforma para la creación de productos Cyber Immune. Pero, en general, esta metodología combina los mejores principios de seguridad y no depende mucho de las herramientas de implementación que se utilicen. Por lo tanto, esperamos que estos principios lleguen a otras aplicaciones de firmware de dispositivos microkernel.