Il progetto open source dell'API Sandboxed (SAPI) si basa sul progetto open source Sandbox2 di Google e mira a rendere meno gravosa la limitazione tramite sandbox delle librerie C/C++.
L'API Sandbox offre tre vantaggi principali:
Anziché sabbierare interi programmi o dover modificare il codice sorgente per poter eseguire il sandbox di una parte di un programma come con Sandbox2, con SAPI puoi eseguire la sandbox di singole librerie C/C++. Di conseguenza, con SAPI il programma principale viene isolato dalle vulnerabilità di esecuzione del codice nella libreria C/C++.
Il nostro motto è: Sandbox una volta, da usare ovunque. Le librerie con sandbox con l'API sandbox possono essere riutilizzate facilmente, eliminando il carico di lavoro per i progetti futuri. Prima dell'API sandbox, le sandbox disponibili per l'uso presso Google richiedevano un ulteriore lavoro di implementazione con ogni nuova istanza di un progetto che avrebbe dovuto essere sandbox, anche se riutilizzava la stessa libreria software. I criteri Sandbox2 e altre limitazioni applicati al processo con sandbox dovevano essere implementati nuovamente ogni volta e i meccanismi di scambio di dati tra parti attendibili e non attendibili del codice dovevano essere progettati da zero.
Ogni libreria SAPI utilizza un criterio di sicurezza strettamente definito, in contrasto con il tipico progetto con sandbox, in cui i criteri di sicurezza devono coprire l'impatto totale di chiamate di sistema/risorse di tutte le librerie utilizzate.
Il progetto SAPI è stato progettato, sviluppato e gestito dai membri del team di Google Sandbox. Inoltre, utilizza Sandbox2, testato sul campo. Attualmente, molti progetti interni utilizzano SAPI per isolare i carichi di lavoro di produzione.
Guida rapida
Per iniziare a utilizzare l'API Sandboxed, segui questi passaggi:
- Installa le dipendenze obbligatorie (si presume 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
Ulteriori informazioni sull'API Sandbox sono disponibili qui:
Descrizione dell'API Sandboxed: descrive l'API Sandboxed (SAPI) e i suoi concetti principali.
Guida introduttiva: fornisce indicazioni utili per creare la propria versione con sandbox di un'API SAPI.
Regole di compilazione: spiega come utilizzare la regola di compilazione sapi_library() per creare la libreria SAPI.
Variabili: illustra l'utilizzo dei tipi SAPI che sono necessari per passare i puntatori a tipi semplici e blocchi di memoria.
Transazioni: spiega come utilizzare il modulo Transazione SAPI per monitorare le chiamate alle funzioni.
Glossario
Sandbox2 | Progetto open source di Google che fornisce il livello di sandbox in SAPI. |
Sandboxo | Il programma binario in esecuzione nella sandbox di Sandbox2, consulta la documentazione di Sandbox2. Nel contesto di SAPI, si tratta della libreria C/C++ con sandbox. |
API | API Sandboxed, progetto open source di Google che offre le funzionalità per creare librerie sandbox. |
Libreria SAPI | Libreria generata da SAPI, contenente la libreria sandbox, il codice Sandbox2 e il codice di runtime SAPI. |
Oggetto SAPI | Oggetto C++ incluso nel codice host, che fornisce un'interfaccia per la libreria con sandbox tramite i tipi SAPI anziché quelli originali. |
Tipi API | SAPI fornisce tipi speciali necessari quando si passano i puntatori a tipi semplici e blocchi di memoria. |
Transazione SAPI | Un modulo utilizzato per gestire lo stato della sandbox della libreria con sandbox tra le esecuzioni. |
Stub RPC | stub di comunicazione Remote Procedure Call (RPC) aggregato in Sandbox2 e utilizzato per passare dati tra SAPI Object e Sandboxed Library. |
Codice host | Il codice che utilizza la libreria con sandbox e include l'oggetto SAPI. |
Contributo all'API Sandboxed
Se vuoi contribuire, leggi CONTRIBUTING.md e inviaci richieste di pull.Puoi anche segnalare bug o inviare richieste di funzionalità.
Se vuoi parlare con gli sviluppatori o ricevere notifiche sui principali aggiornamenti di prodotto, ti consigliamo di iscriverti al nostro gruppo Google: sandboxed-api-users.