Skip to content
Anti-analyseintermediate

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.

asm
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_vmware

Sur 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 port 0x5658, ainsi qu'une instruction in eax, dx (ED) précédée de ces mov. La valeur de commande 0x0A dans ECX et un cmp contre 0x564D5868 ensuite confirment l'intention.
  • Dynamique — Dans x64dbg, posez un point d'arrêt sur l'instruction in et inspectez EAX, ECX, DX avant elle, et EBX après. Passez par-dessus et observez quelle branche prend le cmp/je suivant. 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 in et forcez le résultat : mettez EBX à une valeur non magique (ou sautez le je) 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 = TRUE dans le .vmx pour désactiver complètement la backdoor.
Votes

Commentaires(0)