Skip to content

Foreshadow-NG (L1 Terminal Fault)

Foreshadow'un L1TF leak'ini SGX'in ötesinde OS/SMM'e ve VM boundary'leri boyunca genelleştir: bir non-present page-fault, raw PTE physical bit'leri tarafından adreslenen L1D cache içeriğini transiently forward eder ve L1'de resident olan herhangi bir data'yı leak eder.

Sibling'den farkı

Bu not OS/SMM (CVE-2018-3620) ve VMM/EPT (CVE-2018-3646) genelleştirmelerini kapsar; orijinal SGX-enclave varyantı (CVE-2018-3615) ve attestation/TCB-recovery boyutu için Foreshadow / L1 Terminal Fault'a bak.

Mechanism

Neden çalışır

Bir page-table entry'sinin present bit'i clear olduğunda, x86 yine de speculatively devam eder: CPU, terminal page fault çözülmeden önce PTE'de saklanan physical address bit'lerini L1 data cache'e forward eder. Eğer o physical address'teki bir line L1'deyse, içeriği dependent instruction'lara transiently return edilir — L1 Terminal Fault (L1TF).

Foreshadow (CVE-2018-3615) bunu SGX enclave'lerine karşı kullandı. Foreshadow-NG onu genelleştirir:

  • OS/SMM (CVE-2018-3620): bir attacker, physical-address bit'leri bir victim physical page'e işaret eden non-present bir PTE crafler; transient L1 read o page'i leak eder.
  • VMM/hypervisor (CVE-2018-3646): forward edilen address bir host physical address olduğu için, kötü niyetli bir guest L1'deki herhangi bir data'yı okuyabilir, diğer VM'ler ve hypervisor dahil — EPT tabanlı isolation'ı çökerterek.

leak/transmit/decode invariant'ı:

  • Leak: non-present (veya özel-permission'lı) bir load, attacker-controlled PTE physical bit'leri tarafından adreslenen bir L1D line'ını transiently okur.
  • Transmit: transient value bir probe array'i index'ler, onu cache state'e encode eder.
  • Decode: Flush+Reload byte'ı recover eder.

Walkthrough

Attacker, present bit'i clear ama physical bit'leri hedefe işaret eden bir PTE kurar, sonra onu transiently okur:

// Conceptual L1TF leak (transient; needs a non-present PTE under attacker control).
flush(probe);
TRANSIENT {                                  // fault is suppressed/handled
    uint8_t v = *(volatile uint8_t *)mapping; // PTE present=0; phys bits -> L1D
    (void)probe[v * 4096];                    // encode transient L1 byte
}
uint8_t leaked = reload_index(probe);        // Flush+Reload recovers v

VMM varyantında "physical bit'ler" bir host physical address'tir, dolayısıyla bir guest, EPT boundary boyunca okumak için L1'de resident olan host physical page'leri iterate eder.

Beklenen sonuç (kavramsal)
target byte in L1 : recovered via fastest probe line
target NOT in L1  : no transient forward -> no signal (must prime L1 first)

Warning

L1TF yalnızca L1D'de resident olan data'yı leak eder. Pratik saldırılar önce victim/host'un hedefi L1'e getirmesine yol açar (örneğin victim'ın kendi access'leri veya sibling SMT thread'inde scheduling ile).

Detection

Victim-içi tespit zor; mitigation state + host-side sinyallere güven

  • Mitigation reporting — kernel'in vulnerability durumu için /sys/devices/system/cpu/vulnerabilities/l1tf'i kontrol et; Mitigation (örn. PTE Inversion ve VMX için flush/SMT vulnerable/disabled) raporlamalıdır. L1D_FLUSH (MSR) capability'sini expose eden microcode'un loaded olduğunu ayrıca doğrula.
  • Configuration drift — hypervisor host'larında SMT'nin yeniden enable edilmesine veya l1tf=off / kvm-intel.vmentry_l1d_flush=never gibi mitigation'ı zayıflatan boot parametrelerine alert ver.
  • PMU anomalileri (zayıf sinyal) — L1TF probing bir victim/host context'i içinde doğrudan gözlenemez, ancak host tarafında anormal derecede yüksek page-fault oranları veya machine_clears gürültülü/dolaylı işaretler olabilir.

Mitigation

  • VM entry'de L1D'yi flush et (microcode L1D_FLUSH MSR) ve enclave/SMM exit'inde.
  • PTE inversion: non-present PTE'ler için OS, physical-address bit'lerini ters çevirir, böylece non-present/unbacked memory'ye işaret ederler.
  • Core scheduling / SMT'yi disable et, böylece bir attacker L1'i bir victim ile paylaşamaz.

References