Skip to content

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