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:
- Hypervisor, platform (PSP) API'leri ile DRAM'de encrypted guest page'leri taşıyabilir.
- Bir page'i yeni bir physical address'e taşımak, onun yeni address'in tweak'i altında re-encrypt edilmesine yol açar.
- 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)
- Bir probe address seç. XEX tweak'ini attacker'ın karakterize edebileceği bir DRAM physical address
Aseç. - 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) veciphertext = Enc_tweak(A, plaintext)kaydet. - Secret'ı relocate et. Hypervisor page-move API'sini kullanarak victim'ın secret block'unu
Aaddress'ine taşı, aynı tweak altında re-encryption'ı tetikle. - 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.
- 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ı.