Définition et principes de base

Le terme software sandboxing désigne la capacité de restreindre les privilèges d’un processus de façon programmatique, sans recourir à une autorité administrative. Cette définition, formulée par Julien Tinnes et Chris Evans lors du Hack In The Box Malaysia 2009, repose sur trois critères : contrôle programmatique, absence d’intervention d’un administrateur et réduction discrétionnaire des privilèges. L’article s’appuie sur cette base pour examiner les pratiques de 2025, notamment dans le cadre du projet Emilua version 0.11, dont le code source récent illustre les concepts présentés.

Interfaces traditionnelles et leurs limites

Les systèmes UNIX offrent des mécanismes comme les permissions de fichiers ou les bits setuid/setgid. Leur utilisation directe par des programmes tiers contredit les politiques d’un administrateur, car elle permettrait à un processus de modifier les droits d’accès déjà définis. De plus, les permissions de fichiers ne correspondent pas toujours aux exigences de sécurité d’environnements virtuels, comme la protection d’un flux Twitter ou d’un service de messagerie. Les outils classiques (setuid, setgid) ne sont pas conçus pour être invoqués par les développeurs d’applications, ce qui limite leur pertinence pour le sandboxing.

Lorsque les interfaces dédiées manquent, les développeurs ont recours à des binaires suid auxiliaires pour créer des chroot jails. Cette approche nécessite des privilèges élevés, contredit le principe du moindre privilège et augmente la surface d’attaque du noyau. Le texte souligne que l’élévation temporaire de privilèges, même limitée dans le temps, reste dangereuse car elle ouvre des vecteurs d’exploitation non anticipés.

Mécanismes modernes : Capsicum, Seccomp et Landlock

Les systèmes d’exploitation modernes proposent des API spécialisées. FreeBSD intègre Capsicum, qui sépare les capacités d’un processus de son identité Unix, tandis que Linux propose Seccomp, un filtre d’appels système configurable à l’exécution. Ces deux solutions répondent aux critères de Tinnes et Evans en offrant un contrôle fin sans nécessiter de droits administratifs.

Le texte critique toutefois l’usage généralisé des namespaces Linux pour le sandboxing. Bien que Docker ait popularisé les namespaces pour l’isolation, l’auteur rappelle que dans un namespace utilisateur (CLONE_NEWUSER), le processus possède les privilèges de super‑utilisateur à l’intérieur du namespace. Andy Lutomirski a mis en garde contre le risque d’obtenir CAP_NET_ADMIN dans n’importe quel namespace réseau, ce qui permettrait à un utilisateur non privilégié de manipuler les tables iptables. Cette exposition a déjà conduit à des escalades de privilèges, confirmant que les namespaces augmentent la surface d’attaque du noyau.

En réponse, Linux développe Landlock, une interface conçue pour restreindre les capacités d’accès aux ressources sans élargir la surface d’attaque. Landlock ne dépend pas des namespaces et s’intègre directement aux politiques de sécurité du processus, offrant ainsi une alternative plus sûre pour les sandboxes logicielles.

Implications pour Emilua et bonnes pratiques

Le projet Emilua conserve le support des namespaces, mais les utilise désormais principalement pour la création d’outils de conteneurisation, pas pour le sandboxing d’applications. Pour les environnements d’exécution sécurisés, Emilua recommande l’usage combiné de Capsicum, Seccomp ou Landlock, selon la plateforme cible. Cette orientation reflète une évolution du modèle de conception : privilégier les API qui réduisent les privilèges sans introduire de nouvelles voies d’escalade.

En pratique, l’auteur conseille de limiter les appels système aux stricts besoins fonctionnels, de définir des politiques de capacité explicites et de tester les sandboxes avec des scénarios d’attaque connus. L’absence de métriques précises dans le texte souligne la difficulté de quantifier la robustesse d’une sandbox, mais la logique présentée fournit un cadre d’évaluation basé sur la réduction mesurable des privilèges et la minimisation de la surface d’attaque.