Chromium Chronicle #5:在沙盒之外进行编码

第 5 集:作者:Ade,于加利福尼亚州山景城(2019 年 8 月)
上一集

Chrome 分为多个进程。其中部分网域是沙盒化的,这意味着它们对系统和用户帐号的访问权限会受限。在沙盒化流程中,允许恶意代码运行的 bug 的严重程度要低得多。

浏览器进程没有沙盒,因此 bug 可能会让恶意代码获得对整个设备的完整访问权限。您应该在哪些方面做出改变?其他进程的情况如何?

沙盒示意图

所有代码都有 bug。在浏览器进程中,这些 bug 会允许恶意代码安装应用、窃取用户数据、调整计算机设置、访问所有浏览器标签页的内容、登录数据,等等。

在其他进程中,操作系统访问权限会通过平台专有限制来限制。 有关详情,请参阅 Chrome 的沙盒实现指南

请务必避免以下常见错误:

二分法

  • 请勿在浏览器进程中使用 C++ 解析或解释不可信的数据
  • 不信任渲染程序声明所代表的来源。浏览器的 RenderFrameHost 可用于安全地获取当前源站。


正确做法

而应使用以下最佳实践:

  • 如果您的代码是在浏览器进程中运行的,那就更加难以自拔。
  • 验证来自其他进程的所有 IPC。假设所有其他进程都已被入侵并试图欺骗您。
  • 在渲染程序、实用程序进程或其他一些沙盒化进程中进行处理。理想情况下,还要使用内存安全型语言,例如 JavaScript(可解决超过 50% 的安全 bug)。

多年来,我们在浏览器进程中运行网络堆栈(例如 HTTP、DNS、QUIC),这导致了一些严重漏洞。在某些平台上,网络现在有自己的进程,并且即将推出一个沙盒。

其他资源

  • Chromium 的二大法则:不安全的数据、不安全的代码和不安全的进程不超过两种。
  • 验证 IPC 数据:关于如何确保来自渲染程序进程的 IPC 不会充满 Fib 和虚假陈述的指南。