【转载】高端访谈 看Chrome安全性能是如何炼成的

Posted by Eyon on June 5, 2010

本文转载自 51CTO.COM,黄永兵编译

Chrome开发团队只注重三件事:稳定、速度和安全。用过Chrome浏览器的用户都对它的稳定和速度深有体会,但安全性究竟如何呢?要确定一个软件是否安全是件困难的事情,幸运的是,有Pwn2Own黑客竞赛,如果软件存在任何漏洞,在这个高质量的竞赛中将会暴露无遗。看过今 年举办的Pwn2Own大赛后,我对Chrome的安全性算是有所认识了,但我仍然存在不少疑问,经过努力,我联系到了Google Chrome团队的Ian Fette,他接受了我的专访,通过这次访谈,让我对Chrome的安全性又有更深入的了解了。下面就是本次访谈的摘录。

记者:你们曾多次提到安全是设计Chrome时优先级最高的,能聊一下开发团队最关注的三个安全问题吗?

Fette:在构建Chrome的过程中,我们希望设计的浏览器是深度安全的,我们知道要解决所有安全问题是没有银弹的,因此我们希望在应用程序的所有层次都开发安全的功能,下面三个安全领域是我们投入时间最多的:

  1. 当用户访问不安全的网站时,浏览器产生警告。
  2. 不受信任的代码离开浏览器沙盒后保证它不能执行。
  3. 确保用户尽可能的获得最新的浏览器版本。 记者:这些工作很有意义,你能简单解释下开发团队是如何攻克这些难题的呢?

Fette:为了警告用户他们访问的是钓鱼网站或网站包含有恶意代码,我们使用了我们的安全浏览技术,它已经用在Google搜索引擎、Firefox和Safari中,安全浏览技术通过一个中间页面警告用户访问的网站可能不安全。

为了阻止不受信任的代码离开我们的沙盒执行,我们又增加了一个安全保护层,防止攻击者在你计算机上执行漏洞利用代码,即使他们发现了渲染程序的漏洞,也只能被限制在沙盒内。

最后,为了确保用户的浏览器始终保持是最新版本,包括打上最新的安全补丁,我们开发了一个自动升级系统,它无需人工干预,自动静悄悄地后台运行。

为了实现这些目标,Chrome开发团队决定使用多进程架构。

多进程架构

按照设计,多进程架构将浏览器应用程序拆分成了多个进程,使用这种方法,一个进程失败时,整个浏览器不会崩溃,Chrome最终拆分成下面三个进程:

  1. 浏览器进程:这个进程管理标签、窗口和“Chrome”浏览器,这个进程同时也是与硬盘、网络、用户输入和显示之间的接口。
  2. 渲染进程:这个进程负责使用HTML,JavaScript,CSS和图像显示网页,渲染是由WebKit渲染引擎控制的。
  3. 插件进程:按照设计,为每个插件或在使用中的扩展创建一个进程。 记者:如果我了解得没错,Google应该是第一个为浏览器使用多进程架构的,Google的实现与其它浏览器有何不同?

Fette:Google采用了一个很奇特的方法将浏览器拆分成不同的组件 – 浏览器、渲染和插件,它给我们带来了许多好处,例如,如果插件崩溃,当前查看的网页仍然可见,并且可操作,插件仅仅是网页的一部分,因此插件之外的网页内容不受影响。

在渲染进程上创建的这个策略有效阻止了运行在渲染进程中的恶意代码读取或写用户的文件系统,注册表等,这个策略比其它浏览器的保护措施都严格。

记者:那么Chrome能打开多少进程呢?对同时浏览网站的数量有限制吗?如果是,那么达到数量限制时会发生什么?

Fette:我们的确对进程数量做了限制,但并不等于对打开网站的数量也限制了,我们这样做的目的是为了实现最佳的性能平衡,主要是根据计算机上的可用内存数量来限制的,也就是说,你的内存越多,我们限制的数量也更高。

当你达到最大进程数限制时,打开的新标签将会共享其它标签的进程,如果你打开了含有20个标签的20个独立窗口,总共有400个标签的话,很可能每个渲染进程都支撑了10个标签,如果是400个不同的进程,你的机器肯定早就承受不了了。

Chrome沙盒

除了稳定,多进程架构带来的好处外,按照设计,独立的进程之间不会相互依赖,可以隔离,这就是Google称作的Chrome沙盒,下面的内容是摘自Esalkin在沙盒论坛中发表的文章,对沙盒尚不了解的读者,这是一次难得的机会。

