O que é a API no modo sandbox?

O projeto da API Sandboxed (SAPI) de código aberto é criado com base no projeto de código aberto Sandbox2 do Google e busca tornar o sandbox de bibliotecas C/C++ menos trabalhoso.

A API no modo sandbox oferece três benefícios principais:

  • Em vez de colocar programas inteiros no sandbox ou ter que alterar o código-fonte para poder colocar uma parte de um programa no sandbox, como acontece com o Sandbox2, com o SAPI é possível colocar bibliotecas C/C++ no sandbox individuais. Consequentemente, com o SAPI, o programa principal fica isolado das vulnerabilidades de execução de código na biblioteca C/C++.

  • Nosso lema é: Use o sandbox uma vez, em qualquer lugar. As bibliotecas no sandbox com a API no modo sandbox podem ser facilmente reutilizadas, o que remove o trabalho de projetos futuros. Antes da API no modo sandbox, os sandboxes disponíveis para uso no Google exigiam um trabalho de implementação adicional com cada nova instância de um projeto que deveria ser colocado no sandbox, mesmo que reutilizasse a mesma biblioteca de software. As políticas do sandbox2 e outras restrições aplicadas ao processo em sandbox tinham que ser reimplementadas todas as vezes, e os mecanismos de troca de dados entre partes confiáveis e não confiáveis do código tiveram que ser projetados do zero.

  • Cada biblioteca SAPI utiliza uma política de segurança bem definida, em contraste com o projeto em sandbox típico, em que as políticas de segurança precisam cobrir o consumo total de syscall/recursos de todas as bibliotecas utilizadas.

O projeto SAPI foi projetado, desenvolvido e é mantido por membros da equipe de sandbox do Google. Ele também usa nosso Sandbox2 testado em campo. Atualmente, muitos projetos internos usam SAPI para isolar as cargas de trabalho de produção.

Início rápido

Para começar a usar a API no modo sandbox, siga estas etapas:

  1. Instale as dependências necessárias. Isso pressupõe que você esteja executando o Debian 10 Buster:
    $ echo "deb http://storage.googleapis.com/bazel-apt stable jdk1.8" | 
    sudo tee /etc/apt/sources.list.d/bazel.list $ wget -qO - https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install -qy build-essential linux-libc-dev bazel python3
    python3-pip libclang-7-dev $ pip3 install clang
  2. Clone e execute o build:
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build …
    
  3. Teste um destes exemplos:
    $ bazel run //sandboxed_api/examples/stringop:main_stringop
    

Documentação disponível

Mais informações sobre a API no modo sandbox estão disponíveis aqui:

  • API no modo sandbox explicada: descreve a API no modo sandbox (SAPI, na sigla em inglês) e seus principais conceitos.

  • Primeiros passos: fornece orientações para ajudar você a criar sua própria versão de uma API no modo sandbox SAPI.

  • Regras de compilação: explica como usar a regra de compilação sapi_library() para compilar sua biblioteca SAPI.

  • Variáveis: aborda o uso dos tipos SAPI, que são necessários ao transmitir ponteiros para tipos simples e blocos de memória.

  • Transações: explica como usar o módulo de transação SAPI para monitorar chamadas de função.

Glossário

Sandbox2 Projeto de código aberto do Google que fornece a camada de sandbox em SAPI.
Sandboxee O binário em execução no sandbox do sandbox2. Consulte a documentação do sandbox2. No contexto da SAPI, é a biblioteca C/C++ no modo sandbox.
SAPI API em sandbox, projeto de código aberto do Google que oferece a funcionalidade para criar bibliotecas no modo sandbox.
Biblioteca SAPI Biblioteca gerada pelo SAPI, contendo a biblioteca no modo sandbox, o código Sandbox2 e o código de ambiente de execução SAPI.
Objeto SAPI Objeto C++ incluído no código de host, que fornece uma interface para a biblioteca no modo sandbox usando tipos SAPI em vez dos originais.
Tipos de SAPI A SAPI fornece tipos especiais necessários ao transmitir ponteiros para tipos simples e blocos de memória.
Transação SAPI Um módulo usado para gerenciar o status do sandbox da biblioteca sandbox entre execuções.
RPC stub Stub de comunicação de Chamada de procedimento remoto (RPC) encapsulado em Sandbox2 e usado para transmitir dados entre o objeto SAPI e a biblioteca no modo sandbox.
Código do host O código que usa a biblioteca no modo sandbox e inclui o objeto SAPI.

Como contribuir para a API no modo sandbox

Se quiser contribuir, leia CONTRIBUTING.md e envie-nos solicitações de envio.Você também pode informar bugs ou enviar solicitações de recursos.

Para conversar com os desenvolvedores ou receber notificações sobre as principais atualizações do produto, junte-se ao nosso Grupo do Google: sandboxed-api-users.