Skip to content

CrossTalk / SRBDS (CVE-2020-0543)

Special Register Buffer Data Sampling: RDRAND/RDSEED/EGETKEY gibi instruction'lar tüm core'lar tarafından paylaşılan bir offcore staging buffer'dan okur; bir core'daki attacker'ın başka bir core'da üretilen randomness ve SGX key'lerini sızdırmasına izin verir.

Mechanism

Bir avuç karmaşık, microcoded instruction sonucunu tamamen on-core üretmez. Tüm package için global — her CPU core'u arasında paylaşılan — küçük bir staging buffer'a offcore request çıkarır. Bu buffer son offcore sonuçlarını cache'ler: RDRAND/RDSEED için digital-RNG çıktısı, EGETKEY için SGX key material'i ve diğer vendor data'sı (örn. bazı CPUID leaf'leri).

Note

Microarchitectural Data Sampling (MDS/RIDL), core başına fill buffer'lardaki stale data'nın transient olarak sample'lanabildiğini gösterdi. CrossTalk şu kilit gözlemi ekler: staging buffer core'lar arasında paylaşılır: bir victim'in RDRAND'i bir core'da tamamlandıktan sonra değeri o global buffer'da kalır, bir attacker core'unun line fill buffer'ından geri akar ve orada sample'lanabilir hâle gelir. Bu, birbirine güvenmeyen kod'u ayrı physical core'lara scheduling etmenin standart savunmasını kırar — bu artık bu secret'ları izole etmez. SRBDS'in ihlal ettiği invariant: "bir instruction'ın kendi core'una döndürdüğü bir değer o core'da kalır."

Walkthrough

Attacker paylaşılan buffer'ı bir cross-core leak'e dönüştürür.

  1. Primitive'i haritala. Hangi instruction'ların staging buffer'ı dolduran offcore okumalar yaptığını bulmak için fuzz'la (RDRAND, RDSEED, EGETKEY, belirli CPUID leaf'leri).
  2. Sampler'ı kur. Buffer içeriğini okumak için staging-buffer'a dokunan bir instruction'ı bir faulting/transient load ve bir FLUSH+RELOAD cache channel'ıyla birleştir, RIDL/MDS tarzı.
  3. Victim'i bekle. Başka bir core'daki bir victim RDRAND/RDSEED (veya EGETKEY) çalıştırır ve secret'ını paylaşılan buffer'a bırakır.
  4. Core'lar arası sample'la. Az önce üretilen değeri geri çıkarmak için attacker core'undan staging buffer'ı oku.
Gösterilen etki

VUSec, RDRAND randomness'i tüketen tek bir signing operation'ından sonra farklı bir core'da çalışan bir victim SGX enclave'inden tam bir ECDSA private key'i geri çıkardı — leak'in yalnızca teorik değil, pratik olduğunu gösterdi.

Warning

Bu, genel crosstalk yazısının çerçevelemesinden ayrı bir disclosure'dır; burada odak SRBDS root cause'u ve resmi identifier'lardır. Etkilenen parçalar birkaç Intel client ve bazı server nesline yayılır; bir SKU için varsaymak yerine Intel'in affected-processor listesini kontrol et.

Detection

Diğer MDS varyantları gibi, temiz bir architectural sinyal yoktur; yüksek oranlı faulting-load veya TSX-abort pattern'leri heuristik olarak işaretlenebilir ama spesifik değildir.

Mitigation

Intel microcode (9 Haziran 2020'de yayınlandı) staging buffer güncellenirken memory bus'ı kilitler ve unlock'tan önce buffer'ın içeriğini temizler, böylece RDRAND, RDSEED ve EGETKEY sonuçları artık cross-core sample'lanamaz. Bu serialization o instruction'larda ölçülebilir bir performans maliyeti taşır ve fix yalnızca o spesifik kümeyi kapsar.

References

Aynı saldırının tamamlayıcı bir tarifi için mevcut crosstalk girdisine de bakın.