Skip to content

MeltdownPrime / SpectrePrime

Meltdown ve Spectre'nin Prime+Probe variant'ları: invalidation-based cache-coherence protokollerini suistimal ederek, hiçbir explicit cache flush olmadan transient olarak sızdırılmış veriyi recover eder.

Mechanism

Kırılan invariant

Orijinal Meltdown ve Spectre saldırıları, transient olarak dokunulan secret'ı Flush+Reload ile recover eder; bu da paylaşılan/flush'lanabilir bir cache line'a bağlıdır. MeltdownPrime ve SpectrePrime, covert channel'ın transmit tarafının bunun yerine Prime+Probe kullanabileceğini gösterir: saldırgan bir cache set'i prime eder ve kurbanın transient erişimi (başka bir core'da) bir line'a yazdığında ya da onu fetch ettiğinde, invalidation-based coherence protocol saldırganın prime ettiği line'ı evict eder. Aşılan sınır Meltdown/Spectre ile aynı transient-execution veri sızıntısıdır — yeni olan şey, cross-core cache-line invalidation'ının (coherence'ın normal bir sonucu) sinyali taşımaya yetmesidir, dolayısıyla bir flush instruction'ı ya da paylaşılan bir memory line'ı gerektiğini varsayan savunmalar eksiktir. Bunlar Meltdown ve Spectre'nin önerilen ilk Prime+Probe variant'larıdır.

Walkthrough

Üst düzey, Trippel, Lustig & Martonosi (arXiv:1802.03802) kaynaklıdır:

  1. Otomatik sentez. Yazarlar, istenen bir hardware execution kalıbını üreten microarchitecture'a özgü programları sentezleyen bir araç inşa etmiş ve Prime variant'larını otomatik türetmek için kullanmıştır.
  2. Prime. Saldırgan, bir core'da hedef bir cache set'i kendi line'larıyla doldurur (prime eder).
  3. Transient kurban erişimi. İkinci bir core'da, Meltdown/Spectre transient dizisi secret'a bağlı bir adrese erişir. Invalidation-based bir coherence protocol altında bu erişim, saldırganın karşılık gelen prime edilmiş line'ını invalidate eder.

    Kavramsal channel şekli (yalnızca fragment)

    core A: prime cache set S
    core B: transient access to addr depending on secret  -> invalidates a line in S
    core A: probe set S -> the slow (evicted) line reveals the secret bits
    
    Sadece mantıksal şekil gösterilmiştir; çalışan bir PoC yeniden üretilmemiştir.

  4. Probe. Saldırgan, prime ettiği set'i yeniden zamanlar; evict edilmiş (yavaş) line, kurbanın hangi adrese dokunduğunu gösterir ve secret recover edilir.

  5. İki-core'lu saldırı. Her iki variant da coherence invalidation'dan yararlanan 2-core saldırılardır. Bir proof of concept olarak yazarlar SpectrePrime'ı Intel x86 üzerinde bir C programı olarak gerçekledi ve 100 run boyunca Spectre'a kıyaslanabilir doğruluk bildirdi (Spectre için yaklaşık %97.9'a karşı SpectrePrime için %99.95).

Detection

  • Prime+Probe imzaları. Aynı cache set'in zamanlanmış yeniden erişimiyle takip edilen tekrarlı full-set priming'i — klasik Prime+Probe loop'unu — özellikle sibling core'lar arasında eşleşmiş halde izle.
  • Cross-core contention. Meşru hiçbir paylaşılan verisi olmayan iki işbirlikçi thread arasındaki anormal coherence/invalidation trafiği channel'a işaret edebilir.
  • Performance counter'lar. Bir kurban thread'in etkinliğiyle senkronize biçimde fırlayan cache-conflict-miss ve coherence-invalidation counter'ları faydalı bir telemetri sinyalidir.

Mitigation

  • Meltdown/Spectre düzeltmelerini devral. Sızıntı kaynağı aynı olduğundan transient-execution mitigation'ları geçerlidir: Meltdown tarafı için KPTI, Spectre tarafı için Spectre mitigation'ları (retpoline, speculation barrier'lar, predictor hardening). Bkz. Meltdown-US ve Spectre.
  • Sadece flush channel'ı değil, transient window'u kapat. Prime+Probe bir flush instruction'ı gerektirmediğinden, yalnızca clflush'ı ya da paylaşılan belleği kısıtlayan mitigation'lar yetersizdir; savunmalar transient secret'a bağlı erişimin kendisini durdurmalıdır.
  • Cache partitioning / isolation. Cache'leri partition'lamak ya da color'lamak ve güvenilmeyen thread'leri coherence paylaşan core'larda birlikte schedule etmemek, Prime+Probe transmit channel'ının eşiğini yükseltir.

References