Windows Sandbox : un environnement léger et sûr pour lancer des apps

Windows Sandbox est décrit comme un environnement de bureau léger qui permet de lancer des applications isolées du système hôte. Comment ça marche, et comment l'intégrer dans notre quotidien ?

Windows Sandbox : un environnement léger et sûr pour lancer des apps

Ouais, c'est ce genre d'article qui commence par une image de conteneurs. D'ici la fin de l'article, les plus curieux d'entre vous comprendront la signification de ce qui entoure le logo Windows.

Sandbox par-ci, sandbox par-là

Un beau matin sur Twitter, je suis tombé sur ce tweet :

PSA: After having looked into p7zip and recent 7-zip source code, I *strongly* suggest everyone to put it in a sandbox.

3:52 PM · Mar 9, 2021 par @AdmVonSchneider

L'auteur critique particulièrement la qualité du code et son développement, ouvert mais obsolète. Pas de panique, 7-zip (et son pendant CLI p7zip) n'a pas de 0-days connues pour autant, mais vous devriez quand même le maintenir à jour et c'est assez évident comme première mesure.

Mieux encore, on vous invite à utiliser une sandbox. Donc je me suis demandé : comment le commun des mortels peut-il tirer quelque chose de cette information ? 7-zip est l'exemple d'une bonne vieille application Win32 qui ne tire pas profit du modèle de sandboxing que Microsoft tente d'imposer avec ses applications UWP (et il y a du chemin à faire sur les limitations perçues).

