Skip to content

SQUIP (CVE-2021-46778)

Scheduler Queue Usage via Interference Probing: AMD Zen 2/Zen 3 (ve Apple M1) üzerinde her execution unit'in kendi scheduler queue'su vardır, böylece bir SMT sibling belirli bir queue'nun occupancy'sini prime-and-probe edebilir ve co-locate edilmiş bir victim'in hangi instruction type'larını çalıştırdığını öğrenebilir — RSA-4096 key'lerini kurtarmaya yetecek kadar.

Mechanism

Per-execution-unit scheduler queue'larının neden leak ettiği

Bir superscalar core, instruction'ları micro-op'lara (µop) decode eder ve onları scheduler queue'lar üzerinden execution unit'lere (ALU, AGU, BRU) dispatch eder. Intel core'ları tek bir unified scheduler kullanır, böylece onun contention'ı reorder-buffer contention'ı ile aynı bilgiyi taşır ve instruction'ın type'ı hakkında hiçbir şey açığa çıkarmaz. AMD Zen 2 ve Zen 3 (ve Apple M1) bunun yerine execution unit başına ayrı scheduler queue'lar kullanır — örneğin Zen 2'de her ALU için ALQ0–ALQ3 queue'ları (16 entry) vardır; Zen 3 bir ALU'yu bir AGU/BRU ile eşler (24 entry). Bir queue dolduğunda back-end stall yapar ve front-end dispatch gecikir. Güvenlik boundary'si kırılır çünkü simultaneous multithreading (SMT) altında bir core'un iki logical thread'i bu queue'ları paylaşır (Zen 2'de competitive, Zen 3'te watermarked). Seçilen bir ALU'nun queue'sunu tekrar tekrar dolduran bir attacker thread'i, ortaya çıkan stall üzerinden sibling thread'in o belirli queue'da tam olarak kaç entry kullandığını ölçer — single-scheduler tasarımlarının açığa çıkarmadığı per-instruction-type bir occupancy oracle'ı.

Walkthrough

Attack, bir cache set yerine bir scheduler queue üzerinde Prime+Probe-tarzı bir primitive kurar (bkz. Prime+Probe).

  1. Queue kapasitesini kalibre et. Attacker, dispatch'i stall eden uzun latency'li bir operation'ın öncülük ettiği özdeş ALU µop'larından (örneğin imul) oluşan bir dependency chain issue eder, sonra dik bir latency sıçramasından önce kaç µop'un sığdığını sayar. Zen 3'te sıçrama 22–24 çarpmaya yakın belirir, documented 24-entry ALU1 queue'su ile eşleşir.

  2. Occupancy'yi ölç. Stall, ya bir performance counter ile (Zen 3, IntSch1TokenStall'ı açığa çıkarır; bu, free queue entry'si olmadığı için µop'ların dispatch edilemediği cycle'ları sayar) ya da privilege olmadan, probe latency'sinin unserialized timer read'leriyle gözlemlenir.

Cross-SMT leakage ve RSA recovery

Sibling thread'de boş bir loop çalıştırmak zaten Zen 3 threshold'unu kaydırır (thread başına daha az entry mevcut), queue'nun SMT boyunca paylaşıldığını teyit eder. Sibling thread'deki bir mbedTLS RSA signing service'e yöneltildiğinde, per-queue occupancy trace'i modular exponentiation'ın multiply/square pattern'ini ayırt eder. Paper, tam RSA-4096 key'lerinin ~50,500 trace'ten tek haneli ortalama bit error ile (cross-process) ve <18 (cross-VM) kurtarıldığını raporlar. Covert channel olarak <%1 error'da cross-process 2.70 Mbit/s ve cross-VM 0.89 Mbit/s'e ulaşır.

SMT co-location AMD'de güvenli varsayılıyordu

SQUIP tam da, untrusted workload'ları bir AMD core'un iki SMT thread'inde co-locate etmenin hâlâ kabul edilebilir bir deployment model'i olarak görülmesi nedeniyle tehlikelidir. Channel, yalnızca memory access'leri değil, instruction-type aktivitesini görür.

Detection

  • Performance counter'lar. Bir userspace thread'inden, özellikle bir crypto workload'unun SMT sibling'ine pin edilmiş bir thread'den scheduler-stall counter'larında (örneğin Zen 3 IntSch1TokenStall) sürdürülen, yapılandırılmış aktivite anormaldir. EDR/host telemetry'si, PMU'yu tekrar tekrar sample eden ya da tek bir µop type'ının sıkı dependency chain'lerini çalıştıran unprivileged process'leri işaretleyebilir.
  • Scheduling anomalileri. Bir victim ile co-resident kalmak için kendini belirli logical core'lara agresif şekilde pin eden bir tenant process'i, davranışsal bir sinyaldir.

Mitigation

  • CVE-2021-46778 / AMD onayı. 15 Aralık 2021'de AMD'ye raporlandı; AMD CVE'yi reserve etti. AMD'nin rehberi bunu cross-domain SMT co-location'dan kaçınmak için başka bir neden olarak ele alır.
  • SMT'yi devre dışı bırak: birbirine güvenmeyen tenant'ları co-locate eden host'larda, ya da sibling logical core'larda yalnızca aynı-trust-domain thread'lerini schedule et (core-isolation / gang scheduling).
  • Untrusted kod için PMU access'i kısıtla: performance-counter varyantının maliyetini yükseltir (timing varyantı hâlâ çalışır, bu yüzden bu kısmidir).
  • Constant-time disiplini tek başına burada yetersizdir, çünkü leak instruction-mix occupancy'si üzerindedir; onu co-location kontrolleriyle eşle.

References