Después de un año de desarrollo, se ha publicado una nueva versión de la herramienta para organizar trabajos en entornos aislados, Bubblewrap 0.9, que se utiliza para restringir aplicaciones individuales de usuarios no privilegiados. En la práctica, Bubblewrap es utilizado por el proyecto Flatpak como una capa para la aislamiento de aplicaciones ejecutadas desde paquetes. El código del proyecto está escrito en C y se distribuye bajo la 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.
No se requiere activar en el sistema los espacios de nombres de identificadores de usuario (user namespaces), que permiten utilizar un conjunto de identificadores separado en contenedores, ya que por defecto no funcionan en muchas distribuciones (Bubblewrap se posiciona como una implementación suid restringida de un subconjunto de las capacidades de los espacios de nombres de usuario; para excluir todos los identificadores de usuario y procesos del entorno, excepto el actual, se utilizan los modos CLONE_NEWUSER y CLONE_NEWPID). Para mayor protección, los programas ejecutados bajo Bubblewrap se lanzan en modo PR_SET_NO_NEW_PRIVS, que prohíbe adquirir nuevos privilegios, por ejemplo, cuando hay 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.
La principal diferencia con respecto a un proyecto similar, Firejail, que también utiliza un modelo de lanzamiento con setuid, es que en Bubblewrap la capa para crear contenedores incluye solo el mínimo necesario de capacidades, mientras que todas las funciones extendidas requeridas para ejecutar aplicaciones gráficas, interactuar con el escritorio y filtrar las llamadas a Pulseaudio se manejan del lado de Flatpak y se ejecutan después de la eliminación de privilegios. Firejail, por otro lado, combina todas las funciones complementarias en un solo ejecutable, lo que dificulta su auditoría y el mantenimiento de un nivel adecuado de seguridad.
En esta nueva versión:
- Se han eliminado del paquete de fuentes los archivos generados en Autotools. Ahora se recomienda usar el sistema de construcción Meson. El soporte opcional para Autotools se ha mantenido, pero se planea eliminar en futuras versiones.
- Se ha añadido la opción «—argv0» para establecer el valor del primer argumento de la línea de comandos (argv[0] — nombre del archivo ejecutable, por ejemplo «—argv0 /usr/bin/test»).
- La opción «—symlink» ahora solo se activa cuando el enlace simbólico ya existe y apunta al archivo de destino correcto.
- Se documentó la opción «—cap-add», utilizada para establecer banderas de capacidad, como «CAP_DAC_READ_SEARCH».
- Se ha mejorado la información de los errores mostrados al fallar el montaje.
- Se ha simplificado el proceso de creación de pruebas unitarias.
- En los ejemplos de uso, se ha dejado de dar soporte a versiones antiguas de Python.
- Se han mejorado las operaciones de asignación de memoria.
Fuente: opennet.ru
