Qu'est-ce que l'API Sandboxed ?

Le projet Open Source d'API Sandboxed (SAPI) s'appuie sur le projet Open Source Sandbox2 de Google et vise à faciliter le bac à sable des bibliothèques C/C++.

L'API en bac à sable offre trois avantages principaux:

  • Au lieu de créer un bac à sable pour des programmes entiers ou de devoir modifier le code source pour pouvoir utiliser le bac à sable d'une partie d'un programme, comme avec Sandbox2, SAPI vous permet de créer un bac à sable pour des bibliothèques C/C++ individuelles. Par conséquent, avec SAPI, le programme principal est isolé des failles d'exécution de code dans la bibliothèque C/C++.

  • Notre devise est la suivante: utiliser le bac à sable une fois pour toutes. Les bibliothèques en bac à sable avec l'API en bac à sable peuvent être facilement réutilisées, ce qui évite de compliquer les projets futurs. Avant l'API Sandbox, les bacs à sable disponibles chez Google nécessitaient des travaux d'implémentation supplémentaires pour chaque nouvelle instance d'un projet destiné à être exécuté en bac à sable, même si la même bibliothèque logicielle était réutilisée. Les règles Sandbox2 et les autres restrictions appliquées au processus en bac à sable devaient être réimplémentées à chaque fois. De plus, les mécanismes d'échange de données entre les parties fiables et non fiables du code devaient être conçus à partir de zéro.

  • Chaque bibliothèque SAPI utilise une stratégie de sécurité très définie, contrairement à un projet classique en bac à sable, où les règles de sécurité doivent couvrir l'empreinte totale des appels système/des ressources de toutes les bibliothèques utilisées.

Le projet SAPI a été conçu, développé et géré par les membres de l'équipe Google Sandbox. Il utilise également notre Sandbox2 testé sur le terrain. Actuellement, de nombreux projets internes utilisent SAPI pour isoler leurs charges de travail de production.

Quick Start

Pour commencer à utiliser l'API Sandboxed, procédez comme suit:

  1. Installez les dépendances requises (cela suppose que vous exécutez 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. Clonez et exécutez la compilation :
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build …
    
  3. Essayez l'un des exemples :
    $ bazel run //sandboxed_api/examples/stringop:main_stringop
    

Documentation disponible

Vous trouverez plus d'informations sur l'API Sandboxed ici:

  • Présentation de l'API en bac à sable : décrit l'API en bac à sable (SAPI) et ses concepts fondamentaux.

  • Getting Started : fournit des conseils pour vous aider à créer votre propre version d'une API en bac à sable.

  • Build Rules (Règles de compilation) : explique comment utiliser la règle de compilation sapi_library() pour compiler votre bibliothèque SAPI.

  • Variables : décrit l'utilisation des types SAPI nécessaires lors de la transmission de pointeurs vers des types simples et des blocs de mémoire.

  • Transactions : explique comment surveiller les appels de fonction à l'aide du module "Transaction" de l'API SAPI.

Glossaire

Sandbox2 Projet Open Source de Google qui fournit la couche de bac à sable dans SAPI.
Jeu bac à sable Pour connaître le binaire s'exécutant dans le bac à sable Sandbox2, consultez la documentation correspondante. Dans le contexte de SAPI, il s'agit de la bibliothèque C/C++ en bac à sable.
API SAPI API de bac à sable, projet Open Source de Google permettant de créer des bibliothèques en bac à sable.
Bibliothèque SAPI Bibliothèque générée par SAPI, contenant une bibliothèque en bac à sable, du code Sandbox2 et le code d'exécution SAPI.
Objet SAPI Objet C++ inclus dans le code hôte, fournissant une interface à la bibliothèque en bac à sable à l'aide de types SAPI au lieu des types d'origine.
Types de SAPI SAPI fournit des types spéciaux nécessaires lors de la transmission de pointeurs à des types simples et des blocs de mémoire.
Transaction SAPI Module utilisé pour gérer l'état du bac à sable de la bibliothèque en bac à sable entre les exécutions.
Souche RPC Bouchon de communication RPC (Remote Procedure Call) encapsulé dans Sandbox2 et utilisé pour transmettre des données entre l'objet SAPI et la bibliothèque en bac à sable.
Code de l'hôte Le code qui utilise la bibliothèque en bac à sable et inclut l'objet SAPI.

Contribuer à l'API Sandboxed

Si vous souhaitez contribuer, veuillez lire le fichier CONTRIBUTING.md et nous envoyer des demandes d'extraction.Vous pouvez également signaler des bugs ou envoyer des demandes de fonctionnalités.

Si vous souhaitez échanger avec les développeurs ou être informé des mises à jour importantes du produit, vous pouvez rejoindre notre groupe Google : sandboxed-api-users.