Une machine virtuelle ESXi s'exécute sous un processus vmx en espace utilisateur propre à chaque VM sur l'hôte qui émule les périphériques de la VM, soutenu par l'hyperviseur vmkernel. Un invité s'évade en faisant manipuler incorrectement par vmx des données qu'il contrôle, donc la cible est le code d'émulation de périphériques : le périphérique graphique SVGA avec son flux de commandes 3D, les contrôleurs USB émulés, les cartes réseau virtuelles et les canaux de contrôle backdoor et VMCI. Chacun lit des structures fournies par l'invité (FIFO de commandes, descripteurs de transfert, anneaux, messages RPC) dans le processus hôte, et une faille de sûreté mémoire y donne l'exécution de code dans vmx, qui s'exécute avec un privilège suffisant pour atteindre l'hôte.
La surface d'évasion qu'un invité peut atteindre de l'intérieur :
# enumerate the emulated hardware the VM exposes (from a Linux guest)
lspci -nn # SVGA II, vmxnet3/e1000, USB (UHCI/EHCI/XHCI), VMCI
lsusb; ls /sys/bus/pci/devices # USB controllers and PCI functions
dmesg | grep -iE 'vmwgfx|vmxnet|vmw_vmci' # loaded VMware guest drivers
Sous-sujets#
- Backdoor et VMCI : les canaux de contrôle vers le processus vmx.
- SVGA et graphismes 3D : le flux de commandes du périphérique graphique.
- Contrôleurs USB : les UHCI, EHCI et XHCI émulés.
- NIC virtuelles : les cartes réseau e1000 et vmxnet3.