La solution, à l'ancienne et radicale, consiste à employer une machine virtuelle. Mais c'est une solution lourde (bien qu'efficace quand proprement mise en place) qui n'est pas sans défauts dans son usage. Cette méthode met à l'écart les utilisateurs de PC peu performants, et constitue également une barrière technique que certains n'auront juste pas l'énergie de franchir.

Windows Sandbox à la rescousse

Heureusement, Microsoft continue en parallèle de renforcer la sécurité de Windows 10 avec ses outils de virtualisation (WDAG entre autres). L'une d'elles, bien pratique, est disponible depuis la mise à jour de Mai 2019 pour les versions Pro et Enterprise : Windows Sandbox.

Windows Sandbox est décrit par Microsoft comme un environnement de bureau léger qui permet de lancer des applications isolées du système hôte. Windows Sandbox possède comme particularités :

  • Inclus à Windows : il n'y a pas besoin de télécharger et d'installer un hyperviseur tiers, ni de télécharger une image d'un OS à virtualiser.
  • Non-persistance : chaque fois que Windows Sandbox est lancé, c'est une version toute propre qui vous attend. Chaque fois que Windows Sandbox est fermé, toutes les données produites dans la session en cours sont détruites.
  • Efficience : réutilisation des fichiers du système hôte, gestion intelligente de la mémoire, virtualisation GPU. En somme, une technologie plus légère que les machines virtuelles classiques.
  • Isolation : contrairement à d'autres technologies de conteneur, le kernel est lui-aussi isolé pour réduire la surface d'attaque.

Windows Sandbox n'est donc pas vraiment comparable à une machine virtuelle classique, ni-même à un conteneur tel qu'on le connait qui partagerait le kernel avec l'hôte (et serait donc susceptible à des attaques ciblées).

Krypton Containers : léger et sûr ?

C'est donc un hybride qui cherche le juste milieu entre performances et sécurité, ce que Microsoft appelle les Krypton Containers :

Image : Microsoft

Pour la petite histoire, Microsoft utilise des noms de gaz nobles tels que le krypton (vous comprenez mieux mon choix d'image d'en-tête ?) pour désigner des niveaux de virtualisation, du plus léger au plus lourd (comme les gaz nobles figurent sur le tableau périodique) :

  • Helium : utilisé par exemple par des apps Win32 compartimentalisées du Store.
  • Argon : utilisé par les "Windows Server containers". Très semblable à Docker avec une isolation userspace, technologie très légère.
  • Krypton : utilisé par WDAG et Windows Sandbox, contrairement à Argon le kernel est séparé de l'hôte.
  • Xenon : "Hyper-V containers", avec isolation supplémentaire du kernel (utility kernel image), très semblable à Krypton
Image : Microsoft
La simplicité d'une application avec la sécurité d'une machine virtuelle.

Cette citation peut plus ou moins se confirmer avec les moyens mis en place. Cette technologie "Krypton", reposant sur l'hyperviseur Hyper-V, met en oeuvre plusieurs moyens :

  • Image dynamique : permet de réduire drastiquement la taille des conteneurs en évitant la redondance. Tous les fichiers système pouvant être réutilisés à partir du système hôte le sont. Donc en pratique on a un conteneur qui peut faire une taille de l'ordre de dizaines de MB ! Pas d'image qui prendrait plusieurs précieux GB de votre SSD.
Image : Microsoft
  • Direct Map : permet de réduire l'empreinte mémoire du système sandboxé en conséquence du mécanisme présenté ci-dessus. La pagination de mémoire de certains binaires système communs peut être réutilisée de façon sécurisée :
Image : Microsoft
  • Scheduler intégré au kernel : permet une gestion on-demand des ressources. En d'autres termes, le kernel hôte voit le kernel invité comme un processus classique dont il peut allouer dynamiquement de la RAM par exemple. Cela permet de conserver la réactivité du système hôte en cas de tâches parallèles.
  • Snapshot & clone : afin de réduire drastiquement le temps de lancement de Windows Sandbox (au lieu du premier démarrage initial), un snapshot de l'état de la sandbox est fait à l'issue du premier démarrage qui sera ensuite réutilisé au lieu de démarrer complètement l'image à chaque reprise.
  • Accélération graphique matérielle : permet d'avoir une bonne réactivité de la sandbox dans certaines tâches graphiques. Dans un environnement virtualisé standard, il faudrait faire une croix sur l'accélération matérielle, mais ici la Windows Sandbox permet par un mécanisme de coordination avec le système hôte d'en bénéficier.
Image : Microsoft

Au passage : WSL 2 (Windows Subsystem for Linux v2) fonctionne également avec la technologie Krypton !

Prérequis et limitations

Windows Sandbox n'est disponible que sur les versions Pro et Enterprise de Windows 10 depuis la mise à jour de Mai 2019. Exit donc les utilisateurs de Windows Home.

Windows Sandbox nécessite au minimum :

  • Un CPU x64_86 ayant au moins 2 cœurs, supportant la virtualisation hardware dont l'option est activée dans le BIOS (Intel VT-x / AMD-V).
  • 4GB de RAM au minimum.
  • 1GB d'espace disque système.
  • Un GPU compatible WDMM 2.5 ou ultérieur pour bénéficier de l'accélération matérielle (lancer dxdiag.exe pour le savoir), sinon ce sera du rendering software.

Jusqu'à il y a peu, Hyper-V ne permettait pas une coexistence avec d'autres hyperviseurs. Mais ce n'est plus un problème depuis les versions 6 de Virtualbox et 15.5 de VMWare quand l'option Windows Hypervisor Platform est activée.

Mise en garde : Windows Sandbox n'est pas une solution 100% complète de virtualisation. Et comme toute solution de virtualisation, elle dépend grandement de la sécurité du système hôte et de la configuration de son hyperviseur. Des escalations de privilèges sont toujours possibles par des attaques très élaborées.

Cela dit, Windows Sandbox tout comme WDAG proposent une protection assez puissante et un environnement adapté pour y utiliser des applications dont la sûreté ne peut pas toujours être garantie.

Utiliser Windows Sandbox

Pour utiliser Windows Sandbox c'est assez simple, cherchez Windows Features et ouvrez la fenêtre, puis cochez l'option associée :

Après un redémarrage, vous aurez une application "Windows Sandbox" qui une fois lancée ouvre un client RDP pour accéder à votre conteneur :

Pour fermer la Sandbox et récupérer les ressources, c'est très simple : il suffit simplement de fermer la fenêtre du client. Windows Sandbox vous demandera de confirmer la fermeture du fait de la nature volatile des données.

Windows Sandbox vous permet de transférer des fichiers entre le système hôte et le système virtualisé : faites simplement un copier/coller de l'un à l'autre. Dans Window Sandbox vous pouvez donc installer 7-zip et y décompresser vos .7z, puis transférer le résultat au système hôte.

Vous noterez que Windows Sandbox hérite de la connectivité du système hôte. Cela peut servir dans certains cas, mais peut être considéré peu sécurisé dans d'autres (workaround : cf. partie suivante).

Configurer et maîtriser Windows Sandbox

Par défaut la Windows Sandbox est tout à fait utilisable en l'état, mais il est temps de pousser les choses un peu plus loin.

Vous pouvez configurer et adapter Windows Sandbox à vos besoins. Par exemple, créez un fichier foobar.wsb dans lequel vous écrirez en syntaxe XML :

<Configuration>
  <VGpu>Disable</VGpu>
  <Networking>Disable</Networking>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\Users\Public\Downloads</HostFolder>
      <SandboxFolder>C:\Users\WDAGUtilityAccount\Downloads</SandboxFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>explorer.exe C:\users\WDAGUtilityAccount\Downloads</Command>
  </LogonCommand>
</Configuration>

Cette configuration servant ici d'exemple :

  • Désactive la virtualisation GPU pour réduire la surface d'attaque.
  • Désactive la connectivité du conteneur pour limiter des risques d'exfiltration.
  • Fait du folder mapping un peu comme vous le faites déjà peut-être avec Docker : un dossier hôte correspondra à un dossier à un chemin spécifique dans la Sandbox (C:\Users\WDAGUtilityAccount).
  • Lance une commande spécifiée (ici explorer.exe blabla) qui sera executée au démarrage de la Sandbox.

Executer le fichier .wsb lancera la Sandbox avec les paramètres indiqués. Bref, il y a plein de choses à faire pour correspondre à vos besoins.

Et vous trouverez ici des utilitaires assez sympathiques pour intégrer Windows Sandbox à des workflows basiques voire plus poussés :

microsoft/Windows-Sandbox-Utilities
A public repository for useful developments surrounding Windows Sandbox - microsoft/Windows-Sandbox-Utilities

Par exemple cet outil permet d'ajouter dans le menu contextuel l'option de lancer un executable dans la sandbox. Il y a même une lib Python qui vous permet de faire des trucs chouettes.

Image de /Run-in-Sandbox

Pour répondre à la problématique énoncée au début de l'article, on pourrait tout à fait construire un workflow qui lance la sandbox et lui fournit 7-zip pour y extraire l'archive en question.

J'espère que cet article aura permis de faire découvrir Windows Sandbox à certains utilisateurs de Windows 10, que vous soyez débutants ou non dans le domaine de la virtualisation et des conteneurs, et que cela va vous permettre de mettre en place des bonnes pratiques de sécurité pour votre OS hôte.