Skip to content

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).

  1. 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
}
  1. Exploit edilebilir line'ları seç. Hit oranı tam olarak tek bir event için ani yükselen adresler, leak noktalarıdır.

  2. 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'ı.

References