Meltdown-GP¶
Variant 3a / Rogue System Register Read (CVE-2018-3640): erişimi bir #GP yükseltmesi gereken privileged system register'ları (MSR'ler, control/segment register'ları) transient olarak okur — değeri general-protection fault retire olmadan önceki window'da sızdırır.
Mechanism¶
Neden çalışır
Birçok system register — rdmsr ile okunan model-specific register'lar
(MSR'ler), control register'lar, debug register'lar ve belirli segment/descriptor
state'i — yalnızca privilege level 0'da (ya da privileged bir instruction
aracılığıyla) architectural olarak erişilebilir. Böyle bir register'ın
unprivileged bir read'i, architectural olarak bir
general-protection exception (#GP) yükseltir.
Meltdown-GP, Canella et al. transient-execution taxonomy'sinin #GP yaprağıdır
("Meltdown-GP / System Register Bypass"). Invariant'ı her Meltdown-type etkiyle
aynıdır: #GP exception lazy biçimde handle edilir. CPU, access'in illegal
olduğunu belirledikten sonra, fault retire olup architectural sonucu squash
etmeden önce register'ın değerini dependent instruction'lara transient olarak
forward eder ve onların bunu microarchitectural state'e encode etmesine izin
verir.
Intel, altta yatan sorunu (INTEL-SA-00115) şöyle tanımlar: "Speculative execution kullanan ve system register'ların speculative read'lerini gerçekleştiren mikroişlemcilere sahip sistemler, local user access'i olan bir attacker'a bir side-channel analysis aracılığıyla system parametrelerinin yetkisiz disclosure'ına izin verebilir." ARM, aynı etkiyi ilk olarak Cache Speculation Side-channels whitepaper'ının güncellenen sürümünde (v2.4, Eylül 2018 ve sonrası) **Variant 3a
(V3a)** olarak belgeledi.
Sibling taxonomy'den farkı: Meltdown-GP'yi belirleyen exception #GP'dir ve hedef system register state'idir — bir bounds ihlali (#BR, Meltdown-BR), lazy-FPU #NM (Meltdown-NM), present-bit/L1TF (Meltdown-P), PKU/PKRU bypass (Meltdown-PK) ya da read-only R/W-bit transient store (Meltdown-RW) değil.
Sızdırılan değer system register state'idir, keyfi memory değil. Bu, Meltdown-GP'yi
memory okuyan Meltdown'dan daha düşük severity'li yapar (CVSS 4.3 Medium,
AV:L/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N): configuration/parametre bitlerini (örneğin
bir attacker'ın okuyamaması gereken MSR'lerin içeriğini) açığa çıkarır; bu da diğer
şeylerin yanı sıra KASLR tarzı gizlilik varsayımlarını çürütebilir ya da daha fazla
saldırıyı zincirlemek için yararlı state'i ifşa edebilir.
Walkthrough¶
Privileged bir system-register read'i transient olarak gerçekleştirilir ve değer,
GP retire olmadan önce bir Flush+Reload oracle'ına encode edilir:¶
// Conceptual Meltdown-GP (Variant 3a). Real PoCs: https://transient.fail/
// Reading this MSR/control reg from CPL>0 architecturally raises #GP.
// Run inside a fault-suppression harness (signal handler, or the shadow of a
// mispredicted branch / TSX transaction) so the window stays open.
uint64_t v = __read_privileged_register(); // transient: #GP pending, value forwarded
(void)probe[(v & 0xff) * 4096]; // encode low byte into cache state
// decode: time probe[i*4096]; fastest line index == leaked byte
- Privileged read'i gönder (
rdmsr, ya da mevcut privilege level'da erişilemeyen bir control/segment register'ının read'i) → #GP yükseltilir ama ertelenir. - Transient olarak encode et: forward edilen register byte'ını, pre-#GP window sırasında 256-entry'lik bir probe array'e.
- Flush+Reload ile decode et — cache'lenmiş probe line, sızdırılan byte'ı ortaya çıkarır; register'ı yeniden oluşturmak için byte byte tekrarla.
Sınıflandırma / disclosure gerçekleri
Taxonomy leaf : Meltdown-GP (exception = #GP, general protection)
Aliases : Variant 3a, Rogue System Register Read (RSRR / RSRE)
CVE : CVE-2018-3640
Advisory : INTEL-SA-00115
CVSS 3.0 : 4.3 Medium (AV:L/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N)
Origin : ARM "Cache Speculation Side-channels" whitepaper (Variant 3a);
Intel x86-based systems affected.
Leaked : system register state (MSRs / control / segment registers),
not arbitrary memory.
Detection¶
Güvenilir bir victim tarafı architectural iz yok — illegal read hiçbir commit
edilmiş sonuç bırakmaz. Host/static sezgiler: rdmsr ya da privileged-register
read'lerini fault-suppression veya branch-misprediction harness'leri içinde
gönderen, sıkı Flush+Reload timing loop'larıyla eşleştirilmiş unprivileged code.
Mitigation¶
- CPU microcode güncellemesi. Memory okuyan Meltdown'ın aksine, Variant 3a
tamamen Intel microcode ile fix edilir — "İşletim Sistemi yazılımının yardımı
olmadan, CPU Microcode güncellemeleri kullanılarak çözülecektir" — ancak
deployment BIOS/firmware aracılığıyla (ve/veya early-boot microcode loading ile)
teslim edilir.
intel-microcode3.20180703.1 / 3.20180807a.1 sürümleri fix'leri içerir. - KPTI burada alakasız: Meltdown-GP, user/kernel mapping'i boyunca kernel memory'sini okumaz; page-table isolation, speculative system-register read'lerini ele almaz. Microcode mitigation'ı doğru fix'tir.
References¶
- Rogue System Register Read / CVE-2018-3640 / INTEL-SA-00115 (Intel)
- A Systematic Evaluation of Transient Execution Attacks and Defenses (Canella et al., USENIX Security 2019)
- arXiv:1811.05441 — A Systematic Evaluation of Transient Execution Attacks and Defenses
- transient.fail — classification tree and proofs-of-concept
- Arm Whitepaper: Cache Speculation Side-channels (v2.5, June 2020) — documents Variant 3a