Skip to content

GPU Cache Side-Channel Attack (Rendered Insecure)

Bir GPU, bir spy ile bir victim arasında fine granularity'de paylaşıldığında, spy contention'ı monitor etmek ve victim'ın aktivitesini leak etmek için GPU performance counter'ları / memory-resource tracking kullanır — website'ları fingerprint eder, keystroke timing'i çıkarır ve crypto recover eder.

Mechanism

Neden çalışır

GPU'lar giderek artan biçimde concurrent context'ler arasında shared'tir: bir graphics workload (OpenGL/WebGL) ve bir compute workload (CUDA) aynı GPU'da interleave olabilir ve GPU performance counter'ları ve resource-tracking API'leri expose eder. CPU cache saldırılarına güç veren aynı contention prensibi GPU cache'lerine, memory'sine ve functional unit'lerine de uygulanır.

leak/transmit/decode invariant'ı:

  • Leak: spy kendi GPU workload'unu execute eder ve GPU performance counter'larını (cache hit/miss, memory utilization, functional-unit aktivitesi) okur ya da contention-induced slowdown'u ölçer. Bu counter'lar victim context'in GPU kullanımını yansıtır çünkü ikisi GPU cache'lerini ve memory'sini paylaşır.
  • Transmit/decode: GPU işi bir frame (OpenGL/WebGL) veya kernel granularity'sinde dispatch edildiğinden, spy her victim frame'inin side effect'lerini örneklemek için execution'ını interleave eder ve bir time series üretir.

Farklı victim aktiviteleri belirgin GPU-resource signature'ları üretir, bu yüzden trace hangi website'ın render edildiğini, onun içindeki user action'larını ve hatta bir password field için (GPU acceleration ile render edilen) per-keystroke timing'i sınıflandırır. CUDA tabanlı bir spy ek olarak co-resident bir CUDA victim'ından secret-dependent davranışı recover edebilir.

Walkthrough

Spy bir probe kernel/draw başlatır ve her interval'de GPU counter'larını okur (kavramsal; counter API'leri vendor-specific'tir, örneğin CUPTI/NVML veya OpenGL timer query'leri):

Threat model — privileged spy gerekir

Bu attack, spy'ın privileged GPU driver access'ine sahip olmasını gerektirir: counter okuma izni olan bir native OpenGL/CUDA context (CUPTI/NVML gibi profiling interface'leri tipik olarak elevated privilege ya da özel bir driver permission ister). Bu, browser içindeki unprivileged JavaScript/WebGL ile aynı şey değildir; OpenGL timer query'leri performance counter değildir ve counter API'lerinin sağladığı granularity'yi vermez. Rendered Insecure çalışması da WebGL-era measurement API kısıtlamalarının pratik ölçümü engellediğini ve pratik saldırıların privileged bir OpenGL/CUDA spy process gerektirdiğini not eder. Modern vendor driver'ları ayrıca counter access'i default olarak restrict eder.

// Conceptual GPU contention spy sampling a performance counter per interval.
for (;;) {
    launch_probe_kernel<<<grid, block>>>();   // contend for GPU cache / memory
    cudaDeviceSynchronize();
    uint64_t metric = read_gpu_counter(L2_CACHE_MISSES);  // victim-influenced
    record(metric);                            // build a contention time series
}
// Post-process: classify the trace -> website fingerprint / keystroke timing.

Kaydedilen series, victim'ın aktivitesini recover etmek için bir classifier'a (per-website template'leri / timing model'leri) beslenir.

Beklenen trace (kavramsal)
per-frame GPU metric over time:
  website A render -> signature pattern A
  website B render -> signature pattern B
keystroke events appear as spikes -> inter-keystroke timing

Detection

  • Hassas bir GPU workload'ı çalışırken GPU performance counter'larını sıkı bir döngüde tekrar tekrar okuyan unprivileged process'leri izle (örn. CUPTI / NVML / driver perfmon erişimi) — meşru uygulamalar counter'ları nadiren böyle poll eder.
  • Yalnızca contention oluşturup ölçmek için sürekli küçük probe kernel/draw başlatan spy benzeri GPU işlerini izle (anormal kernel launch-rate, buna karşılık minimal compute-work).
  • Bir victim'in render/inference aktivitesi sırasında render etmeyen process'lerden gelen memory-allocation API çağrı oranları üzerine telemetri topla.

Mitigation

  • Unprivileged / untrusted context'lerden GPU performance counter'larına access'i kısıtla; modern vendor driver'ları profiling-counter erişimini varsayılan olarak privileged bir flag'in arkasına alır (default-restricted).
  • Sızdıran API'lerin (memory-allocation sorguları, counter'lar, timer'lar) oranını veya hassasiyetini measurement doğruluğunu bozacak şekilde sınırla.
  • Trust boundary'ler boyunca fine-grained GPU sharing'den kaçın; GPU context'leri serialize et veya partition et (MPS/MIG tarzı spatial ya da temporal isolation); constant-time GPU crypto kernel'leri kullan.

References