Lançamento do Bubblewrap 0.9, uma camada para a criação de ambientes isolados

Após um ano de desenvolvimento, foi lançada uma nova versão da ferramenta para organização de ambientes isolados Bubblewrap 0.9, utilizada para limitar aplicativos de usuários não privilegiados. Na prática, o Bubblewrap é empregado pelo projeto Flatpak como uma camada para a isolação de aplicativos executados a partir 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 contêineres do Linux, baseadas no uso de cgroups, namespaces, Seccomp e SELinux. Para realizar operações privilegiadas de configuração do contêiner, o Bubblewrap é executado com privilégios de root (arquivo executável com a flag suid), com a posterior revogação das permissões após a inicialização do contêiner.

A ativação do sistema de namespaces de identificadores de usuário (user namespaces), permitindo o uso de um conjunto separado de identificadores em contêineres, não é necessária para o funcionamento, já que, por padrão, não funciona em muitas distribuições (o Bubblewrap é posicionado como uma implementação suid limitada de um subconjunto das capacidades de user namespaces — para excluir todos os identificadores de usuários e processos do ambiente, exceto o atual, são utilizados os modos CLONE_NEWUSER e CLONE_NEWPID). Para proteção adicional, os programas executados sob Bubblewrap são iniciados no modo PR_SET_NO_NEW_PRIVS, que proíbe a obtenção de novos privilégios, por exemplo, quando a flag setuid está presente.

O isolamento no nível do sistema de arquivos é realizado através da criação por padrão de um novo namespace de pontos de montagem (mount namespace), onde um sistema de arquivos raiz vazio é criado utilizando tmpfs. Nesse sistema, partes da FS externa podem ser anexadas conforme necessário no modo "mount --bind" (por exemplo, ao executar com a opção "bwrap --ro-bind /usr /usr", a partição /usr é passada do sistema principal em modo somente leitura). As capacidades de rede são restritas ao acesso ao loopback, isolando a pilha de rede através das flags CLONE_NEWNET e CLONE_NEWUTS.

A principal diferença em relação ao projeto semelhante Firejail, que também utiliza o modelo de execução com setuid, é que no Bubblewrap a camada para a criação de contêineres inclui apenas o mínimo necessário de funcionalidades, enquanto todas as funções avançadas necessárias para a execução de aplicativos gráficos, interação com a área de trabalho e filtragem de chamadas ao Pulseaudio, foram transferidas para o Flatpak e são executadas já após a revogação de privilégios. O Firejail, por sua vez, combina em um único arquivo executável todas as funções auxiliares, o que dificulta sua auditoria e manutenção de segurança em níveis adequados.

No novo lançamento:

  • Os arquivos gerados pelo Autotools foram removidos do pacote com os textos fontes. Agora é recomendável usar o sistema de construção Meson. O suporte opcional ao Autotools ainda está disponível, mas está previsto para ser removido em futuras versões.
  • Adicionada a opção "—argv0" para definir o valor do primeiro argumento da linha de comando (argv[0] — nome do arquivo executável, por exemplo, "—argv0 /usr/bin/test").
  • A opção "—symlink" agora só é ativada quando o link simbólico já existe e aponta para o arquivo de destino correto.
  • Documentada a opção "—cap-add", utilizada para definir os flags de capability, como "CAP_DAC_READ_SEARCH".
  • Aumentada a clareza das mensagens de erro exibidas durante falhas de montagem.
  • Simplificado o processo de criação de testes unitários.
  • Nos exemplos de uso, o suporte a versões antigas do Python foi descontinuado.
  • Melhoradas as operações de alocação de memória.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster