⚡ Scenario 06: 예측 실행 부채널 유출(Spectre) 및 방어 아키텍처

CVE-2017-5753 / CVE-2017-5715 array_index_nospec & Retpoline
System: Ready
1
📦 Phase 1: 정상 메모리 접근 및 합법적 예측 실행 (Nominal Flow)
Baseline Normal
비전 AI 모듈이 커널 텔레메트리 배열 내 정상 인덱스(idx < 16)를 요청할 때, CPU 분기 예측기(BPU)는 정상적으로 분기 참(Taken)을 예측하고 파이프라인을 확정(Retire)함. 캐시에는 합법적 공개 데이터만 적재되며 기밀 영역에 대한 일체 부채널 신호가 발생하지 않음.
⚙️ 정상 경계 조건 검사
if (x < array1_size) { y = probe_array[array1[x] * 512]; } // 정규 인덱스(x=5) -> 경계 통과 -> 안전 적재
🤖 로봇 임무 보안 엔클레이브
geofence_id = "ZONE_RESTRICTED_HUMANOID" secret_token = "NAV_SEC_8F3A" Status: Fully Isolated (Zero Side-Channel)
2
💥 Phase 2: 분기 예측 오작동 & Flush+Reload 캐시 부채널 유출 (Attack Detonation)
Vulnerable (nospec=n)
공격자가 BPU를 유효 훈련 후 경계 초과 인덱스(OOB)를 주입하면, CPU는 조건이 계산되는 동안 일시적으로 예측 참(True)으로 판단하여 기밀 엔클레이브 데이터(NAV_SEC_8F3A)를 선행 로드함. 조건 불일치로 롤백되더라도 프로브 배열의 L1 캐시 흔적은 남아 Flush+Reload 타이밍 측정(42사이클 L1 Hit)을 통해 기밀이 100% 탈취되고 안전 지오펜스가 무단 해제됨!
⚠️ Spectre Variant 1 취약점
// 훈련된 BPU가 OOB 예측 실행 감행: transient_byte = secret_enclave[offset]; probe_array[transient_byte * 512]; // 캐시 오염! // rdtsc 측정: Line #0x4E ('N') = 42 사이클!
🔴 사이버-물리 파괴 전이: 지오펜스 해제
Recovered Secret: "NAV_SEC_8F3A" (100% 유출) Geofence Interlock: Disarmed by Attacker! Trajectory: Autonomous run into hazard zone!
3
🛡️ Phase 3: array_index_nospec 산술 마스킹 & Retpoline 차단 (Hardened Trap)
Hardened (nospec=y, Retpoline)
array_index_nospec() 매크로는 분기 명령어 없이 산술 마스크(sbb 연산)를 통해 경계 초과 인덱스를 0으로 강제 클램핑함. 예측 실행 상태에서도 CPU는 공개 0번 인덱스만 접근하여 기밀 캐시 적재를 원천 봉쇄함. CONFIG_RETPOLINE=y는 Spectre v2 간접 분기 주입 공격을 포즈 루프 트램펄린으로 원천 차단함.
🔐 array_index_nospec 마스킹 원리
unsigned long mask = array_index_mask_nospec(idx, sz); idx = idx & mask; // 초과 시 mask=0 -> idx=0 클램핑 // 예측 실행 중에도 OOB 캐시 터치 0% 원천 방지!
🛑 Retpoline 트램펄린 보호
// 간접 점프(*%rax)를 call/ret 루프로 대체: call .Lretpoline_target .Lpause_loop: pause; jmp .Lpause_loop // BPU 추측 엔진을 포즈 루프에 가두어 탈취 방지
4
🛑 Phase 4: 부채널 탐지 격리 및 안전 홀드 자율 대응 (Deterministic Safe State)
Safe State
비정상적인 고주파수 clflush 프로빙 패턴이 감시 워치독에 포착되는 즉시, 보안 엔클레이브가 기밀 키를 소거(Zeroize) 및 동결함. 로봇 자율 주행 제어기가 즉각 'Safe Hold Mode'로 전이하여 경로 주행을 중단하고 지정된 안전 복도 내에 안전 정지 상태를 유지함.
⚡ 기밀 토큰 즉각 소거 (Key Zeroize)
Timing Anomaly Flagged by PMU Monitor Active Secret Tokens: Revoked & Cleared Geofence Interlock: Tamper-Proof Locked
🔒 자율 주행 안전 정지 (Safe Hold)
Trajectory Planning: Suspended Locomotion: Deterministic Safe Halt Physical Boundary: 100% Secured (0 J Damage)
🧮 array_index_nospec 수학적 마스킹
x86-64 어셈블리 cmp %size, %idx; sbb %mask, %mask는 인덱스가 크기보다 작을 때 캐리 플래그를 발생시켜 mask = 0을 만들고, 인덱스가 크거나 같으면 mask = ~0UL을 만듦. 조건부 점프(Jcc)가 전혀 없으므로 BPU가 분기 예측을 수행할 수 없어 투기적 우회가 물리적으로 불가능함.
🧱 Retpoline vs IBRS/IBPB 하드웨어 완화책
Retpoline은 구형/중간 세대 CPU에서 마이크로코드 업데이트 없이 소프트웨어 컴파일러 수준으로 간접 분기 예측을 무력화함. 최신 프로세서에서는 eIBRS (Enhanced IBRS) 및 IBPB (Indirect Branch Prediction Barrier) 하드웨어 플래그를 통해 커널-유저 간 예측 상태를 격리함.
⏱️ Flush+Reload vs Prime+Probe 부채널 기법
Flush+Reload는 공유 메모리 페이지(공유 라이브러리)의 캐시 라인을 clflush로 비운 뒤 상대방이 접근했는지 재적재 시간(rdtsc)을 측정함. 공유 메모리가 없는 경우 공격자는 자신의 캐시 세트를 채운 뒤 퇴출 여부를 관찰하는 Prime+Probe를 사용함.
🛡️ Defense-in-Depth 부채널 방어 계층
1단계 array_index_nospec(경계 검사 우회 방어) + 2단계 CONFIG_RETPOLINE & IBRS(분기 대상 주입 방어) + 3단계 KPTI(멜트다운 및 커널 페이지 격리) + 4단계 CONFIG_SPEC_STORE_BYPASS_DISABLE(Speculative Store Bypass 방어)로 마이크로아키텍처 누출을 완벽 통제함.