Lanzamiento de Bubblewrap 0.6, una capa para crear entornos aislados

Está disponible una versión de herramientas para organizar el trabajo de entornos aislados Bubblewrap 0.6, generalmente utilizada para restringir aplicaciones individuales de usuarios sin privilegios. En la práctica, el proyecto Flatpak utiliza Bubblewrap como una capa para aislar las aplicaciones iniciadas desde paquetes. El código del proyecto está escrito en C y se distribuye bajo la licencia LGPLv2+.

Para el aislamiento se utilizan tecnologías tradicionales de virtualización de contenedores de Linux, basadas en el uso de cgroups, namespaces, Seccomp y SELinux. Para realizar operaciones privilegiadas para configurar un contenedor, Bubblewrap se inicia con derechos de root (un archivo ejecutable con un indicador suid) y luego restablece los privilegios después de que se inicializa el contenedor.

La activación de espacios de nombres de usuario en el sistema de espacios de nombres, que le permite usar su propio conjunto separado de identificadores en contenedores, no es necesaria para la operación, ya que no funciona de forma predeterminada en muchas distribuciones (Bubblewrap se posiciona como una implementación suid limitada de un subconjunto de capacidades de espacios de nombres de usuario: para excluir todos los identificadores de usuario y proceso del entorno, excepto el actual, se utilizan los modos CLONE_NEWUSER y CLONE_NEWPID). Para protección adicional, los programas ejecutados bajo Bubblewrap se inician en el modo PR_SET_NO_NEW_PRIVS, que prohíbe la adquisición de nuevos privilegios, por ejemplo, si el indicador setuid está presente.

El aislamiento a nivel del sistema de archivos se logra creando un nuevo espacio de nombres de montaje de forma predeterminada, en el que se crea una partición raíz vacía usando tmpfs. Si es necesario, las particiones FS externas se adjuntan a esta partición en el modo “mount —bind” (por ejemplo, cuando se inicia con la opción “bwrap —ro-bind /usr /usr”, la partición /usr se reenvía desde el sistema principal en modo de sólo lectura). Las capacidades de la red se limitan al acceso a la interfaz loopback con aislamiento de la pila de red a través de los indicadores CLONE_NEWNET y CLONE_NEWUTS.

La diferencia clave con respecto al proyecto similar Firejail, que también utiliza el modelo de lanzamiento setuid, es que en Bubblewrap la capa de creación de contenedores incluye solo las capacidades mínimas necesarias y todas las funciones avanzadas necesarias para ejecutar aplicaciones gráficas, interactuar con el escritorio y filtrar solicitudes. a Pulseaudio, transferido al lado Flatpak y ejecutado después de que se hayan restablecido los privilegios. Firejail, por otro lado, combina todas las funciones relacionadas en un archivo ejecutable, lo que dificulta la auditoría y el mantenimiento de la seguridad en el nivel adecuado.

En el nuevo lanzamiento:

  • Se agregó soporte para el sistema de ensamblaje Meson. Por ahora se ha mantenido la compatibilidad con la creación con Autotools, pero se eliminará en una versión futura.
  • Se implementó la opción "--add-seccomp" para agregar más de un programa seccomp. Se agregó una advertencia de que si especifica la opción "--seccomp" nuevamente, solo se aplicará el último parámetro.
  • Se ha cambiado el nombre de la rama master en el repositorio de git a main.
  • Se agregó soporte parcial para la especificación REUSE, que unifica el proceso de especificación de información de licencia y derechos de autor. Muchos archivos de código tienen encabezados SPDX-License-Identifier agregados. Seguir las pautas REUSE hace que sea más fácil determinar automáticamente qué licencia se aplica a qué partes del código de la aplicación.
  • Se agregó la verificación del valor del contador de argumentos de la línea de comando (argc) e implementó una salida de emergencia si el contador es cero. El cambio ayuda a bloquear los problemas de seguridad causados ​​por el manejo incorrecto de los argumentos de la línea de comando pasados, como CVE-2021-4034 en Polkit.

Fuente: opennet.ru

Añadir un comentario