Speculative Store Bypass Disable (SSBD) Spectre v4 / CVE-2018-3639

Interactive Hardware Memory Disambiguation & SSBD Simulator v2.0
Speed:
SIMULATION RUNNING
CPU OUT-OF-ORDER EXECUTION CORE 1. Instruction Pipeline STORE *ptr_x = 0x55 (Address calc delayed) LOAD val = *ptr_y (Aliased: ptr_y == ptr_x) LOAD probe_array[val * 512] (Flush+Reload Side-Channel) 2. Store Buffer & Pending Queue Slot 0: [Address: PENDING...] Data: 0x55 (Safe Committed Val) WAIT ADDR 3. Memory Disambiguation Predictor Prediction: NO ALIAS (ptr_x != ptr_y) MSR IA32_SPEC_CTRL[2] = 0 (SSB Allowed) 4. Memory Slot (ptr_x / ptr_y) Memory Physical Addr: 0x41B20000 Current Memory Value: 0x46 ('F' - Stale Secret Byte) Flush+Reload Probe Array (128 KB) Line 0x00: FLUSHED (Cache Miss) Line 0x55 (Safe): FLUSHED Line 0x46 ('F' Secret): FLUSHED 5. Microarchitectural Speculation State Machine Step 1: Store Stalled Store ptr_x = 0x55 Address unknown Step 2: Disambiguation Predict ptr_x != ptr_y SSB Bypass decision Step 3: Speculative Load Reads stale memory val = 0x46 ('F') Step 4: Cache Side-Channel probe_array[val*512] Line warms in L1D Step 5: Architectural Squash Hazard detected & revert Cache remains warm!
CURRENT PHASE: SPECULATIVE STORE BYPASS (SPECTRE V4) STATUS: INITIALIZING
ํ˜„๋Œ€ ์Šˆํผ์Šค์นผ๋ผ CPU์˜ ์•„์›ƒ์˜ค๋ธŒ์˜ค๋”(Out-of-Order) ์‹คํ–‰ ์—”์ง„์€ ์„ ํ–‰ Store ๋ช…๋ น์–ด์˜ ๋ชฉ์ ์ง€ ์ฃผ์†Œ ๊ณ„์‚ฐ์ด ์ง€์—ฐ๋  ๋•Œ, ํ›„ํ–‰ Load ๋ช…๋ น์–ด์™€์˜ ์ถฉ๋Œ ์—ฌ๋ถ€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋น„๋ชจํ˜ธํ™” ์˜ˆ์ธก๊ธฐ(Memory Disambiguator)๋ฅผ ํ†ตํ•ด ์˜ˆ์ธกํ•จ. ์˜ˆ์ธก๊ธฐ๊ฐ€ ๋ณ„์นญ(Aliasing)์ด ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด Store ์ด์ „์— Load๋ฅผ ํˆฌ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜์—ฌ ์ง€์—ฐ์‹œ๊ฐ„์„ ์ค„์ด์ง€๋งŒ, ์‹ค์ œ ์ฃผ์†Œ๊ฐ€ ์ผ์น˜ํ•  ๊ฒฝ์šฐ ๊ฐฑ์‹  ์ „์˜ Stale(์ด์ „ ๋น„๋ฐ€) ๋ฐ์ดํ„ฐ๋ฅผ ํˆฌ๊ธฐ์ ์œผ๋กœ ์ฝ์–ด ์‚ฌ์ด๋“œ ์ฑ„๋„๋กœ ์œ ์ถœํ•˜๋Š” ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•จ.
// [Speculative Store Bypass Vulnerable Pattern] *ptr_x = SAFE_VAL; // 1. ์„ ํ–‰ Store: ๋ณต์žกํ•œ ์ฃผ์†Œ ๊ณ„์‚ฐ์œผ๋กœ Store Buffer ๋Œ€๊ธฐ val = *ptr_y; // 2. ํ›„ํ–‰ Load: ptr_y == ptr_x์ž„์—๋„ ํˆฌ๊ธฐ์ ์œผ๋กœ ๋จผ์ € ์ฝ์Œ -> Stale Secret ๋ˆ„์ถœ! probe_array[val * STRIDE] = 1; // 3. ๋ถ€์ˆ˜ ํšจ๊ณผ: L1D ์บ์‹œ ๋ผ์ธ ์›Œ๋ฐ์—…์œผ๋กœ Flush+Reload ์ธก์ • ํ—ˆ์šฉ

