Chrome Site Isolation 简介

网站隔离 (Site Isolation) 是 Chrome 为应对潜在的安全问题所实现的功能,以防止恶意网站获取其他网站的信息[1]。

有人可能要问,浏览器的同源策略不就是干这个的吗?是的,同源策略确实可以起到保护作用。但是,时不时爆出的安全漏洞,特别是年初的 meltdown / spectre 漏洞, 让人们意识到,在同一个地址空间内,只要有运行不安全的代码,整个地址空间的安全都不能完全保证,浏览器 renderer 进程的安全性需要重新考虑。spectre 漏洞爆出的时候,Chrome 就曾建议大家开启 site isolation,我在当时的文章中也提到过[2]。

Site isolation 提供了第二层的额外保护,将同源策略与进程的地址空间隔离结合起来,把不同的网站隔离在不同的进程中,并且阻止一个进程获得其他网站的敏感信息。这样即使存在 spectre 类型的旁路攻击,可以获取进程内任意内存地址的数据,也不能获得其他网站的信息。

Site Isolation主要由两部分组成。进程模型的修改和跨域读取屏蔽 (CORB)。

进程模型

目前 Chrome 默认的进程模型叫做 process-per-site-instance (还有其他的进程模型如 process-per-site 和 process-per-tab)[3]。这个进程模型基本上就是为每个页面创建一个进程,但是还是存在不同的网站用同一个进程的情况,如 iframes 和父页面,同一个标签页里的页面跳转,以及标签页过多的时候等。Site isolation 引入了一个新的策略叫做 site-per-process。这个策略更为严格,只要是不同的网站,不管你是在新的标签页打开,还是在同一个标签页跳转,还是嵌在 iframes 里,统统都要换一个新的进程。这里主要的工作量是把 iframes 给拿出来放到不同的进程里(所谓的 OOPIF, out of process iframe)。

Firefox 目前也是多进程的模型,但最多只用四个进程来渲染页面内容,目前 Firefox 也有一个文档在考虑进程隔离的问题[4]。

不同的网站 (site) 的定义

使用同一个协议,同一个注册域名 (所谓的 eTLD+1) 的网址都属于同一个网站,这比同源策略里的 same origin 要宽泛一些,不同的子域名,不同的端口都算同一个网站。

CORB

CORB (Cross-Origin Read Blocking) 是一个屏蔽跨域资源加载的功能。

同源策略可以防止恶意网站获取其他网站的信息,但有一些例外如 <img>和<script>。类似

<img src="https://example.com/secret.json">

的跨站请求可以发起,只是返回的结果被过滤掉了,在解析图片时出错[5]。这时候跨域的资源其实已经传入到了这个进程里面,结合 spectre 类型的旁路攻击或者其他漏洞是可以拿到这些信息的。 CORB 的想法就是直接屏蔽掉跨域资源返回的结果,让地址空间里都没有返回的结果。目前只有HTML,XML 和 JSON 类型的资源会被 CORB 保护。

Site Isolation 开启状态

目前 site isolation 还没有正式启用,预计 Chrome 68 将在桌面平台默认打开。

但是 Chrome 已经通过 field trial 实验这个功能了。Chrome 66 正式版选择了 10% 的用户作为小白鼠试用这个功能。Chrome 67 Beta 版选择了 90% 的用户作为小白鼠试用这个功能[6]。

Field trial 大概就是对功能的灰度测试,不同用户升级到了同一个版本,可能会默认开启不同的功能,并收集相应的数据。 所以网上经常有人会抱怨 Chrome 升级以后莫名狂吃内存或者发热,而有人说没有问题,有可能就是 field trial 引起的 。

这个功能的开启使 Chrome 使用了更多的进程,吃掉了更多的内存。Chrome 67 上的数据是多个标签页的情况下内存使用要增加 10% 以上。


2018-07-12 更新:Google 在其安全博客上宣布已在 Chrome 67 桌面版上正式启用了 site isolation,并且做了很详细的介绍[7]。Google 开发者网站上也更新了一篇 site isolation 对 Web 开发者的影响的文章[8]。感兴趣的同学可以参考这两篇文章。

参考来源

  1. chromium.org/Home/chrom
  2. 浏览器厂商应对重大 CPU 安全漏洞:降低时钟精度,禁用 SharedArrayBuffer
  3. chromium.org/developers
  4. Process Isolation in Firefox
  5. chromium.googlesource.com
  6. groups.google.com/a/chr
  7. security.googleblog.com
  8. developers.google.com/w

编辑于 2018-07-12

文章被以下专栏收录