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:
- 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.
- Prime. Saldırgan, bir core'da hedef bir cache set'i kendi line'larıyla doldurur (prime eder).
-
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.
-
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.
- İ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.