VMware Backdoor I/O Port
Le malware dialogue avec l'hyperviseur VMware via le port d'E/S de la backdoor « VX » au moyen d'une valeur magique dans EAX, révélant qu'il s'exécute dans un invité VMware et non sur du matériel réel.
VMware expose un canal de communication privé invité-vers-hôte via un port d'E/S spécial. Un logiciel dans l'invité émet une instruction in eax, dx avec une valeur magique dans EAX et le port de la backdoor dans DX ; l'hyperviseur l'intercepte et renvoie des données que le canal ne pourrait jamais fournir sur du matériel réel. Le malware s'en sert pour confirmer qu'il s'exécute dans VMware avant de décider s'il doit se déclencher.
En dehors d'une VM, l'instruction IN est privilégiée et lit un port sans signification, donc elle déclenche une faute (ou renvoie des données aléatoires), permettant au code de distinguer un invité du matériel réel.
Fonctionnement
La convention est fixe : EAX = 0x564D5868 ('VMXh'), DX = 0x5658 ('VX'), et ECX sélectionne la commande (p. ex. 0x0A = obtenir la version). Sous VMware, EBX revient contenant la valeur magique 0x564D5868.
mov eax, 0x564D5868 ; magic 'VMXh'
mov ecx, 0x0A ; command: get version
mov dx, 0x5658 ; backdoor port 'VX'
in eax, dx ; talk to the hypervisor
; under VMware: ebx == 0x564D5868 -> we are in a VM
cmp ebx, 0x564D5868
je inside_vmwareSur du matériel réel, le IN privilégié lève une faute #GP ; le malware l'enveloppe typiquement dans un gestionnaire structuré/SEH et traite « aucune faute et EBX correspond » comme le signal VMware.
Détection & contournement
- Statique — Recherchez dans IDA/Ghidra les constantes magiques
0x564D5868('VMXh') et le port0x5658, ainsi qu'une instructionin eax, dx(ED) précédée de cesmov. La valeur de commande0x0AdansECXet uncmpcontre0x564D5868ensuite confirment l'intention. - Dynamique — Dans x64dbg, posez un point d'arrêt sur l'instruction
inet inspectezEAX,ECX,DXavant elle, etEBXaprès. Passez par-dessus et observez quelle branche prend lecmp/jesuivant. Notez que l'instruction peut générer une faute : placez le point d'arrêt avant la région protégée. - Patch / contournement — NOP le
inet forcez le résultat : mettezEBXà une valeur non magique (ou sautez leje) pour que la vérification échoue. Vous pouvez aussi exécuter l'échantillon sur du matériel réel, ou sous un hyperviseur furtif (KVM/Xen) qui n'implémente pas la backdoor VMware et intercepte/ignore l'accès au port. - Outils — ScyllaHide et les plugins anti-anti-VM pour x64dbg ; des sandboxes sur matériel réel ou non-VMware ; configurez VMware avec
monitor_control.restrict_backdoor = TRUEdans le.vmxpour désactiver complètement la backdoor.