WeSee: Malicious #VC Interrupts Break SEV-SNP (CVE-2024-25743)¶
Untrusted bir hypervisor, bir AMD SEV-SNP confidential VM'ine sahte #VC exception'ları (vector 29) inject eder; guest'in #VC handler'ı attacker-kontrollü GHCB verisine güvenir ve VM state'ini leak etmeye ya da yazmaya zorlanır (WeSee / Ahoi, AMD-SB-3008).
Mechanism¶
Note
AMD SEV-SNP altında guest, kötü niyetli bir hypervisor'a karşı kriptografik
olarak korunur, ancak yine de servis istemek için bir kanala ihtiyaç duyar. Bu
kanal, guest içinde bir #VC handler tarafından işlenen #VC (VMM
Communication) exception, vector 29'dur; bu handler gereken
register'ları/memory'yi GHCB (Guest-Hypervisor Communication Block) — yani
korumasız, paylaşımlı bir page — içine kopyalar ve sonra sonuçları guest
context'ine geri kopyalar.
İhlal edilen invariant şudur: bir #VC, guest'in gerçekten çalıştırdığı bir instruction'a karşılık gelmelidir. SEV-SNP, hypervisor'ın keyfi bir noktada
VC raise etmesini engellemez: "hypervisor, bir SEV-SNP VM çalıştıran bir¶
CPU'ya istediği zaman kötü niyetli bir #VC inject edebilir" ve handler "bir
instruction'ın gerçekten exception'ı tetiklediğine dair validation'dan
yoksundur." Hypervisor tarafından seçilen bir exit_reason ile birleştiğinde,
inject edilen her #VC handler'ı, ya VM'e attacker-kontrollü veri yazan ya da VM
verisini paylaşımlı GHCB üzerinden dışarı leak eden bir operasyonu emüle etmeye
kandırır. Bu, Heckler
ile aynı malicious-interrupt / #VC-injection sınıfıdır.
Walkthrough¶
Public paper ve AMD bülteninden (WeSee, USENIX Security / IEEE S&P 2024; AMD-SB-3008) üst düzey, kavramsal reprodüksiyon. Exploit, offset veya gadget verilmemiştir.
- Hypervisor, çalışan CVM'e seçtiği bir anda 29 (#VC) interrupt'ı inject eder ve
seçtiği bir
exit_reasonsağlar. - Guest #VC handler'ı ima edilen instruction'ı emüle eder ve paylaşımlı GHCB üzerinden hypervisor ile register ve memory değerlerini takas eder.
- Inject'leri özel hazırlanmış exit reason'larla zincirleyerek attacker
primitive'ler inşa eder: instruction atla; bir register oku/yaz (örn.
rax'i açığa çıkaran/üzerine yazan vmmcall benzeri bir reason ile); ve kernel memory'sini oku/yaz (hypervisor'ın etkin pointer'ı kontrol etmesine izin veren mmio tarzı reason'lar ile). - Memory read/write ile attacker, kernel
.text'ini writable yapmak için page-table izinlerini flip eder ve code inject eder. Yayımlanan vaka çalışmaları NGINX kernel-TLS session key'lerini leak ediyor, firewall kurallarını devre dışı bırakıyor ve bir root shell başlatmak için bir network receive path'ine inject ediyor.
Warning
Linux guest kernel'inde patch'lendi / mitigate edildi (bir hotfix, gösterilen vakalar için #VC işlemeyi sertleştirir). Bug sınıfı için belgelenmiştir — bu, confidential computing'de guest tarafı bir trust failure'dır, anahtar teslim bir exploit değil.
Detection neden zor
Kötü niyetli sinyal, untrusted hypervisor'dan kaynaklanan #VC'nin inject edilmesinin kendisidir — guest'in trust boundary'sinin dışında. Defender'lar, host'un dürüstçe rapor vereceğine güvenilemeyeceği için guest'in hâlâ gözlemleyebileceği anomalilere bakmalıdır.
Detection¶
- Guest tarafı: anormal #VC frekansı veya guest'in fault etmesi gereken hiçbir
instruction çalıştırmadığı program noktalarında raise edilen #VC — handler'a
ulaşan beklenmedik
exit_reasondeğerleri bir kırmızı bayraktır. - Attestation: beklenen ölçülmüş kernel/initramfs ile (#VC-sertleştirme patch seviyesi dahil) eşleşmeyen bir SEV-SNP attestation raporu, patch'lenmemiş, maruz kalmış bir guest'e işaret eder.
- Vaka çalışmalarıyla tutarlı iş yükü anomalileri: açıklanamayan TLS key maruziyeti, sessiz firewall-kuralı değişiklikleri veya kernel context'ten başlatılan beklenmedik privileged process'ler (örn. bir network port'una bağlı bir shell).
Mitigation¶
- WeSee vaka çalışması saldırılarını mitigate eden Linux guest kernel #VC işleme sertleştirmesini uygula (CVE-2024-25742 / CVE-2024-25743 / CVE-2024-25744 ile birlikte takip edilir, AMD bülteni AMD-SB-3008).
- AMD'nin duruşu: bunları donanım yerine SEV-SNP'nin üçüncü taraf yazılım (guest OS) implementasyonlarındaki sorunlar olarak nitelendirir, dolayısıyla guest kernel'i patch'li tutmak birincil savunmadır.
- Bir tenant'ın secret provision etmeden önce patch'li bir kernel çalıştırdığını doğrulayabilmesi için dağıtılan guest image'ını SEV-SNP attestation ile doğrula.