Qu'est-ce que l'API Sandboxed ?

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

L'API bac à sable offre trois principaux avantages :

  • Contrairement à Sandbox2, qui nécessite de mettre en bac à sable des programmes entiers ou de modifier le code source pour pouvoir mettre en bac à sable une partie d'un programme, SAPI vous permet de mettre en bac à sable 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 : Testez une fois, utilisez partout. Les bibliothèques mises en bac à sable avec l'API Sandboxed peuvent être facilement réutilisées, ce qui allège la charge des futurs projets. Avant l'API bac à sable, les bacs à sable disponibles pour une utilisation chez Google nécessitaient un travail d'implémentation supplémentaire pour chaque nouvelle instance d'un projet destiné à être mis en bac à sable, même s'il réutilisait la même bibliothèque logicielle. Les règles Sandbox2 et les autres restrictions appliquées au processus en bac à sable devaient être réimplémentées à chaque fois, et 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é bien définie, contrairement au projet sandbox typique, où les stratégies de sécurité doivent couvrir l'empreinte totale des appels système/ressources de toutes les bibliothèques utilisées.

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

Démarrage rapide

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

  1. Installez les dépendances requises (en supposant 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 version :
    $ 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

Pour en savoir plus sur l'API bac à sable, consultez cette page :

  • Présentation de l'API Sandboxed : décrit l'API Sandboxed (SAPI) et ses concepts de base.

  • Premiers pas : fournit des conseils pour vous aider à créer votre propre version bac à sable SAPI d'une API.

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

  • Variables : explique l'utilisation des types SAPI nécessaires lorsque vous transmettez des pointeurs à des types simples et à des blocs de mémoire.

  • Transactions : explique comment utiliser le module de transaction SAPI pour surveiller les appels de fonction.

Glossaire

Sandbox2 Projet Open Source de Google qui fournit la couche de bac à sable dans SAPI.
Sandboxee Binaire exécuté dans le bac à sable Sandbox2. Pour en savoir plus, consultez la documentation Sandbox2. Dans le contexte de SAPI, il s'agit de la bibliothèque C/C++ sandboxée.
SAPI API Sandboxed, projet Open Source Google qui permet de créer des bibliothèques Sandboxed.
Bibliothèque SAPI Bibliothèque générée par SAPI, contenant la bibliothèque en bac à sable, le code Sandbox2 et le code d'exécution SAPI.
Objet SAPI Objet C++, inclus dans le code hôte, qui fournit une interface à la bibliothèque sandboxée à l'aide des types SAPI au lieu des types d'origine.
Types de SAPI SAPI fournit des types spéciaux nécessaires lors du transfert de pointeurs vers 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 mise en bac à sable entre les exécutions.
Stub RPC Stub de communication d'appel de procédure à distance (RPC) encapsulé dans Sandbox2 et utilisé pour transmettre des données entre l'objet SAPI et la bibliothèque en bac à sable.
Code de l'organisateur Code qui utilise la bibliothèque sandboxée et inclut l'objet SAPI.

Contribuer à l'API Sandboxed

Si vous souhaitez contribuer, veuillez lire CONTRIBUTING.md et nous envoyer des requêtes de tirage.Vous pouvez également signaler des bugs ou déposer des demandes de fonctionnalités.

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