Está disponible la versión de la herramienta para la organización del trabajo en entornos aislados Bubblewrap 0.6, que generalmente se utiliza para limitar 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 lenguaje 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 ha añadido soporte para el sistema de construcción Meson. El soporte para la compilación usando Autotools aún se conserva, pero se eliminará en una de las próximas versiones.
- Se ha implementado la opción "--add-seccomp" para añadir más de un programa seccomp. Se ha añadido una advertencia de que al especificar de nuevo la opción "--seccomp" solo se aplicará el último parámetro.
- La rama master en el repositorio git ha sido renombrada a main.
- Se ha añadido un soporte parcial para la especificación REUSE, que unifica el proceso de indicación de información sobre licencias y derechos de autor. Se han añadido encabezados SPDX-License-Identifier a muchos archivos de código. Seguir las recomendaciones de REUSE permite simplificar la identificación automática de qué licencia se aplica a cuáles partes del código de la aplicación.
- Se ha añadido una verificación del valor del contador de argumentos de línea de comandos (argc) y se ha implementado una salida de emergencia en caso de que el contador sea cero. Este cambio permite bloquear problemas de seguridad causados por un manejo incorrecto de los argumentos de línea de comandos pasados, como el CVE-2021-4034 en Polkit.
Fuente: opennet.ru
