Ring Interconnect Contention (Lord of the Ring(s))¶
CPU'nun on-die ring interconnect'indeki gecikmeleri ölçerek başka bir core'un memory aktivitesini sızdırmak, çünkü ring in-flight trafiği yeni inject edilen trafiğe göre önceliklendirir.
Mechanism¶
Note
Birçok Intel client CPU'sunda core'lar, LLC slice'ları ve system agent bir on-die ring interconnect üzerinden haberleşir. Sızıntı, reverse-engineer edilmiş tek bir invariant'a dayanır: ring, in-flight trafiği yeni inject edilen trafiğe göre önceliklendirir. Yani saldırganın load'larının, halihazırda bir victim'in in-flight trafiğini taşıyan bir ring segment'ine inject edilmesi gerektiğinde, saldırganın load'ları gecikir ve ortalama load latency'leri yükselir. Bir core ring trafiğini yalnızca bir private-cache miss'inde inject ettiğinden, saldırgan coarse-grained event'ler gözlemler, ancak bu gecikmelerin timing'i victim'in memory-access davranışını sızdırır — hiçbir shared memory gerekmeden.
Ring'in iki bağımsız lane'i vardır, her biri interleaved agent alt kümelerine hizmet eden dört physical sub-ring'e (request, acknowledge, snoop, data) sahiptir. Contention, sender ve receiver target agent'larının ilgili ring üzerinde aynı cluster'a düşmesini ve shortest path boyunca segment'leri paylaşmasını gerektirir.
Walkthrough¶
Receiver, seçilen bir slice/set'e map'lenen LLC line'larından oluşan bir "monitoring set" oluşturur, ardından private cache'leri miss eden ama LLC'yi hit eden (dolayısıyla ring'i traverse etmesi gereken) load'ları, onları serialize etmek için pointer chasing kullanarak tekrar tekrar zamanlar:
// monitoring set: WLLC lines congruent in a chosen LLC slice/set (WLLC=16 on Skylake)
// pointer-chased so loads are serialized and each misses L1/L2 but hits LLC
t0 = rdtsc();
for (int i = 0; i < 4; i++) // time 4 sequential loads to amplify
p = *(void **)p; // pointer chase across two LLC sets
t1 = rdtsc();
record(t1 - t0); // higher delta => ring contention from victim
Bir sender, ring'i (bir LLC slice'ını hedeflemek için) 2 x WLLC line'la veya
(system agent / DRAM'e ulaşmak için) N > 2 x WLLC line'la "bombardıman eder".
Reported capacity
- Cross-core covert channel up to 4.14 Mbps (518 KBps) from a single thread, no shared memory; system-agent variant ~3.35 Mbps (418 KBps).
- CPUs: Core i7-9700 (Coffee Lake) and i7-6700K (Skylake).
- Core clusters A = {0,3,4,7}, B = {1,2,5,6}; Skylake WLLC=16, WL2=4.
Mitigation¶
Detection. Aktif probing kaba bir imza bırakır: tek bir thread'den gelen
olağandışı düzenli, yüksek frekanslı LLC-hit load pattern'leri (ring probing
loop'larıyla tutarlı) işaretlenebilir. Bazı Intel parçalarında ring ile ilgili
uncore performance counter'lar (ör. server'larda UNC_CHA_RING_*) anormal ring
utilization'ı ortaya koyabilir; ancak bu counter'lar unprivileged process'lerden
her zaman erişilebilir olmadığından detection primary defense olarak güvenilmez.
Interconnect bandwidth'inin hardware partitioning'i veya sensitive ve untrusted thread'leri çekişen ring segment'lerinde co-locate etmekten kaçınan scheduling, kanalı azaltır. Ek olarak constant-time cryptography (data-independent memory access pattern'leri) secret-dependent ring contention'ı ortadan kaldırır ve Intel CAT ile LLC way partitioning'i victim'in cache footprint'ini kısarak gözlemi zorlaştırır. Saldırı hiçbir shared memory'ye ihtiyaç duymaz ve birçok cache-only defense'ten sağ çıkar, dolayısıyla interconnect seviyesinde ele alınmalıdır.
References¶
- Lord of the Ring(s): Side Channel Attacks on the CPU On-Chip Ring Interconnect Are Practical (USENIX Security 2021, arXiv:2103.03443)
- Lord of the Ring(s) (USENIX presentation page)
- See also: Lord of the Ring(s) — aynı paper'ın detection, mitigation ve cryptographic key extraction detaylarını içeren tam sidechannel yazımı.