Virtualizing an already-running OS (host-takeover hypervisor)¶
Zaten boot etmiş bir OS'i runtime'da bir hypervisor altına koymak: bir kernel driver VT-x/SVM'i etkinleştirir ve mevcut CPU state'i guest olacak şekilde
VMLAUNCHeder, böylece canlı OS bir VM olarak çalışmaya devam eder — Blue Pill'in meşru-araştırma karşılığı.
Mechanism¶
Note
Bu, hvpp ("zaten çalışan bir işletim sisteminin virtualization'ına öncelikli olarak
odaklanan hafif bir Intel x64/VT-x hypervisor'ı") gibi araştırma hypervisor'larının kullandığı
teknik (Blue Pill demotion'ı). Invariant: VT-x, çalışan bir kernel'den VMX root mode'a (VMXON)
girmene, guest area'sı mevcut context'i yakalayan bir VMCS doldurmana, guest physical
memory'yi EPT üzerinden identity-map etmene (böylece RAM değişmemiş görünür) ve VMLAUNCH
etmene izin verir. Execution, kaydedilmiş RIP'te bir guest olarak devam eder. OS, virtualize
olduğunun farkında değildir; hypervisor artık configure edilmiş her VM-exit'i görür. Taze bir
guest oluşturan bir type-2 VMM'in aksine, burada tek bir guest vardır — mevcut OS — yani device
emülasyonu ve boot yoktur.
Walkthrough¶
Public referans: wbenny/hvpp. Kavramsal akış (araştırma VMM'i, silahlandırılmamış):
- Per-vCPU bring-up:
vcpu_t::start(),vcpu_t::vmx_enter()üzerinden VMXON region'ını ve VMCS'i kurar, sonra her logical CPU'yu launch eder (IPI'lerle sürülür, böylece her core virtualize olur). - Guest state'i VMCS'e yakala: VMCS guest area'sı mevcut CPU context'inden yüklenir; bir
vmexit_handler::setup()callback'i, kodun launch'tan önce VMCS'i değiştirmesine izin verir. - Belleği EPT ile identity-map et: hvpp, guest physical memory'yi (2 MB page'ler) identity-map eder, böylece guest kendi RAM'ini değişmemiş görür.
- Exit handler'ı kur: bir
vmexit_handler(ör.vmexit_passthrough_handler), exit reason'ları (exception'lar/NMI,CPUID,RDMSR/WRMSR,MOV CR,IN/OUT,VMCALL) dispatch eder — bkz. VM-exit handler interception. VMLAUNCH: zaten-çalışan OS, reboot olmadan guest olarak devam eder.
Beklenen gözlemlenebilir: load sonrası CPUID bir hypervisor present rapor edebilir ve seçilen event'ler artık daha önce native çalışan VM-exit'lere yol açar.
Warning
Dual-use: aynı demotion, thin hypervisor injection rootkit'inin de temelidir. Fark: bu not araştırma VMM perspektifini (hvpp, Intel VT-x, EPT identity-map, per-vCPU IPI bring-up, passthrough exit handler) merkeze alır; sibling not aynı tekniği stealth rootkit (Blue Pill / AMD SVM, minimal intercept footprint) açısından işler. Teknik için dokümante edilmiştir; hvpp bir araştırma/eğitim VMM'idir.
Detection¶
- Timing/state: Blue Pill ile aynı — bare-metal boot eden bir makinede VM-exit overhead'i ve bir hypervisor-present geçişi (VM-exit latency fingerprinting, red pill).
- Driver telemetrisi:
CR4.VMXE/VMXON'u etkinleştiren ve tüm core'ları virtualize etmek için cross-core IPI'ler gönderen üçüncü-taraf bir driver.
Mitigation¶
- VT-x/SVM'i OS yüklenmeden önce güvenilir bir hypervisor'dan ya da firmware'den sahiplen, böylece
OS'ten gelen sonraki bir
VMXONreddedilir (measured boot, VBS). - Kernel dayanağını engellemek için HVCI / driver signing ve IOMMU korumaları.
- Beklenmedik VMX etkinleştirmesi ve EPT identity-map kurulumu için izle.
References¶
- wbenny/hvpp — lightweight Intel VT-x hypervisor for virtualizing an already-running OS (README): https://github.com/wbenny/hvpp/blob/master/README.md