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):
- İlgilenilen guest virtual address'i (örn. bir syscall handler'ı) çöz ve guest-physical/frame'ine kadar guest page table'larını walk et.
- Orijinal byte'ı kaydet; page'in breakpoint-taşıyan bir kopyasına
0xCCyaz; ilgili EPT/altp2m view'ını o kopyaya yönlendir. -
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. - 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.