Skip to content

(Mis)managed: A Novel TLB-based Covert Channel on GPUs

NVIDIA GPU'lardaki programlanabilirlik özellikleri (Unified Virtual Memory ve Multi-Process Service), co-resident iki process'in GPU'nun paylaşılan TLB hierarchy'si üzerindeki contention aracılığıyla data sızdırmasına olanak tanır.

Mechanism

Neden çalışır

Modern GPU'lar, programlanabilirliği iyileştiren ama process isolation'ını kıran iki özellik sunar. Unified Virtual Memory (UVM), GPU'ya bir hardware TLB hierarchy'siyle desteklenen, demand-paged, CPU benzeri bir virtual address space verir. Multi-Process Service (MPS), bağımsız process'lerin kernel'lerini paylaşılan bir context üzerinden geçirerek aynı GPU üzerinde eşzamanlı çalışmasına izin verir; böylece adres translation'ları aynı fiziksel TLB yapılarını paylaşır.

Yazarlar bu hierarchy'yi reverse-engineer etti ve coalesce edilmiş entry'lere sahip bir multi-level TLB buldu (bir entry birkaç bitişik page'i kapsar). Bir sender ve bir receiver process bu TLB yapılarını paylaştığı için, sender, paylaşılan set'i dolduracak kadar farklı page'e dokunarak receiver'ın translation'larını deterministik biçimde evict edebilir. Receiver daha sonra kendi translation'larını zamanlar: hızlı bir translation "entry'm hayatta kaldı" (bit 0) demektir, yavaş bir translation (bir TLB miss / page-walk) "sender beni evict etti" (bit 1) demektir. Bu klasik bir eviction/contention timing channel'ıdır, ama bir data cache yerine GPU MMU üzerine kurulmuştur. MPS'in eşzamanlılığı, bunu pratik bir channel yapan şeydir — onsuz iki process time-slice'lanır ve gerçek zamanlı contend edemez.

Walkthrough

Covert channel, GPU TLB üzerine map'lenmiş standart sender/receiver eviction-set protokolünü izler.

  1. TLB'yi karakterize et. Artan boyutlarda UVM buffer'ları allocate edin ve GPU'da strided access'leri zamanlayın. Access latency'sinin sıçradığı nokta, her TLB seviyesinin kapasitesini, associativity'sini ve page-coalescing factor'ünü ortaya çıkarır. Bu, eviction set'i (translation'ları victim'inkiyle çakışan page'ler kümesini) oluşturur.

  2. MPS aracılığıyla co-residency kur. Hem sender'ı hem receiver'ı MPS control daemon'u altında başlatın ki eşzamanlı çalışsınlar ve TLB'yi paylaşsınlar:

# start the Multi-Process Service control daemon
nvidia-cuda-mps-control -d
# both processes now share one GPU context / TLB hierarchy
./covert_sender &
./covert_receiver
  1. Transmit. Bir 1 göndermek için sender, eviction set'ine erişir (paylaşılan TLB set'lerini doldurur ve receiver'ın entry'lerini düşürür). Bir 0 göndermek için idle kalır.

  2. Receive. Her interval'da receiver kendi page'lerine yeniden dokunur ve translation'ları zamanlar; yüksek latency 1'e, düşük latency 0'a decode edilir.

Kavramsal receiver timing loop'u (CUDA tarzı)
// receiver: time a translation that the sender may have evicted
__global__ void probe(uint64_t *page, uint64_t *out) {
    uint64_t t0 = clock64();
    volatile uint64_t v = *page;   // TLB hit -> fast, TLB miss -> slow page walk
    uint64_t t1 = clock64();
    *out = t1 - t0;                 // large delta == sender evicted us == bit '1'
}

Yeniden üretilebilirlik uyarıları

TLB geometry'si, coalescing factor'ü ve tam eviction set'leri, yazarların karakterize ettiği GPU mimarisine özgüdür; sayılar NVIDIA nesilleri arasında doğrudan aktarılmaz. Yazarlar, MPS'in non-MPS baseline'a kıyasla channel bandwidth'ini önemli ölçüde (ölçümlerinde kabaca 40x) artırdığını raporlar ve channel'ın GPU-accelerated bir veritabanı uygulamasından data exfiltrate ettiğini gösterir. Somut bit rate'ler mimariye bağlıdır ve varsayılmak yerine kullanılan tam GPU için paper'dan alınmalıdır.

Detection

Multi-tenant GPU deployment'larında MPS'in beklenmedik kullanımını ve tek amacı TLB'yi stress'lemek gibi görünen büyük strided UVM allocation'ları yapan process'leri izleyin. GPU TLB miss rate'lerini açığa çıkaran performance counter'lar, channel'a özgü periyodik eviction pattern'ini ortaya çıkarabilir.

Mitigation

  • MPS'i devre dışı bırak (ya da karşılıklı güvenmeyen tenant'ları tek bir MPS context altında co-schedule etme); eşzamanlı execution olmadan gerçek zamanlı contention channel'ı çöker.
  • GPU'yu partition'la ki güvenmeyen workload'lar TLB yapılarını paylaşmasın (örneğin spatial partitioning / per-tenant context'ler).
  • UVM + MPS'i, confidential workload'lar için CPU SMT'nin ele alındığı gibi ele alın: security domain'leri arasında microarchitectural translation state paylaşmaktan kaçının.

References