Downfall / Gather Data Sampling (CVE-2022-40982)¶
Intel AVX
gatherinstruction'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
- SIMD register file paylaşılsın diye victim ile aynı fiziksel core üzerinde birlikte yerleş (SMT sibling ya da time-sliced context switch).
- 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.
- 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. -
Stale byte'lar bir flush-and-reload probe array'ini index'ler:
-
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
gatherinstruction'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/rdtscpbirleş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çindegather_data_samplingdurumunu 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.