- V8 샌드박스는 V8 엔진을 위한 경량, 인-프로세스 샌드박스
- 이제 실험단계를 벗어나 Chrome의 취약점 보상 프로그램(VRP)에 포함됨
- 아직 해결해야 할 보안 문제가 있으며, Chrome 123 버전은 샌드박스의 "베타" 릴리스로 간주될 수 있음
동기
- 메모리 안전성은 여전히 중요한 문제로, 지난 3년간 발견된 모든 Chrome 익스플로잇은 V8의 메모리 손상 취약점에서 시작됨
- 이러한 취약점 중 60%는 V8에서 발생했으나, 대부분은 "전형적인" 메모리 손상 버그가 아닌 미묘한 논리 문제임
- 현재 메모리 안전성 솔루션 대부분은 V8에 적용되지 않으며, Rust 같은 메모리 안전 언어로의 전환 또는 메모리 태깅과 같은 하드웨어 기능도 V8의 보안 도전에 도움이 되지 않음
V8 (힙) 샌드박스
- 샌드박스의 기본 아이디어는 V8의 힙 메모리를 격리하여 메모리 손상이 프로세스의 다른 부분으로 "확산"되지 않도록 하는 것
- 하드웨어 지원으로 구현될 수 있지만, 현재 적합한 하드웨어 기능이 없어 소프트웨어 기반으로 구현됨
- 샌드박스는 모든 외부 메모리에 접근할 수 있는 데이터 타입을 "샌드박스 호환" 대안으로 대체함
- 샌드박스 내부의 V8 힙만이 샌드박스 안에 있으며, 이는 WebAssembly의 샌드박싱 모델과 유사
성능
- 샌드박스 접근법의 주요 장점은 기본적으로 비용이 적게 든다는 것
- 샌드박스로 인한 오버헤드는 주로 외부 객체에 대한 포인터 테이블 간접 참조에서 발생하며, 현재 오버헤드는 일반적인 워크로드에서 1% 미만
테스팅
- 보안 경계에 대한 테스트 가능성은 실제로 보안 보장이 실제로 유지되는지 수동 및 자동으로 테스트할 수 있는 능력을 의미함
- V8 샌드박스는 명확한 공격자 모델, 공격자를 모방하는 방법, 보안 경계가 실패했을 때 자동으로 판단하는 방법을 모두 충족함
사용
- V8 샌드박스는 빌드 시간에
v8_enable_sandbox
빌드 플래그를 사용하여 활성화/비활성화해야 함.
- 64비트 시스템에서만 사용 가능하며, 현재 1테라바이트의 가상 주소 공간을 예약해야 함.
- V8 샌드박스는 이미 약 2년 전부터 Android, ChromeOS, Linux, macOS, Windows의 64비트 버전 Chrome에서 기본적으로 활성화됨.
결론
- V8 샌드박스는 프로세스의 다른 메모리에 영향을 미치는 V8의 메모리 손상을 방지하기 위해 설계된 새로운 보안 메커니즘
- 현재의 메모리 안전 기술은 최적화된 JavaScript 엔진에 대부분 적용되지 않지만, V8 샌드박스 공격 표면을 보호하는 데에는 효과적임
- 샌드박스는 메모리 안전성을 향한 필수적인 단계임
GN⁺의 의견
- V8 샌드박스는 메모리 손상 취약점에 대한 현대적인 대응책으로, 기존의 메모리 안전 기술이 해결하지 못하는 문제에 대한 해답을 제공함
- 이 샌드박스는 JavaScript 엔진의 복잡성을 고려할 때, 보안 경계를 더욱 강화하고, 메모리 안전성을 향상시키는 중요한 역할을 함
- 샌드박스의 성능 오버헤드가 낮다는 점은 개발자들에게 매력적일 수 있으며, 이는 샌드박스를 널리 채택하는 데 도움이 될 것임
- 그러나 샌드박스 기술이 완전히 새로운 보안 취약점을 도입할 가능성도 있으며, 이는 지속적인 모니터링과 테스트를 통해 관리되어야 함
- 샌드박스의 효과적인 구현은 공격자가 시스템의 다른 부분으로의 메모리 손상 확산을 방지하는 데 중요한 역할을 하며, 이는 웹 보안을 강화하는 데 기여할 것임