Skip to content

Foreshadow / L1 Terminal Fault (CVE-2018-3615)

Bir Intel page-fault (terminal fault) koşulunu suistimal ederek SGX enclave'in içinden L1 data cache'te resident olan data'yı okuyan ve enclave confidentiality'sini kıran bir transient-execution saldırısı.

Sibling'den farkı

Bu not, attestation/sealing key'lerini hedefleyen SGX-enclave varyantına (CVE-2018-3615) özeldir; aynı terminal-fault primitive'inin OS/SMM (CVE-2018-3620) ve cross-VM/EPT (CVE-2018-3646) boundary'lerine genelleştirilmesi ayrı bir not'tadır: Foreshadow-NG.

Mechanism

Bug class: permission resolution'dan önce bir terminal page fault üzerinde transient read

Bir terminal fault, bir page-table entry'sinin present bit'i clear olduğunda (veya başka bir şekilde translation'ı tamamlayamadığında) oluşur — access kaçınılmaz olarak fault edecektir. Etkilenen Intel core'larda, fault hâlâ çözülürken core, permission/abort logic operasyonu squash etmeden önce otherwise-invalid PTE'den alınan raw physical address'i kullanarak L1 data cache'ten data'yı speculatively forward edebilir. SGX için (CVE-2018-3615), enclave memory'si DRAM'de encrypted'tır ama kullanımdayken L1'de plaintext olarak görünür; enclave page'lerine dışarıdan bir access bir abort/fault yükseltir, yine de transient path L1-resident plaintext'i bir covert channel'a leak edebilir. Kırılan invariant şudur: SGX'in access-control check'i sadece architectural sonucu değil, value'yu gate etmelidir: transient execution, check tamamlanmadan önce enclave data'yı gözlemler, sonra onu bir Flush+Reload-style cache channel üzerinden encode eder. Leak L1'de present olan bir physical address'e keyed olduğundan, attacker'ın secret'ın cached olmasına ihtiyacı vardır; tooling bu koşulu prime edebilir. OS/SMM ve VMM/EPT varyantları (CVE-2018-3620 / CVE-2018-3646, "Foreshadow-NG") aynı terminal-fault primitive'ini enclave'lerin ötesinde kernel, hypervisor ve cross-VM memory'sine genelleştirir.

Walkthrough

foreshadowattack.eu ve USENIX Security 2018 paper'ı SGX saldırısını kavramsal olarak anlatır.

High-level reproduction (public paper'dan)
  1. L1'deki enclave data'yı hedefle. Secret enclave byte'larının L1 data cache'te resident olmasını sağla (enclave onlara dokunarak ya da attacker priming ile).
  2. Bir terminal fault oluştur. Enclave/secret page'e, PTE'si fault edecek (örneğin not-present) bir mapping üzerinden access et, böylece access abort olmaya mahkûm olur ama yine de L1'den transient forwarding'i tetikler.
  3. Byte'ı transiently encode et. Window sırasında, dependent bir load bir probe array'i index'ler: tmp = probe[secret_byte * 4096].
  4. Cache timing ile recover et. Fault deliver edildikten sonra probe array'i time'la; cached line leak edilen byte'ı açığa çıkarır (Flush+Reload).
  5. Iterate et. SGX sealing/attestation key'leri dahil enclave secret'larını dump etmek için byte-by-byte tekrarla, remote attestation güvenini çökert.

Detection

Zayıf runtime sinyalleri; mitigation state'e güven

  • Exception/PMU anomalileri — tek bir thread'den anormal derecede yüksek oranlarda handle edilen page fault veya machine_clears, L1TF-style probing'e işaret edebilir ama gürültülüdür.
  • Mitigation reporting — "Mitigation" durumu için /sys/devices/system/cpu/vulnerabilities/l1tf'i kontrol et ve L1D_FLUSH (MSR)'yi expose eden microcode'un loaded olduğunu doğrula.
  • Configuration drift — SMT'nin kapalı olması gereken hypervisor'larda yeniden enable edilmesine veya l1tf=off / kvm-intel.vmentry_l1d_flush=never boot'larına alert ver.
  • SGX için, host üzerindeki beklenmedik enclave debug interface'leri / single-stepping tooling'ini şüpheli olarak değerlendir.

Mitigation

Microcode + L1D flush, PTE inversion ve SMT disiplini

  • Geçişlerde L1D cache flush: microcode bir L1D_FLUSH kontrolü ekler; hypervisor, guest'lerin stale host/diğer-guest data'sını görmesini engellemek için VM entry'de L1D'yi flush'lar (VMM varyantı).
  • PTE inversion: OS, not-present PTE'lerin physical-address bit'lerini ters çevirir, böylece bir terminal fault geçerli cached physical memory'ye referans veremez (OS/SMM varyantı).
  • SMT'yi disable et / core scheduling sibling-thread L1 sharing'inin söz konusu olduğu yerlerde, çünkü L1D flush tek başına eşzamanlı çalışan bir sibling'i izole etmez.
  • SGX: microcode ve güncellenmiş SGX TCB uygula; etkilenen attestation key'leri TCB recovery ile revoke/rotate edilir. Daha yeni Intel silikonu (Cascade Lake ve sonrası) hardware fix'leri içerir — per-CPU l1tf durumunu takip et.
  • OS/VMM/SMM genelleştirmeleri için foreshadow-ng'a bak.

References