El kernel de un sistema operativo es el componente principal o núcleo, donde se encuentra la parte central de su funcionalidad.
Un kernel “monolítico”, el más utilizado en los sistemas operativos actuales, se construye para contener la mayor cantidad de funciones, servicios y soporte para dispositivos posibles. De esta forma, el usuario cuenta con toda la funcionalidad que necesita en el momento que la precisa. No es necesario cargar o instalar componentes o drivers cada vez que se deba usar un dispositivo nuevo; simplemente el kernel contiene todo lo que el usuario requiere para correr sus aplicaciones.
La utilización de kernels monolíticos se viene dando desde hace años. Y como cada vez se agrega más funcionalidad, cada versión del kernel tiene un tamaño mayor a la anterior. Esto ha llevado a que, por ejemplo, las últimas versiones del kernel del sistema operativo Linux, estén construidas a partir de aproximadamente unas 18 millones de líneas de código fuente.
Está claro que un kernel de tal tamaño posee indudablemente una inmensa funcionalidad, pero del mismo modo la casi absoluta imposibilidad de una revisión completa. En especial de posibles defectos de seguridad debidos a errores de programación.
En el otro extremo del espectro, un “microkernel” es un kernel que contiene la mínima cantidad de funciones necesarias para que un sistema operativo funcione. Su objetivo principal es que las funciones incluidas sólo permitan administrar el resto de los subsistemas. Contrastando con los kernels monolíticos, el código fuente de los microkernels tienen solo algunas decenas de miles de líneas de código. Esta característica hace que sean más fácilmente auditables y de esta forma, mantenerlos en un muy elevado nivel de seguridad.
Si bien existen algunos sistemas que vienen utilizando microkernels desde hace mucho tiempo (como el sistema operativo de tiempo real QNX), sólo se utilizan para propósitos muy específicos en sistemas embebidos.
Hoy en día se han y vienen desarrollando una pequeña variedad de microkernels cada uno con sus particularidades. Los grupos que los desarrollan vienen trabajando desde hace años en aplicaciones prácticas de microkernels que permitan construir sistemas con altísimos grados de seguridad.
Pero entre ellos, existe un proyecto al que se le debe prestar particular atención, nos referimos a Genode.
Este proyecto toma los elementos básicos de los microkernels y de hecho utiliza microkernels existentes (como seL4, Fiasco.OC o Pistachio), como un microkernel propio directamente asociado al hardware (base-hw) para componer un concepto novedoso.
Genode propone un administrador de microkernels que lo convierte en un framework completo de sistemas operativos pero con características de seguridad muy superiores. Uno de los conceptos desarrollados en Genode, consiste en iniciar el sistema operativo con un proceso madre o raíz del microkernel al solo efecto de administrar a sus procesos hijos. Luego, se disparan diferentes instancias del mismo proceso para manejar cada una de las funciones del sistema, como por ejemplo el acceso al sistema de archivos, el manejo de la red, manejo de dispositivos de entrada/salida, funciones criptográficas, etc. Cada una de estas instancias del microkernel corre en un dominio separado, es independiente del resto y sus permisos son manejados exclusivamente por su proceso madre. De esta forma, si un atacante se adueñara de alguno de estos procesos, su proceso madre podría reiniciarlo sin interrumpir la ejecución para el usuario, eliminando la conexión que generó el atacante y cortando el vínculo con él.
Este complejo mecanismo de seguridad, junto con esquemas de virtualización basados en librerías de Virtualbox, hacen que mediante Genode se puedan instalar sistemas operativos completos pero basados en la tremenda fortaleza de los microkernels.
De hecho Genode Labs, la empresa que está detrás del sistema, tiene planeado liberar durante este año la primer versión estable de su propio sistema operativo completo, el Sculpt; además de sistemas de administración de paquetes, interfaces gráficas, etc. que permitan la utilización de estos sistemas tan seguros, ya no para propósitos específicos sino para casi cualquier aplicación.
Disponer de esta tecnología permitirá, en un futuro cercano, poder instalar desde servicios específicos en pequeños dispositivos hasta sistemas de escritorio y servidores con altísimos grados de seguridad basados en microkernels. Es por esto que tal vez, éste sea el primer paso de un cambio profundo en la mejora de ciberseguridad de nuestros sistemas.
Nota por Carlos Benitez