Simple Science

Ciência de ponta explicada de forma simples

# Informática# Engenharia de software# Criptografia e segurança

O Estado do Sandboxing em Software Open Source

Analisando a adoção e os desafios do sandboxing em pacotes de software.

― 9 min ler


Sandboxing em CódigoSandboxing em CódigoAberto: Um Desafiosegurança do software.Baixa adoção de sandboxing atrapalha a
Índice

Sandboxing é uma técnica usada pra limitar como os aplicativos de software interagem com o sistema. O objetivo é evitar que os programas acessem mais recursos do que precisam, seguindo um princípio chamado "menor privilégio". Em termos mais simples, se um aplicativo só precisa fazer algumas coisas, não deveria ser permitido fazer tudo. As sandboxes agem como barreiras que limitam o que um programa pode fazer, ajudando a proteger o sistema de ações prejudiciais.

Importância do Sandboxing

Você não pode sempre confiar que o software vai se comportar direito. Às vezes, atacantes exploram fraquezas em programas pra ganhar mais controle sobre um sistema. As sandboxes ajudam a reduzir esse risco, garantindo que os programas rodem com as permissões mínimas necessárias. Por exemplo, se um programa não deveria conseguir acessar certos arquivos ou funções de rede, a sandbox vai bloquear esse acesso.

No mundo do software livre, o sandboxing é especialmente importante. Sistemas de código aberto são construídos combinando vários pacotes de software, e garantir que esses pacotes funcionem juntos de forma segura é crucial. Embora a maioria dos sistemas operacionais hoje forneça alguma forma de sandboxing, não há muita padronização. Cada sistema operacional tem seu próprio conjunto de ferramentas de sandboxing, o que pode complicar um pouco a vida dos desenvolvedores.

O Desafio do Sandboxing

Mesmo com a importância do sandboxing, o uso real dos mecanismos de sandboxing em pacotes de software open-source é surpreendentemente baixo. Pesquisas mostraram que menos de 1% dos pacotes de software usam esses mecanismos diretamente, mas muitos pacotes podem ainda depender de outros que fazem isso.

Pra entender como os desenvolvedores estão usando sandboxing, analisamos vários sistemas operacionais diferentes. Cada sistema operacional tem suas próprias ferramentas de sandboxing:

  • O Linux usa ferramentas como Seccomp e Landlock.
  • O FreeBSD oferece Capsicum.
  • O OpenBSD tem Pledge e Unveil.

Perguntas de Pesquisa

Este estudo buscou responder algumas perguntas importantes sobre o uso de sandboxing em pacotes de software:

  1. Qual é a extensão do uso de mecanismos de sandboxing em diferentes sistemas operacionais?
  2. Como esses mecanismos se comparam em termos de complexidade e segurança ao proteger o mesmo pacote de software em vários sistemas operacionais?

Descobertas sobre o Uso de Sandboxing

A investigação revelou que, embora muitos pacotes dependam de outros que empregam sandboxing, o número de pacotes que usam diretamente as APIs de sandboxing é baixo em todos os sistemas. Descobrimos casos em que os desenvolvedores simplificaram sua implementação de sandboxing, optando por métodos menos complexos em vez de aproveitar completamente as capacidades de ferramentas mais avançadas.

Usar sandboxing exige que os desenvolvedores mudem seu código pra se encaixar em certos requisitos. Curiosamente, os métodos de sandboxing mais simples, como os oferecidos pelo Pledge do OpenBSD, às vezes levam a restrições mais rigorosas do que métodos mais complexos como o Seccomp.

Visão Geral dos Mecanismos de Sandboxing

Seccomp

Seccomp, que é a abreviação de secure computing, foi introduzido no Linux em 2005. Ele permite que os desenvolvedores limitem as chamadas de sistema que seus aplicativos podem fazer. Criando uma lista de chamadas de sistema permitidas ou negadas, os desenvolvedores podem controlar o que seus programas estão autorizados a fazer.

Com o Seccomp, os desenvolvedores podem especificar quais chamadas de sistema são permitidas e definir ações para quando chamadas restritas são feitas. Por exemplo, um programa pode ser configurado pra terminar se tentar fazer uma chamada de sistema não autorizada. Os desenvolvedores também podem usar uma biblioteca chamada libseccomp, que facilita o uso do Seccomp sem precisar escrever código complexo.

Landlock

Landlock chegou como um módulo de segurança do Linux em 2017. Ele permite que os desenvolvedores definam regras de acesso para arquivos e diretórios. Com o Landlock, os desenvolvedores podem restringir o acesso a certas partes do sistema de arquivos ou limitar ações a somente leitura. Semelhante ao Seccomp, o Landlock herda as restrições dos processos pai.

Pledge e Unveil

O OpenBSD fornece Pledge e Unveil, que são sistemas mais simples para sandboxing em comparação com Seccomp e Landlock. O Pledge permite aos desenvolvedores declarar que seu aplicativo usará apenas certos recursos ou funções. Se um programa tentar realizar ações fora de suas promessas definidas, ele vai terminar.

O Unveil funciona junto com o Pledge, limitando aplicativos a diretórios específicos com certas permissões. Se um aplicativo tentar acessar arquivos ou diretórios para os quais não recebeu permissão, ele será interrompido.

Capsicum

O FreeBSD utiliza Capsicum, que permite que os desenvolvedores controlem o acesso com base em descritores de arquivos. Isso significa que os desenvolvedores podem definir o que um programa pode ou não acessar com base em arquivos ou recursos específicos. Uma vez que um programa entra no modo de capacidade, não pode acessar o sistema mais amplo, tornando-se uma ferramenta útil para sandboxing.

O Estudo do Uso de Pacotes

