Virtualisation
Cloisonnement, conteneur, (para-)virtualisation, émulation…
Vocabulaire
- Machine hôte (host) : machine qui héberge des conteneurs/machines virtuelles
- Machine invitée (guest) : machine hébergée sur un hôte (virtualisée, contenues, etc…)
Cloisonnement
Buts recherchés :
- Isoler un processus dans une sous-partie du système de fichiers
Fonctionnement :
- Isoler du processus père dans une partie de l'arborescence
- Si le processus tombe, il ne peut faire de « dégâts » que sur une partie limitée du système
Outils :
- chroot (Linux)
- jail (*BSD)
Limitations :
- Pas de limite de mémoire
- Pas de limite de processus
- Pas de limite de CPU
- Pas véritablement de garantie d'isolation
Sandbox
Buts recherchés :
- Isoler des processus et applications complexes (contexte de méfiance)
- Limiter la mémoire consommée
- Appliquer un contexte de sécurité
- Réserver des ressources à l'OS (pour empêcher le débordement, l'exhaustion de ressources)
Fonctionnement :
- Allouer (allocation dure) de ressources au système
- Répliquer d'un contexte de sécurité et appliquer de ce dernier
Outils :
- OS Mobile : Android, iOS, Boot2Gecko…
- À partir de la 7ème génération de console de jeux : Xbox 360, PS3.
Limitations :
- Réservé aux environnements « hostiles »
- On cherche toujours à protéger l'OS et ses ressources (rares)
Conteneurs/system-wide virtualisation/virtualisation d'applications
Buts recherchés :
- Faire tourner des applications dans des environnements hétéroclites
- Multiplier les instances d'un même environnement
- Limiter les ressources système (CPU, mémoire)
- Limiter et isoler les ressources réseaux
Fonctionnement :
- Process init supplémentaire
- Utilisation du noyau hôte
- Différents conteneurs avec différentes distributions
Limitations :
- Utilisation du noyau hôte (donc potentiel problème de compatibilité)
- Configuration réseau limitée
- Impossible de mixer les OS invités (seulement des variantes de l'OS hôte)
- On est toujours dans une sous-arborescence de l'OS hôte
Niveau d'exécution d'un processeur (1)
Protection Ring
Niveau d'exécution d'un processeur (2)
- Protéger la machine
- Les applications ne peuvent pas accéder aux fonctions avancées…
- …celle-ci sont réservées pour des niveau d'exécution plus élevés
- Problème : les OS invités pensent pouvoir accéder au RING 0
- Plus gros problème : les OS invités sont de simples applications de l'OS hôte
Para-virtualisation
Buts recherchés :
- Résoudre le problème d'accès au RING 0
- Multi-OS invités sur le même hôte
- Économie de ressources système (CPU, mémoire, disque)
- …et réseau !
- Niveau d'abstraction supplémentaire par rapport à l'hôte
Fonctionnement :
- Le système invité a « conscience » d'être virtualisé typiquement les opérations privilégiées (RING 0) sont exécutés par l'hôte.
- Premières « vraies » machines virtuelles : disques virtuels et interfaces réseaux virtuelles
- Allocation de ressources systèmes (CPU, RAM) plutôt qu'une limitation de ressources
- Les pilotes disques et réseaux sont optimisés dans cette optique
Outils :
- Xen
- Microsoft Hyper-V (en mode Windows)
- VmWare (jusqu'à un certain point)
Limitations :
- Nécessité de modifier l'OS invité
- Tous les OS ne sont pas modifiés pour tous les para-virtualiseurs !
Niveau d'exécution d'un processeur (3)
Tout de suite, c'est plus simple…
Virtualisation
Buts recherchés :
- Isoler le plus possible l'hôte et des invités
- Multi-OS sans modification des OS
- Aucun moyen (ou presque) pour les invités de savoir qu'ils sont invités
Fonctionnement :
- Reprend les bases de la para-virtualisation (disques virtuels, interfaces virtuelles, mémoire dédiée, etc…)
- Exécution de l'hyperviseur (hôte) sur le Ring -1 du CPU
Outils :
- KVM (intégré au noyau Linux)
- VmWare
- Xen
- VirtualBox
- …
Limitations :
- Isolation réseau limitée dans la plupart des cas (switches virtuels basiques)
- Pour des raisons de performances, on utilise quand même des pilotes optimisés
- Impossible de virtualiser/émuler tous les composants d'une machine(matériel spécial, dongle de verrouillage, etc…)
- Compliqué de virtualiser un GPU
- Impossible de faire tourner des OS avec des architectures matérielles différentes (ARM, PPC, etc…)
Émulation
Buts recherchés :
Buts recherchés :
- Plus aucune possibilité pour le système invité de savoir que c'est un invité
- Émulation matérielle complète
Fonctionnement :
- Re-création en software de composants hardware (y compris les plus critiques)
- aussi précisément que possible…
- …ou pas
Outils :
- QEMU
- IT Guru
- Dolphin, BizHawk, Mupen64+, GENS, MAME, etc…
Limitations :
- Performance
- Connaissance du matériel de base (hardware) et connaissance des micrologiciels implantés (firmware)
- Rétro-ingénierie fastidieuse (voire très fastidieuse)
- Aucune garantie sur la précision de l'émulation (à part quelques projets comme tas-videos.org)