“假设你的PC是一张纸,你运行的每个程序都写在这张纸上,当你运行浏览器时,它将你访问的每个网站都写在这张纸上,你碰上的任何恶意代码通常会将自己也写到这张纸上。

传统的隐私和反恶意软件尝试找出并擦除任何写在纸上的内容,他们认为你不想在纸上写任何东西,大多数时候,他们这样做是正确的,但这些解决方案提出者必须先告知解决方案在纸上寻找什么内容,然后是如何安全地擦除它。

相反,沙盒就象放在纸上的一个透明层,程序在这个透明层上写入它需要写的任何内容,就象在真实的纸上写一样,当你删除这个沙盒时,真实的纸张不会改变。”

安全专家,如Charlie Miller认为Chrome使用沙盒难以攻破的原因是:

“他们获得沙盒模型后就很难逃出去,在操作系统和沙盒的保护下,你不能在堆栈上执行代码。”

Chrome沙盒是如何工作的

还记得我前面提到的渲染进程吗,实际上它们是Chrome中的沙盒进程,因为它们处于沙盒中,它们能使用的唯一资源是CPU周期和内存,渲染进程不能对磁盘进行操作,也不能显示它自己的窗口,这些任务是由浏览器进程控制的。

Google Chrome使用了基于访问令牌的Windows安全模型,一个访问令牌是由进程所有者和进程拥有的特权信息组成的,读取访问令牌后,操作系统就知道该进程或沙盒可以访问哪些资源了,下面是Google对此的解释:

“启动渲染进程之前,我们修改它的令牌,移除所有特权,禁用所有组,然后将这个令牌转换成一个受限制的令牌,受限的令牌和正常令牌一样,但访问检查会执行两次,第一次使用令牌中的正常信息,第二次使用辅助组名单。

前后两次访问检查都通过后,才会将资源授予该进程访问,Google Chrome设置了辅助组名单,它只包含一个项目 – null user,因为这个用户不会获得任何对象的权限,对渲染进程访问令牌的所有访问检查都会失败,因此对攻击者来说,这个进程是无用的。”

使用沙盒可以阻止攻击者攻击浏览器,恶意代码可以在沙盒进程内运行,但它不能读取或修改计算机上的任何文件,我再次请教了Ian Fette。

记者:你能举一些真实世界中的例子,解释一下使用沙盒对我们的计算机有什么保护吗?

Fette:和其它浏览器一样,我们维护了一份我们已经修复的安全漏洞列表,其中大部分漏洞因有沙盒的保护影响都降低了,例如,在我们的JavaScript引擎中曾经有一个整数溢出漏洞,如果没有沙盒的保护,攻击者可以利用这个漏洞在你计算机上执行任意代码。

有了沙盒的保护后,因这个漏洞暴露的攻击点非常少了,当浏览器标签关闭后,攻击者不能在你的计算机上安装任何恶意软件。

记者:我有位同事托我问你,插件或扩展是否也运行在沙盒中?

Fette:Google Chrome中的扩展是运行在沙盒中的,因为它们可以象正常网站一样执行各种操作,它们也是用HTML,JavaScript和CSS编写的。

目前插件尚未运行在沙盒中,但我们正准备将其移到沙盒中运行,最近我们宣布在Google Chrome中全面集成Adobe Flash就是其中的一步,以后在沙盒中运行Flash,谁也不会再说Flash不安全的坏话了。

记者:我稍微对Chrome沙盒做了一下了解,它在Windows XP以后的Windows版本中的工作机制有些不同,你能具体解释一下吗?还有就是,在新操作系统上使用Chrome是否有更多的好处呢?

Fette:在Windows Vista和更高的版本中,引入了一个额外的功能 – 锁定进程,即“完整性级别”,Google Chrome沙盒在XP和Vista上应用的正常限制外,还应用了一个低完整性。

虽然从理论上说,这个功能让Vista沙盒功能更强壮,但我们还不清楚对Chrome的真实攻击时,它的表现究竟有何不同。但是它的确增加了一层防御,作为一个纵深防御的做法,我们应该在支持它的Windows版本中使用完整性级别。

最后的想法

谈到浏览器设计时,我不是专家,但Charlie Miller是,如果他都不能攻破Chrome,我想大家都明白这意味着什么。我现在对他为什么不感谢Ian Fette有了更好的想法,因为Chrome太安全,让他在Pwn2Own大赛上只能转向苹果的产品。最后还要感谢Google Communications的Eitan Bencuya帮我联系上了Ian Fette。

原文出处:Google Chrome: The new breed of Web browser 作者:Michael Kassner