Rendered Insecure: GPU Side Channel Attacks are Practical¶
Bir victim ile Nvidia GPU paylaşan bir spy'ın; GPU memory-allocation API'leri, performance counter'lar ve timing üzerinden contention'ı ölçerek web sitelerini fingerprint'leyebileceğini, keystroke timing geri çıkarabileceğini ve bir neural-network yapısını yeniden kurabileceğini gösteren CCS 2018 çalışması.
Mechanism¶
Sınır neden kırılıyor
GPU'lar ince granularity'de paylaşılır: OpenGL/WebGL işi bir frame granularity'sinde dispatch eder ve kaynaklar izin verdiğinde CUDA kernel'leri co-schedule edilebilir. Kırılan güvenlik invariant'ı co-located GPU workload'ları arasında performance isolation'dır — GPU, bir context'in başkasının davranışını çıkarsamasını sağlayan measurement interface'leri ve contention etkileri açığa çıkarır.
Saldırı klasik side-channel yapısına sahiptir:
- Co-location: spy kendi GPU işini, victim ile eşzamanlı (graphics stack) ya da iç içe (graphics+compute) çalışacak şekilde schedule eder; SM'leri, cache'leri, memory bandwidth'ini ve functional unit'leri paylaşır.
- Contention / measurement primitive'leri: makale kullanılabilir üç sızıntı kaynağı belirler — (1) victim'in zaman içindeki allocation footprint'ini açığa çıkaran memory-allocation API'leri, (2) user space'ten okunabilir GPU hardware performance counter'ları ve (3) victim contention altında yavaşlayan, spy'ın kendi işinin timing'i.
- Inference: counter/allocation/timing sample'larının zaman serisi, victim'in secret-dependent davranışını geri çıkarmak için bir classifier'a verilir.
Önemlisi bu bir CPU tarzı Prime+Probe değildir: makale, binlerce eşzamanlı thread ve küçük shared cache'lerle, cache erişimlerini belirli bir victim thread'ine korele etmenin pratikte imkânsız olduğunu belirtir — bu yüzden leak bunun yerine toplu contention ve açığa çıkan API'ler üzerinden kurulur. GPU covert channel'larıyla karşılaştır: Constructing and Characterizing Covert Channels on GPGPUs.
Walkthrough¶
Kamuya açık CCS 2018 makalesinden üç uçtan uca saldırı gösterilir:
- Website fingerprinting (graphics stack): bir OpenGL spy, victim tarayıcı WebGL üzerinden sayfaları render ederken GPU performance counter'larını / memory-allocation event'lerini sample'lar. Her site karakteristik bir GPU aktivite imzası üretir; bir classifier imzaları yüksek doğrulukla URL'lere map'ler. Aynı kanal intra-site kullanıcı aktivitesini izler ve bir parola text box'ı için keystroke timing geri çıkarır.
- Neural-network model extraction (compute stack): bir victim CUDA inference workload'ı ile co-located bir CUDA spy, network'ün iç yapısını (layer sayıları/boyutları) çıkarsamak için performance counter'ları okur; bir cloud tehdidini örnekler. Karşılaştır: Leaky DNN.
- Yazarlar, spy'ı güvenilir biçimde co-resident kılmak için çeşitli GPU nesilleri boyunca Nvidia scheduling/co-location parametrelerini reverse-engineer eder.
// Conceptual graphics-stack spy loop (not a working exploit)
loop:
launch_small_opengl_kernel() // create measurable contention
s = read_perf_counter() ; a = read_alloc_api() ; t = measure_time()
record(s, a, t)
=> feed recorded time-series to a classifier -> website / keystroke / model
Temsili sızıntı sinyali (kavramsal)
Warning
Tek başına WebGL (tarayıcıda saf JavaScript) o dönemde sızıntı için gereken measurement API'lerini açığa çıkarmıyordu; pratik masaüstü saldırıları, victim ile co-located, kurulu bir OpenGL/CUDA spy process'i gerektirir.
Detection¶
- Hassas bir GPU workload'ı çalışırken yüksek frekansta GPU hardware performance counter'larını okuyan unprivileged process'leri izle (örn. CUPTI / NVML / driver perfmon erişimi) — meşru uygulamalar counter'ları nadiren sıkı bir döngüde poll eder.
- Yalnızca contention oluşturmak ve ölçmek için tekrar tekrar küçük kernel'ler başlatan spy benzeri GPU işlerini izle (anormal launch-rate ile compute-work oranı).
- Bir victim'in rendering/inference aktivitesi sırasında render etmeyen process'lerden gelen memory-allocation API çağrı oranları üzerine telemetri.
Mitigation¶
- Nvidia'nın yanıtı (makalenin disclosure'ına göre), yöneticilerin GPU performance counter'larına user-space erişimini devre dışı bırakmasına izin vermek oldu; modern driver'lar profiling-counter erişimini varsayılan olarak privileged bir flag'in arkasına alır.
- Measurement doğruluğunu bozmak için sızdıran API'lerin (memory-allocation sorguları, counter'lar, timer'lar) oranını veya hassasiyetini sınırla.
- Untrusted ve hassas GPU workload'larının co-location'ından kaçın: exclusive GPU allocation, MPS/MIG tarzı spatial partitioning ya da temporal isolation.