Comment les virus et autres malwares font pour savoir s'ils sont dans un environnement virtuel ?
D'un point de vue logiciel, une ordinateur virtuel ressemble beaucoup à une vraie machine physique. A tel point qu'il est possible d'installer tout un système d'exploitation et d'exécuter tous les logiciels dans une machine virtuelle !
Cependant, l'utilisation d'une machine virtuelle comporte quelques différences avec l'ordinateur hôte. Et c'est sur ces différences que se basent les techniques de détection de machine virtuelle.
Les virus sont de loin les programmes qui utilisent le plus ces techniques de détection de machines virtuelles pour éviter de
s'exécuter dans une sandbox et d'être détectés.
Nous allons voir quelques techniques de base, mais sachez qu'il en existe beaucoup plus notamment du fait qu'il y a plusieurs éditeurs d'environnements virtuels sur le marché, et qu'il faut adapter ces techniques ou en créer de spécifiques pour chacun d'entre eux. La majorité des exemples ci-dessous fonctionnent pour VMWare.
Compter le nombre de cores du processeur : une détection générique
La technique la plus simple, c'est de compter le nombre de cores du processeur. Pourquoi ? Parce que de nos jours, il devient rare d'avoir un matériel équipé d'un processeur à un seul core.
Dans le langage C/C++, la fonction GetSystemInfo() permet d'avoir cette information sous Windows. Sous Linux c'est avec sysconf().
Bien entendu la méthode n'est pas fiable à 100% car il existe encore des processeurs bas de gamme qui n'ont qu'un seul core. Mais statistiquement, dans la majorité des cas, ça marche !
La quantité de mémoire disponible et la taille du disque dur
Sur le même principe que le comptage du nombre de cores du CPU, un programme peut très facilement connaître la taille de la mémoire RAM et la capacité du disque dur de la machine.
Si la RAM est inférieure ou égale à 1Go, et que la capacité du disque dur est inférieure ou égale à 60 Go, il y a une forte probabilité que vous soyez en environnement virtuel.
Détecter un disque dur virtuel par son modèle
Sous Windows, le nom du modèle de votre disque dur est dans la base de registre. Un programme peut donc facilement accéder à cette donnée. Il suffit d'aller dans HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\disk\\Enum et de lire la clé "0" qui représente le premier disque (celui du système d'exploitation en général). Si la clé "0" contient la chaîne de caractères "vmware", alors vous êtes dans une machine virtuelle.
Détecter une carte réseau virtuelle par son adresse MAC
La carte réseau dans votre ordinateur est un périphérique particulier. Chaque constructeur possède sa propre plage d'adresses MAC pour en donner une différente à chacune de ses cartes réseaux mise en vente. Les environnements virtuels ne font pas exception, et des plages d'adresses MAC ont été attribuées aux éditeurs de solutions de virtualisation.
Donc, en fonction de l'adresse MAC de la carte réseau, il est possible de connaître le constructeur de la carte.
Par exemple si l'adresse MAC de votre ordinateur commence par "00:05:69", "00:0c:29", "00:1C:14", ou "00:50:56", le constructeur est alors "VMWare, Inc". C'est donc que vous êtes en environnement virtuel.
Vérifier les informations du BIOS
Le BIOS de votre carte mère contient énormément d'informations permettant à votre ordinateur de fonctionner correctement.
Parmi ces informations on retrouve le nom du constructeur de la carte mère. Si ce nom commence par "VMware" ou "VMW", alors vous êtes dans une machine virtuelle VMware.
De la même manière, le BIOS de la carte graphique contient le nom du constructeur. S'il contient "VMware SVGA", alors vous êtes, là aussi, dans une machine virtuelle VMware.
Tester le bit d'hypervision de la commande CPUID
La commande assembleur CPUID permet de retourner des informations concernant le processeur.
Parmi ces informations retournées, un bit (le 31ème du registre ECX) permet de savoir si un hyperviseur est présent. S'il est positionné à 1, c'est donc que vous êtes en environnement virtuel.
Le port d'entrée/sortie numéro 0x5658 de VMware
Lorsque l'on est dans une machine virtuelle VMware, un port spécifique permet de communiquer avec le logiciel VMware. Il s'agit du port hexadécimal 5658. Ce n'est pas un port TCP, mais un port d'entrée/sortie qui est utilisable avec les commandes IN et OUT en langage assembleur.
Ce port accepte plusieurs commandes, à tel point qu'il est surnommé "
backdoor VMWare". En fait, c'est une sorte d'API qui permet de faire communiquer le logiciel dans la machine virtuelle avec VMWare à des fins d'administration (VMWare tools).
D'après la
documentation officielle de VMware, si nous envoyons commande hexadécimale "0xa" au port 0x5658 cela permet d'obtenir la version de VMWare. Si en retour le registre EBX du processeur contient la valeur 0x564D5868, c'est que vous êtes dans une machine virtuelle VMWare.
L'IDT (Interrupt Descriptor Table)
L'IDT signifie Table de Descripteurs d'Interruption. C'est une table de données située en mémoire et qui est utilisée par le processeur pour gérer les interruptions.
L'emplacement de cette table en mémoire est stocké dans un registre qui s'appelle IDTR (Interrupt Descriptor Table Register).
Le problème, c'est qu'une machine virtuelle ne peut pas utiliser la même IDT que son hôte, car cela engendrerait un conflit pour le processeur. L'IDT est donc relogé à un autre endroit, et l'IDTR est mis à jour en conséquence pour indiquer une autre adresse mémoire.
Par conséquent il suffit de consulter l'IDTR pour connaître la position en mémoire de l'IDT :
- Sous Windows, l'IDT se situe à l'adresse 0x80ffffffXXXX.
- Sous Virtual PC il est à l'adresse 0xe8XXXXXXXXXX
- Sous VMWare il est à l'adresse 0xffXXXXXXXXXX
(X étant un chiffre potentiellement aléatoire).
Il suffit donc de tester le 5e octet de poids le plus faible pour savoir si vous êtes dans une machine virtuelle.
Cette technique est appelée "
Red Pill", référence au premier film Matrix.
L'exploitation d'une faille : c'est parti pour la Sandbox Evasion
Imparable, l'exploitation d'une faille dans le logiciel de la machine virtuelle est le graal de tout hacker. L'article de
secret.club détaille la procédure d'exploitation d'une faille logicielle de la gestion SCSI. Par l'exploitation d'un
buffer overflow les auteurs ont pu exécuter un fichier exécutable en dehors de la VM, c'est à dire sur le serveur hôte !
Bien sûr cet exemple affecte VirtualBox, mais il existe des failles équivalentes chez
VMware,
Hyper-V, etc...
L'exploitation de telles faille sert non seulement à détecter la présence d'un environnement virtualisé, mais aussi de s'en échapper afin de contrôler ou infecter le serveur physique. On parle alors de "Sandbox Evasion".
Comment durcir une machine virtuelle pour qu'elle ne soit plus détectée ?
Afin de minimiser ces différences, certains programmes tentent d'effacer toutes traces de l'éditeur de la machine virtuelle. C'est le cas, par exemple, de
VmwareHardenedLoader.
Un chercheur en malwares aurait tout intérêt à utiliser ce type de programme pour augmenter ses chances de voir un malware s'exécuter dans sa sandbox.
Pour aller plus loin
Le logiciel
antivmdetection permet de faire un état des lieux encore plus complet, avec encore plus de techniques et prend en charge les environnements virtuels Sandboxie, Wine, VirtualBox d'Oracle, VMWare, Qemu et Bochs !
Un page Github regroupe certains projets, présentation et outils concernant
l’évasion de sandbox.
Tags
VIRTUALISATION
MALWARE
MATÉRIEL INFORMATIQUE
SYSTÈME D'EXPLOITATION
OUTIL D'ADMINISTRATION
Inscription à notre lettre d'information
Inscrivez-vous à notre
lettre d'information pour vous tenir au courant de nos actualités et de nos dernières trouvailles.