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 complesso il sandboxing delle librerie C/C++.

L'API Sandboxed offre tre vantaggi principali:

  • Invece di limitare la sandbox di interi programmi o dover modificare il codice sorgente per poter eseguire la sandbox di una parte di un programma come con Sandbox2, con SAPI è possibile 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 al lavoro è: Sandbox una volta, usa ovunque Le librerie con sandbox tramite API sandbox possono essere facilmente riutilizzate, eliminando così il carico di lavoro per i progetti futuri. Prima dell'API con sandbox, le sandbox disponibili per l'uso da parte di Google richiedevano un'ulteriore implementazione per ogni nuova istanza di un progetto che doveva essere limitato tramite sandbox, anche se riutilizzava la stessa libreria software. I criteri di Sandbox2 e altre limitazioni applicate al processo con sandbox dovevano essere reimplementati 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 criteri di sicurezza rigorosamente definiti, a differenza del tipico progetto con sandbox, in cui i criteri di sicurezza devono coprire l'utilizzo totale di chiamate di sistema/risorse di tutte le librerie utilizzate.

Il progetto SAPI è stato progettato, sviluppato e gestito dai membri del team Google Sandbox. Inoltre, utilizza la funzionalità 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 Sandboxed, segui questi passaggi:

  1. Installa le dipendenze richieste (supponendo che tu stia utilizzando 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

Ulteriori informazioni sull'API Sandboxed sono disponibili qui:

  • Spiegazione dell'API Sandboxed: descrive l'API Sandboxed (SAPI) e i relativi concetti principali.

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

  • Regole di build: spiega come utilizzare la regola di build sapi_library() per creare la tua libreria SAPI.

  • Variabili: illustra l'utilizzo dei tipi SAPI necessari per il passaggio di puntatori a tipi e blocchi di memoria semplici.

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

Glossario

Sandbox2 Progetto open source di Google che fornisce il livello di sandboxing in SAPI.
Sandbox 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.
SAPI API con sandbox, progetto open source di Google che fornisce la funzionalità per creare librerie con sandbox.
Libreria SAPI Libreria generata da SAPI, contenente il codice Sandboxed Library, il codice Sandbox2 e il codice di runtime SAPI.
Oggetto SAPI C++, incluso nel codice host, che fornisce un'interfaccia alla libreria con sandbox utilizzando tipi SAPI anziché quelli originali.
Tipi SAPI SAPI fornisce tipi speciali necessari per il passaggio dei 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 RPC (Remote Procedure Call, chiamata di procedura remota) aggregato in Sandbox2 e utilizzato per passare i dati tra l'oggetto SAPI e la libreria con sandbox.
Codice host Il codice che utilizza la libreria con sandbox e include l'oggetto SAPI.

Contributo all'API Sandboxed

Se vuoi dare il tuo contributo, 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 dei prodotti, ti consigliamo di iscriverti al nostro gruppo Google: sandboxed-api-users.