Um mecanismo de isolamento semelhante ao plegde eunvel está sendo desenvolvido para o FreeBSD

Para o FreeBSD, é proposta uma implementação de um mecanismo de isolamento de aplicações, reminiscente das chamadas de sistema plegde e revelado desenvolvidas pelo projeto OpenBSD. O isolamento em plegde é obtido proibindo o acesso a chamadas do sistema que não são usadas no aplicativo, e em revelação abrindo seletivamente o acesso apenas a caminhos de arquivos individuais com os quais o aplicativo pode trabalhar. Para o aplicativo, é formada uma espécie de lista branca de chamadas de sistema e caminhos de arquivos, e todas as outras chamadas e caminhos são proibidos.

A diferença entre o análogo do plegde e do desvendado desenvolvido para o FreeBSD se resume ao fornecimento de uma camada adicional que permite isolar aplicativos sem fazer alterações em seu código ou com alterações mínimas. Lembre-se de que no OpenBSD, plegde e desvelar visam a integração estreita com o ambiente subjacente e são usados ​​adicionando anotações especiais ao código de cada aplicativo. Para simplificar a organização da proteção, os filtros permitem dispensar detalhes no nível de chamadas de sistema individuais e manipular classes de chamadas de sistema (entrada/saída, leitura de arquivos, gravação de arquivos, soquetes, ioctl, sysctl, inicialização de processos, etc.) . As funções de restrição de acesso podem ser chamadas no código do aplicativo à medida que determinadas ações são executadas, por exemplo, o acesso a soquetes e arquivos pode ser negado após abrir os arquivos necessários e estabelecer uma conexão de rede.

O autor do porte de plegde e desvelar para FreeBSD pretende fornecer a capacidade de isolar aplicações arbitrárias, para as quais é proposto o utilitário cortina, que permite aplicar regras definidas em um arquivo separado às aplicações. A configuração proposta inclui um arquivo com configurações básicas que definem classes de chamadas de sistema e caminhos de arquivos típicos específicos para determinadas aplicações (trabalho com som, interação de rede, registro, etc.), bem como um arquivo com regras de acesso para aplicações específicas.

O utilitário cortina pode ser usado para isolar a maioria dos utilitários não modificados, processos de servidor, aplicativos gráficos e até mesmo sessões inteiras de desktop. A cortina pode ser usada em conjunto com os mecanismos de isolamento fornecidos pelos subsistemas Jail e Capsicum. Também é possível organizar o isolamento aninhado, quando os aplicativos iniciados herdam as regras definidas para o aplicativo pai, complementando-as com restrições individuais. Algumas operações do kernel (recursos de depuração, POSIX/SysV IPC, PTYs) são adicionalmente protegidas por um mecanismo de barreira que impede o acesso a objetos do kernel que não são criados pelo processo atual ou pai.

Um processo pode configurar seu próprio isolamento chamando o Curtainctl ou usando as funções Plegde() e Unvel() da libcurtain, semelhantes às encontradas no OpenBSD. Para rastrear bloqueios enquanto o aplicativo está em execução, o sysctl 'security.curtain.log_level' é fornecido. O acesso aos protocolos X11 e Wayland é habilitado separadamente especificando as opções “-X”/”-Y” e “-W” ao executar a cortina, mas o suporte para aplicações gráficas ainda não está suficientemente estabilizado e tem uma série de problemas não resolvidos ( os problemas aparecem principalmente ao usar o X11, e o suporte ao Wayland é implementado muito melhor). Os usuários podem adicionar restrições adicionais criando arquivos de regras locais (~/.curtain.conf). Por exemplo, para permitir a gravação do Firfox apenas no diretório ~/Downloads/, você pode adicionar uma seção “[firefox]” com a regra “~/Downloads/ : rw +”.

A implementação inclui o módulo do kernel mac_curtain para controle de acesso obrigatório (MAC, Mandatory Access Control), um conjunto de patches para o kernel do FreeBSD com a implementação dos manipuladores e filtros necessários, a biblioteca libcurtain para usar o plegde e revelar funções em aplicativos, o utilitário cortina, exemplos de arquivos de configuração, um conjunto de testes e patches para alguns programas no espaço do usuário (por exemplo, para usar $TMPDIR para unificar o trabalho com arquivos temporários). Sempre que possível, o autor pretende minimizar o número de alterações que exigem patches no kernel e nos aplicativos.

Fonte: opennet.ru

Adicionar um comentário