Skip to content

Load Value Injection / LVI (CVE-2020-0551)

"Reverse Meltdown": victim'den secret'ları dışarı sızdırmak yerine, victim içindeki bir faulting ya da assisting load, bir microarchitectural buffer'dan attacker'ın enjekte ettiği data'yı transient olarak alır ve victim'in transient control/data flow'unu hijack eder. Birincil hedef: Intel SGX. INTEL-SA-00334 olarak takip edilir.

Mechanism

Note

Meltdown-type ve MDS-type saldırılar (bkz. ./foreshadow-l1-terminal-fault.md ve ./microarchitectural-data-sampling.md) bir faulting/assisting load'un bir microarchitectural buffer'dan (store buffer, line-fill buffer, load port) stale data'yı dependent instruction'lara transient olarak forward edebilmesinden faydalanır — data'yı dışarı sızdırır. LVI bunu tersine çevirir: faydalandığı invariant, attacker'ın aynı buffer'ları seçtiği değerlerle prime'layabilmesi, ardından bir victim load'un fault vermesini ya da bir microcode assist almasını ayarlayarak victim'in load'unun gerçek operand'ı yerine enjekte edilen değeri transient olarak tüketmesini sağlamasıdır. Victim içindeki dependent transient instruction'lar bu durumda attacker'ın kontrol ettiği data üzerinde hesaplar — örneğin enjekte edilmiş bir pointer'ı dereference ederek — ve victim'i bir confused-deputy disclosure gadget'ına dönüştürür. Injection, victim'in transient window'unun içinde gerçekleştiği için, yalnızca domain transition sırasında buffer'ları flush'layan savunmalar (alışılmış Meltdown/MDS mitigation'ı) bunu durdurmaz.

Walkthrough

Intel'in advisory/teknik dokümantasyonundan ve LVI paper'ından alınan yüksek seviyeli özet.

  1. Buffer'ı enjekte edilen değerle doldur. Attacker, bir microarchitectural buffer'ı (örneğin store buffer / fill buffer / load port) daha sonra forward edilmesi gereken seçilmiş bir değerle prime'lar.

  2. Faulting/assisting bir victim load'u tetikle. Attacker, victim load'unun gerçek değerini almaması ve bunun yerine enjekte edileni transient olarak alması için koşulları (victim'in load'unda page-fault, assist ya da abort) ayarlar.

attacker: prime buffer with VALUE  ->  victim load faults/assists  ->
          victim transiently uses VALUE  ->  victim "gadget" leaks via cache
  1. Bir victim gadget'ı sürükle. Enjekte edilen değer, microarchitectural side effect'i bir secret'ı encode eden sonraki bir victim transient operation'ını (örneğin bir indirect access) yönlendirir.

  2. Bir covering channel ile geri kazan. Attacker, encode edilen secret'ı ./flush-reload.md gibi bir cache channel ile geri okur.

Raporlanan kapsam (Intel / KU Leuven & Bitdefender, Mart 2020)
Name:     Load Value Injection (LVI)
CVE:      CVE-2020-0551   Advisory: INTEL-SA-00334   CVSS: ~5.6 (Medium)
Inverts:  Meltdown/MDS (injects values rather than leaking them)
Target:   primarily Intel SGX enclaves; trusted OS/VMM reduces practicality
Buffers:  store buffer, line-fill buffer, load ports

Warning

LVI güçlüdür ama SGX threat model'i dışında exploit edilmesi zordur: bir victim gadget'ı ve önemli ölçüde kontrol gerektirir. OS ve VMM'in trusted olduğu yerlerde Intel, gerçek dünyadaki pratikliği sınırlı olarak değerlendirdi — ancak OS'in untrusted olduğu SGX içinde, ilgili sınır budur.

Detection

  • Transient-execution saldırıları hiçbir architectural log artifact'ı bırakmaz; injection'ın signature ile tespit edilmesini beklemeyin.
  • SGX deployment'ları için, build'lerin LVI'yı mitigate eden toolchain'i kullandığından emin olun ve enclave'in TCB/microcode seviyesini attest edin ki downgrade edilmiş, mitigate edilmemiş bir enclave attestation'da reddedilsin.
  • Behavioral hunting (sınırlı fayda): cache-eviction loop'larının yanında bilerek tekrarlanan faulting load / assist tetikleyen co-resident process'ler.

Mitigation

  • INTEL-SA-00334 uyarınca Intel microcode/SGX SDK/PSW güncellemelerini uygulayın.
  • Compiler destekli mitigation: serialize edip transient forwarding'i bloklamak için potansiyel olarak savunmasız load'ların ardına bir LFENCE ekleyin; Intel/araştırma toolchain'leri otomatik bir LVI pass'i sağlar (ve ret'i non-speculative bir diziyle değiştirir) ki geliştiriciler her fence'i elle yerleştirmek zorunda kalmasın.
  • SGX enclave'lerini LVI mitigation'ı etkin şekilde yeniden derleyin; mitigation'ın önemli bir performans maliyeti taşıdığını anlayın, dolayısıyla onu SGX threat model'inin gerektirdiği yerlerde uygulayın.
  • Ek arka plan için orijinal LVI girdisine bakın: ./load-value-injection.md.

References