Thin hypervisor injection (Blue Pill on-the-fly virtualization)¶
Çalışan, canlı bir OS'un altına minimal bir hypervisor sokmak — reboot olmadan — hardware virtualization'ı (AMD SVM / Intel VT-x) enable ederek ve mevcut OS'u bir guest'e indirgeyerek; "Blue Pill" virtualization rootkit'inin özü.
Mechanism¶
Note
Hardware virtualization, kernel privilege'dan runtime'da açılabilir: bir driver
SVM/VT-x'i enable eder, guest state'i mevcut CPU context'i olan bir control
structure (AMD VMCB / Intel VMCS) kurar ve sonra VMRUN (SVM) ya da
VMLAUNCH (VT-x) çalıştırır. Az önce çalışan OS bir sonraki instruction'dan
devam eder, ama artık thin hypervisor altında bir guest olarak. Suistimal
edilen invariant: indirgeme (demotion) transparent'tır çünkü guest'in
register'ları, CR3'ü, GDT/IDT'si ve RIP'i control block'a taşınır ve SVM/VT-x
(eski VM rootkit'lerinin aksine) trivial olarak tespit edilebilen sensitive
instruction'ları ortadan kaldırır. Hypervisor sonra OS'un altına oturur, yalnızca
seçtiği şeyi intercept eder — bir isolation inversion'ı: makinedeki en
privileged kod artık, hiç yetki vermediği daha da privileged bir katmana
tabidir.
Walkthrough¶
Public referans: J. Rutkowska, "Introducing Blue Pill" (AMD SVM). Kavramsal, zaten-public outline (çalışan bir rootkit yok):
- Bir kernel driver'dan SVM'i (
EFER.SVME) / VT-x'i (CR4.VMXE,VMXON) kontrol et ve enable et. - Bir control block (VMCB/VMCS) allocate edip sıfırla. Guest alanını mevcut CPU state'ten doldur: RIP = dönüş noktası, RSP, RFLAGS, CR0/CR3/CR4, segment descriptor'lar, MSR'lar.
- Host state'i hypervisor'ın kendi minimal context'ine ayarla ve bir VM-exit handler kur (bkz. VM-exit handler interception).
VMRUN/VMLAUNCHçalıştır. OS, kaydedilen RIP'te VM'in "içinde" devam eder; kendi açısından hiçbir şey değişmedi ve reboot olmadı.- Hypervisor yalnızca seçili event'leri (belirli MSR'lar, CPUID,
VMCALL) intercept eder, böylece overhead ve footprint'i minimal ("thin") tutar.
Beklenen gözlem: virtualization reboot olmadan aktif hale gelir — CPUID hypervisor-present bit'i flip olabilir ve az önce native çalışan intercept edilmiş event'ler için artık VM-exit'ler meydana gelir.
Warning
Dual-use: tam olarak aynı indirgeme, meşru research/EDR hypervisor'larının (ör. hvpp) altında yatar — bkz. Virtualizing an already-running OS. Fark: bu not'un vurgusu stealth/rootkit tarafıdır (minimal "thin" intercept footprint, AMD SVM / Blue Pill kökeni, isolation inversion'ı gizleme); sibling not aynı tekniği araştırma VMM perspektifinden (hvpp, Intel VT-x, EPT identity-map, passthrough handler) ele alır. Kavramsal olarak belgelenmiştir; bu bir rootkit tarifi değildir.
Detection¶
- Timing: injection sonrası, artık trap eden instruction'lar VM-exit overhead'i gösterir — VM-exit latency fingerprinting ve red pill-style probe'larla ölç.
- State: bare-metal boot eden bir makinede (bkz. CPUID hypervisor-present bit detection) meşru bir VMM olmadan beliren bir hypervisor-present geçişi güçlü bir sinyaldir.
Mitigation¶
- Measured/secure boot + boot-time VMM sahipliği: trusted bir hypervisor (ya da
firmware) zaten VT-x/SVM'i tutuyorsa, OS'tan sonradan gelen bir
VMXON/SVM enable girişimi başarısız olur — on-the-fly insertion'ı reddeder. - VBS/HVCI ve IOMMU/DMA protection, virtualization'ı enable etmek için gereken kernel foothold'unun çıtasını yükseltir.
- EFER.SVME / CR4.VMXE geçişleri ve non-authorized driver'lardan gelen VMXON için endpoint monitoring.
References¶
- Joanna Rutkowska, "Introducing Blue Pill", The Invisible Things Blog (2006): https://blog.invisiblethings.org/2006/06/22/introducing-blue-pill.html