主要观点:V8 沙箱历经近三年和大量 CLs 后,已从实验性安全功能进展到不再被视为实验性的阶段,今日起已纳入 Chrome 的漏洞奖励计划(VRP),虽仍有问题待解决,但这是迈向安全的重要一步,Chrome123 可视为沙箱的“测试版”发布。
关键信息:
- 近三年 Chrome 漏洞多始于渲染进程的内存损坏漏洞,60%在 V8 中,且多为微妙逻辑问题导致内存损坏,现有内存安全解决方案不适用于 V8。
- 以简化的 JavaScript 引擎漏洞为例,说明现代 JavaScript 引擎漏洞难以通用缓解,如使用内存安全语言 Rust 不能防止即时编译器中的逻辑问题导致的内存损坏,禁用 JIT 编译器也只是部分解决方案,硬件安全机制如内存标记也不适用于 JavaScript 引擎。
- 沙箱的基本理念是隔离 V8 内存,防止内存损坏扩散,原则上可由硬件支持实现,实际中目前由软件实现,通过将可访问沙箱外内存的数据类型替换为“沙箱兼容”的替代物来实现,如将指针和大小替换为特定类型。
- 沙箱的引入带来一些问题需解决,如代码中可能因内存损坏导致的边界问题等,但目前发现的“沙箱违规”多为简单的内存损坏漏洞,有望使沙箱成为更可靠的安全边界。
- 沙箱方法的主要优势是开销小,默认在兼容平台上启用,对性能影响小,约 1%或更少,同时满足可测试性要求,有明确的攻击者模型、模拟攻击者的方法和检测“沙箱违规”的方式,已在多种平台的 Chrome 中默认启用近两年。
重要细节: - V8 沙箱通过不同的对象表示来限制内存访问,防止攻击者超出沙箱范围,如对访问 V8 堆内存的对象进行特定处理。
- 沙箱测试需要
v8_enable_memory_corruption_api
标志来模拟攻击者,通过--sandbox-testing
或--sandbox-fuzzing
模式安装信号处理程序来检测“沙箱违规”。 - V8 沙箱需在构建时通过
v8_enable_sandbox
标志启用或禁用,目前要求 64 位系统,已在多种平台的 Chrome 中默认启用近两年,近期 V8 漏洞已需绕过沙箱,提供了早期安全反馈。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。