Skip to content

Constructing and Characterizing Covert Channels on GPGPUs

Aynı GPGPU üzerinde co-resident çalışan iki GPU kernel'i, paylaşılan GPU kaynakları (cache'ler, functional unit'ler, memory) üzerindeki contention'ı modüle ederek covert haberleşir; architected bir haberleşme yolu olmadan high-bandwidth channel'lar elde edilir.

Mechanism

İki kernel (bir sender ve bir receiver) aynı GPGPU üzerinde co-locate edildiğinde — ister time-sliced ister multi-process/MPS ile concurrent çalışsın — microarchitectural kaynakları paylaşır: L1/L2 ve constant cache'ler, functional unit'ler (örn. SFU'lar, integer/FP pipeline'ları), atomic unit'ler ve global-memory bandwidth'i. GPU farklı kernel'lerin data'sını izole eder, ama bu yapılar üzerindeki contention'larını izole etmez.

Note

Bir covert channel için tek gereken, sender'ın bilinçli olarak değiştirebildiği ve receiver'ın güvenilir biçimde gözleyebildiği bir özelliktir. Burada o özellik contention latency'sidir: sender bir paylaşılan kaynağı doyurduğunda, receiver'ın aynı kaynağa erişimleri ölçülebilir şekilde yavaşlar. Sender bir time slot süresince ağır contention yaratarak 1, idle kalarak 0 encode eder; receiver kendi probe operation'larını zamanlar ve sonucu bir threshold'a vurur. İki taraf hiçbir zaman bir address veya bir clock paylaşmaz — GPU'nun devasa thread-level parallelism'i contention'ı keskin, channel'ı da hızlı yapar. Invariant şu: aynı paylaşılan yapı üzerinde co-residency, memory isolation'dan bağımsız olarak timing aracılığıyla bilgi sızdırır.

Walkthrough

Tipik bir resource-contention channel slot slot ilerler.

  1. Co-locate. Sender ve receiver kernel'lerini hedef yapıyı paylaşacak şekilde başlat (L1/functional unit'ler için aynı SM; L2/memory için aynı GPU). Concurrent execution streams/MPS ile elde edilebilir.
  2. Contention'a giren kaynağı seç. Cache'ler, functional unit'ler, atomic unit'ler ve global memory'nin her biri operasyonel bir channel taşıyabildiği gösterildi; bandwidth ve noise açısından farklılaşırlar.
  3. Encode (sender). Her bit slot için ya kaynağı hammer'la (1 ilet) ya da idle kal (0 ilet).
  4. Decode (receiver). Aynı kaynağı tekrar tekrar çalıştır ve operation'ları zamanla; bir slot'taki yüksek latency 1, düşük latency 0 olarak decode edilir.
  5. Synchronize. Paylaşılan bir clock olmadığından, sender ve receiver slot timing'i üzerinde GPU scheduling ve self-clocking pattern'ler aracılığıyla örtük olarak anlaşır; threshold'lar bir calibration aşamasında seçilir.
Ölçülen channel'lar

Yazarlar tüm channel'ların operasyonel versiyonlarını üç farklı NVIDIA GPGPU üzerinde kurdu. En güçlü konfigürasyonlar 4 Mbps'in üzerinde error-free bandwidth'e ulaştı; bunu o dönemde gerçekçi koşullar altında bilinen en hızlı microarchitectural covert channel olarak rapor ettiler. Kaynak başına bandwidth ve error rate değişir: cache tabanlı channel'lar ve functional-unit channel'ları en yüksekler arasındaydı; güvenilirlik parallelism (thread block/warp sayısı) ve threshold seçimiyle ayarlanır.

Warning

Kesin bandwidth'ler spesifik NVIDIA GPU'ya, contention'a giren kaynağa ve sender'ın onu doyurmak için kaç thread block/warp kullandığına bağlıdır. >4 Mbps rakamını evrensel bir sabit değil, gösterilen en iyi durum olarak değerlendir.

Mitigation

Covert-channel kapasitesi, ya co-residency'yi ya da contention'ın gözlenebilirliğini kısıtlayarak azaltılır (ortadan kaldırılmaz):

  • Birbirine güvenmeyen kernel'ler arasında SM'lerin, cache'lerin veya memory bandwidth'inin spatial/temporal partitioning'i.
  • Bir sender ve receiver'ın aynı time window içinde güvenilir biçimde bir yapıyı paylaşamayacağı daha sıkı scheduling isolation.
  • Receiver'ın bel bağladığı latency sinyalini düzleştirmek için kernel başına erişim oranlarını throttling / normalize etme.

References