Skip to content

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):

  1. Bir kernel driver'dan SVM'i (EFER.SVME) / VT-x'i (CR4.VMXE, VMXON) kontrol et ve enable et.
  2. 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.
  3. Host state'i hypervisor'ın kendi minimal context'ine ayarla ve bir VM-exit handler kur (bkz. VM-exit handler interception).
  4. 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ı.
  5. 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

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