Skip to content

Intel Cache Allocation Technology

Paylaşılan LLC (ve L2) kapasitesini Class of Service başına capacity bitmask'leriyle bölen, bir victim'in cache footprint'ini izole etmek ve contention ile eviction tabanlı side channel'ları köreltmek için savunma amaçlı kullanılan bir Intel RDT özelliği.

Mechanism

Neden çalışır

Birçok cross-core saldırısı (Prime+Probe, eviction-set side channel'lar, cache contention covert channel'ları) attacker ile victim'in aynı last-level cache set'lerini paylaşmasına dayanır: attacker victim line'larını evict eder ve refill'i zamanlar. Cache Allocation Technology (CAT), yazılımın her workload'a cache way'lerinin kısıtlı bir dilimini vermesine izin vererek paylaşılan-kaynak varsayımına saldırır; böylece bir attacker'ın erişimleri victim'inkilerle örtüşmeyen way'lerle sınırlanabilir.

  • CAT, her logical CPU / thread'e IA32_PQR_ASSOC MSR'ı aracılığıyla bir Class of Service (CLOS / COS) atar (OS, context switch'te CLOS alanını yeniden yazar).
  • Her CLOS'un, bir MSR bloğunda tutulan bir capacity bitmask (CBM)'i vardır — L3'te CLOS n için IA32_L3_MASK_n (ve bir L2 karşılığı). Set bir bit "bu CLOS cache'in o kısmına (way'ine) allocate edebilir" anlamına gelir.
  • Intel hardware'i CBM'in tek, bitişik bir 1'ler dizisi olmasını gerektirir: 0x3, 0x6, 0xC geçerlidir; 0x5, 0x9, 0xA değildir. Örtüşmeyen mask'lere sahip iki CLOS izole cache alır; örtüşen mask'ler paylaşır.
  • Code/Data Prioritization (CDP) isteğe bağlı olarak bir CLOS'u ayrı code (L3CODE) ve data (L3DATA) mask'lerine böler.

Savunma invariant'ı: victim ve potansiyel attacker, disjoint CBM'lere sahip CLOS'larda çalışıyorsa, attacker victim'in cache way'lerine eviction set'leri kuramaz — contention ve Prime+Probe channel'larının ihtiyaç duyduğu paylaşılan-durum primitive'ini ortadan kaldırır. (CAT yalnızca allocation'ı kontrol eder, dolayısıyla kaba, kapasite seviyesinde bir isolation'dır, her channel'a karşı bir garanti değildir.)

Walkthrough

1. Linux resctrl arayüzünü mount et (kernel ≥ 4.10 L3/L2 CAT'i burada açar):

# mount -t resctrl resctrl /sys/fs/resctrl
# optional: -o cdp (L3 code/data split), -o cdpl2 (L2 split)

2. L3 için hardware limitlerini oku:

# cat /sys/fs/resctrl/info/L3/cbm_mask
7ff
# cat /sys/fs/resctrl/info/L3/min_cbm_bits
1
# cat /sys/fs/resctrl/info/L3/num_closids
16
# cat /sys/fs/resctrl/info/L3/shareable_bits
7ff

3. İki izole control group oluştur ve onlara disjoint bitişik mask'ler ver (burada socket 0'daki 11-way bir L3, düşük ve yüksek way'lere bölünmüş):

# mkdir /sys/fs/resctrl/victim /sys/fs/resctrl/untrusted
# echo "L3:0=00f" > /sys/fs/resctrl/victim/schemata       # ways 0-3
# echo "L3:0=7c0" > /sys/fs/resctrl/untrusted/schemata    # ways 6-10

0x00f ve 0x7c0 hiçbir set bit'i paylaşmaz, dolayısıyla iki group farklı LLC way'lerine allocate eder. (Her iki mask de bitişik 1 dizileridir ve hardware kuralını sağlar.)

4. Task'leri (ve/veya CPU'ları) her group'a bağla:

# echo $VICTIM_PID    > /sys/fs/resctrl/victim/tasks
# echo $UNTRUSTED_PID > /sys/fs/resctrl/untrusted/tasks
# echo 2-3            > /sys/fs/resctrl/untrusted/cpus_list

Kernel o thread'ler/CPU'lar için IA32_PQR_ASSOC'u programlar; bundan sonra untrusted task yalnızca victim'in hiç kullanmadığı 6-10 way'lerindeki line'ları evict edebilir.

Kaba, way-granüler ve tam bir side-channel düzeltmesi değil

CAT, way granülarlığında izole eder ve yalnızca allocation'ı yönetir — halihazırda mevcut paylaşılan line'lar, inclusive-cache back-invalidation'lar, prefetcher'lar, paylaşılan read-only page'lerde Flush+Reload ve LLC dışındaki channel'lar ele alınmaz. Way partitioning ayrıca her group için efektif cache'i azaltır, bir performans trade-off'u. CAT'i, contention/eviction primitive'ini ortadan kaldıran bir defense-in-depth olarak değerlendir, tam bir mitigation olarak değil. Yukarıdaki num_closids, cbm_mask ve way sayısı gibi değerler örnek niteliğindedir ve SKU'ya göre değişir; kendi platformunda /sys/fs/resctrl/info/L3/ altındaki değerleri kontrol et.

Detection

Cache-partitioning yanlış yapılandırması veya tampering'i resctrl üzerinden gözlemlenebilir: bir group'un schemata'sı ve CLOS başına IA32_L3_MASK_n değerleri aktif partition'ı tanımlar; beklenmedik biçimde geniş veya örtüşen bir CBM (ya da default CLOS 0'a geri taşınmış bir task) kaybolan isolation'a işaret eder. Monitoring group'ları (mon_data) llc_occupancy'yi açar ve bir workload'ın footprint'inin kendi way'leri içinde kalıp kalmadığını ortaya koyar.

References