Skip to content

SEV-Step (single-stepping framework for AMD SEV)

Kötü niyetli bir hypervisor'ın AMD SEV/SEV-SNP confidential VM'leri her seferinde bir instruction olacak şekilde single-step etmesini sağlayan yeniden kullanılabilir bir framework; page-fault tracking ve cache-attack primitive'lerini açığa çıkarır — SGX-Step'in SEV analoğu.

Mechanism

AMD SEV (Secure Encrypted Virtualization) ve SEV-SNP, untrusted bir hypervisor'ın VM verisini okuyamaması için guest memory'yi encrypt eder ve integrity-protect eder. Ama hypervisor hâlâ platformun privileged scheduling kaynaklarını kontrol eder: local APIC timer ve nested/second-level page table'lar (NPT) artı Reverse Map Table (RMP).

Note

Zayıflatılan sınır: SEV memory içeriğinin confidentiality ve integrity'sini korur, ama guest execution'ın timing ve fault davranışını değil. Kötü niyetli hypervisor hâlâ APIC timer'a ve NPT/RMP mapping'lerine sahip olduğundan, encrypted guest'i tam olarak bir instruction'dan sonra interrupt edebilir ve hangi guest page'lerin fault verdiğini gözlemleyebilir. Single-stepping, kaba, gürültülü microarchitectural side channel'ları yüksek çözünürlüklü, instruction başına ölçümlere dönüştürür — encryption'ın gizlemediği herhangi bir residual leakage'i (instruction timing, operand-dependent cache footprint'leri) dramatik biçimde amplify eder.

Teknik SGX-Step'i yansıtır (bkz. sgx-step-single-stepping.md): APIC timer'ı, guest resume olduktan hemen sonra fire edecek şekilde arm et, böylece VM bir sonraki VM-exit'ten önce tek bir instruction ilerler, sonra tekrarla. SEV-Step bunu NPT page-fault tracking (erişimde exit'e zorlamak için page permission'larını iptal ederek) ve eviction-set tabanlı cache saldırılarıyla birleştirir, tek bir yeniden kullanılabilir araştırma aracı olarak paketlenmiştir.

Walkthrough

Kamuya açık SEV-Step makalesine göre (Wilke ve diğ., TCHES 2024; arXiv:2307.14757) yüksek seviyeli:

  1. APIC timer'ı kalibre et. Hypervisor'dan bir timer değeri seç, böylece VM entry'den sonra guest, timer interrupt bir VM-exit'e zorlamadan önce bir instruction yürütür.
  2. Single-step başarısını tespit et. Instruction-page'in retire/access edilip edilmediği gibi bir sinyal kullanarak "tam olarak bir instruction ilerledi"yi zero-step ya da multi-step'lerden ayırt et — framework step başarısını raporlar, böylece attacker hizalı kalır.
  3. Page'leri track et. Seçilen guest page'lerinde access permission'larını kaldırmak için NPT/RMP entry'lerini manipüle et, böylece track edilen bir page'e her erişim hypervisor'ın gözlemlediği bir nested page fault üretir (instruction çözünürlüğünde bir controlled-channel sinyali).
  4. Bir microarchitectural kanal ekle. Adımlar arasında eviction set'ler kur ve operand-dependent access pattern'lerini okumak için cache saldırıları (örn. Prime+Probe) çalıştır; makale Nemesis tarzı instruction/operand inference'ı ve bir LUKS2 volume key'inin extraction'ını gösterir.
  5. Instruction başına fault ve timing trace'inden secret'ı yeniden kur.
Single-step döngüsü (kavramsal)
loop:
  arm_apic_timer(single_step_value)   # fire ~1 instruction after entry
  VMRUN guest                         # guest advances one instruction
  on VM-exit:
    record faulting guest page (NPT/RMP signal)
    sample cache state / instruction timing
  goto loop

Detection

  • Bu, bir guest'e karşı hypervisor tarafından yapılan bir saldırıdır, dolayısıyla guest içindeki bir savunmacı onu doğrudan göremez. Guest'e ya da attestation mantığına görünür olabilecek anomali sinyalleri:
  • Retire edilen instruction'lara göre patolojik olarak yüksek VM-exit / interrupt oranları (instruction başına yaklaşık bir exit) single-stepping'e işaret eder.
  • Guest page'lerinde devasa nested-page-fault hacmi ya da aynı page'lerde tekrarlayan permission flip'leri, controlled-channel page tracking'i düşündürür.
  • Bunu açığa çıkaran platformlarda, SEV-SNP interrupt/NMI counter'ları ya da önerilen single-step detection (örn. performance-counter tabanlı step detection) timing pattern'ini işaretleyebilir.

Mitigation

  • Daha yeni firmware/CPU'lardaki AMD SEV-SNP single-step protection / secure TSC ve interrupt kısıtlamaları, APIC-timer single-stepping'i reddetmeyi ya da tespit etmeyi amaçlar; platform firmware'ini güncel tut.
  • Guest içindeki constant-time / data-oblivious code, single-stepping'in amplify ettiği operand- ve branch-dependent footprint'leri kaldırır.
  • Instruction başına fault'ları tespit eden ya da randomize eden savunmalar (SGX controlled-channel mitigation'larına benzer) page-tracking sinyalini azaltır.
  • Hypervisor'ı, yalnızca platformun hardware single-step mitigation'ları sağladığı yerlerde threat model kapsamında değerlendir; aksi halde SEV tek başına bunu durdurmaz.

References