Cache Template Attack¶
Bir programın hangi cache line'larının secret sızdırdığını — ve ne sızdırdığını — otomatik olarak keşfet: her event'i tetiklerken her adrese karşı Flush+Reload hit'lerini profile et, sonra öğrenilen "template"i online olarak exploit et.
Mechanism¶
Note
Flush+Reload gibi cache attack'lar, verilen bir secret'ı sızdırmak için
hangi adresi izleyeceklerini bilmek zorundadır (örn. hangi line "e"
keystroke'una karşılık geliyor ya da hangi AES T-table line'ı bir key byte'a
karşılık geliyor). O adresi manuel bulmak, hedefi reverse-engineer etmeyi
gerektirir. Cache Template Attack'lar bunu otomatikleştirir. Değişmez
nokta şu: eğer bir event E (bir keypress, bir key byte) victim'in A
adresine access etmesine yol açıyorsa, o zaman E'yi tetikledikten hemen
sonra A'yı flush'layıp reload etmek, ilgisiz event'lere göre daha sık bir
cache hit gösterecektir. Profiling fazı victim'in map'lenmiş (paylaşılan)
belleğindeki her adresi tarar: her event'i tetikler, her adres üzerinde
Flush+Reload yapar ve hit oranını kaydeder — hangi line'ların event'e bağlı
olduğunu tam olarak açığa çıkaran 2-boyutlu bir template matrix (event'ler ×
adresler) üretir. Exploitation fazı ise yalnızca bu yüksek sinyalli line'ları
online izleyerek event'leri canlı olarak infer eder. Victim binary'si / shared
library'si memory-mapped ve paylaşılan olduğundan, attacker victim'in kullandığı
aynı physical line'ları flush'lar.
Walkthrough¶
Flush+Reload gibi, victim ile shared memory gerektirir (shared library, page dedup).
- Profiling — template'i inşa et. Her event için onu tetikle ve adres aralığı boyunca Flush+Reload uygula:
// For every candidate address, measure P(hit | event) via Flush+Reload.
for (uintptr_t a = base; a < base + maplen; a += 64) {
int hits = 0;
for (int i = 0; i < N; i++) {
flush((void*)a);
trigger_event(EVENT); // e.g. inject a keypress
if (reload_time((void*)a) < HIT_THRESHOLD) hits++;
}
template[EVENT][a] = (double)hits / N; // build the event x address matrix
}
-
Exploit edilebilir line'ları seç. Hit oranı tam olarak tek bir event için ani yükselen adresler, leak noktalarıdır.
-
Exploitation. Online olarak yalnızca o line'ları izle; bir hit canlı event'i açığa çıkarır (keystroke logging, AES key-byte recovery vb.).
Expected results (Gruss, Spreitzer, Mangard)
Phase 1: automated profiling -> (event x address) template matrix
Phase 2: monitor only leaking lines for live inference
Demos: keystroke / keylogging timing, AES T-table key recovery
Underlying primitive: Flush+Reload on shared, inclusive LLC
Generic: no prior knowledge of the target's internals required
Detection¶
Yoğun clflush + reload loop'larını tespit et (cache flush/miss üzerinde
performance counter'lar); shared library page'lerine olağandışı cross-process
access.
Mitigation¶
Shared-line önkoşulunu ortadan kaldırmak için memory deduplication / page
sharing'i devre dışı bırak; constant-time, table-free crypto (AES-NI); clflush
ve high-resolution timer'ları kısıtla; cache partitioning ve hassas kod
layout'unun KASLR tarzı randomization'ı.