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.
- 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).
- Sampler'ı kur. Buffer içeriğini okumak için staging-buffer'a dokunan bir instruction'ı bir faulting/transient load ve bir
FLUSH+RELOADcache channel'ıyla birleştir, RIDL/MDS tarzı. - Victim'i bekle. Başka bir core'daki bir victim
RDRAND/RDSEED(veyaEGETKEY) çalıştırır ve secret'ını paylaşılan buffer'a bırakır. - 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.