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 —
clflushyok, 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:
- 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. - Wait — transaction ya commit ya da abort olana kadar spin et.
- 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:
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¶
- Craig Disselkoen, David Kohlbrenner, Leo Porter, Dean Tullsen. Prime+Abort: A Timer-Free High-Precision L3 Cache Attack using Intel TSX. USENIX Security 2017 — https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/disselkoen
- Paper PDF — https://cseweb.ucsd.edu/~tullsen/primeabort.pdf