Soy un converso reciente pero dedicado a Silverblue, que ejecuto en mi computadora portátil principal de casa, y que pondré en mi computadora portátil de trabajo cuando llegue el momento una actualización de hardware dentro de unos meses. Escribí un artículo sobre Silverblue en Enable Sysadmin y, durante el fin de semana, también cambié la computadora portátil que tiene uno de mis hijos. En términos de usabilidad, apariencia y funcionamiento, Silverblue es básicamente una versión de Fedora. Sin embargo, hay una diferencia clave, que es que el sistema operativo está montado en modo de solo lectura, lo que significa que es inmutable.
¿Qué significa "inmutable"? Significa que no se puede cambiar. Para ser más precisos, en un contexto de software, generalmente significa que algo no se puede cambiar durante el tiempo de ejecución.
Digresión importante:inmutabilidad constante
Mientras escribía la última oración, me di cuenta de que podría ser un poco engañoso. Muchos lenguajes de programación tienen el concepto de "constantes". Una constante es una variable (o conjunto, o estructura de datos) que no variable. Puede asignar un valor a una constante y, en general, esperar que no cambie. Pero, y esto depende del idioma que esté usando, puede ser que la constante sea no inmutable.
Esta afirmación parece ir en contra del sentido común; aunque, para ser justos, las frases "lenguaje de programación" y "sentido común" rara vez se usan positivamente en la misma oración en mi experiencia. Pero así es como se diseñan algunos lenguajes. La conclusión es esta:si tiene una variable que pretende que sea inmutable, verifique la sintaxis del lenguaje de programación que está utilizando y tome las medidas específicas necesarias para mantener esa inmutabilidad si es necesario.
Inmutabilidad del sistema operativo
En el caso de Silverblue, es el sistema operativo el que es inmutable. Las aplicaciones se instalan en contenedores (más sobre esto más adelante) usando Flatpak, en lugar de en el sistema de archivos raíz. Esto significa que no solo la instalación de aplicaciones está aislada del sistema de archivos central, sino que también se reduce significativamente la capacidad de las aplicaciones maliciosas de comprometer su sistema. No es imposible, generalmente tratamos de evitar la palabra "imposible" cuando describimos ataques o vulnerabilidades en la seguridad, pero el riesgo es significativamente menor.
Entonces, ¿cómo actualizas tu sistema? Bueno, lo que debe hacer es crear una nueva imagen de inicio que incluya los paquetes actualizados que se necesitan y, cuando esté listo, inicie allí. Silverblue proporciona herramientas simples para hacer esto:podría decirse que es menos complicado que la forma estándar de actualizar su sistema. Este enfoque también facilita el mantenimiento de diferentes versiones de un sistema operativo o instalaciones con diferentes conjuntos de paquetes. Si necesita probar una aplicación en un entorno particular, arranca en la imagen que refleja ese entorno y realiza la prueba. ¿Otro entorno? Otra imagen.
Sin embargo, estamos más interesados en las propiedades de seguridad que nos ofrece esta situación. No solo es difícil comprometer el sistema operativo central como un usuario estándar (como ocurre con muchos problemas de seguridad, una vez que tiene sudo
o acceso raíz, la situación se degrada significativamente), pero siempre está operando en un entorno conocido. La capacidad de conocimiento es una propiedad muy deseable para la seguridad, ya que puede probar, monitorear y realizar análisis forenses desde una configuración conocida. Desde el punto de vista de la seguridad (por no hablar de los otros beneficios que ofrece), la inmutabilidad es definitivamente una ventaja en un sistema operativo.
Inmutabilidad del contenedor
Este no es el lugar para describir los contenedores (también conocidos como "contenedores de Linux" o, con menor frecuencia o precisión en estos días, "contenedores Docker") en detalle, pero son básicamente colecciones de software que crea como imágenes y luego ejecuta cargas de trabajo en un servidor host (a veces conocido como "pod"). Una de las mejores cosas de los contenedores es que, por lo general, son rápidos de activar (aprovisionar y ejecutar) a partir de una imagen, y otra es que el formato de esa imagen, el formato del paquete, está bien definido, por lo que es fácil de crear. las propias imágenes.
Sin embargo, desde nuestro punto de vista, lo bueno de los contenedores es que puede elegir usarlos inmutablemente. De hecho, esa es la forma en que generalmente se usan:el uso de contenedores mutables generalmente se considera un antipatrón. La forma estándar (y "correcta") de usar contenedores es agrupar cada componente de la aplicación y las dependencias requeridas en un contenedor bien definido (y con suerte pequeño) y luego implementarlo según sea necesario. La forma en que están diseñados los contenedores no significa que no pueda cambie cualquiera de los programas dentro del contenedor en ejecución, pero la forma en que se ejecutan lo desalienta a hacerlo; lo cual es bueno, ya que definitivamente no deberías hacerlo.
Recuerde, el software inmutable brinda una mejor capacidad de conocimiento y mejora su resistencia al compromiso del tiempo de ejecución. En su lugar, dado lo livianos que son los contenedores, debe diseñar su aplicación de tal manera que, si lo necesita, pueda eliminar la instancia del contenedor y reemplazarla con una instancia de una imagen actualizada.
Esta consideración nos lleva a dos de las razones por las que nunca debe ejecutar contenedores con privilegios de root. En primer lugar, existe la tentación de que los usuarios legítimos usen ese privilegio para actualizar el software en un contenedor en ejecución, lo que reduce la capacidad de conocimiento y posiblemente introduzca un comportamiento inesperado. En segundo lugar, hay muchas más oportunidades de compromiso si un actor malicioso (humano o automatizado) puede cambiar el software subyacente en el contenedor.
Doble inmutabilidad con Silverblue
Mencioné anteriormente que Silverblue ejecuta aplicaciones en contenedores. Este hecho significa que tiene dos niveles de seguridad proporcionados de manera predeterminada cuando ejecuta aplicaciones en un sistema Silverblue:la inmutabilidad del sistema operativo y la inmutabilidad del contenedor.
Como encargado de la seguridad, apruebo la defensa en profundidad, y este es un ejemplo clásico de esa propiedad. También me gusta el hecho de que puedo controlar lo que estoy ejecutando, y qué versiones, con mucha más facilidad que si estuviera en un sistema operativo estándar.
Este artículo se publicó originalmente en Alice, Eve and Bob, un blog de seguridad.