Stealing Webpages Rendered on Your Browser by Exploiting GPU Vulnerabilities¶
Çağdaş GPU'lar yeni allocate edilen global memory'yi sıfırla başlatmaz (
zero-initialize), bu yüzden saldırganın GPU kernel'ı, bir tarayıcının hardware-accelerated rendering'inden geriye kalan artık VRAM'i okuyup victim'in ziyaret ettiği web sayfalarını yeniden oluşturabilir.
Mechanism¶
Invariant
Multiprogrammed bir CPU'da OS, sayfaları yeni bir process'e vermeden önce sıfırlar, böylece serbest bırakılan veri sızmaz. Makalenin bulgusu şudur: GPU'lar (çalışmada hem NVIDIA hem AMD) yeni allocate edilen global memory'yi SIFIRLAMAZ. Tarayıcıların örtük olarak yaptığı güven varsayımı — "bana verilen bellek temizdir" — GPU üzerinde geçerli değildir. Bir tarayıcı web sayfası rendering'ini hızlandırmak için GPU'yu kullandığında, render edilen sayfa GPU global memory'sinde texture'lar olarak saklanır. Bu buffer'lar serbest bırakıldıktan sonra (ya da paylaşılan GPU kaynakları üzerinden hâlâ canlıyken bile) byte'lar kalıcı olur. GPU memory allocate eden saldırgan bir CUDA/OpenCL programı, hiçbir şey temizlemediği için artığı — yani önceki kiracının render edilmiş piksellerini — basitçe geri okur. Bozulan invariant, GPU memory hierarchy'sine uygulanan allocation anında memory initialization'dır.
Walkthrough¶
Lee, Kim, Kim & Kim (IEEE S&P 2014) makalesinden — iki saldırı senaryosu:
- Sonlandırmadan sonra (post-mortem dump): victim tarayıcıyı kapatır/gezinir; saldırgan ardından büyük GPU buffer'ları allocate edip bunların uninitialized içeriklerini dump eder ve render edilmiş web sayfası texture'larını geri kazanır.
- Çalışma sırasında: saldırgan GPU'yu canlı tarayıcıyla paylaşır ve rendering olurken artık/örtüşen belleği okur.
// Conceptual CUDA dump of uninitialized GPU global memory:
size_t n = LARGE;
char *d; cudaMalloc(&d, n); // NOT zeroed by the GPU
char *h = malloc(n);
cudaMemcpy(h, d, n, cudaMemcpyDeviceToHost);
// h now holds residual VRAM: prior tenant's rendered texture data
// -> reassemble texture tiles into the victim's webpage image
Geri kazanılan texture'lar ardından yeniden birleştirilerek victim'in hangi web sayfalarını render ettiği açığa çıkarılır. Makale bunu, compositing'i hızlandırmak için GPU kullanan Chromium ve Firefox'a karşı gösterir.
Warning
Akademik araştırma; yalnızca kendi tarayıcınız/GPU'nuza karşı yeniden üretin.
Çıkarılacak ders sınıftır: uninitialized accelerator memory, güvenlik
domain'leri arasında sızdırır (karşılaştırın:
leftoverlocals-listening-to-llm-responses-through-leaked.md ve
cuda-leaks-information-leakage-in-gpu-architectures.md).
Detection¶
- Runtime'da tespit etmek zordur; okuma meşru bir GPU allocation'ıdır. Araştırma sinyali: büyük GPU allocation'ları yapıp hiç yazmadan bunları hemen geri okuyan bir process.
Mitigation¶
- GPU driver / runtime allocation anında global memory'yi sıfırlamalı (sonraki GPU stack'leri opsiyonel zeroing ekledi); uygulamalar hassas GPU buffer'larını free sırasında temizleyebilir (scrub).
- Birbirine güvenmeyen kiracılar arasında GPU context'lerini izole edin; hassas rendering için bir GPU'yu güvenlik domain'leri arasında paylaşmaktan kaçının.