Skip to content

Downfall / Gather Data Sampling (CVE-2022-40982)

Intel AVX gather instruction'ları transient şekilde, SGX, process ve thread sınırları boyunca eski (stale) SIMD register-file verisini sızdırır.

Mechanism

Bug sınıfı: alakasız SIMD register state'inin speculative forwarding'i

x86 gather ailesi (örn. vpgatherdd, vgatherqps), dağınık element'leri bir hedef vector register'a toplayan karmaşık, micro-coded bir vector load'dur. Bunu hızlandırmak için etkilenen Intel core'ları, internal bir SIMD register-file buffer'ından veriyi geçici olarak forward eder. Downfall (namıdiğer Gather Data Sampling, GDS), transient (speculative) execution sırasında gather operasyonunun farklı bir security context'e ait stale değerleri forward edebildiğini gösterir — yani aynı fiziksel vector register'ları daha önce kullanmış başka bir thread, process veya hatta bir SGX enclave'in geride bıraktığı veriyi.

gather'ın architectural sonucu sonunda doğrudur, ama transient sonuç, makine misspeculation'ı squash etmeden önce klasik bir cache covert channel üzerinden gözlemlenebilir. Kırılan invariant, vector register file'ın domain isolation'ıdır: gather veri yolu, victim'in ve attacker'ın security domain'i arasındaki sınıra saygı göstermez. İkili bir teknik olan Gather Value Injection (GVI), GDS'i Load Value Injection tarzı forwarding ile birleştirerek victim'in transient computation'ını etkiler.

Etkilenen parçalar: 6. nesil (Skylake)'ten 11. nesil (Tiger Lake)'e kadar Intel Core aileleri; CVE-2022-40982 / INTEL-SA-00828 olarak izleniyor. Daniel Moghimi tarafından keşfedildi (USENIX Security 2023).

Walkthrough

Public paper'da ve downfall.page'de anlatıldığı şekliyle yüksek seviyeli, kavramsal bir reproduction. Burada çalışan bir exploit, gadget chain veya offset verilmiyor.

Kavramsal data-sampling loop'u
  1. SIMD register file paylaşılsın diye victim ile aynı fiziksel core üzerinde birlikte yerleş (SMT sibling ya da time-sliced context switch).
  2. Victim SIMD işi yapar — örn. bir AES round'u veya library'nin vectorize ettiği bir memcpy — ve vector register file'da secret byte'lar bırakır.
  3. Attacker, transient forwarding'i tetikleyen koşullar altında bir gather çalıştırır; böylece hedef vector register, architectural olarak doğru toplanmış veri yerine transient şekilde stale byte'ları tutar.
  4. Stale byte'lar bir flush-and-reload probe array'ini index'ler:

    gather  ymmX  <-- transiently sampled stale lane
    movzx   eax,  <byte from ymmX>
    mov     bl, [probe + eax*CACHE_LINE]   # transient encode
    
  5. Transient window çöktükten sonra attacker, hangi line'a dokunulduğunu geri elde etmek için probe array'ini time'lar (bkz. ../sidechannel/flush-reload.md) ve sızan byte'ı yeniden inşa eder. Lane'ler üzerinde iterate edip yeniden çalıştırmak, SGX sınırı boyunca dahil olmak üzere key'leri geri elde eder.

Warning

Gather, buffer'da ne varsa onu forward ettiği için attacker hangi victim secret'ının görüneceğini seçemez — leakage istatistikseldir ve MDS sınıfı sampling'i andıracak şekilde çok sayıda sample ile alignment/grooming gerektirir.

Detection

  • Hardware performance counter'lar (HPC): Downfall PoC'leri gather instruction'larını ve flush+reload probe'larını çok yüksek oranlarda çalıştırır. Özellikle non-numeric/güvenilmeyen process'lerden gelen anormal vector-gather retirement oranlarına, cache-miss patlamalarına (MEM_LOAD_RETIRED.L3_MISS) ve machine-clear'lara dikkat edin.
  • Davranışsal telemetri: clflush/gather/rdtscp birleştiren sıkı loop'lar normal uygulama kodunda nadirdir; EDR, bir core'a pin'lenip timing primitive'leri üzerinde busy-spin yapan binary'leri işaretleyebilir.
  • Leakage'ın kendisi için signature tabanlı AV tespiti yoktur; zararsız bir matematik gibi görünür. Tespit anomali/telemetri tabanlıdır.
  • SGX: attestation ve microcode-version raporlaması, GDS microcode'unu uygulamamış host'ları ortaya çıkarabilir — asıl risk göstergesi budur.

Mitigation

  • Microcode (birincil düzeltme): Intel, gather'ın transient veriyi forward etmesini engelleyen bir lock ekleyen microcode update yayınladı; gather'ı serialize eder ve sonraki execution'ın speculative gather çıktısını gözlemlemesini bloklar. GDS_MITG kontrolü üzerinden açığa çıkar (update sonrası default-on). /sys/devices/system/cpu/vulnerabilities/ içinde gather_data_sampling durumunu doğrulayın.
  • Performans takası: mitigation, gather-yoğun (HPC/AVX) workload'larda ciddi overhead getirebilir — en kötü durumlarda ~%50'ye kadar — bu yüzden yalnızca platformun tam güvenilir olduğu yerde devre dışı bırakmayı tartın.
  • Defense in depth: çok hassas multi-tenant core'lar için SMT'yi devre dışı bırakın, BIOS/microcode'u güncel tutun ve MDS için kullanılan aynı scheduling/affinity hijyenine güvenin (bkz. ../sidechannel/microarchitectural-data-sampling.md ve ../mitigation/l1d-cache-flush.md).
  • Locked microcode: Intel, GDS_MITG'i lock'lanabilir yaptı; böylece bir hypervisor, bir guest'in mitigation'ı kapatmasını engelleyebilir.

References