Para FreeBSD estase a desenvolver un mecanismo de illamento similar a plegde and unveil

Para FreeBSD, proponse unha implementación dun mecanismo de illamento de aplicacións, que lembra as chamadas de sistema de compromiso e revelación desenvolvidas polo proxecto OpenBSD. O illamento en plegde conséguese prohibindo o acceso ás chamadas do sistema que non se usan na aplicación e, en revelación, abrindo o acceso selectivamente só ás rutas de ficheiros individuais coas que a aplicación pode traballar. Para a aplicación, fórmase unha especie de lista branca de chamadas ao sistema e rutas de ficheiros, e todas as demais chamadas e camiños están prohibidas.

A diferenza entre o análogo de plegde e unveil que se está a desenvolver para FreeBSD reside na provisión dunha capa adicional que permite illar aplicacións sen facer cambios no seu código ou con cambios mínimos. Lembre que en OpenBSD, plegde e unveil están dirixidos a unha estreita integración co ambiente subxacente e utilízanse engadindo anotacións especiais ao código de cada aplicación. Para simplificar a organización da protección, os filtros permítenche prescindir de detalles a nivel de chamadas individuais do sistema e manipular clases de chamadas ao sistema (entrada/saída, lectura de ficheiros, escritura de ficheiros, sockets, ioctl, sysctl, lanzamento de procesos, etc.) . As funcións de restrición de acceso pódense chamar no código da aplicación a medida que se realizan determinadas accións, por exemplo, o acceso a sockets e ficheiros pódese denegar despois de abrir os ficheiros necesarios e establecer unha conexión de rede.

O autor do port of plegde and unveil para FreeBSD pretende proporcionar a posibilidade de illar aplicacións arbitrarias, para as que se propón a utilidade cortina, que lle permite aplicar regras definidas nun ficheiro separado ás aplicacións. A configuración proposta inclúe un ficheiro con configuracións básicas que definen clases de chamadas ao sistema e rutas de ficheiros típicas específicas de determinadas aplicacións (traballar con son, interacción de rede, rexistro, etc.), así como un ficheiro con regras de acceso para aplicacións específicas.

A utilidade cortina pódese usar para illar a maioría das utilidades sen modificar, procesos de servidor, aplicacións gráficas e mesmo sesións de escritorio enteiras. A cortina pódese usar xunto cos mecanismos de illamento proporcionados polos subsistemas Jail e Capsicum. Tamén é posible organizar o illamento anidado, cando as aplicacións iniciadas herdan as regras establecidas para a aplicación principal, complementándoas con restricións individuais. Algunhas operacións do núcleo (instalacións de depuración, POSIX/SysV IPC, PTY) están protexidas adicionalmente por un mecanismo de barreira que impide o acceso a obxectos do núcleo que non son creados polo proceso actual ou pai.

Un proceso pode configurar o seu propio illamento chamando a curtainctl ou usando as funcións plegde() e unveil() de libcurtain, semellantes ás que se atopan en OpenBSD. Para rastrexar bloqueos mentres a aplicación se está a executar, ofrécese o sysctl 'security.curtain.log_level'. O acceso aos protocolos X11 e Wayland está habilitado por separado especificando as opcións "-X"/"-Y" e "-W" ao executar curtain, pero o soporte para aplicacións gráficas aínda non está suficientemente estabilizado e ten unha serie de problemas sen resolver ( os problemas aparecen principalmente ao usar X11 e o soporte de Wayland implétase moito mellor). Os usuarios poden engadir restricións adicionais creando ficheiros de regras locais (~/.curtain.conf). Por exemplo, para permitir escribir desde Firfox só no directorio ~/Downloads/, pode engadir unha sección "[firefox]" coa regra "~/Downloads/ : rw +".

A implementación inclúe o módulo do núcleo mac_curtain para o control de acceso obrigatorio (MAC, Control de acceso obrigatorio), un conxunto de parches para o núcleo de FreeBSD coa implementación dos controladores e filtros necesarios, a biblioteca libcurtain para usar as funcións plegde e unveil nas aplicacións, a utilidade cortina, ficheiros de configuración de exemplo, un conxunto de probas e parches para algúns programas no espazo do usuario (por exemplo, para usar $TMPDIR para unificar o traballo con ficheiros temporais). Sempre que sexa posible, o autor pretende minimizar o número de cambios que requiren parches para o núcleo e as aplicacións.

Fonte: opennet.ru

Engadir un comentario