RIDL (CVE-2018-12127, CVE-2018-12130, CVE-2019-11091)¶
Rogue In-Flight Data Load: küçük CPU buffer'ları (line-fill buffer'lar, load port'lar) içinde hâlâ in-flight olan veriyi keyfi security boundary'ler boyunca sızdıran MDS sınıfı bir transient saldırı.
Mechanism¶
RIDL, Microarchitectural Data Sampling (MDS) ailesinin bir üyesidir. Meltdown ve Foreshadow architectural olarak adreslenmiş yapılardan (L1D, cache'lenmiş page-table verisi) sızdırırken, RIDL core'un byte'ları memory pipeline boyunca taşımak için kullandığı küçük, adreslenmemiş staging buffer'larından sızdırır: Line Fill Buffer'lar (LFB), load port'lar ve (kardeş çalışmada) store buffer.
Note
Kırılan invariant: bir load fault verdiğinde ya da geciktiğinde, core bağımlı transient instruction'lara hiçbir veri forward etmemelidir. Bunun yerine, belirli Intel core'ları ilgili buffer entry'sinde o an duran hangi stale byte'lar varsa onları speculatively forward eder — bunlar başka bir thread'e, process'e, VM'e, kernel'e ya da SGX enclave'ine ait olabilir. Buffer security domain'leri boyunca paylaşılır ve sahibine göre tag'lenmez, dolayısıyla security boundary, fault tanınıp speculation squash edilmeden önce in-flight verinin yeniden kullanılması nedeniyle salt o yüzden aşılır.
İsimlendirilmiş alt varyantlar hangi buffer'ın sample'landığına göre eşlenir:
- CVE-2018-12130 — MFBDS (Microarchitectural Fill Buffer Data Sampling): line-fill buffer'lardan stale veri sızdırır. Bu, çekirdek RIDL/ZombieLoad yoludur.
- CVE-2018-12127 — MLPDS (Microarchitectural Load Port Data Sampling): load port'lardan geçen veriyi sızdırır.
- CVE-2019-11091 — MDSUM (MDS on Uncacheable Memory): aynı sampling etkisi uncacheable memory erişimlerinde bile ortaya çıkar.
Walkthrough¶
Kamuya açık mdsattacks.com disclosure'ına göre yüksek seviyeli reprodüksiyon:
- Bir faulting / assisting load tetikle. Core'un hemen tamamlayamayacağı bir load çıkar (örn. bir page fault, bir assist ya da non-present bir mapping'e erişim). Bu, architectural fault retire olmadan önce bir transient pencere açar.
- In-flight veri forward edilir. O pencere içinde core, LFB / load-port entry'sinden stale byte'ları, bu byte'lar farklı bir security domain'e ait olsa bile bağımlı transient instruction'lara forward eder.
- Bir cache kanalına encode et. Sızdırılan byte'ı bir
FLUSH+RELOADprobe array'ini index'lemek için kullan, böylece secret değer hangi probe line'ının cache'leneceğini seçer. - Decode et. Pencere çöküp fault ele alındıktan sonra, her probe line'ının reload'unu ölç; hızlı bir erişim sızdırılan byte değerini ortaya çıkarır.
- Tekrarla ve hizala. Sampling fırsatçı olduğundan (buffer'da ne varsa onu alırsın), birçok kez tekrarla ve target secret'ı yeniden kurmak için istatistiksel filtreleme, victim senkronizasyonu ya da co-located SMT sibling'leri kullan.
Transient encode iskeleti (kavramsal)
Sampling yönlendirilmemiştir: RIDL o an buffer'dan geçen her ne ise onu sızdırır, dolayısıyla saldırılar bunu victim'in secret'ını doğru anda buffer'dan akıtmaya yarayan tekniklerle (örn. secret'ı tekrar tekrar işleyen co-resident bir hyperthread) eşleştirir.
Detection¶
- Victim'in içinden gözlemlemek zordur. Host tarafında,
rdtsc/rdtscptiming döngüleri ve cache-flush aktivitesiyle (clflush) sıkıca iç içe geçmiş, sürekli yüksek oranda page fault / micro-architectural assist üreten process'lere bak. - EDR/telemetri: aynı adres aralığında tekrar tekrar fault tetikleyen unprivileged kod ya da 256-stride bir probe buffer üzerinde olağandışı
FLUSH+RELOADtarzı erişim pattern'leri zayıf bir davranışsal göstergedir. - Performance-counter monitoring (machine-clear'lar, memory-ordering assist'leri,
MEM_LOADevent'leri) anormal transient-execution workload'larını işaretleyebilir, ama yüksek false-positive riskiyle.
Mitigation¶
- Microcode + MD_CLEAR /
VERWbuffer overwrite. Güncellenmiş microcode, etkilenen buffer'ları flush'lamak içinVERWinstruction'ını yeniden amaçlandırır; OS bunu daha az güvenilen bir domain'e her geçişte (userspace'e dönüş, VM entry, idle) çıkarır. - Sibling thread'ler line-fill buffer'ları ve load port'ları paylaştığından, cross-thread sızıntının ortadan kaldırılması gereken yerlerde SMT / Hyper-Threading'i devre dışı bırak.
- Aynı physical core üzerinde birbirine güvenmeyen tenant'ların co-residency'sinden kaçınmak için OS/hypervisor scheduling (core/group scheduling).
- Firmware ve OS patch'lerini güncel tut; cloud/SGX ortamlarında Intel'in TCB-recovery rehberini izle.