Skip to content

VMI breakpoint injection (int3 trap to hypervisor)

Guest koduna bir int3 (0xCC) byte'ı yazan bir virtual-machine-introspection tekniği; öyle ki guest ona ulaştığında, ortaya çıkan #BP hypervisor'a trap olur (VMEXIT) ve out-of-guest bir tool'un yürütmeyi gözlemlemesine/kontrol etmesine izin verir — DRAKVUF/LibVMI tarzı hidden breakpoint'lerin temeli.

Mechanism

Note

Bir hypervisor guest memory'sini guest'in dışından okuyup yazabilir. VMI breakpoint injection, bir target instruction'ın ilk byte'ını int3 (opcode 0xCC) ile üzerine yazar. Bir guest vCPU onu çalıştırdığında, #BP exception'ı (exception bitmap aracılığıyla) guest'e teslim edilmek yerine hypervisor'a bir VM-exit'e yol açacak şekilde yapılandırılır. Introspection tool'unun handler'ı out-of-guest çalışır, "semantic gap'i köprülemek" için guest state'i inceler/düzenler, ardından orijinal byte'ı geri yükler (veya üzerinden step yapar) ve devam eder. Stealth için invariant: guest, inject edilen 0xCC'yi gözlemleyememelidir. Naif tek bir shared view bunda başarısız olur — kendi text'ini okuyan guest kodu breakpoint'i görür. DRAKVUF bunu altp2m / EPT view'ları ile çözer: target process'i çalıştırmak üzere olan bir vCPU, page frame'leri breakpoint'leri içeren bir EPT view'ına geçirilir, diğer context'lerden gelen read'ler ise değiştirilmemiş bir view kullanır (execute/read split). Abuse/defansif ikiliği: aynı primitive malware analiz sandbox'larına ve "evasive" out-of-guest tooling'e güç verir (bkz. VMI-based evasive monitoring).

Somut EPT-backed gerçekleştirimi hyper-breakpoint'tir; ürünleştirilmiş varyantı DRAKVUF stealth int3 breakpoint injection'dır. Bu not genel/base primitive'i (trap mekaniği + semantic gap) kapsar; shadow-frame klonlama ve stealth detaylarının tam anlatımı sibling DRAKVUF not'undadır.

Walkthrough

Kavramsal akış (LibVMI/DRAKVUF ve Cyberus VMI breakpoint analizinden):

  1. İlgilenilen guest virtual address'i (örn. bir syscall handler'ı) çöz ve guest-physical/frame'ine kadar guest page table'larını walk et.
  2. Orijinal byte'ı kaydet; page'in breakpoint-taşıyan bir kopyasına 0xCC yaz; ilgili EPT/altp2m view'ını o kopyaya yönlendir.
  3. BP'nin bir VM-exit'e yol açtığından emin ol (vector 3 için exception bitmap bit'i);

    guest ona vurduğunda hypervisor handler'ı ateşlenir.
  4. Handler'da: guest register'larını/memory'sini oku (semantic gap'i köprüle), olayı logla, ardından ya orijinal byte geri yüklenmiş halde orijinal instruction'ı single-step et ya da onu emüle et, ve view'ı geri değiştir.

Beklenen: her hit out-of-guest tool'a gözlemlenebilir bir VM-exit üretir; altp2m ile page'in in-guest read'leri hâlâ orijinal byte'ları görür.

Warning

Kavramsal; bu analiz/defansif tooling'dir. Guest'e hypervisor-level erişim gerektirir (VMM'nin zaten sahibisinizdir).

Detection

  • In-guest anti-analysis kendi text'inde 0xCC için, VM-exit'lerden kaynaklı timing anomalileri için, ya da altp2m/EPT view tutarsızlıkları (read vs. execute sapması) için probe edebilir.
  • VMI tool'unu çalıştıran defender'lar evasion girişimleri için breakpoint-hit oranlarını izler.

Mitigation

  • Stealth için (analiz kullanımı): breakpoint'leri execute-only EPT view'larıyla destekle ki guest read'leri asla 0xCC görmesin; VM-exit timing yan etkilerini minimize et.
  • Harici breakpoint'lere direnmeye çalışan bir guest için: hypervisor düşmanken in-guest bir çözüm yoktur — hypervisor'ın trust boundary olmasının nedeni budur.

References