Quelle est la meilleure façon de mettre en sandbox une application X comme Firefox ou Thunderbird dans Ubuntu (en allant dans le sens de ce que qubes os fait, mais uniquement pour des applications uniques)?
Je sais qu'il existe de nombreuses technologies différentes de sandboxing. Par exemple
Juste en utilisant une boîte virtuelle: Cela semble être très sécurisé mais une surexploitation des ressources. Vous auriez besoin d'un système d'exploitation minimal dans VirtualBox juste pour exécuter Firefox.
Utilisation de la technologie SE-Linux sandbox . Cela semble être la meilleure option mais pour autant que je sache, SElinux est disponible dans Ubuntu mais pas très bien configuré par défaut (contrairement par exemple à RedHat-linux). De plus, la partie sandbox de SELinux semble manquante: https://unix.stackexchange.com/questions/67127/how-do-i-install-selinuxs-sandbox-utility-on-linux-mint-debian -edition? lq = 1 donc il faudrait le compiler.
Le équivalent apparmor ne semble pas être prêt pour la production et n'est actuellement pas livré avec ubuntu pour autant que je sache. Cependant, je ne peux pas estimer l'état de développement et si cela vaut la peine d'attendre la prochaine version d'ubuntu où elle en fera probablement partie.
Le bureau gnome semble prendre en charge X-sandboxing . Il n'est pas clair pour moi si l'on peut l'utiliser de manière indépendante de wm.
L'outil lightweigt mbox semble fonctionner uniquement au niveau du système de fichiers, ce qui ne serait pas suffisant pour les applications X.
Il en va de même pour les solutions chroot auto-fabriquées comme par exemple le sandfox-script .
Une option plus légère et plus sûre que chroot semble être Plash . Mais je ne sais pas dans quelle mesure la protection X est mise en œuvre.
Il existe également un programme appelé arkose qui semble être bien pris en charge pour Ubuntu, mais en même temps, il y a très peu de documentation sur son fonctionnement et je n'ai aucune idée de sa sécurité par rapport à d'autres approches. .
Docker semble être fait davantage pour les applications serveur que pour les applications de bureau. Je ne vois pas s'il est sécurisé pour les applications X. Il existe un nouveau projet appelé kagome qui semble combiner Docker avec xephyr pour l'isolement X. Mais l'auteur note que docker a quelques failles de sécurité et qu'il pourrait être préférable de passer à une autre solution de conteneur telle que systemd-nspawn, rkt ou lxd.
D'autres solutions sont: seccomp-nurse , Rainbow , vagrantup
Enfin surtout pour firefox il y a un profil apparmor pour ubuntu mais qui est non activé par défaut . Ce n'est pas un bac à sable mais devrait vous donner un certain niveau de sécurité lors de l'utilisation de Firefox (mais je ne sais pas comment il se compare aux solutions de bac à sable ci-dessus).
Il semble donc qu'il existe de nombreuses approches, mais je ne sais pas comment (et pourquoi) celles-ci se comparent en termes de sécurité pour le sandboxing [~ # ~] x [~ # ~] - des applications comme Firefox ou Thunderbird, en termes de convivialité, en particulier dans Ubuntu-Linux et qui sont prêtes pour la production et bien prises en charge. Serait gênant que quelqu'un puisse donner quelques détails à ce sujet, comment les classer et lesquels d'entre eux mériteraient que j'examine de plus près mon objectif.
Vous pouvez utiliser subuser pour mettre en sandbox une application à l'aide de Docker. Supposons que vous vouliez mettre en sandbox Firefox:
Vous créez un dossier my-subuser-images
puis créez un deuxième dossier firefox
dans le premier:
my-subuser-images/firefox
Dans le dossier firefox
, vous devez créer un autre sous-dossier: docker-image
Une fois que vous avez fait cela, vous devez créer deux fichiers:
permissions.json
Et
docker-image/SubuserImagefile
La disposition de votre fichier devrait ressembler à celle trouvée dans le subuser-default-repository
Dans le permissions.json
fichier, vous dites au sous-utilisateur ce que Firefox est autorisé à faire:
{"description":"A popular web browser."
,"maintainer":"student"
,"executable":"/usr/bin/firefox"
,"gui":{"clipboard":true}
,"sound-card":true
,"allow-network-access":true
,"basic-common-permissions":true}
Voici un aperçu des autorisations que je viens de définir:
Cependant, il ne permet PAS à Firefox d'accéder à des fichiers en dehors de son propre sous-utilisateur. Vous pouvez ajouter un user-dirs
autorisation de lui permettre d'accéder au répertoire Téléchargements, par exemple, si vous le souhaitez.
Une fois que vous avez créé un permissions.json
, vous pouvez créer un SubuserImagefile
.
Le docker-image/SubuserImagefile
devrait ressembler à un Dockerfile
:
FROM ubuntu
RUN apt-get update && apt-get upgrade -y && apt-get install -yq firefox
Vous avez maintenant terminé la configuration de votre image de sous-utilisateur.
Vous pouvez créer un sous-utilisateur firefox en exécutant:
$ subuser subuser add firefox firefox@/home/student/my-subuser-images
Vous pouvez exécuter le sous-utilisateur firefox en exécutant:
$ subuser run firefox
Vous pouvez créer plusieurs sous-utilisateurs firefox. Ceci est utile si vous souhaitez avoir plus d'un compte Facebook ou Google et ne pas avoir à vous déconnecter/vous connecter tout le temps. Il est également utile si vous souhaitez réduire le risque de scriptage intersite lorsque vous effectuez des opérations bancaires par Internet.
subuser subuser add internet-banking firefox@/home/student/my-subuser-images
Vous pouvez exécuter votre sous-utilisateur Internet-Banking avec la commande
subuser run internet-banking
Vous pouvez accéder au répertoire personnel d'un sous-utilisateur en visitant ~/.subuser/homes
.
Voici une capture d'écran de Firefox fonctionnant sur mon système avec la configuration démontrée:
Notez que malgré le fait que j'utilise Debian, c'est la version Ubuntu de Firefox qui est installée!
Vous pouvez partager vos images de sous-utilisateur avec d'autres, afin de réduire la charge des applications de sandbox pour tout le monde. Si vous souhaitez partager votre image Firefox, vous pouvez cd vers my-subuser-images
et transformer ce dossier en un dépôt git:
$ cd ~/my-subuser-images
$ git init
$ git add .
$ git commit -m "Add Firefox image"
Si vous poussez ensuite ce dépôt git quelque part, d'autres peuvent installer votre image Firefox facilement avec la commande:
$ subuser subuser add firefox firefox@http://example.com/student/my-subuser-images.git
Ils exécuteraient ce sous-utilisateur de la même manière que s'ils avaient fait la configuration localement.
La documentation Ubuntu a une commande sandbox pour les applications X qui utilise SELinux:
http://manpages.ubuntu.com/manpages/precise/man8/sandbox.8.html
SELinux est une belle route dans la mesure où il y a de nombreuses pages Web, livres, outils, etc. sur son utilisation. Il s'intègre très bien avec le système d'exploitation, ce qui est l'une des raisons pour lesquelles il est complexe. Tresys vend de jolis outils qui facilitent leur configuration.
Des choses comme SELinux descendent des postes de travail en mode compartimenté de l'ère Orange Book qui ont essayé d'ajouter de la sécurité aux systèmes d'exploitation Vanilla. Le dernier produit survivant (et maintenu) que je connaisse est la ligne Argus Pitbull. Ce n'était que Solaris, mais maintenant c'est RHEL. Ils sont beaucoup plus complets que SELinux, bien que vous payiez pour cela. Il existe également la plate-forme General Dynamics High Assurance qui combine VMWare et Linux.
L'approche VM est plus facile à utiliser, mais plus gourmande en ressources et plus de fonctionnalités dans une base informatique de confiance. La meilleure chose à faire est d'utiliser une distribution très légère (CrunchBang me vient à l'esprit), ajoutez simplement ce dont vous avez besoin et supprimez ce que vous n'avez pas. Les machines virtuelles peuvent être limitées à des dossiers individuels via les contrôles obligatoires SELinux ou SMACK si vous souhaitez autoriser le partage de dossiers pour déplacer des fichiers entre l'hôte et l'invité.
Il y a aussi le projet QubesOS qui vise à rendre VM plus sécurisée. Il est en assez bon état en ce moment et facile à utiliser.
Le problème global de votre question est que ni X ni Ubuntu ne sont conçus pour une séparation sécurisée des applications se méfiant mutuellement. Des décennies de recherche ont été consacrées à cela pour UNIX et X avec de nombreux prototypes/produits. Après les avoir vus et vu Ubuntu, je vous garantis qu'ils ne font pas ce genre de choses. Le truc SELinux ne fait que peu pour cela et les approches de machine virtuelle ont encore beaucoup de surface d'attaque (VMM, Dom0, etc.). Genode, QubesOS, l'Europe Perseus Security Architecture, la suite OKL4/OKLinux et TU L'architecture Nizza de Dresde ne sont que des méthodes ouvertes que je connais pour résoudre ce problème avec la compatibilité Linux. Leurs fonctionnalités et leur exhaustivité varient considérablement.
S'il fonctionne sous Linux traditionnel, il y a 0 jours à attendre, je vous le garantis. Je garde juste mon ancienne solution d'avoir des PC séparés, avec un non connecté, et un commutateur KVM. Et l'utilisation de supports en lecture seule (par exemple les CD-R), de câbles unidirectionnels, ou des protections pour le déplacement des données. Et des sauvegardes sur des supports en lecture seule. Et le chargement à partir de supports en lecture seule dans la mesure du possible. Toute la configuration coûte moins de 1 000 $ si l'on obtient des composants à bas prix et accepte des performances modérées. 2 000 à 3 000 $ pour des performances élevées.
Je voudrais ajouter ce projet à l'excellente liste de projets ci-dessus. Il peut mettre en sandbox tout type de processus: serveurs, applications graphiques et même sessions de connexion utilisateur.
https://l3net.wordpress.com/projects/firejail/
Firejail est un programme de sandbox de sécurité SUID qui réduit le risque de violations de sécurité en limitant l'environnement d'exécution des applications non fiables utilisant des espaces de noms Linux. Il permet à un processus et à tous ses descendants d'avoir leur propre vue privée des ressources du noyau partagées globalement, telles que la pile réseau, la table de processus, la table de montage.