比尔盖子从去年开始进行全系统加固,无论是个人电脑还是服务器都部署了 Gentoo Hardened,并采取了不同程度的安全措施。Chromium、FireFox,以及基于 Webkit 的外壳浏览器是自由软件界的御三家,从特性上来说各有独自的优势 —— 如果要从这一点上进行谈论恐怕会触发圣战,这也并不是比尔盖子撰写本文的目的。本文企图从系统安全的角度来说明浏览器的选择。
Mozilla FireFox
Mozilla FireFox 是历史悠久功能、功能强大的浏览器,由于有官方的参与,可以认为是网络浏览器的开山鼻祖 Netscape 的精神续作。丰富强大的插件系统是其的生态特色,采用自有的 Gecko + 各种 Monkey 引擎:
- 庞大的 C++ 代码库,就向任何全功能浏览器一样。很大的攻击面:高风险。
- 代码中捆绑了 10 来个程序库,因为这些库主要解决的是与其它程序冲突问题(比如 Xulrunner),因此无法解除捆绑。这意味着系统更新将无法及时覆盖这些库,影响安全性和一些发行版对其的打包工作。
- 采用略显陈旧的引擎,性能不敌 Chromium。在加固系统时,编译时为了安全禁用 JIT 后性能更加底下,但仍在可以接受的范围内。
- 强大的第三方扩展和插件系统,合理使用插件可以进一步增强浏览器安全性,例如,Random Agent Spoofer 可以大大增强浏览器对于一些攻击的抵抗能力。但恶意插件也会对系统造成严重的威胁。
- 其设计的 B2G 沙盒仍在开发中,Linux 平台下的依然不可用,而且这项工作似乎并没有得到高优先级,因此存在安全隐患。有 FireFox 用户为此开发了
firejail
,用 seccomp 和 chroot jail 将 FireFox 的~/.mozilla
和~/Downloads
放入沙盒,可加强网络安全性。 - 在技术支持方面比较保守,以安全和稳定为主,基本不会提前引进实验性的特性。
综上所述,FireFox 存在的问题是缺少沙盒和隔离。我们最好对 FireFox 进行一些人工沙盒措施确保安全,然而这也并不能防止不同网页之间的攻击。
Chromium
Chromium 浏览器是 Google Chrome 的自由版本,最初主打性能和轻量级设计,采用 Blink + V8 引擎,其特点是:
- 无比庞大的 C++ 代码库,完整编译所需时间是 FireFox 的 3 倍,完整审计代码几乎是不可能的。超级大的攻击面:非常高的风险。
- 代码中捆绑了将近上百个程序库,包括了 tcmalloc 内存分配、HarfBuzz 字体渲染、bzip2 数据压缩、SQLite 数据库、Mesa 图形驱动和 OpenGL 实现、libyuv 视频 YUV 编码、Speedx 音频采样、FFmpeg 编解码器、ICU 本地化、valgrind 内存调试器、cURL 网络传输库。这不是一个浏览器,这是一个操作系统!而且,捆绑的类库不仅仅是为了方便编译,有些还是重度魔改过的!它们甚至还捆绑了 Mozilla! 这也是为什么许多发行版不提供 Chromium 的原因,而且,这很难保证这些独立于系统以外的库是安全的。
- 网络浏览性能明显高于 FireFox,但 JIT 无法关闭!
- 第三方扩展的权限不高,较不容易受到恶意扩展的危害。
- 每个网页均使用进程隔离和基于 seccomp 的沙箱隔离,理想情况下,单一页面不会拖慢或引起浏览器崩溃,恶意页面也不会危害到浏览器的整体安全。
- 积极推动支持新的技术,包括网络安全技术在内。例如,在 2015 年,Google Chromium 开始强迫对 SHA-1 证书进行淘汰;并标识出服务端过时的 TLS 加密算法;引入 Chacha20-Poly1305 加密算法。最近又在积极支持和推动 Certificate Transparency。而其它浏览器在这方面都很落后。 但这并不影响现有安全系统的安全性。
- 开发受到 Google Chrome 牵着走,除了造成缺少社区合作从而捆绑大量类库,还引起了其它问题,例如自动从服务器下载二进制私有 Google 插件,这在安全性上就要打折扣了。
综上所述,Chromium 存在的问题是代码库捆绑巨量程序库,而且其引擎严重依赖 JIT 且无法关闭,更大的攻击面容易造成程序漏洞,以及开发主要受到 Google 单一主导的问题。
Webkit
嵌入网络浏览器功能时必用的库,是 Safari 和 Chromium 两大浏览器的源头。
- 庞大的 C++ 代码库。攻击面大:高风险。
- 不同的开发库都将 Webkit 作为了网页浏览方案,并派生出了 QtWebKit 和 WebKitGTK+,许多其它应用程序也嵌入了 Webkit。
- Webkit 的一直在演化中,不同的应用程序捆绑了不同了 Webkit 版本。前些年的 Webkit2 使这种情况更加严重。
- 在上述的大多数情景中,这些 Webkit 都无法获得任何安全更新!许多发行版和程序都依然还在使用版本极低的 Webkit。只有 ArchLinux 和 Fedora 紧密跟随上游及时获取更新,据我观察 Gentoo 的表现并不算差,但有些程序依然依赖过时的低版本 —— 而这是没有安全更新的。
- 许多基于 Webkit 的网页嵌入和浏览器不验证 TLS 证书!
综上所述,Webkit 存在的问题是终端用户得到安全更新的可能性很低,几乎没有办法放心使用,应该尽可能避免。
总论
完整浏览器的规模庞大,使用浏览器本身时时刻刻就承担着无法避免的高风险,因此我对每个浏览器都给出了类似的第一条评价。
因此,比尔盖子在一年前离开了 Chromium 而选择了更可控的 FireFox.
2016年06月08日 — 09:38
开个脑洞,或许很多年以后,浏览器什么的都是浮云,当大家讨论网络的时候都是VR、AR什么的,那时看来现在的各种争论都是很可笑的吧。毕竟我们都是局限在自己的时代啊。
2016年06月09日 — 14:54
到目前为止,除了第一篇评论外,其他所有评论全部离题,和本文讨论的系统安全问题完全不着边际。
2016年12月02日 — 07:22
VR/AR 也只是個表現形式啊,到最後還是需要瀏覽器或是類似瀏覽器的東西。蓋子在本文寫的東西也只是從安全角度講了下這些瀏覽器,並不是爭那個瀏覽器才是最好的(
2016年06月08日 — 09:28
对于这两者没有什么特别的偏爱,但是看到现在浏览器市场逐渐向一家独大的局面发展,不知道是好还是坏,如果没有对手的竞争,那Chrome不就是下一个IE吗,毕竟绝对的权力,绝对的… …
2016年06月02日 — 21:26
如果不能用IE,那我还是用GG的浏览器吧。
2016年05月21日 — 12:47
对网络安全这方面我一窍不通
2016年05月20日 — 20:44
两个都用过,Firefox在linux上至少ui比Chrome强。
请教一下Firefox上的有没有类似Chrome的SwitchProxy这种代理?我现在用Chrome主要还是习惯了这个插件。
2016年05月13日 — 12:04
谷歌浏览器的可拓展性很强、相信客户群体还是相当多的
2016年04月09日 — 22:44
还是比较喜欢Google的产品。
2016年03月29日 — 14:58
雖然在下沒有博主對技術的分析, 但個人比較喜歡Google Chrome的介面。
2016年03月19日 — 15:32
我们网站的博客导航已添加了贵站,欢迎去看看
2016年03月19日 — 12:25
博客名有意思,还以为是比尔盖茨
2016年03月19日 — 09:49
最喜欢用谷歌浏览器
2016年03月02日 — 23:08
Chrome 本来就是一个操作系统……
如你所见,我正使用 Chromebook 在 Chrome 操作系统里发这篇帖子。
Firefox 的沙盒问题的话,能不能用 PaX 之类的加固方案来加固呢?
2016年03月03日 — 17:25
使用 PaX/grsecurity 的确可以防止内存破坏和限制浏览器的整体权限,但它无法实现针对页面和进程的细粒度防护 —— 而这正是浏览器更需要的。我们只能期待 B2G 的开发进展,目前在 Windows 上应该已经能跑了,但要实现的特性和解决的问题依然很多,更别提其它平台了。连文件访问控制目前都没有的。
P.S: 不要相信我自己这条评论下的操作系统信息,这是浏览器插件随机伪造的。