Hot Pixels: Frequency, Power, and Temperature Attacks on GPUs and Arm SoCs¶
Software'in okuyabildiği DVFS sensor'ları (frequency, power, temperature) GPU'larda ve Arm SoC'lerde data- ve instruction-dependent state sızdırır; bu da browser içinde JavaScript pixel-stealing ve history sniffing'i mümkün kılar.
Mechanism¶
Bug sınıfı: data-dependent DVFS'ten doğan hibrit (analog) bir side channel
Modern Arm SoC'ler ve GPU'lar power, ısı ve hızı sürekli olarak Dynamic Voltage and Frequency Scaling (DVFS) ile dengeler. Bir çipin seçtiği operating point data- ve instruction-dependent'tir: farklı operand'lar ve instruction karışımları farklı power çeker, bu temperature'ı değiştirir, bu da governor'ın seçtiği frequency'yi değiştirir. Frequency, power ve temperature'ın her biri yazılıma internal sensor / counter üzerinden açılır (örn. raporlanan clock frequency, energy counter'lar, thermal sensor'lar veya timing olarak gözlemlenebilen throttling davranışı).
Bu bir hibrit side channel'dır: software, cihazın analog bir fiziksel özelliğini prob eder. Ölçülen sensor değeri işlenmekte olan secret data ile korele olduğundan, attacker o data'yı hiç doğrudan okumadan geri elde eder. Kritik nokta: bu channel geleneksel microarchitectural savunmaları bypass eder (cache partitioning, constant-time memory access) — bunlar cache/timing leakage'ını ele alır, power/thermal/frequency leakage'ını değil. Aynı DVFS kök nedeni CPU'lardaki Hertzbleed'in de altında yatar; Hot Pixels bunu GPU'lara ve Arm SoC'lere genişletir ve sandbox'lı JavaScript'ten erişilebilir olduğunu gösterir.
Walkthrough¶
Üst düzey browser pixel-stealing akışı (kavramsal)
- Channel'ı karakterize et. Hedef cihazda, render edilen pixel desenlerini gözlemlenebilir frequency/throttling davranışına eşleyen bir profil oluştur (farklı renkler farklı şekilde compress/compute olur, power → frequency'yi kaydırır).
- Cross-origin bir hedefi render et. Klasik pixel-stealing'deki gibi, victim'i filtrelenmiş bir iframe'e göm; böylece tek bir secret pixel, geniş bir bölgenin uniform mu yoksa karmaşık mı olacağını kontrol eder.
- Timing ile DVFS'i prob et. Doğrudan sensor erişimi olmasa bile, tamamlanma süresi mevcut frequency'ye bağlı (ki data-dependent render bunu bozdu) kalibre edilmiş bir workload çalıştır. O süreyi JavaScript'ten ölç.
- Decode et. Timing dağılımını tekrar pixel değerine eşle; pixel'leri, sayfa-ziyaret geçmişini (history sniffing) veya bir website fingerprint'i geri elde etmek için tekrarla.
Paper, side-channel karşı önlemleri etkinleştirilmiş Chrome ve Safari üzerinde JavaScript pixel-stealing ve history-sniffing'i, ayrıca website fingerprinting'i — sıradan Arm SoC'ler ve GPU'lar üzerinde — gösterir. (Taneja, Kim, Xu, van Schaik, Genkin, Yarom; USENIX Security 2023.)
Detection¶
- Sensor erişim anomalisi: unprivileged process'lerin frequency/energy/thermal arayüzlerini (örn.
sysfscpufreq/hwmon node'ları, GPU clock counter'ları) yüksek oranda okuması. - Browser içi: kullanıcıya görünür bir iş yapmadan sıkı kalibre edilmiş timing loop'ları çalıştıran uzun ömürlü sayfalar; tek bir filtrelenmiş cross-origin embed'e bağlı sürekli GPU/CPU aktivitesi.
- Telemetry: bir script'in ölçüm kadansıyla senkronize, korele DVFS state geçişleri / throttling olayları patlamaları.
- Diğer timing channel'lar gibi temiz bir log imzası yoktur; detection, resource kullanımı ve sensor-okuma anomalilerine dayanır.
Mitigation¶
Mart 2023'te Google'a (Chrome) bildirildi; vendor'lar tarafından kabul edildi
Tek bir microcode patch DVFS leakage'ını ortadan kaldırmaz; savunmalar katmanlıdır.
- Sensor maruziyetini kısıtla: ince taneli frequency, energy ve thermal sensor'lara software erişimini kaldır veya privilege-gate uygula (OS düzeyinde; Platypus/Hertzbleed sonrası RAPL kısıtlamalarına benzer).
- Data-dependent DVFS'i azalt: hassas operasyonlar sırasında security-sensitive kodu sabit frequency'de / boost devre dışı çalıştır; böylece operating point artık secret'ları izlemez.
- Browser sertleştirme: cross-origin iframe'lerde SVG filter'ları engelle, timer çözünürlüğünü kabalaştır ve hassas self-timing primitive'lerini sınırla; böylece JavaScript frequency kaymalarını çözemesin.
- Mümkün olan yerlerde hassas yüzeyler için constant-time + data-oblivious rendering.