AMD-V (SVM/Pacifica) thin rootkit hypervisor¶
"Blue Pill" sınıfı thin hypervisor rootkit: AMD-V (SVM, kod adı Pacifica) kullanarak çalışan bir OS'u anında bir guest'e indirgemek; böylece rootkit OS'un altında ring -1'de çalışır ve OS habersizce execute etmeye devam eder.
Mechanism¶
Note
Hardware virtualization, bir hypervisor'ın bir OS'un altında, OS'un içeriden
inceleyemeyeceği bir privilege level'da (sıkça ring -1 denir) çalışmasına izin
verir. AMD-V VMRUN/VMSAVE/VMLOAD, VMCB ve intercept control'lerini sunar;
en önemlisi, zaten çalışan bir OS'u reboot olmadan virtualize edebilir —
klasik virtualize-an-already-running-OS
primitive'i. Thin bir rootkit mevcut CPU state'ini bir guest VMCB'ye yakalar,
minimal bir hypervisor kurar ve orijinal OS'u bir guest olarak VMRUN'lar.
İzolasyon inversion'ı güvenlik noktasıdır: trust boundary ters çevrilir.
Normalde hypervisor guest'leri koruyan TCB'dir; burada kötü niyetli bir
hypervisor meşru bir OS'un altına enjekte edilir ve OS habersiz bir guest olur.
Seçili event'leri intercept edebilir
(MSR/IO/CR
access'leri, VMMCALL) ve aksi halde stealth için dormant
kalabilir.
"Thin" denmesinin nedeni mümkün olduğunca az intercept etmesidir — VM-exit latency'sini ve footprint'i minimize ederek detection'dan kaçınır. VT-x Blue Pill / on-the-fly injection konseptinin AMD karşılığıdır.
Walkthrough¶
Public reference: Joanna Rutkowska'nın orijinal "Blue Pill"i (Black Hat 2006) ve AMD64 APM Vol. 2 (SVM). Kavramsal adımlar:
- SVM desteğini kontrol et (
CPUIDFn8000_0001 ECX SVM bit'i) veEFER.SVME'de SVM'i etkinleştir. - Bir host save area ve bir guest VMCB tahsis et; mevcut CPU/control-register state'ini guest VMCB'ye snapshot'la ki OS tam kaldığı yerden resume etsin.
- VMCB'de minimal intercept'leri programla (örn.
VMMCALLve rootkit'in ihtiyaç duyduğu her şey); hız ve stealth için çoğu event'i un-intercept bırak. VMRUNexecute et — orijinal OS artık guest olarak çalışır; rootkit her yapılandırılmış intercept'te#VMEXITile kontrolü kazanır.- Uninstall için state'i restore et ve SVM'i devre dışı bırak.
Beklenen gözlem: OS çalışırken SVM etkin hale gelir; bir guest VMCB OS'un kendi state'ini tanımlar; yapılandırılmış intercept'ler aksi halde normal OS işlemlerinde tetiklenir.
Warning
Thin-hypervisor rootkit'ler bir konsept ve research konusudur. Bu entry detection/defense için çerçevelenmiştir; uçtan uca bir implementasyon sunmaz.
Detection¶
- Timing:
VMRUN/#VMEXITround-trip'leri intercept edilen instruction'lara ölçülebilir latency ekler; RDTSC delta ve VM-exit latency fingerprinting beklenmedik bir hypervisor'ı ortaya çıkarabilir (rootkit'in counter-detection'ı bir silahlanma yarışıdır). - State kontrolleri: bare metal sanılan bir sistemde
EFER.SVMEset; rootkit onu temizlemezse CPUID hypervisor present bit. - Measured/attested boot ve ring -1'i önce işgal eden meşru bir hypervisor, slot'u reddeder.
Mitigation¶
- Boot'ta virtualization-based security / trusted bir hypervisor etkinleştir ki SVM
slot'u zaten alınmış olsun ve OS'tan
VMRUNtrap'lensin ya da reddedilsin. - Desteklenen yerde SVM'i firmware ile kilitle; mevcut olmaması gereken bir hypervisor'ı saptamak için measured boot ve remote attestation kullan.
- SVM'i etkinleştirmek için gereken MSR'lara ve instruction'lara erişimi kısıtla (kernel-only); on-the-fly injection için attack surface'i azalt.
References¶
- J. Rutkowska, "Subverting Vista Kernel For Fun And Profit" / "Blue Pill", Black Hat USA 2006. https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2008/08/20084218/BH-US-06-Rutkowska.pdf
- J. Rutkowska, "Introducing Blue Pill" (Invisible Things Lab, 2006) — AMD-V/SVM ile çalışan OS'u on-the-fly virtualize etme. http://theinvisiblethings.blogspot.com/2006/06/introducing-blue-pill.html
- AMD64 Architecture Programmer's Manual, Vol. 2, "Secure Virtual Machine (SVM)".