Skip to content

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.

  1. Hypervisor, çalışan CVM'e seçtiği bir anda 29 (#VC) interrupt'ı inject eder ve seçtiği bir exit_reason sağlar.
  2. Guest #VC handler'ı ima edilen instruction'ı emüle eder ve paylaşımlı GHCB üzerinden hypervisor ile register ve memory değerlerini takas eder.
  3. 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).
  4. 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_reason değ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.

References