Skip to content

SEVerity: Code Injection Attacks against Encrypted VMs (CVE-2020-12967)

AMD SEV/SEV-ES guest memory'sini encrypt ettiği ama onu integrity açısından korumadığı — ve nested page table'ları hypervisor kontrolünde bıraktığı — için, kötü niyetli bir hypervisor, attacker kodunu meşru I/O path'leri üzerinden encrypted VM'e sokabilir ve sonra execution'ı ona yönlendirebilir, code gadget olmadan ve spesifik bir CPU'ya bağımlılık olmadan.

Mechanism

Eksik invariant: integrity olmadan confidentiality, isolation değildir

SEV bir VM'in RAM'ini encrypt eder ve SEV-ES ek olarak world switch'ler boyunca saklanan register state'ini encrypt eder; belirtilen amaç kötü niyetli bir host'un guest data'sını "ne öğrenmesi ne de değiştirmesi"dir. Belirtilmeyen, karşılanmayan invariant integrity'dir: SEV(-ES) ciphertext'i authenticate etmez ve nested/second-level page table'ları (NPT) hypervisor kontrolünde kalır.

SEVerity bu iki boşluğu chain'ler:

  • Hypervisor, guest'in yaptığı I/O'yu sürerek (guest'in kendisinin memory'sine DMA'lanmasına/yazılmasına neden olduğu data) bilinen attacker-chosen ciphertext'i spesifik encrypted guest page'lerine yerleştirebilir.
  • Host NPT'ye sahip olduğu için, o encrypted page'leri remap ve relocate edebilir ve guest'in instruction pointer'ını enjekte edilen koda yönlendirebilir, hiç plaintext okumaya ya da guest içinde gadget bulmaya ihtiyaç duymadan.

Sonuç, tamamen dışından sürülen, confidential VM'in içinde arbitrary code execution'dır. CVE-2020-12967 altta yatan zayıflığı yakalar: SEV'deki korumasız nested page table'ları böyle bir manipülasyona izin verir. Bu, "RAM'i encrypt et"in "VM'i izole et" ile eşdeğer olmadığının kanonik gösterimidir.

Walkthrough

2021 IEEE Security & Privacy Workshops (WOOT) paper'ından ve arXiv:2105.13824'ten yüksek seviyeli yeniden inşa; yalnızca mantıksal adımlar, payload yok.

  1. I/O üzerinden kodu stage'le. Attacker (kötü niyetli hypervisor), guest'in attacker-controlled byte'ların encrypted guest memory'ye yazılmasına neden olan I/O yapmasını ayarlar. Saf plaintext-recovery saldırılarının aksine, SEVerity'nin hiçbir şeyi decrypt etmesi gerekmez — sadece bilinen ciphertext'in bilinen bir guest physical page'ine inmesine ihtiyacı var.
  2. Landing zone'u bul. NPT kontrolünü ve gözlemlenebilir guest davranışını kullanarak hypervisor, enjekte edilen page'in guest physical memory'de nerede oturduğunu belirler.
  3. Execution'ı yönlendir. Hypervisor, nested page-table mapping'lerini öyle manipüle eder ki guest'in control flow'u enjekte edilen encrypted payload'a ulaşsın — host'un encrypted memory'ye doğrudan erişemeyeceği SEV-ES kuralını atlayarak.
  4. Genellik. Paper, tekniğin in-guest gadget'a ihtiyaç duymadığını ve spesifik bir CPU revision'ına bağlı olmadığını bildirir, bu da onu daha önceki SEV code-execution çalışmalarından ayırır.
Bildirilen sonuç (temsili)
  • SEV-ES-korumalı VM'lere karşı gösterildi.
  • Yazarların değerlendirmesinde %100 başarı oranı.
  • Yazarlar tarafından, VM'leri encrypt ederken memory-integrity protection'ın zorunlu olduğunun kanıtı olarak çerçevelendi — yani SEV/SEV-ES tek başına yetersiz.

Detection

  • Anormal I/O-to-execution coupling. Injection, host'un guest I/O'sunu sürmesine ve sonra control flow'u yönlendirmesine dayanır; bir control-flow değişikliğinden kısa süre önce guest I/O buffer'ları etrafında yoğun, alışılmadık NPT remapping kaydeden bir confidential-computing monitor'ının makul bir sinyali vardır — ancak SEV/SEV-ES modelinde adversary host'tur, dolayısıyla böyle telemetry hypervisor'dan değil hardware/attestation'dan gelmelidir.
  • Attestation boşlukları. SEV/SEV-ES launch attestation, başlangıç VM state'ini kapsar ama runtime page-table integrity'sini değil; saldırının varlığı başlı başına detection içgörüsüdür — runtime integrity'nin yokluğu yalnızca başarılı tampering olarak gözlemlenebilir.
  • Guest-side integrity check'leri (örn. kritik code page'lerinin self-measurement'ı) executable region'ların beklenmeyen modifikasyonunu yüzeye çıkarabilir.

Mitigation

  • SEV-SNP kullan. AMD'nin Secure Nested Paging'i, host'un guest page'lerini sessizce enjekte etmesini ya da relocate etmesini engelleyen eksik integrity/anti-remap koruma'larını (reverse-map table, page-validation) ekler — CVE-2020-12967 sınıfı için mimari fix. İlgili host-side bug'lar SNP hardening altında izlenir (SEV-SNP üzerindeki systematic ciphertext side-channel'lar).
  • Yalnızca-confidentiality encryption'ı yetersiz say. Paper'ın çekirdek rehberi: memory encryption integrity ile eşlenmelidir; bunu eksik bırakan tasarımlar (SEV, SEV-ES) kötü niyetli bir host'a karşı güvenilmemelidir. Bu, sevurity.md ve tlb-poisoning-attacks-on-amd-sev.md ile aynı derstir.
  • Host için defense in depth. Host injection vector olduğu için, hypervisor trust surface'ini azalt ve KVM/firmware'i patch'li tut.

References