Lançamento do Bubblewrap 0.6, camada para criação de ambientes isolados

Está disponível o lançamento de ferramentas para organização do trabalho de ambientes isolados Bubblewrap 0.6, normalmente utilizado para restringir aplicações individuais de usuários não privilegiados. Na prática, o Bubblewrap é usado pelo projeto Flatpak como uma camada para isolar aplicativos iniciados de pacotes. O código do projeto é escrito em C e distribuído sob a licença LGPLv2+.

Para isolamento, são utilizadas tecnologias tradicionais de virtualização de containers Linux, baseadas no uso de cgroups, namespaces, Seccomp e SELinux. Para realizar operações privilegiadas para configurar um contêiner, o Bubblewrap é iniciado com direitos de root (um arquivo executável com um sinalizador suid) e, em seguida, redefine os privilégios após o contêiner ser inicializado.

A ativação de namespaces de usuário no sistema de namespace, que permite que você use seu próprio conjunto separado de identificadores em contêineres, não é necessária para a operação, pois não funciona por padrão em muitas distribuições (o Bubblewrap é posicionado como uma implementação suid limitada de um subconjunto de capacidades de namespaces de usuários - para excluir todos os identificadores de usuários e processos do ambiente, exceto o atual, são usados ​​os modos CLONE_NEWUSER e CLONE_NEWPID). Para proteção adicional, os programas executados no Bubblewrap são iniciados no modo PR_SET_NO_NEW_PRIVS, que proíbe a aquisição de novos privilégios, por exemplo, se o sinalizador setuid estiver presente.

O isolamento no nível do sistema de arquivos é realizado criando um novo namespace de montagem por padrão, no qual uma partição raiz vazia é criada usando tmpfs. Se necessário, partições FS externas são anexadas a esta partição no modo “mount —bind” (por exemplo, quando iniciada com a opção “bwrap —ro-bind /usr /usr”, a partição /usr é encaminhada do sistema principal no modo somente leitura). Os recursos de rede são limitados ao acesso à interface de loopback com isolamento de pilha de rede por meio dos sinalizadores CLONE_NEWNET e CLONE_NEWUTS.

A principal diferença do projeto Firejail semelhante, que também usa o modelo de inicialização setuid, é que no Bubblewrap a camada de criação de contêiner inclui apenas os recursos mínimos necessários e todas as funções avançadas necessárias para executar aplicativos gráficos, interagir com a área de trabalho e filtrar solicitações. para Pulseaudio, transferido para o lado Flatpak e executado após a redefinição dos privilégios. O Firejail, por outro lado, combina todas as funções relacionadas em um arquivo executável, o que dificulta a auditoria e a manutenção da segurança no nível adequado.

Na nova versão:

  • Adicionado suporte para o sistema de montagem Meson. O suporte para construção com Autotools foi mantido por enquanto, mas será removido em uma versão futura.
  • Implementada a opção "--add-seccomp" para adicionar mais de um programa seccomp. Adicionado um aviso de que se você especificar a opção "--seccomp" novamente, apenas o último parâmetro será aplicado.
  • O branch master no repositório git foi renomeado para main.
  • Adicionado suporte parcial para a especificação REUSE, que unifica o processo de especificação de informações de licença e direitos autorais. Muitos arquivos de código têm cabeçalhos SPDX-License-Identifier adicionados. Seguir as diretrizes REUSE torna mais fácil determinar automaticamente qual licença se aplica a quais partes do código do aplicativo.
  • Adicionada verificação do valor do contador de argumentos da linha de comando (argc) e implementada uma saída de emergência se o contador for zero. A mudança ajuda a bloquear problemas de segurança causados ​​pelo tratamento incorreto de argumentos de linha de comando passados, como CVE-2021-4034 no Polkit.

Fonte: opennet.ru

Adicionar um comentário