Pra ter uma visão mais clara de como o sandboxing é adotado em diferentes sistemas operacionais, analisamos o código fonte de vários repositórios. Focamos em sistemas populares de código aberto como Debian e Fedora, assim como FreeBSD e OpenBSD. Ao examinar seus pacotes, nosso objetivo era entender quantos e quais pacotes utilizam sandboxing.

Os pacotes que usam mecanismos de sandboxing foram identificados buscando chamadas específicas relacionadas a sandboxing no código. Tomamos medidas pra garantir que nossas descobertas fossem precisas, filtrando instâncias irrelevantes onde o sandboxing estava presente apenas em código de teste.

Percentagem de Pacotes Usando Sandboxing

Apesar de termos examinado milhares de pacotes, o número que usa mecanismos de sandboxing diretamente era muito baixo em todos os sistemas operacionais. Em muitos casos, pacotes que pareciam ter código sandboxed na verdade estavam dependendo de outros pacotes que usavam mecanismos de sandbox. Como resultado, entender se um programa está realmente sandboxed pode ser complexo, já que pode depender de várias dependências.

Tipos de Aplicações que Usam Sandboxing

Quando olhamos para os tipos de aplicações que utilizam mecanismos de sandboxing, notamos uma diferença clara entre os sistemas operacionais. Para o Linux, a maioria dos pacotes sandboxed pertencia às categorias de desenvolvimento e biblioteca. Em contraste, FreeBSD e OpenBSD tinham um número maior de aplicações de rede e utilitários usando sandboxing.

Ferramentas de rede são particularmente boas candidatas pra sandboxing, já que costumam interagir com usuários externos. O OpenBSD se destaca por ter uma porcentagem muito maior de pacotes de rede empregando sandboxing em comparação com distribuições do Linux.

O que o Código Sandboxed Está Fazendo?

Com ferramentas de sandboxing como o Seccomp, os desenvolvedores têm a capacidade de controlar chamadas de sistema e restringir ações com base nos argumentos fornecidos. Muitos programas vão além de simplesmente permitir ou negar chamadas de sistema; eles limitam como essas chamadas são executadas. Isso geralmente envolve escrever filtros complexos que podem ser difíceis de criar.

Curiosamente, nosso estudo mostrou que um número significativo de desenvolvedores optou por implementar sandboxes mais complexas mesmo quando opções mais simples estavam disponíveis. Isso sugere que muitos desenvolvedores estão interessados em criar aplicações seguras, apesar dos desafios envolvidos.

Comparando Sandboxing entre Sistemas

Também analisamos como diferentes sistemas implementam sandboxing para o mesmo aplicativo. Ao fazer isso, descobrimos que o Seccomp permitia sandboxes muito detalhadas em comparação com o Pledge. Por exemplo, ao examinar um aplicativo específico chamado arping, encontramos que sua sandbox no Linux era muito mais rigorosa do que suas versões em outros sistemas operacionais.

Por outro lado, alguns aplicativos não tiraram total proveito das capacidades oferecidas pelo Seccomp. Em um desses casos, o pacote xwallpaper implementou o Seccomp não pra melhorar a segurança, mas apenas pra replicar o que já tinha sido alcançado com o Pledge.

Sandboxing na Inicialização

Quando examinamos os processos que rodam logo após a inicialização do sistema, observamos tendências interessantes. O OpenBSD apresentou uma liderança clara com um número notável de processos usando Pledge ou Unveil. Por outro lado, Fedora e Debian tinham menos processos utilizando seus mecanismos de sandboxing.

Essas observações destacam que, embora um pequeno número de pacotes invoque diretamente APIs de sandboxing, muitos deles dependem de outros que o fazem. A verdadeira extensão do uso de sandboxing pode frequentemente ser mascarada por essas dependências, tornando difícil avaliar a segurança com precisão.

Barreiras à Adoção do Sandboxing

Apesar da disponibilidade de mecanismos de sandboxing, ainda existem barreiras que impedem uma adoção mais ampla. Um desafio é que os desenvolvedores precisam ter um entendimento profundo de suas aplicações e das chamadas de sistema que estão sendo usadas. Isso pode ser intimidador para programas grandes e complexos.

Depurar aplicações com sandbox pode também ser complicado. Se um programa tentar realizar uma ação fora de seu escopo permitido, ele vai terminar. Os desenvolvedores então devem analisar o erro para descobrir o que deu errado.

Soluções Potenciais

Pra incentivar o uso de sandboxing, pode ser útil que linguagens de programação incorporem medidas de segurança por padrão. Ao exigir que os desenvolvedores solicitem explicitamente permissões para certas ações, a pressão pra adotar práticas de segurança se torna mais significativa.

Além disso, desenvolver ferramentas que possam ajudar a monitorar aplicações em busca de permissões excessivas poderia melhorar a situação. Oferecendo insights sobre como os programas usam recursos, os desenvolvedores estariam mais inclinados a adotar mecanismos de sandboxing.

Conclusão

Embora o sandboxing seja uma parte crucial pra garantir a segurança no software, os níveis atuais de adoção nos ecossistemas de código aberto são baixos. Embora alguns pacotes empreguem mecanismos de sandboxing, muitos mais dependem de uso indireto por meio de dependências. O cenário do sandboxing varia significativamente entre diferentes sistemas operacionais e aplicações, e entender como os desenvolvedores abordam esses mecanismos será fundamental para melhorar sua adoção.

À medida que as preocupações de segurança continuam a crescer, encontrar maneiras de simplificar a implementação de sandboxing e reforçar sua importância será essencial. Através de uma melhor compreensão e suporte, podemos ajudar a criar um ambiente de software mais seguro nos ecossistemas de código aberto.

Mais de autores

Artigos semelhantes