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:
- 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 - Clona ed esegui la build:
$ git clone https://github.com/google/sandboxed-api && cd sandboxed-api $ bazel build …
- 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.