Skip to content

SGAxe

SGAxe, CacheOut/L1D Eviction Sampling'i (CVE-2020-0549) genişleterek Intel'in üretim Quoting Enclave'inden SGX sealing ve attestation key'lerini çıkarır; geçerli attestation quote'ları forge eder ve remote attestation'ı alt eder.

Mechanism

SGAxe yeni bir microarchitectural bug değildir; CacheOut'un (L1D Eviction Sampling, CVE-2020-0549), çalınması tüm SGX trust model'ini kıran tek bir secret'a karşı silahlandırılmasıdır: sealing ve remote attestation için kullanılan uzun ömürlü key'ler. CacheOut attacker'a yönlendirilmiş leakage verir — seçilen bir line'ı L1 data cache'inden evict edip Line Fill Buffer'dan (LFB) geçirme ve sonra o in-flight byte'ları bir sibling/saldıran context'ten, hatta L1TF/Foreshadow mitigation'larının mühürlemesi gereken enclave sınırı boyunca, transient olarak sample'lama yeteneği.

Note

SGAxe'in suistimal ettiği invariant şudur: SGX'in confidentiality garantisi, SGX'in kontrol etmediği microarchitectural buffer'ların üzerine katmanlanmıştır. SGX, enclave memory'sini DRAM'de (MEE aracılığıyla) encrypt eder ve enclave exit'te architectural state'i temizler, ama L1D/LFB'den in-flight geçen veri plaintext'tir ve CacheOut tarafından sample'lanır. Aynı physical CPU, Intel'in kendi Quoting Enclave'ini (QE) çalıştırdığından — bu enclave private EPID/attestation key'ini tutar ve per-platform sealing key'ini bir hardware root secret'tan hesaplar — QE'ye karşı tekrar tekrar CacheOut çalıştırabilen bir attacker eninde sonunda o secret'ları yeniden kurar. Attestation key bir kez bilindiğinde, attacker "Intel'in Attestation Service'i tarafından sonradan meşru sayılan keyfi SGX attestation quote'ları imzalayabilir", yani çalışan hiçbir enclave'i olmayan bir makine gerçek bir enclave gibi davranabilir. Bir verifier'ın göremediği bir enclave'e güvenmesini sağlayan özellik olan remote attestation çöker.

Walkthrough

Saldırı, bir key-recovery primitive'ini (victim/architectural enclave'e karşı CacheOut) attestation forge'u ile zincirler.

  1. Sealing key'i geri çıkar. Platform sealing key'ini L1D/LFB'den geçerken okumak için bir victim enclave'e karşı CacheOut çalıştır. Sealing key, hardware-fused bir root secret'tan ve enclave identity'sinden türetilir, dolayısıyla bir kez geri çıkarıldığında attacker'ın o enclave'in disk'e seal ettiği her şeyi decrypt etmesini sağlar.
  2. Quoting Enclave'i hedef al. Intel'in QE'si, quote'ları imzalamak için provisioning/attestation (EPID) private key'ini enclave memory'sine unseal eder. Attestation key'i kaldırmak için aynı CacheOut sampling'ini QE'nin working set'ine uygula.
  3. Bir quote forge et. Attestation private key elde edildiğinde, attacker'ın seçtiği keyfi bir REPORT/measurement üzerinden bir SGX QUOTE oluştur.
  4. Remote attestation'ı geç. Forge edilmiş quote'u gönder; gerçek platform key'iyle imzalandığından, Intel'in Attestation Service'i onu doğrular. Attacker "bir uzak tarafa gerçek bir SGX enclave gibi görünür, gerçekte ise neredeyse hiç koruma sunmaz."
Directed-leak primitive'i (kavramsal — CacheOut ile aynı şekil)

// 1. Evict the chosen secret line out of L1D so it drains via the LFB.
evict_l1d_set(secret_line);

// 2. Open a transient window (often inside a TSX region so the
//    architectural fault is suppressed and the window stays tight).
if (tsx_begin() == TSX_OK) {
    char v = *in_flight_secret;     // transient read of LFB-resident byte
    (void)probe[v * 4096];          // encode the byte into the cache
    tsx_end();
}

// 3. FLUSH+RELOAD decode: the probe line with a cache hit reveals v.
for (int i = 0; i < 256; i++)
    if (time_load(&probe[i * 4096]) < HIT_THRESHOLD) leaked = i;
Birçok evict/sample round'u üzerinden ortalama almak, QE'nin key materyalini byte byte yeniden kurar.

Altta yatan L1D Eviction Sampling primitive'i için ../sidechannel/cacheout.md'a ve SGAxe'in paralel olduğu daha önceki L1TF tabanlı SGX attestation kırılması için ../sidechannel/foreshadow-ng.md'ye bakın.

Detection

Enclave içi detection yoktur: tasarım gereği bir enclave sibling microarchitectural sampling'i gözlemleyemez. Platform sahipleri yalnızca attestation garantisinin kendisini detection sınırı olarak değerlendirebilir — Intel'in yanıtı key'leri revoke edip yeniden çıkarmaktır (TCB recovery), böylece en son TCB seviyesini zorunlu kılan bir verifier, vulnerable, artık untrusted key versiyonu altında imzalanmış quote'ları reddeder.

Mitigation

Warning

CPU'yu patch'lemek gereklidir ama yeterli değildir: vulnerable bir platformda var olmuş herhangi bir attestation key compromise edilmiş varsayılmalıdır.

  • Microcode + buffer clearing. CVE-2020-0549 için Intel microcode'u artı VERW/MD_CLEAR buffer overwrite ve context/VM switch'te L1D flush, L1D-eviction leak'ini kapatır (CacheOut/MDS ile aynı mitigation'lar). SMT ve TSX'i devre dışı bırakmak pencereyi daha da daraltır.
  • TCB recovery. Intel, daha önce çıkarılmış tüm attestation key'lerini geçersiz kılan ve patch'lenmiş microcode versiyonuna bağlı yenilerini re-provision eden bir Trusted Computing Base recovery uygular, böylece eski key'le imzalanmış forge edilmiş quote'lar artık kabul edilmez.

References