Chrome浏览器发布最新安全功能:站点隔离

    0
    5303

     

    站点隔离是谷歌Chrome浏览器中一项旨在减少Spectre攻击的全新功能。

    站点隔离是Chrome浏览器架构的一个主要的改变。通常,Chrome会把一个标签默认为一个进程,但当网页之间存在共享内容时,彼此可以共享同一个进程。而网站隔离可消除共享进程,确保不同网站在不同的进程上,以此防止发生类似幽灵(Spectre)和熔毁(Meltdown)的攻击。早在Chrome 83浏览器发布时,这一功能就已存在,用户可以通过更改状态来启用该功能。

    而现在这一功能在Chrome 67浏览器中是默认启用的。这就意味着系统将会对诸多令人讨厌的漏洞进行自动防御,但这也意味着Chrome——在其运行时已然占用了计算机的部分资源——现在要多使用10-13%的内存。

    因此,所有这些意味着什么?有什么好处和坏处?让我们来看看吧。

    什么是Spectre和Meltdown攻击?

    让我们从Spectre和Meltdown攻击开始说起,它们是什么,为什么防御它们是十分重要的。

    Spectre和Meltdown是同一漏洞的两个不同的变种。它们可以利用一个漏洞,而该漏洞几乎能影响过去二十年以来芯片制造商所制作的任何一台计算机芯片。在去年末这两种攻击被发现的时候,全世界的芯片制造商都匆忙地进行了补丁修复工作。

    从技术上来说变异有三种。其中两个合并成了Spectre,而另一个是Meltdown。为了访问部分内存,这些攻击会利用所谓的前瞻执行,然后使用时序攻击法来发现存储在那里的数值。

    前瞻执行是一种能够帮助芯片运行更快速的机制。用一个例子来说明这一点是最容易的。假设一个程序将要提供一个是或否的选择,而每个答案会导致进入一个不同的进程。与其等待用户进行决策,芯片会开始同时计算这两个功能,因此这便会有一个好的开端,而不管用户会选择什么。

    在前瞻执行期间所使用到的数据通常会被保存在CPU缓存中,这就像一个小的内存壁龛,可以帮助加速从RAM中获取数据。

    现在,让我们来把所有这些联系在一起。Spectre和Meltdown是利用芯片的前瞻执行功能来达到攻击目的的两种攻击,它们会使用时序攻击法来暴露在这一过程中所加载的数据,然后再把它们转储到CPU缓存中。

    因此,Spectre和Meltdown是如何影响浏览器的?

    谷歌和其他所有浏览器制造商所面临的问题是,Spectre和Meltdown可以启用“不值得信任的代码”,以便读取其进程的地址空间中的所有内存。

    正如谷歌的Charlie Reis在一篇博客中所写道的:

    “这对web浏览器来说尤其重要,因为不同的浏览器会从多个网站运行潜在的恶意JavaScript代码,而这些网站通常在相同的进程中。从理论上讲,一个网站可以利用这样的攻击来从其他网站窃取信息,从而违反同源策略。所有主流浏览器都已经针对Spectre部署了一些应对措施,包括降低时钟粒度和更改其JavaScript编译器,以使攻击不太可能成功。然而,我们认为,最有效的应对措施是网站隔离,因为这种方法试图避免在同一过程中窃取数据,即使是发生了Spectre攻击。”

    明白了吗?简单来说,从理论上讲,Spectre攻击可以从其他网站窃取信息。同样的同源策略在web应用程序安全性中是一个相对神圣的概念,它的理念是“web浏览器允许包含在第一个web页面中的脚本访问第二个web页面中的数据,但前提是两个web页面具有相同的来源。Mozilla对来源做了如下的定义:

    “如果两个页面具有相同的协议、端口(如果指定了一个)和主机,那么这两个页面就具有相同的来源。”

    同源策略是浏览器安全性的基础。所有浏览器都部署了某种形式的同源策略。用微软的Eric Lawrence的话来说,如果没有它,将会发生以下情况:

    “如果一个来源的内容能够读取从另一个来源加载的内容,那么一个网站便可以很容易地攻击另一个网站。例如,来自attacker.com的IFRAME可以从yourbank.com读取另一个IFRAME的内容,如此等等。这样,攻击者想要在多大范围内窃取多少数量的敏感资源便全由攻击者的想象力来决定了。”

    因此,这就是为什么包括谷歌Chrome在内的浏览器都在关注Spectre和Meltdown攻击。

    什么是站点隔离?

    由于需要Chromium工程师来修改浏览器的架构,所以部署站点隔离的工作比其他新功能稍微多一点。但它从本质上隔离了每个选项卡,将每个渲染器进程限制为来自同一个站点的文档——一个单一的来源。

    正如Reis所写道的:

    “当启用了站点隔离时,每个渲染器进程都包含最多来自一个站点的文档。这便意味着每当导航到跨站点的文档时,都会导致选项卡切换进程。它还意味着所有的跨站点iframe都会被放置到一个不同的进程中,而不是它们的父框架中,以便使用‘进程外的iframe’。将一个页面分裂成多个进程是Chrome工作方式的一个重大变化,Chrome安全团队已经在这方面研究了很多年,以便独立于Spectre。以下是Chrome安全团队于去年首次推出的进程外的iframe,以便改进Chrome扩展的安全模型。”

    不幸的是,即使站点隔离功能正常工作,仍有可能出现不法行为。如果攻击者的页面把它们作为子资源来请求,那么它仍然可以访问和窃取来自跨站点链接的信息。

    例如,浏览器通常允许页面嵌入来自任何站点的图像和脚本。因此,页面便可以请求带有敏感数据的HTML或JSON链接,就好像它们是一个图像或脚本一样。这会导致页面出现错误并且不会显现出来,但这些数据仍然会出现在渲染器进程中,这样,Spectre攻击便可以访问它们。

    因此,作为Fetch标准的一部分,站点隔离还包括一个名为跨来源读取阻截(CORB)的功能。该功能将阻止来自渲染器的跨站点HTML、XML和JSON响应。谷歌建议web开发人员检查一下,当其提供资源时,是否使用的是正确的MIME类型和无嗅响应头。

    对Android用户来说,使用网站隔离功能还需等一段时间

    尽管在发布Chrome 67浏览器时,谷歌就已经将这一功能应用到了99%的桌面用户,但Android用户将不得不等到本月晚些时候升级到Chrome 68,然后才能激活该版本的实验版本。

    Android用户可通过以下命令手动启用站点隔离功能:

    chrome:/ /flags/ # enable-site-per-process。

    谷歌没有给出推迟的原因,“还有其他已知的问题。”然而我们有一个推测……

    站点隔离的缺点:内存成本增加

    在Google Chrome上有一个与网站隔离相关的额外成本。因为由于站点隔离的本质,系统会同时运行更多的进程,消耗更多的内存。对于实际的工作负载来说,内存开销会多出10%-13%。

    Google在其博客文章中对此表示了关注,对于许多运行的是4 GB或更大内存的新机器用户来说,这可能不会是一个大问题。但对于使用旧式台式机的人来说,这可能会引发一系列问题。

    从内存的角度来看,Google Chrome已经是一个昂贵的浏览器了。这并没有什么可指摘的,因为这是为了更高的安全性。所有人都认为,即便不是最安全的浏览器,谷歌Chrome浏览器也是最安全的浏览器之一。站点隔离的道理也是一样的,它让用户更安全,但会占用更多的内存。

    这纯粹是推测,但我认为该功能的移动版的实施将会有所滞后。在谷歌能够更好地优化它以减轻对内存的压力之前,许多手机用户将无法支持它,而Android版的Chrome将会有太多的问题。

    网站隔离是否值得?

    当谷歌将一个安全设置设为默认时,它通常是有充分理由的。该公司可能会在其广告网络上做一些见不得人的事情,但它的安全团队有着良好的意图,他们想要花费大量的时间研究和测试这些升级,然后再推出它们。

    我想说的是,在安全问题上信任谷歌是可以的,而且这个功能可以防止一些非常严重的攻击。所以,是的,我想说的是,对于绝大多数用户来说,启用这个功能是值得的。

    唯一的例外是那些缺乏资源和计算能力来将Chrome内存再增加10%-13%的旧机器上的用户。当然,如果情况有限,你可以将功能配置为只隔离部分站点来节省一些内存:

    你可以使用常见的命令行标记来启动Chrome;首先是–isolate-origins,然后是由逗号分隔开的不同来源。例如:

    –isolate-origins=https://google.com,https://youtube.com

    你也可以选择关闭这一设置。