TikTag (MTE tag leak via speculation)¶
Bir address'in ARM MTE tag'ini speculative olarak probe et ve guess'i cache'ten oku — MTE'nin probabilistic 4-bit tag'ini deterministik şekilde leak edilebilir bir oracle'a dönüştürür.
Mechanism¶
Neden çalışır
ARM Memory Tagging Extension (MTE), her 16-byte granule'a ve her pointer'a 4-bit bir tag iliştirir; pointer tag'i memory tag'iyle eşleşmezse bir load/store fault verir. Yalnızca 16 olası tag ile MTE'nin koruması probabilistic'tir (random bir guess ~1/16 başarılı olur). TikTag (Kim et al., 2024), bir speculative tag-check oracle'ı kurarak bu olasılığı kırar: bir tag check'in sonucunu, architectural fault teslim edilmeden önce cache'te gözlemlenebilir hale getirir, böylece bir attacker tahmin edilen bir tag üzerine bahis oynamak yerine onu teyit edebilir.
İki gadget oracle'ı gerçekleştirir:
- TikTag-v1 — speculation shrinkage'i exploit eder. Speculative bir
tag-check fault'unda core, daha fazla speculative execution'ı ve data
prefetching'i kısar. Yani bir probe address'ine sonraki bir access
(
TEST) yalnızca tag eşleştiyse gerçekleştirilir (ve cache'lenir); mismatch durumunda probe uncached kalır. - TikTag-v2 — store-to-load forwarding'i exploit eder. Birkaç instruction içinde aynı address'e bir store sonra load normalde forward eder; bir tag-check fault'u forward'ı bloklar, yine match vs. mismatch'e göre anahtarlanmış bir probe line'da bir cache-state farkı üretir.
Her iki durumda da secret-dependent etki bir cache hit/miss'tir, Flush+Reload-tarzı bir ölçümle kurtarılır. Invariant: MTE'nin tag check'i, sonucu architectural olarak görünmez ama microarchitectural olarak gözlemlenebilir bir cache footprint bırakan bir speculative branch'tir. Tüm 16 tag'i brute-force etmek sonra gerçek tag'i deterministik şekilde kurtarır — use-after-free / overflow exploit'leri için MTE-as-a-mitigation'ı yener (örneğin Chrome'un V8'inde ve Linux kernel'inde).
Walkthrough¶
Attacker'ın, attacker'ın etkilediği pointer'larla erişilebilir bir TikTag gadget'ına ve bir cache probe array'ine ihtiyacı vardır. TikTag-v2'nin JS-level şekli (paper'dan):
// guessptr carries a GUESSED tag; probe[] is the cache oracle
victim[idx] = PROBE_OFFSET; // store through guessptr
val = victim[idx]; // load through guessptr (store->load forward)
return probe[val]; // TEST: caches probe[] only if forward succeeded
- Oracle'ı kur.
probe[]'i cache'ten flush et. - Branch predictor'ı bir valid tag ile train et ki gadget tahmin edilen tag için speculative olarak çalışsın.
- Tahmin edilen bir tag ile speculate et. Eğer guess == real tag ise check
geçer, forward/prefetch olur ve
TESTline cache'lenir; mismatch olursa cache soğuk kalır. probe[]'i reload et ve timing'le — hızlı bir access bu guess'in gerçek tag olduğu anlamına gelir.- 16 tag'i sweep et; hit, target granule'ün tag'ini açığa çıkarır.
$ ./tiktag --gadget v2 --target 0x... # conceptual
training predictor ... ok
sweeping tags 0x0..0xf:
tag 0x0 reload 232 cyc (miss)
tag 0x1 reload 240 cyc (miss)
...
tag 0xA reload 74 cyc (HIT) <- leaked MTE tag = 0xA
Reported results
Detection¶
Software seviyesinde tespit etmesi zordur: leak, meşru speculative execution
üzerine biner. Davranışsal imzalar, bir probe array üzerinde tekrarlanan
faulting access'lerle birleştirilmiş sıkı Flush+Reload-tarzı loop'lardır — cache
attack'larına karşı kullanılan aynı HPC ipuçları (yüksek L2/LLC miss
oranları).
Mitigation¶
- MTE'yi standalone bir probabilistic barrier olarak değil, defense-in-depth olarak ele al.
- Tag check ile herhangi bir secret-dependent access arasına speculation
barrier'ları (
isb/data-dependent barrier'lar) ekle; attacker-controlled pointer'ların yakınında TikTag gadget pattern'lerinden kaçın. - Bkz. ../mitigation/arm-memory-tagging-extension.md ve ilgili mte-tag-brute-force entry'si; ilgili speculative/prediction channel'ları: spectre, pacman.
References¶
- Juhee Kim, Jinbum Park, Sihyeon Roh, Jaeyoung Chung, Youngjoo Lee, Taesoo Kim, Byoungyoung Lee. TikTag: Breaking ARM's Memory Tagging Extension with Speculative Execution. 2024 — https://arxiv.org/abs/2406.08719
- HTML full text — https://arxiv.org/html/2406.08719v1