Skip to content

Directory Attack (non-inclusive LLC)

Non-inclusive cache hierarchy'lerde (ör. Skylake-X) LLC inclusive olmasa bile coherence directory inclusive'dir — yani bir directory entry'yi evict etmek, kurbanın line'ını private cache'inden çıkarır ve shared memory olmadan cross-core Prime+Probe ile Evict+Reload'u yeniden mümkün kılar.

Mechanism

Inclusive yapı cache değil, directory'dir

Prime+Probe gibi conflict tabanlı cross-core saldırılar klasik olarak inclusive bir last-level cache'e dayanır: bir core'un private L1/L2'sindeki her şey shared LLC'de de bulunmak zorundadır, dolayısıyla onu LLC'den evict etmek private cache'ten de çıkarır. Non-inclusive LLC'ler (Intel Skylake-X ve sonraki server parçaları) bu varsayımı kırar — bir line, bir core'un private cache'inde LLC kopyası olmadan yaşayabilir, böylece LLC eviction artık ona ulaşmaz.

Yan ve arkadaşları, coherence'ın invalidation'ları yönlendirmek için her cache'lenmiş line'ı hâlâ track etmesi gerektiğini gözlemledi. Bu tracking, etkin biçimde inclusive olan bir coherence directory'de yaşar: herhangi bir private cache'teki her line'ın bir directory entry'si vardır. Directory set-associative ve slice-hashed olduğundan, tıpkı bir cache gibi conflict-evict edilebilir. Bir kurbanın directory entry'sini evict etmek, kurbanın line'ını private cache'inden çıkarır (bir back-invalidation), saldırgana inclusive bir LLC'nin vereceği gözlemlenebilir eviction sinyalinin aynısını verir.

Bu nedenle saldırgan, LLC için değil directory için (onun "extended directory" / snoop-filter way'leri) bir eviction set inşa eder ve bunu prime adımı olarak kullanır. Minimal varsayımlar: kurbanla shared virtual memory yok ve same-core co-residency yok.

Walkthrough

1. Reverse the directory geometry. Directory way sayısını ve slice/set hash'ini, tıpkı bir LLC eviction set inşa eder gibi empirik olarak belirleyin, ancak eviction'ın bir LLC miss değil de remote private-cache eviction olarak gözlemlenecek şekilde ince ayar yaparak.

2. Build a directory eviction set for the victim's target line. Kurbanın line'ının directory set'inde çakışan congruent bir adres grubu; bunları prime etmek directory entry'yi evict eder ve kurbanın private kopyasını back-invalidate eder.

# conceptual: confirm directory eviction reaches a remote core
prime  directory set with attacker eviction set   (core A)
signal victim to access target line               (core B, private cache)
probe  directory set                              (core A)
  -> slow ways  => victim re-inserted its entry => victim accessed target

3. Run the cross-core attack. Bu primitive ile makale şunları inşa eder:

  • non-inclusive bir cache üzerinde ilk cross-core Prime+Probe, ve
  • aynı donanım üzerinde high-bandwidth Evict+Reload (bkz. Evict+Reload).
Yazarların raporladığı uçtan uca sonuç
target: Intel Skylake-X server, non-inclusive LLC
attack: cross-core Prime+Probe via coherence directory
demo:   extracted RSA key bits during a GnuPG exponentiation
assumptions: no shared memory with victim; attacker on a different core

Non-inclusive ≠ güvenli

Yaygın bir varsayım, non-inclusive LLC'lere geçmenin conflict tabanlı cross-core saldırıları yendiğiydi. Bu çalışma, directory'nin saldırıların ihtiyaç duyduğu inclusion özelliğini yeniden devreye soktuğunu gösteriyor, dolayısıyla non-inclusivity'nin mitigation değeri büyük ölçüde yanıltıcıdır.

Detection

Diğer conflict tabanlı saldırılar gibi, priming/probing perf hardware counter'larında görülebilen anormal private-cache ve LLC miss pattern'leri üretir, ancak sinyal LLC data array'inde değil directory üzerindedir.

Mitigation

  • Directory'nin randomized / encrypted indexing'i (cache'ler için CEASER'a benzer) ki bulunan bir directory eviction set zamanla geçersizleşsin.
  • Directory kaynaklarını security domain'ler arasında partition etmek.

References