WebGPU-SPY¶
Tamamen browser'dan kurulan, WebGPU compute shader'larını kullanarak bir high-resolution timer ve integrated bir GPU üzerinde bir cache saldırısı inşa eden, website fingerprinting'i mümkün kılan bir GPU cache side-channel.
Mechanism¶
The invariant
Browser side channel'ları geleneksel olarak timer-coarsening savunmalarına
karşı kaybedilmiş bir savaş verir: Spectre'den sonra browser'lar
performance.now() çözünürlüğünü düşürdü ve SharedArrayBuffer'ı varsayılan
olarak disable etti, JavaScript'ten keskin bir saat'i esirgedi. WebGPU-SPY
(Ferguson, Wilson, Naghibijouybari, ASIA CCS 2024) saldırının tamamını GPU'ya
taşıyarak bunu atlatır. WebGPU, web içeriğine genel amaçlı compute shader'
lar sunar; GPU'nun devasa parallelism'i kendi başına bir saat'tir — birçok
eşzamanlı thread başlatıp ilerlemelerinin nasıl ıraksadığını gözleyerek,
attacker bir CPU timer'ı olmadan high-resolution bir timing primitive inşa
eder. O saatle saldırı, Intel iGPU'larda integrated GPU'nun cache
hierarchy'sine karşı bir cache side-channel çalıştırır; attacker'ın compute
stack'inden victim'in GPU graphics/rendering stack'indeki aktivitesini
gözetler — aynı physical GPU cache'ini paylaşan iki domain. Invariant herhangi
bir cache saldırısındakiyle aynıdır: shared, sonlu bir cache kaynağı için
contention, victim'in secret'a bağlı memory davranışını attacker'ın
gözleyebileceği bir timing sinyaline çevirir — yalnızca burada hem timer hem
cache GPU üzerinde yaşar, CPU-timer mitigation'larının erişiminin dışında.
Walkthrough¶
Paper'ın yaklaşımının kavramsal yeniden kurgusu; çalışan bir exploit değil.
- Bir WebGPU device iste. Web içeriği, standart API üzerinden GPU erişimini müzakere eder:
-
GPU üzerinde duran bir timer inşa et.
performance.now()yerine, GPU'nun doğal parallelism'ini sömüren bir compute shader dispatch et ki göreli thread ilerlemesi tamamen GPU üzerinde high-resolution bir saat versin. -
Cache saldırısını bir compute shader'dan çalıştır. Bir WGSL compute kernel'i, integrated GPU cache'ini prime eder ve victim'in rendering workload'unun neden olduğu eviction'ı tespit etmek için erişimlerini yeniden timing'ler:
@compute @workgroup_size(64)
fn probe(@builtin(global_invocation_id) gid: vec3<u32>) {
// prime then re-access GPU cache lines; divergence in completion
// order over many threads encodes contention from the victim's
// graphics-stack activity.
}
- Trace'leri topla ve sınıflandır. Bir sayfa render olurken yakalanan contention trace'i, website fingerprinting için bir classifier'a beslenir.
Warning
Saldırı yalnızca victim browser'ın WebGPU'yu expose etmesini ve rendering stack ile güvenilmeyen compute arasında integrated bir GPU paylaşmasını gerektirir. CPU high-resolution timer'a ihtiyaç duymaz, dolayısıyla Spectre'den sonra benimsenen timer-coarsening mitigation'ları onu durduramaz.
Beklenen davranış
Detection¶
Saldırı browser-içidir ve privileged bir footprint bırakmaz; sağlam bir runtime detector yoktur. Savunma sinyalleri, rendering'in yanında olağandışı yoğun WebGPU compute dispatch eden güvenilmeyen sayfaları işaretlemekle sınırlıdır.
Mitigation¶
- WebGPU compute erişimini kısıtla ya da kapıla (permission prompt'ları, origin başına isolation) ve GPU üzerinde duran timing primitive'ini bozarak işe yaramaz hale getir.
- Rendering ile güvenilmeyen compute domain'leri arasında GPU cache partitioning / isolation.
- İlgili savunma bağlamı: gpu-cache-side-channel-attack, javascript-prime-probe, website-fingerprinting, cache-occupancy-channel.