Se está desarrollando un mecanismo de aislamiento similar a plegde y unveil para FreeBSD

Para FreeBSD, se propone una implementación de un mecanismo de aislamiento de aplicaciones, que recuerda a las llamadas al sistema plegde y unveil desarrolladas por el proyecto OpenBSD. El aislamiento en plegde se logra prohibiendo el acceso a llamadas al sistema que no se utilizan en la aplicación, y en develar abriendo selectivamente el acceso solo a rutas de archivos individuales con las que la aplicación puede trabajar. Para la aplicación, se forma una especie de lista blanca de llamadas al sistema y rutas de archivos, y todas las demás llamadas y rutas están prohibidas.

La diferencia entre el análogo de plegde y unveil desarrollado para FreeBSD se reduce a la provisión de una capa adicional que permite aislar aplicaciones sin realizar cambios en su código o con cambios mínimos. Recuerde que en OpenBSD, plegde y unveil tienen como objetivo una estrecha integración con el entorno subyacente y se utilizan agregando anotaciones especiales al código de cada aplicación. Para simplificar la organización de la protección, los filtros le permiten prescindir de los detalles a nivel de llamadas individuales al sistema y manipular clases de llamadas al sistema (entrada/salida, lectura de archivos, escritura de archivos, sockets, ioctl, sysctl, inicio de procesos, etc.) . Las funciones de restricción de acceso se pueden invocar en el código de la aplicación a medida que se realizan ciertas acciones, por ejemplo, se puede denegar el acceso a sockets y archivos después de abrir los archivos necesarios y establecer una conexión de red.

El autor del port Plegde and Unveil para FreeBSD tiene la intención de brindar la capacidad de aislar aplicaciones arbitrarias, para lo cual propone la utilidad Curtain, que permite aplicar reglas definidas en un archivo separado a las aplicaciones. La configuración propuesta incluye un archivo con configuraciones básicas que definen clases de llamadas al sistema y rutas de archivos típicas específicas para ciertas aplicaciones (trabajo con sonido, interacción de red, registro, etc.), así como un archivo con reglas de acceso para aplicaciones específicas.

La utilidad de cortina se puede utilizar para aislar la mayoría de las utilidades, procesos de servidor, aplicaciones gráficas e incluso sesiones de escritorio completas no modificadas. La cortina se puede utilizar junto con los mecanismos de aislamiento proporcionados por los subsistemas Jail y Capsicum. También es posible organizar el aislamiento anidado, cuando las aplicaciones iniciadas heredan las reglas establecidas para la aplicación principal, completándolas con restricciones individuales. Algunas operaciones del kernel (funciones de depuración, POSIX/SysV IPC, PTY) están protegidas adicionalmente por un mecanismo de barrera que impide el acceso a objetos del kernel que no son creados por el proceso actual o principal.

Un proceso puede configurar su propio aislamiento llamando a cortinactl o usando las funciones plegde() y unveil() de libcurtain, similares a las que se encuentran en OpenBSD. Para realizar un seguimiento de los bloqueos mientras la aplicación se está ejecutando, se proporciona el sysctl 'security.curtain.log_level'. El acceso a los protocolos X11 y Wayland se habilita por separado especificando las opciones “-X”/”-Y” y “-W” al ejecutar la cortina, pero el soporte para aplicaciones gráficas aún no está suficientemente estabilizado y tiene una serie de problemas sin resolver ( Los problemas aparecen principalmente al usar X11 y el soporte de Wayland se implementa mucho mejor). Los usuarios pueden agregar restricciones adicionales creando archivos de reglas locales (~/.curtain.conf). Por ejemplo, para permitir la escritura desde Firfox solo en el directorio ~/Descargas/, puede agregar una sección “[firefox]” con la regla “~/Descargas/: rw +”.

La implementación incluye el módulo del kernel mac_curtain para el control de acceso obligatorio (MAC, Mandatory Access Control), un conjunto de parches para el kernel de FreeBSD con la implementación de los controladores y filtros necesarios, la biblioteca libcurtain para usar las funciones plegde y unveil en aplicaciones, la utilidad cortina, archivos de configuración de ejemplo, un conjunto de pruebas y parches para algunos programas en el espacio de usuario (por ejemplo, para usar $TMPDIR para unificar el trabajo con archivos temporales). Siempre que sea posible, el autor pretende minimizar la cantidad de cambios que requieren parches en el kernel y las aplicaciones.

Fuente: opennet.ru

Añadir un comentario