---
id: P-REINFORCE-AUTO-539F01
category: "10_Wiki/💡 Topics/Programming & Language"
confidence_score: 0.90
tags: [auto-reinforced]
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - Browser Security Mitigations"
---

# [[Browser Security Mitigations|Browser Security Mitigations]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> 브라우저 보안 완화(Browser Security Mitigations)는 스펙터(Spectre) 및 멜트다운(Meltdown)과 같은 사이드 채널 공격으로부터 사용자를 보호하기 위해 웹 브라우저가 구현하는 방어 메커니즘입니다. 이러한 완화 조치는 정보 유출을 막기 위해 타이밍 API의 정밀도를 고의로 낮추고, 자바스크립트 엔진 내에 추측 실행(Speculative Execution)을 방어하는 분기 없는(branchless) 보안 검사를 도입하여 메모리 접근을 안전하게 통제하는 데 중점을 둡니다 [1-3].

## 📖 구조화된 지식 (Synthesized Content)
*   **스펙터(Spectre) 및 멜트다운(Meltdown) 취약점 대응**
    현대의 CPU는 성능 향상을 위해 추측 실행(Speculative execution)과 분기 예측을 사용합니다 [4]. 스펙터 공격은 이를 악용하여 고정밀 타이밍 측정을 통해 정상적인 범위를 벗어난 메모리를 읽어내는 기술입니다 [4, 5]. 브라우저에서 실행되는 신뢰할 수 없는 자바스크립트 코드가 이 취약점을 이용해 호스트 프로세스의 주소 공간이나 커널 메모리(멜트다운)에 접근하는 것을 막기 위해 브라우저 차원의 구조적 보안 완화가 필수적입니다 [2, 6, 7].

*   **타이밍 정밀도 감소 및 지터(Jitter) 도입**
    캐시 사이드 채널 공격은 캐시 적중 여부에 따른 서브 마이크로초 단위의 미세한 타이밍 차이를 관찰하여 이루어집니다 [1, 5]. 이를 방지하기 위해 브라우저 엔진은 `performance.now()`와 같은 타이머의 정밀도를 1ms 또는 100마이크로초 수준으로 낮추고, 공격자가 통계적 평균을 통해 고정밀 시계를 재구성하지 못하도록 무작위 변동(지터, Jitter)을 추가했습니다 [1, 3, 8]. 또한, 고해상도 타이머 역할을 할 수 있는 `SharedArrayBuffer`나 WebGL의 `EXT_disjoint_timer_query` 확장 기능을 비활성화하거나 사이트 격리 상태에 따라 해상도를 크게 제한(Quantization)했습니다 [1, 3, 8-10]. WebGPU의 타임스탬프 쿼리 역시 격리된 컨텍스트에서는 100마이크로초 해상도로 제한되며, 비격리 컨텍스트에서는 기본적으로 노출되지 않도록 보호됩니다 [11, 12].

*   **분기 없는 보안 검사 (Branchless Security Checks)**
    스펙터 공격은 CPU의 분기 예측을 제어하여 보안 속성을 강제하는 분기문을 우회할 수 있습니다 [5, 13]. 이에 WebKit 등의 브라우저 엔진은 분기문에 의존하지 않는 새로운 보안 검사 방식을 구현했습니다 [3].
    *   **인덱스 마스킹(Index Masking):** 추측 실행 중에도 배열 인덱스가 유효한 범위 내에 있도록 비트 연산을 사용하여 값을 마스킹하는 기법입니다 [14, 15].
    *   **포인터 포이즈닝(Pointer Poisoning):** 포인터 값에 컴파일 타임에 생성된 무작위 '포이즌(poison)' 값을 XOR 연산하는 기술입니다 [16]. 잘못된 타입 검사를 통과한 추측 실행 시, 포이즈닝된 포인터는 매핑되지 않은 유효하지 않은 메모리를 가리키게 되므로 데이터 유출을 방지할 수 있습니다 [14, 16, 17].

*   **하드웨어 및 컨텍스트 전환 제한**
    타이밍 공격 외에도, 듀얼 GPU를 사용하는 특정 시스템(예: 듀얼 GPU Mac)에서는 WebGL 컨텍스트의 수명 주기 동안 여러 GPU를 전환하는 행위 자체가 드라이버 수준의 보안 문제로 간주됩니다 [18]. 이에 따라 브라우저는 컨텍스트 생성 전 이산(discrete) GPU로 강제 전환하고 유지하도록 제한을 두고 있습니다 [18].

## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.

## 🔗 지식 연결 (Graph)
- **Related Topics:** [[Spectre and Meltdown|Spectre and Meltdown]], [[Speculative Execution|Speculative Execution]], [[Timing Attacks|Timing Attacks]], [[Index Masking|Index Masking]], [[Pointer Poisoning|Pointer Poisoning]]
- **Projects/Contexts:** [[WebKit|WebKit]], [[JavaScriptCore|JavaScriptCore]], [[WebGPU|WebGPU]], [[WebGL|WebGL]]
- **Contradictions/Notes:** WebGPU 타임스탬프 쿼리는 타이밍 공격의 우려로 인해 초기에는 비격리 컨텍스트에서 완전히 숨겨지도록 제안되었으나 [12], 개발자들의 성능 프로파일링 요구와 브라우저 간 상호 운용성(Interop) 문제를 해결하기 위해, 사이트 격리 여부와 상관없이 High-Resolution Time 스펙과 맞춘 100마이크로초 해상도를 제공하는 방향으로 스펙이 수정 및 채택되었습니다 [19-22].

---
*Last updated: 2026-04-19*
- Raw Source: 00_Raw/2026-04-20/Browser Security Mitigations.md
---
