Skip to content

Heracles: Chosen Plaintext Attack on AMD SEV-SNP

Kötü niyetli bir hypervisor, guest-page relocation sırasında deterministic XEX re-encryption'ı suistimal ederek confidential bir VM'in memory'sini decrypt eden bir chosen-plaintext oracle inşa eder.

Mechanism

Bug class: per-write freshness'i olmayan deterministic, address-tweaked memory encryption

AMD SEV-SNP, kötü niyetli bir hypervisor'ın guest plaintext'ini okuyamaması için tüm confidential-VM (CVM) DRAM'ini encrypt eder. Boundary, host/guest confidentiality duvarıdır. Memory XEX mode ile encrypt edilir: ciphertext, plaintext block'unun ve physical address'ten türetilen bir tweak'in deterministic bir fonksiyonudur. Aynı address'teki aynı plaintext her zaman aynı ciphertext'i verir (nonce yok / per-write freshness yok) ve tweak yalnızca block'un nerede yaşadığına bağlıdır, ne zaman yazıldığına değil.

Heracles üç gözlem yapar:

  1. Hypervisor, platform (PSP) API'leri ile DRAM'de encrypted guest page'leri taşıyabilir.
  2. Bir page'i yeni bir physical address'e taşımak, onun yeni address'in tweak'i altında re-encrypt edilmesine yol açar.
  3. O re-encryption deterministic'tir.

Bunlar birlikte hypervisor'ın address tweak'ini sıyırmasına olanak tanır: bir victim block'unu, tweak'ini attacker'ın kontrol ettiği/bildiği bir address'e relocate ederek ve sonucu aynı address'e yerleştirilen bilinen plaintext'lerin ciphertext'leriyle karşılaştırarak, attacker bir chosen-plaintext / dictionary oracle (CPO) inşa eder. Freshness'siz deterministic encryption, eşit plaintext'in eşit ciphertext vermesi demektir — bu eşitlik data'yı leak eder.

Walkthrough

High-level chosen-plaintext oracle (kavramsal)
  1. Bir probe address seç. XEX tweak'ini attacker'ın karakterize edebileceği bir DRAM physical address A seç.
  2. Dictionary'yi inşa et. Her candidate plaintext block value için, onu A'da encrypt ettir (örneğin guest'i induce ederek ya da attacker-controlled CVM state ile) ve ciphertext = Enc_tweak(A, plaintext) kaydet.
  3. Secret'ı relocate et. Hypervisor page-move API'sini kullanarak victim'ın secret block'unu A address'ine taşı, aynı tweak altında re-encryption'ı tetikle.
  4. Match et. Relocate edilen ciphertext'i dictionary ile karşılaştır; bir hit, block'un plaintext'ini block granularity'sinde açığa çıkarır.
  5. Byte'lara incelt. Dört ek primitive, victim'ın kendi access pattern'lerini suistimal ederek leakage'ı byte granularity'sine daraltır.

Kernel memory, cryptographic key'ler, user password'lar leak etme ve web-session hijacking sağlama gösterildi. ACM CCS 2025'te sunuldu (Schlüter, Wech, Shinde — ETH Zurich). CVE-2025-0033 olarak takip edilir (AMD bülteni SB-3014'e bak).

Detection

  • Host-side (trusted bir control plane'den): tek bir CVM'in page'lerini hedefleyen SEV/PSP page-move / swap API'lerinin anomalous, high-frequency kullanımı — legitimate workload'lar page'leri çok daha az agresif şekilde relocate eder.
  • Hypervisor audit log'ları: aynı guest physical frame'ler üzerinde tekrarlı relocate-then-read döngüleri.
  • Not: guest'in saldırıya görünürlüğü yoktur (hypervisor adversary'dir); tespit, firmware/attestation telemetry'sinde veya PSP command oranlarını monitor eden trusted bir orchestrator'da yaşamalıdır.

Mitigation

Hypervisor-driven page movement'i disable ederek mitigate edildi

AMD'ye Ocak 2025'te rapor edildi; coordinated disclosure. AMD bunu SEV-SNP firmware ABI üzerinden ele aldı.

  • PAGE_SWAP_DISABLE / page movement'i kısıtla: AMD'nin SEV-SNP ABI spec 1.58 (Mayıs 2025)'i, bir guest policy'sinin hypervisor'ın page'lerini relocate etmesini yasaklamasına izin verir. Page movement olmadan, attacker seçilen bir tweak altında re-encrypt edemez ve CPO'yu inşa edemez — doğrudan CPU performans maliyeti olmadan.
  • Trade-off: cloud provider'lar o guest'ler için memory overcommit / defragmentation (page swapping, large-page coalescing) kaybeder; dolaylı bir maliyet.
  • Defense in depth: VM type/firmware'i pin'leyen attestation policy'leri ve gelecekteki tasarımlarda per-write freshness (nonce tabanlı) memory encryption, deterministic-oracle kök nedenini ortadan kaldırırdı.

References