Skip to content

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.

  1. Bir WebGPU device iste. Web içeriği, standart API üzerinden GPU erişimini müzakere eder:
const adapter = await navigator.gpu.requestAdapter();
const device  = await adapter.requestDevice();
  1. 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.

  2. 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.
}
  1. 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ış
GPU cache trace while a target site renders
  -> per-site contention signature
classifier over top-100 websites: ~90% precision (fingerprinting)

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

References