O que é a API no modo sandbox?

O projeto de API no modo sandbox de código aberto (SAPI) é baseado no projeto de código aberto Sandbox2 do Google e tem como objetivo facilitar o uso de sandbox em bibliotecas C/C++.

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

  • Em vez de colocar programas inteiros em sandbox ou ter que mudar o código-fonte para colocar uma parte de um programa em sandbox, como no Sandbox2, com a SAPI você pode colocar bibliotecas individuais de C/C++ em sandbox. Como resultado, com a SAPI, o programa principal fica isolado de vulnerabilidades de execução de código na biblioteca C/C++.

  • Nosso lema de trabalho é: Crie um sandbox uma vez, use em qualquer lugar. As bibliotecas em sandbox com a API Sandboxed podem ser reutilizadas com facilidade, o que elimina a necessidade de projetos futuros. Antes da API Sandboxed, as caixas de isolamento disponíveis para uso no Google exigiam trabalho de implementação adicional com cada nova instância de um projeto que deveria ser isolado, mesmo que reutilizasse a mesma biblioteca de software. As políticas do Sandbox2 e outras restrições aplicadas ao processo em sandbox precisavam ser reimplementadas a cada vez, e os mecanismos de troca de dados entre partes confiáveis e não confiáveis do código precisavam ser projetados do zero.

  • Cada biblioteca SAPI usa uma política de segurança bem definida, ao contrário do projeto em sandbox típico, em que as políticas de segurança precisam cobrir a pegada total de syscall/recurso de todas as bibliotecas usadas.

O projeto SAPI foi projetado, desenvolvido e é mantido por membros da equipe do Google Sandbox. Ele também usa o Sandbox2, que já foi testado em campo. Atualmente, muitos projetos internos estão usando a SAPI para isolar as cargas de trabalho de produção.

Início rápido

Para começar a usar a API Sandboxed, siga estas etapas:

  1. Instale as dependências necessárias (isso pressupõe que você está 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 a build:
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build 
  3. Teste um dos exemplos:
    $ bazel run //sandboxed_api/examples/stringop:main_stringop

Documentação disponível

Saiba mais sobre a API em sandbox:

  • Explicação da API em sandbox: descreve a API em sandbox (SAPI) e os principais conceitos dela.

  • Começar: fornece orientações para criar sua própria versão em sandbox da SAPI de uma API.

  • Build Rules: explica como usar a regra de build sapi_library() para criar sua biblioteca SAPI.

  • Variáveis: discute o uso de 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ções da SAPI para monitorar chamadas de função.

Glossário

Sandbox2 Projeto de código aberto do Google que fornece a camada de sandbox na SAPI.
Sandboxee O binário em execução no sandbox do Sandbox2. Consulte a documentação do Sandbox2. No contexto da SAPI, essa é a biblioteca C/C++ em sandbox.
SAPI API no modo sandbox, projeto de código aberto do Google que oferece a funcionalidade para criar bibliotecas no modo sandbox.
Biblioteca SAPI Biblioteca gerada pela SAPI, que contém a biblioteca em sandbox, o código do Sandbox2 e o código de tempo de execução da SAPI.
Objeto SAPI Objeto C++, incluído no código do host, que fornece uma interface para a biblioteca em 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 da SAPI Um módulo usado para gerenciar o status do sandbox da biblioteca em sandbox entre execuções.
Stub RPC Stub de comunicação de chamada de procedimento remoto (RPC) encapsulado no Sandbox2 e usado para transmitir dados entre o objeto SAPI e a biblioteca em sandbox.
Código do host O código que usa a biblioteca em sandbox e inclui o objeto SAPI.

Contribuir com a API Sandboxed

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

Se você quiser conversar com os desenvolvedores ou receber notificações sobre atualizações importantes do produto, participe do nosso grupo do Google: sandboxed-api-users.