Che cos'è l'API Sandboxed?

Il progetto open source Sandboxed API (SAPI) si basa sul progetto open source Sandbox2 di Google e mira a rendere meno gravosa la creazione di sandbox per le librerie C/C++.

L'API Sandbox offre tre vantaggi principali:

  • Invece di eseguire il sandboxing di interi programmi o dover modificare il codice sorgente per poter eseguire il sandboxing di una parte di un programma come con Sandbox2, con SAPI puoi eseguire il sandboxing di singole librerie C/C++. Di conseguenza, con SAPI il programma principale è isolato dalle vulnerabilità di esecuzione del codice nella libreria C/C++.

  • Il nostro motto è: Sandbox once, use anywhere (Sandbox una volta, usa ovunque). Le librerie sottoposte a sandbox con l'API Sandboxed possono essere riutilizzate facilmente, il che elimina l'onere per i progetti futuri. Prima dell'API Sandboxed, le sandbox disponibili per l'uso in Google richiedevano un lavoro di implementazione aggiuntivo con ogni nuova istanza di un progetto che doveva essere sottoposto a sandbox, anche se riutilizzava la stessa libreria software. Le norme Sandbox2 e altre limitazioni applicate al processo in sandbox dovevano essere implementate ogni volta e i meccanismi di scambio di dati tra le parti attendibili e non attendibili del codice dovevano essere progettati da zero.

  • Ogni libreria SAPI utilizza una policy di sicurezza definita in modo rigoroso, a differenza del tipico progetto in sandbox, in cui le policy di sicurezza devono coprire l'impronta totale di syscall/risorse di tutte le librerie utilizzate.

Il progetto SAPI è stato progettato, sviluppato e viene gestito dai membri del team Google Sandbox. Utilizza anche la nostra Sandbox2, testata sul campo. Attualmente, molti progetti interni utilizzano SAPI per isolare i carichi di lavoro di produzione.

Avvio rapido

Per iniziare a utilizzare l'API in sandbox, segui questi passaggi:

  1. Installa le dipendenze richieste (presupponendo che tu stia eseguendo 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. Clona ed esegui la build:
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build 
  3. Prova uno degli esempi:
    $ bazel run //sandboxed_api/examples/stringop:main_stringop

Documentazione disponibile

Per ulteriori informazioni sull'API in sandbox, visita questa pagina:

  • Spiegazione dell'API Sandboxed: descrive l'API Sandboxed (SAPI) e i suoi concetti di base.

  • Guida introduttiva: fornisce indicazioni per aiutarti a creare la tua versione sandbox SAPI di un'API.

  • Build Rules: spiega come utilizzare la regola di compilazione sapi_library() per creare la libreria SAPI.

  • Variabili: descrive l'utilizzo dei tipi SAPI necessari quando si passano puntatori a tipi semplici e blocchi di memoria.

  • Transazioni: spiega come utilizzare il modulo Transazione SAPI per monitorare le chiamate di funzioni.

Glossario

Sandbox2 Progetto open source di Google che fornisce il livello di sandboxing in SAPI.
Sandboxee Il binario in esecuzione nella sandbox Sandbox2, consulta la documentazione di Sandbox2. Nel contesto di SAPI, si tratta della libreria C/C++ in sandbox.
SAPI API Sandbox, progetto open source di Google che fornisce la funzionalità per creare librerie sandbox.
Libreria SAPI Libreria generata da SAPI, contenente la libreria in sandbox, il codice Sandbox2 e il codice di runtime SAPI.
Oggetto SAPI Oggetto C++, incluso nel codice host, che fornisce un'interfaccia alla libreria in sandbox utilizzando i tipi SAPI anziché quelli originali.
Tipi di SAPI SAPI fornisce tipi speciali necessari quando si passano puntatori a tipi semplici e blocchi di memoria.
SAPI Transaction Un modulo utilizzato per gestire lo stato della sandbox della libreria isolata tra le esecuzioni.
Stub RPC Stub di comunicazione RPC (Remote Procedure Call) incluso in Sandbox2 e utilizzato per trasferire dati tra l'oggetto SAPI e la libreria in sandbox.
Codice host Il codice che utilizza la libreria in sandbox e include l'oggetto SAPI.

Contribuire all'API Sandboxed

Se vuoi contribuire, leggi CONTRIBUTING.md e inviaci richieste di pull.Puoi anche segnalare bug o richiedere funzionalità.

Se vuoi parlare con gli sviluppatori o ricevere notifiche sugli aggiornamenti principali del prodotto, ti consigliamo di unirti al nostro gruppo Google: sandboxed-api-users.