Cache Coloring¶
Physically-indexed bir cache'i, örtüşen page-frame / set-index bitleri ("color"ları) farklı olan physical page'leri allocate ederek partition'la; güvenlik domain'lerini ayrık cache set'lerine izole et — bir savunma ve bir saldırganın hangi set'lere erişebileceğini akıl yürütmek için bir mercek.
Mechanism¶
Neden çalışır
Physically-indexed bir set-associative cache'te set index, physical-address
bitlerinden alınır. 4 KiB page'lerle adres bitleri 0..11 page offset'tir (zaten
yaptığın page seçimiyle sabit) ve 12+ bitleri OS'un atadığı physical page
frame'den gelir. Dolayısıyla set-index alanı page sınırını aşar: bazı index
bitleri bit 12'nin üstünde yaşar ve tamamen page'i hangi physical frame'in
desteklediği tarafından belirlenir.
O örtüşen bitler page'in color'ıdır. Farklı color'lara sahip iki page'in ayrık cache set'lerine map'lenmesi garantilidir. Her güvenlik domain'ine yalnızca kendi color'larının frame'lerini vererek OS/hypervisor cache'i öyle partition'lar ki bir domain diğerinin line'larını ne evict ne de probe edebilir — sınır boyunca Prime+Probe'u ve conflict tabanlı eviction'ı yener.
Color sayısı (cache_size / (ways × page_size))'dir, yani örtüşme bitlerinin
alabileceği farklı değer sayısı. Intel LLC 11 set-index biti kullanır (2048 set);
4 KiB page'lerle page offset'in üstündeki bitler mütevazı bir color sayısı verir. Aynı
örtüşme saldırganların da istismar ettiği şeydir: color'ı bilmek, kontrol edilen bir
page'in hangi set'leri işgal edebileceğini kısıtlar ve
eviction-set construction'a yardımcı olur.
Slicing naif page coloring'i bozar
Sliced Intel LLC'lerde belgelenmemiş bir hash adresleri slice'lara yayar; bu yüzden "aynı color"daki page'ler yine de farklı slice'lara düşebilir ve tam tersi. Page coloring, önce slice fonksiyonunu geri kurtarmadan böyle bir cache'i temiz biçimde partition'layamaz — bkz. Cache Slice Selection Reverse Engineering.
Walkthrough¶
1. Hedef cache için color geometrisini hesapla:
colors = cache_size / (ways * page_size)
# e.g. a 2 MiB, 16-way slice with 4 KiB pages:
# 2*1024*1024 / (16 * 4096) = 32 colors
# color = physical_index_bits that overlap with the page frame
2. Bir page'in color'ını physical address'inden belirle (PA'yı bilmeyi gerektirir,
örn. bir 2 MiB hugepage ya da /proc/<pid>/pagemap aracılığıyla):
// set-index bits that lie above the 12-bit page offset = the color
#define PAGE_SHIFT 12
#define SET_BITS 11 // Intel LLC: 2048 sets
unsigned color(uint64_t pa) {
unsigned idx = (pa >> 6) & ((1u << SET_BITS) - 1); // 6 = log2(line)
return idx >> (PAGE_SHIFT - 6); // keep only bits above the page offset
}
3. Partition'ı zorunlu kıl (defansif kullanım). Her domain'e, color()'ı o
domain'in ayrılmış set'inde olan frame'leri allocate et:
$ ./coloralloc --domain A --colors 0-15
$ ./coloralloc --domain B --colors 16-31
verify: no PA in A and B shares a color -> disjoint LLC sets -> OK
Cross-domain bir Prime+Probe artık başarısız olur: prober'ın frame'leri victim'in set'lerini index'leyemez; bu yüzden hiçbir conflict miss secret'ı kodlamaz.
Detection¶
Coloring bir allocation politikasıdır, bir olay değil; allocate edilmiş PA'ları örnekleyip domain'lerin asla bir color'ı paylaşmadığını doğrulayarak onu denetle. Cross-domain conflict-miss timing'inin yokluğu (gürültü döndüren başarılı bir Prime+Probe) onun çalıştığının pratik işaretidir.
Mitigation¶
Cache coloring zaten bir mitigation'dır: conflict tabanlı LLC side channel'larına karşı sağlam kabul edilen partition'lama savunmalarından biridir. İlgili/tamamlayıcı kontroller:
- Donanımsal way-partitioning (Intel CAT) domain'leri ayrı set'ler yerine ayrı way'lere izole eder.
- Randomized/encrypted indexing (CEASER tarzı) eviction-set önkoşulunu farklı bir şekilde yener.
References¶
- Gruss et al. / Inci et al. Mapping the Intel Last-Level Cache. IACR ePrint 2015/905 — https://eprint.iacr.org/2015/905.pdf
- Yarom et al. Last-Level Cache Side-Channel Attacks are Practical. IEEE S&P 2015 — https://www.cse.iitb.ac.in/~biswa/courses/CS773/lectures/primeprobe.pdf