Spectre v4 (SSBD) Architecture & Defense Comparison Matrix

๊ตฌ๋ถ„ (Metric) Baseline (Vulnerable) x86_64 SSBD (MSR IA32_SPEC_CTRL) ARM64 SSBD (PSTATE.SSBS / SMCCC) Software Barrier (LFENCE / DSB)
๋ฐฉ์–ด ์›๋ฆฌ ํˆฌ๊ธฐ์  ์Šคํ† ์–ด ๋ฐ”์ดํŒจ์Šค ํ—ˆ์šฉ (๊ธฐ๋ณธ๊ฐ’) MSR 0x48 bit 2 ์„ธํŒ…์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋น„๋ชจํ˜ธํ™”๊ธฐ ํˆฌ๊ธฐ ์™„์ „ ๋น„ํ™œ์„ฑํ™” PSTATE.SSBS=0 ์„ค์ • ๋˜๋Š” SMCCC ํŽŒ์›จ์–ด ์›Œํฌ์–ด๋ผ์šด๋“œ2 ํ˜ธ์ถœ Store ์งํ›„ LFENCE / DSB SY ์‹คํ–‰ํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ ์ง๋ ฌํ™” ๊ฐ•์ œ
ํ•˜๋“œ์›จ์–ด ์ œ์–ด ์—†์Œ (CPU ๊ธฐ๋ณธ ์˜ˆ์ธก ๋™์ž‘) Intel/AMD ํ•˜๋“œ์›จ์–ด ์ง€์› MSR ๋ ˆ์ง€์Šคํ„ฐ ARMv8.5-A SSBS ๋˜๋Š” ARMv8.0 ์‹œ์Šคํ…œ ๋ ˆ์ง€์Šคํ„ฐ ํ‘œ์ค€ ์•„ํ‚คํ…์ฒ˜ ๋ฐฐ๋ฆฌ์–ด ๋ช…๋ น์–ด
์œ ์ € ํ†ต์ œ (prctl) PR_SPEC_ENABLE (์ทจ์•ฝ ๋ชจ๋“œ) prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE) prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE) ์ปดํŒŒ์ผ๋Ÿฌ/์ฝ”๋“œ ๋ ˆ๋ฒจ ์‚ฝ์ž… (์œ ์ € ๊ณต๊ฐ„ prctl ๋ฌด๊ด€)
์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ 0% (์ตœ๊ณ ์˜ ํŒŒ์ดํ”„๋ผ์ธ ์ฒ˜๋ฆฌ๋Ÿ‰) ์•ฝ 2% ~ 8% (๋ฉ”๋ชจ๋ฆฌ ์ง‘์•ฝ ์›Œํฌ๋กœ๋“œ์— ํ•œํ•จ) ์•ฝ 1% ~ 5% (Core ๋งˆ์ดํฌ๋กœ์•„ํ‚คํ…์ฒ˜์— ๋”ฐ๋ฆ„) ๊ตญ์†Œ์  ์˜ค๋ฒ„ํ—ค๋“œ ๋†’์Œ (ํ•ด๋‹น ํ•จ์ˆ˜ ์ง€์—ฐ ์ˆ˜์‹ญ~์ˆ˜๋ฐฑ ์‚ฌ์ดํด)
sysfs ์ƒํƒœ ๋ฌธ์ž์—ด Vulnerable Mitigation: Speculative Store Bypass disabled via prctl and seccomp Mitigation: Speculative Store Bypass disabled via prctl (ํ•˜๋“œ์›จ์–ด ์™„ํ™” ๋ฏธ์ ์šฉ ์‹œ Vulnerable ํ‘œ๊ธฐ)