Skip to content

Prime+Abort

Timer'sız bir Prime+Probe varyantı: bir LLC eviction set'ini bir Intel TSX transaction içinde prime'la, sonra izlenen line evict edildiği an transaction'ı abort ederek bir victim erişimini hardware'in bizzat sinyallemesine izin ver — clflush yok, timer yok, probe adımı yok.

Mechanism

Neden çalışır

Intel TSX (Restricted Transactional Memory, RTM) bir transaction'ın read/write set'ini cache'te takip eder. O set'teki herhangi bir line evict edilirse — örneğin başka bir core'un erişimi bir cache conflict'ine zorladığı için — hardware transaction'ı abort etmek zorundadır ve bir conflict abort raporlar. O abort, başarısız olan thread'e senkron ve anında iletilir.

Klasik Prime+Probe eviction'ı, eviction set'inin daha sonraki bir "probe"unu zamanlayarak çıkarsar: yavaş probe ⇒ bir şey bir line'ı evict etti ⇒ victim ilgili set'i kullandı. Prime+Abort bütün o ölçümü transactional-abort sinyaliyle değiştirir:

  1. Prime_xbegin() içinde, hedef cache set'ini tamamen dolduran bir eviction set'e dokun, o line'ları transaction'ın izlenen set'inin parçası yap.
  2. Wait — transaction ya commit ya da abort olana kadar spin et.
  3. Victim'in aynı set'e erişimi primlenmiş line'lardan birini evict eder, ki bu transaction'ın izlenen set'iyle conflict eder ve bir abort tetikler.

Invariant: Prime+Probe'da sessizce timing'i değiştirecek olan cache contention'ı, bunun yerine deterministik biçimde bir TSX transaction'ını abort eder. Bu, channel'ı timer'sız yapar (ince taneli timer'ları bozan/devre dışı bırakan savunmaları etkisiz kılar), clflush gerektirmez ve örneklenen bir ölçüm yerine bir event'tir — dolayısıyla attacker sabit aralıklarla yoklama yapmak yerine erişim anında bilgilendirilir.

Walkthrough

Monitor, eviction set'ini bir RTM transaction'ı içine sarar ve abort status'unu sınıflandırır. Bir conflict abort (_XABORT_CONFLICT), izlenen set'e dokunulduğu anlamına gelir.

// gcc -O2 -mrtm prime_abort.c -o pa
#include <immintrin.h>   // _xbegin, _xend, _XABORT_* status flags
#include <stdint.h>

extern char **eviction_set;   // lines that fill the target cache set
extern int    set_size;

// Returns 1 if the monitored set was accessed by someone else, else 0.
int prime_and_wait(void) {
    unsigned status = _xbegin();
    if (status == _XBEGIN_STARTED) {
        // PRIME: bring the eviction set into the transaction's tracked set
        for (int i = 0; i < set_size; i++)
            (void)*(volatile char *)eviction_set[i];
        // WAIT: spin so a conflicting victim access can abort us
        for (volatile int j = 0; j < SPIN; j++) { }
        _xend();                 // committed: nobody touched the set
        return 0;
    }
    // Aborted. A cache conflict (victim eviction) sets _XABORT_CONFLICT.
    return (status & _XABORT_CONFLICT) ? 1 : 0;
}

Bir monitor döngüsü olarak sürmek:

for (;;) {
    if (prime_and_wait())
        record_event(rdtsc());   // victim touched the set right now
}

Kasıtlı bir eviction'ın conflict status ile abort ettiğini doğrulayarak kalibre et:

$ ./pa --selftest
xbegin ok, primed 12-way set
forced foreign access to set ...
abort status = 0x06   -> _XABORT_CONFLICT bit set   (eviction detected)
self-test PASS

Paper'dan raporlanan sonuçlar: Intel Skylake'te, Prime+Abort en gelişmiş LLC Prime+Probe'dan ~3× daha yüksek maksimum tespit hızına ulaşır ve daha az false positive üretir, ve—timer'dan bağımsız olduğu için—önemli bir timer-tabanlı cache savunması sınıfına direnir.

Warning

Prime+Abort, Intel TSX (RTM)'nin mevcut ve etkin olmasını gerektirir. Microcode güncellemeleri ve errata'lar birçok parçada TSX'i devre dışı bıraktı (TAA mitigation'ları), dolayısıyla teknik yalnızca RTM'nin mevcut olduğu yerde geçerlidir.

Detection

  • TSX transaction-abort oranları performance counter'lar (cpu/tx-abort/, RTM_RETIRED.ABORTED*) üzerinden gözlemlenebilir; paylaşılan cache set'leri etrafında yüksek, yapılı bir conflict-abort oranına sahip bir process güçlü bir imzadır.

Mitigation

  • TSX/RTM'yi devre dışı bırakmak (microcode / tsx=off) abort oracle'ını tamamen kaldırır.
  • Standart cache-side-channel hijyeni: secret-bağımlı memory access pattern'lerinden kaçın (constant-time kod), paylaşılan LLC'yi partition'la (ör. Intel CAT), cache-coloring.

References