Was ist Sandboxed API?

Das Open-Source-Projekt Sandboxed API (SAPI) baut auf dem Open-Source-Projekt Sandbox2 von Google auf. Ziel ist es, das Sandboxing von C/C++-Bibliotheken einfacher zu gestalten.

Die Sandbox-API bietet drei Hauptvorteile:

  • Anstatt ganze Programme in einer Sandbox auszuführen oder Quellcode ändern zu müssen, um einen Teil eines Programms wie bei Sandbox2 in einer Sandbox auszuführen, können Sie mit SAPI einzelne C/C++-Bibliotheken in einer Sandbox ausführen. Daher ist das Hauptprogramm mit SAPI von den Sicherheitslücken bei der Codeausführung in der C/C++-Bibliothek isoliert.

  • Unser Motto lautet: Sandbox Einmal, überall verwenden. Bibliotheken, die mit einer Sandbox API in einer Sandbox ausgeführt werden, können problemlos wiederverwendet werden, wodurch zukünftige Projekte nicht so entlastet werden. Vor der in einer Sandbox eingesetzten API waren bei Google verfügbare Sandboxes mit jeder neuen Instanz eines Projekts, die in einer Sandbox ausgeführt werden sollte, zusätzliche Implementierungsschritte erforderlich, selbst wenn dieselbe Softwarebibliothek wiederverwendet wurde. Sandbox2-Richtlinien und andere Einschränkungen, die für den Sandbox-Prozess gelten, mussten jedes Mal neu implementiert werden und Datenaustauschmechanismen zwischen vertrauenswürdigen und nicht vertrauenswürdigen Teilen des Codes mussten von Grund auf neu entwickelt werden.

  • Jede SAPI-Bibliothek verwendet eine eng definierte Sicherheitsrichtlinie, im Gegensatz zu einem typischen Sandbox-Projekt, bei dem Sicherheitsrichtlinien den gesamten Systemaufruf/Ressourcenbedarf aller verwendeten Bibliotheken abdecken müssen.

Das SAPI-Projekt wurde von Mitgliedern des Google Sandbox-Teams entworfen, entwickelt und verwaltet. Außerdem wird unsere erprobte Sandbox2 verwendet. Derzeit verwenden viele interne Projekte SAPI, um ihre Produktionsarbeitslasten zu isolieren.

Schnellstart

Führen Sie die folgenden Schritte aus, um die Sandboxed API einzurichten:

  1. Installieren Sie die erforderlichen Abhängigkeiten (dabei wird davon ausgegangen, dass Sie Debian 10 Buster ausführen):
    $ 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. Klonen Sie den Build und führen Sie ihn aus:
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build …
    
  3. Probiere eines der Beispiele aus:
    $ bazel run //sandboxed_api/examples/stringop:main_stringop
    

Verfügbare Dokumentation

Weitere Informationen zur Sandboxed API finden Sie hier:

  • Erläuterung der Sandbox-API – Beschreibt die Sandboxed API (SAPI) und ihre Kernkonzepte.

  • Erste Schritte – Hier erfahren Sie, wie Sie Ihre eigene SAPI-Sandbox-Version einer API erstellen.

  • Build-Regeln: Hier erfahren Sie, wie Sie mit der Build-Regel „sapi_library()“ Ihre SAPI-Bibliothek erstellen.

  • Variablen: Erläutert die Verwendung von SAPI-Typen, die für die Übergabe von Zeigern auf einfache Typen und Speicherblöcke erforderlich sind.

  • Transaktionen: Erläutert die Verwendung des SAPI-Transaktionsmoduls zum Überwachen von Funktionsaufrufen.

Glossar

Sandbox2 Open-Source-Projekt von Google, das die Sandboxing-Ebene in SAPI bereitstellt.
Sandboxee Das Binärprogramm, das in der Sandbox2-Sandbox ausgeführt wird, findest du in der Sandbox2-Dokumentation. Im Kontext von SAPI ist dies die in einer Sandbox ausgeführte C/C++-Bibliothek.
Logo: SAPI Sandboxed API, ein Open-Source-Projekt von Google, das Funktionen zum Erstellen von Sandboxed Libraries bietet.
SAPI-Bibliothek Von der SAPI generierte Bibliothek, die die Sandbox-Bibliothek, den Sandbox2-Code und den SAPI-Laufzeitcode enthält.
SAPI-Objekt C++-Objekt, das im Hostcode enthalten ist und eine Schnittstelle zur Bibliothek mit Sandbox-Funktionen unter Verwendung von SAPI-Typen anstelle der ursprünglichen Typen bietet.
SAPI-Typen SAPI bietet spezielle Typen, die für die Weitergabe von Zeigern an einfache Typen und Speicherblöcke erforderlich sind.
SAPI-Transaktion Ein Modul zum Verwalten des Sandbox-Status der Sandbox-Bibliothek zwischen den Ausführungen.
RPC-Stub RPC-Kommunikations-Stub (Remote Procedure Call), der in Sandbox2 verpackt ist und zur Übertragung von Daten zwischen dem SAPI-Objekt und der Sandboxed Library verwendet wird.
Hostcode Der Code, der die Sandboxed Library verwendet und das SAPI-Objekt enthält.

Beitrag zur Sandboxed API

Wenn Sie einen Beitrag leisten möchten, lesen Sie bitte CONTRIBUTING.md und senden Sie uns Pull-Anfragen.Sie können auch Programmfehler melden oder Funktionsanfragen stellen.

Wenn Sie mit den Entwicklern sprechen oder über wichtige Produktupdates informiert werden möchten, können Sie unserer Google-Gruppe sandboxed-api-users beitreten.