nueva versión de la herramienta , destinada a organizar el trabajo de entornos aislados en Linux y funciona a nivel de aplicaciones de usuarios no privilegiados. En la práctica, Bubblewrap es utilizado por el proyecto Flatpak como capa para la aislamiento de aplicaciones ejecutadas desde paquetes. El código del proyecto está escrito en lenguaje C y bajo licencia LGPLv2+.
Para la isolación se utilizan tecnologías tradicionales de virtualización de contenedores en Linux, basadas en el uso de cgroups, espacios de nombres (namespaces), Seccomp y SELinux. Para realizar operaciones privilegiadas de configuración del contenedor, Bubblewrap se ejecuta con privilegios de root (archivo ejecutable con el flag suid) con posterior eliminación de privilegios después de completar la inicialización del contenedor.
La activación en el sistema de espacios de nombres de identificador de usuario (user namespaces), que permiten usar en los contenedores un conjunto separado de identificadores, no es necesaria para funcionar, ya que por defecto no se activa en muchas distribuciones (Bubblewrap se posiciona como una implementación suid limitada de un subconjunto de capacidades de los espacios de nombres de usuario; para excluir todos los identificadores de usuarios y procesos del entorno, excepto el actual, se utilizan los modos CLONE_NEWUSER y CLONE_NEWPID). Para una protección adicional, los programas ejecutados bajo
Bubblewrap se inician en modo PR_SET_NO_NEW_PRIVS, que prohíbe la obtención de nuevos privilegios, por ejemplo, si existe un flag setuid.
El aislamiento a nivel del sistema de archivos se realiza mediante la creación por defecto de un nuevo espacio de nombres de puntos de montaje, en el cual se crea una partición raíz vacía usando tmpfs. En esta partición se montan, si es necesario, particiones de sistemas de archivos externos en modo ‘mount --bind’ (por ejemplo, al ejecutar con la opción ‘bwrap --ro-bind /usr /usr’, la partición /usr se pasa desde el sistema principal en modo solo lectura). Las capacidades de red se limitan al acceso a la interfaz de loopback con el aislamiento de la pila de red a través de las banderas CLONE_NEWNET y CLONE_NEWUTS.
Una diferencia clave con un proyecto similar , que también utiliza un modelo de ejecución con setuid, es que en Bubblewrap la capa para crear contenedores incluye solo el mínimo necesario de capacidades, mientras que todas las funciones ampliadas necesarias para ejecutar aplicaciones gráficas, interacción con el escritorio y filtrado de llamadas a Pulseaudio, se transfieren a Flatpak y se realizan ya después de la eliminación de privilegios. En cambio, Firejail combina en un solo archivo ejecutable todas las funciones adicionales, lo que complica su auditoría y el mantenimiento de la seguridad a .
La nueva versión se destaca por la implementación del soporte para la conexión de espacios de nombres existentes de identificadores de usuario (user namespaces) y procesos (pid namespaces). Se han añadido las banderas «—userns», «—userns2» y «—pidns» para gestionar la conexión de los espacios de nombres.
Esta función no funciona en modo setuid y requiere el uso de un modo separado que puede operar sin obtener derechos de root, pero requiere activación.
los user namespaces en el sistema (que por defecto están desactivados en Debian y RHEL/CentOS) y no excluye la posibilidad para el borde de las limitaciones de «user namespaces». Entre las nuevas características de Bubblewrap 0.4 también se destaca la posibilidad de compilar con la biblioteca C musl en lugar de glibc y el soporte para guardar información sobre los espacios de nombres en un archivo de estadísticas en formato JSON.
Fuente: opennet.ru
