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)
- 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).
- 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.
- Byte'ı transiently encode et. Window sırasında, dependent bir load bir
probe array'i index'ler:
tmp = probe[secret_byte * 4096]. - 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).
- 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 veL1D_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=neverboot'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_FLUSHkontrolü 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
l1tfdurumunu takip et. - OS/VMM/SMM genelleştirmeleri için foreshadow-ng'a bak.