Generic and Automated Drive-by GPU Cache Attacks from the Browser¶
WebGPU compute shader'ların içinde inşa edilen self-configuring eviction-set primitive'leri, sıradan bir web page'i bir GPU cache side-channel platformuna dönüştürür ve native code olmadan keystroke timing'lerini ve AES key'lerini leak eder.
Mechanism¶
Bug class: untrusted browser code'u shared, un-partitioned bir GPU cache'e ulaşır
Modern GPU'lar, security domain başına partition edilmemiş derin bir cache hierarchy'si (per-SM/CU L1, shared L2) expose eder. WebGPU, web page'lere grafik ve ML workload'ları için general-purpose GPU compute'a (compute shader'lar) portable, low-overhead access vermek üzere tasarlandı. Burada kırılan security boundary, sandboxed, memory-safe bir browser API'sinin physical microarchitectural state'i gözlemleyemeyeceği varsayımıdır.
Paper, WebGPU sandbox'ının içinden bile — native code, pointer veya clflush olmadan — bir attacker'ın şunları yapabileceğini gösterir:
- GPU buffer'ları allocate et ve fine-grained
performance.now()throttle edildiği için GPU-side timing (atomic'ler / loop-counter timer'lar) kullanarak kendi memory-access latency'lerini ölçen compute shader'lar dispatch et. - Eviction set'ler inşa et: aynı cache set'te çakışan address grupları, öyle ki onlara dokunmak bir victim line'ı evict eder. GPU'nun set-mapping ve slice fonksiyonları belgelenmemiş olduğundan ve vendor/generation'a göre değiştiğinden, set'ler ampirik olarak keşfedilmelidir.
- Bu set'leri, co-resident GPU işine (başka bir tab, bir sistem servisi veya bir GPU compute servisi) karşı bir Prime+Probe / Evict+Reload tarzı channel olarak kullan.
Suistimal ettikleri yeni invariant parallelism'dir: eviction-set inşasının kendisi massively parallel bir GPU kernel olarak çalıştırılır, böylece aksi halde yavaş olan group-reduction araması hızlı ve hardware genelinde self-configuring hâle gelir. Bu, saldırıyı generic (11 GPU, 5 generation, 2 vendor) ve automated (per-device tuning yok), yani gerçekten drive-by yapar.
Walkthrough¶
High-level kavramsal akış (AsiaCCS 2024 paper'ından)
Yalnızca mantıksal adımlar — exploit code yok:
-
Timer construction. Native high-res timer'lar mevcut değildir, bu yüzden bir compute shader bir counter'ı spin'ler veya bir cache hit'i bir miss'ten ayırt etmeye yetecek çözünürlükte monotonic bir clock türetmek için GPU atomic'lerini kullanır.
-
Parallel eviction-set discovery. Birçok candidate address üzerinde bir kernel dispatch et. Her GPU thread group, diğer candidate'ları in/out toggle'larken bir target'a access latency'sini ölçer ve candidate pool'unu target line'ı güvenilir şekilde evict eden minimal bir set'e indirir. Reduction GPU genelinde paralel çalışır.
dispatch( find_eviction_set ):
for each candidate group in parallel:
measure latency(target) # GPU-side timer
if removing group keeps eviction -> drop group
emit minimal congruent set
-
Channel operation. Eviction set'ler elde edildikten sonra Prime+Probe çalıştır: set'i prime et, victim'ın çalışmasına izin ver, probe et ve time'la. Yavaşlamış bir probe, victim'ın congruent bir line'a dokunduğu anlamına gelir.
-
End-to-end demolar.
- Inter-keystroke timing: browser/OS'in keystroke'ları handle etmesiyle correlate olan cache aktivitesini gözlemle; NVIDIA'da ~%82-98 F1 score'ları rapor edildi.
- GPU AES servisi: GPU tabanlı bir AES encryption servisine karşı generic, set-agnostic bir saldırı, tam bir AES key'i kabaca 6 dakikada recover etti.
Detection¶
- Browser/GPU telemetry: grafik gerekçesi olmayan bir page'den anormal WebGPU kullanımı — uzun süren compute-shader dispatch'leri, sıkı self-timing loop'ları, çok sayıda küçük aynı-stride buffer'ın tekrarlı allocation'ı.
- GPU performance counter'lar (vendor tooling): aksi halde idle dönemlerde bir browser process'inden sürekli, alışılmadık derecede yüksek L2 miss/eviction oranları ve atomic-op throughput'u.
- Behavioral: sürekli GPU compute tüketen background tab; GPU aktivite spike'larının user input event'leriyle correlation'ı.
- Spesifik olarak bir EDR signature'ı yoktur; tespit heuristic ve telemetry tabanlıdır.
Mitigation¶
- Browser hardening: WebGPU, shipping browser'larda site permission/origin policy'lerinin arkasında gate'lenir; untrusted origin'ler için WebGPU'yu kısıtla veya disable et.
- Timer coarsening / jitter: GPU-derived timing primitive'lerinin hit/miss'i ayıracak kadar hassas olmasını engelle; browser'lar zaten
performance.now()'u throttle eder ve jitter ekler. - Site isolation: cross-origin GPU işinin hassas bir victim ile bir process/context paylaşamamasını sağla.
- Untrusted GPU tenant'ları tarafından erişilebilen servisler için secret-dependent memory access'li GPU crypto'dan kaçın; constant-access implementation'lar kullan.
- Domain'leri ayırmak için cache partitioning (GPU/driver desteklediği yerde).