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)
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.