Skip to content

Memory Bus Covert Channel

Bus locking üzerine kurulu cross-core / cross-VM bir covert channel: cache-line-split (exotic) adresler üzerindeki atomik işlemler global bir memory-bus lock'u (ya da modern CPU'larda coherence-directory contention'ı) assert eder ve bu, başka bir core tarafından memory-latency olarak gözlemlenir.

Mechanism

Memory-bus covert channel "Whispers in the Hyper-space: High-speed Covert Channel Attacks in the Cloud" (Wu, Xu, Wang; USENIX Security 2012) çalışmasından gelir. Klasik cache covert channel'lar, gönderen ve alıcının kesin cache-line adreslemesinde anlaşmasını gerektirir; bu da bellek paylaşmayan VM'ler arasında zordur. Memory-bus channel bu gereksinimi, her core'un contention yaşadığı global, sistem çapında bir kaynak üzerinden sinyalleyerek ortadan kaldırır.

Invariant: cache-line-split bir operand üzerindeki LOCK'lu bir atomic, tüm belleği serileştirmeli

x86 atomik instruction'ları (LOCK prefix'i) bir işlemin kesintisiz tamamlanmasını garanti eder. Normalde CPU bunu, operand'ın bulunduğu yalnızca o tek cache line'ı locklayarak ucuza gerçekler. Ama operand "exotic" ise — iki cache line'a yayılan hizalanmamış bir adres — cache-line locking atomicity'yi garanti edemez, dolayısıyla işlemci tüm sistemin memory erişimini stall eden bir global bus lock assert etmeye geri döner. Bu global stall, başka herhangi bir core tarafından artan memory latency olarak gözlemlenebilir.

Gönderen bunu module eder: 1 göndermek için bus'ı locklar, 0 göndermek için sessiz kalır. Alıcı sürekli olarak zamanlanmış uncached memory erişimleri yapar ve bit'i latency'den okur. En yeni platformlarda (entegre memory controller'lar ve NUMA içeren Intel Nehalem / AMD, paylaşılan front-side bus yok) global bus lock gitmiştir, ama bir split-line atomic hâlâ sistem çapında cache-coherence / interconnect contention'ı yaratır; alıcı bunu da aynı şekilde zamanlayabilir — yani channel architectural değişiklikten sağ çıkar.

Walkthrough

Gönderen ve alıcı, aynı fiziksel host üzerindeki iki farklı VM'de bulunan ayrıcalıksız programlardır. Kavramsal olarak:

# Sender — to transmit a '1', create contention:
for (duration of a bit-slot):
    LOCK xadd  [exotic_addr]   ; exotic_addr straddles two cache lines
                               ; -> bus lock / coherence storm

# To transmit a '0': do nothing (no bus contention).

# Receiver — sense the bus state by latency:
for (duration of a bit-slot):
    t0 = rdtsc()
    <timed UNCACHED memory access>   ; forced to go to the bus
    t1 = rdtsc()
    bit = (t1 - t0 > threshold) ? 1 : 0

Alıcı mutlaka uncached erişimler kullanmalıdır ki probe'u kendi cache'i tarafından emilmek yerine gerçekten contention yaşanan bus/interconnect'e ulaşsın.

Bildirilen bandwidth ve platformlar

Makale iki rejim bildirir:

  • Laboratuvar kurulumu: son derece düşük hata oranıyla 700 bps'nin üzerinde bir bandwidth; 746.8 ± 10.1 bps'lik kararlı bir transmission rate aktarılır.
  • Gerçek dünya bulutu (Amazon EC2): 100 bps'nin üzerinde bir transmission rate, örneğin bir konfigürasyonda yaklaşık %0.39 hata ile 66.1 bps; hypervisor scheduling baskısı altında rate'ler düşer ve hata biraz yükselir.

İki test platformu kullanıldı:

  • Eski, paylaşılan memory-bus'lı bir makine: Intel Core2 + Hyper-V + Windows guest VM'leri (gerçek front-side-bus lock).
  • Paylaşılan memory bus'ı olmayan daha yeni bir platform: Intel Xeon (Nehalem) + Xen + Linux guest VM'leri (NUMA / entegre controller, channel coherence-interconnect contention'ına dayanır).

Sağlam bir iletişim protokolü (framing, error correction), virtualization'ın getirdiği scheduling ve timing gürültüsünü ele alır.

Detection

Bir savunmacı, ele veren iş yükünü izleyebilir: hizalanmamış, cache-line aşan operand'lar üzerinde yüksek oranda LOCK'lu atomic issue eden (split lock) bir process ya da memory latency'si yapılandırılmış, yüksek frekanslı bir kalıpta salınan birlikte yerleşik bir VM. Modern CPU'lar tam olarak bu davranışı işaretleyebilen split-lock detection sunar (örneğin split-lock'lu atomic'lerde bir #AC/alignment-check trap'i).

Mitigation

  • Split-lock detection / bus-lock control: split-lock atomic issue eden thread'leri trap'le, throttle et ya da öldür (yeni Intel CPU'ları ve OS desteği split lock'ları faultable / rate-limited yapar) ve gönderenin sinyalleme primitive'ini doğrudan ortadan kaldır.
  • Scheduler/yerleştirme savunmaları: karşılıklı güvensiz tenant'ların aynı socket'te birlikte yerleşmesinden kaçın; gang/minimum-run-time scheduling gürültü ekler.
  • Channel'ın bandwidth'i zaten hypervisor scheduling tarafından kısıtlanır, dolayısıyla VM scheduling'i daha da sıkılaştırmak onu daha çok bozar.

References