Was ist Sandboxed API?

Das Open-Source-Projekt Sandboxed API (SAPI) basiert auf dem Open-Source-Projekt Sandbox2 von Google und soll das Sandboxing von C/C++-Bibliotheken vereinfachen.

Die Sandboxed API bietet drei Hauptvorteile:

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

  • Unser Arbeitsmotto lautet: Einmal in der Sandbox testen, überall verwenden. Mit der Sandboxed API in einer Sandbox ausgeführte Bibliotheken lassen sich problemlos wiederverwenden, was den Aufwand für zukünftige Projekte verringert. Vor der Sandboxed API erforderte die Verwendung von Sandboxes bei Google zusätzlichen Implementierungsaufwand für jede neue Instanz eines Projekts, das in einer Sandbox ausgeführt werden sollte, auch wenn dieselbe Softwarebibliothek verwendet wurde. Sandbox2-Richtlinien und andere Einschränkungen, die auf den Sandbox-Prozess angewendet wurden, mussten jedes Mal neu implementiert werden. Außerdem mussten Mechanismen für den Datenaustausch zwischen vertrauenswürdigen und nicht vertrauenswürdigen Teilen des Codes von Grund auf neu entwickelt werden.

  • Jede SAPI-Bibliothek verwendet eine genau definierte Sicherheitsrichtlinie. Im Gegensatz dazu müssen Sicherheitsrichtlinien in einem typischen Sandbox-Projekt den gesamten Syscall-/Ressourcen-Footprint aller verwendeten Bibliotheken abdecken.

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

Schnellstart

So können Sie die Sandboxed API verwenden:

  1. Installieren Sie die erforderlichen Abhängigkeiten (dabei wird davon ausgegangen, dass Sie Debian 10 Buster verwenden):
    $ 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. Probieren Sie eines der Beispiele aus:
    $ bazel run //sandboxed_api/examples/stringop:main_stringop

Verfügbare Dokumentation

Weitere Informationen zur Sandboxed API finden Sie hier:

  • Sandboxed API Explained: Beschreibt die Sandboxed API (SAPI) und ihre Kernkonzepte.

  • Erste Schritte: Hier finden Sie eine Anleitung zum Erstellen einer eigenen SAPI-Sandbox-Version einer API.

  • Build Rules: Hier wird beschrieben, wie Sie die Build-Regel sapi_library() verwenden, um Ihre SAPI-Bibliothek zu erstellen.

  • Variablen: Hier wird die Verwendung von SAPI-Typen erläutert, die erforderlich sind, wenn Zeiger an einfache Typen und Speicherblöcke übergeben werden.

  • Transaktionen: Hier wird beschrieben, wie Sie das SAPI-Transaktionsmodul verwenden, um Funktionsaufrufe zu überwachen.

Glossar

Sandbox2 Open-Source-Projekt von Google, das die Sandbox-Ebene in SAPI bereitstellt.
Sandboxee Das Binärprogramm, das in der Sandbox2-Sandbox ausgeführt wird. Weitere Informationen finden Sie in der Sandbox2-Dokumentation. Im Kontext von SAPI ist dies die Sandbox-C/C++-Bibliothek.
SAPI Sandboxed API: Open-Source-Projekt von Google, das die Funktionalität zum Erstellen von Sandboxed Libraries bietet.
SAPI-Bibliothek Von SAPI generierte Bibliothek, die die Sandboxed Library, Sandbox2-Code und SAPI-Laufzeitcode enthält.
SAPI-Objekt C++-Objekt, das im Hostcode enthalten ist und eine Schnittstelle zur Sandboxed Library mit SAPI-Typen anstelle der ursprünglichen Typen bietet.
SAPI-Typen SAPI bietet spezielle Typen, die beim Übergeben von Zeigern an einfache Typen und Speicherblöcke erforderlich sind.
SAPI-Transaktion Ein Modul, das verwendet wird, um den Sandbox-Status der Sandboxed Library zwischen den Ausführungen zu verwalten.
RPC-Stub RPC-Kommunikations-Stub (Remote Procedure Call), der in Sandbox2 eingebunden ist und zum Übergeben von Daten zwischen dem SAPI-Objekt und der Sandboxed Library verwendet wird.
Host-Code Der Code, der die Sandboxed Library verwendet und das SAPI-Objekt enthält.

Beiträge 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 Fehler melden oder Funktionsanfragen einreichen.

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