Chromium 浏览器安全体系结构(1)

2021-08-12   出处:stanford.edu  作/译者:Adam Barth etc./lukeaxu  

摘要

        当前大多数的Web浏览器都采用单一架构,浏览器将“用户”和“网络”视为一个整体去保护。一个发现了浏览器中任意代码执行漏洞的攻击者能够窃取用户敏感文件或安装恶意软件。在本文中,我们介绍了谷歌浏览器基于的开源浏览器Chromium的安全架构。Chromuim的两个模块在两个独立的保护域:一个是浏览器内核,它与操作系统进行交互;另一个是渲染引擎,它在沙盒中以受限特权运行。该体系结构有助于减轻高危攻击带来的影响,又不牺牲与现有网站的兼容性。 我们还为浏览器漏洞定义威胁模型并评估该架构如何减轻过去曾经发现的漏洞带来的危害。

1. 介绍

        在过去的几年中,Web已经发展成为为各种应用提供环境的可靠平台。然而,大多数浏览器仍然在使用原始的由NSCA Mosaic在1993年提出的单一浏览器架构。不管是对于网络应用和本地代码,单一架构都有许多的限制。例如一个网页应用导致的Crash将影响浏览器中所有的所有其他的应用而不是仅仅关闭当前出问题的网页应用[21]。从安全的视角来看,单一架构的浏览器运行在一个保护域,允许攻击者使用未经修复的漏洞攻击浏览器,攻击者可以获取到整个浏览器实例并且使用用户权限执行恶意代码。

        在本文中,我们展示并且评估了Chromium的安全架构,Chrome是基于此开源项目进行的构建。Chromium使用了模块化的架构,类似SSHD中的特权分离[18]。浏览器内核模块代表用户,而渲染引擎代表了网页应用。这两个模块运行在各自的由沙箱机制提供保证的保护域中,沙箱降低了渲染引擎的权限。即使攻击者能够发现在渲染引擎中的未经修复的漏洞,并且攻击者获得了整个渲染引擎的权限,但是沙箱机制阻止了攻击者进一步读写用户的文件系统,因为web规则中不允许此项权限。

        关于包含多个保护域的模块化浏览器体系架构[8、27、5、7],已有许多研究建议。针对与Chromium的体系结构相同的架构,有些建议旨在提高浏览器安全性以对抗可以利用未修复漏洞的攻击者。而对于与Chromium的体系架构不同的架构,这些提议权衡了与现有网站的兼容性,旨在提供网站甚至单个页面之间的隔离性。浏览器的安全策略(称为“同源策略”)很复杂,并且在不破坏现有站点的情况下很难实现细粒度的隔离。 但是,用户需要兼容性,因为Web浏览器对用户是否有用与它能渲染的多少以及什么样的网站有关。因此,模块化架构的浏览器必须要支持现有的Web平台然后同时提高安全性。

        Chromium的架构在考虑安全性,兼容性以及性能基础上,从浏览器内核与渲染引擎中划分出了现代浏览器的许多组件。这种架构把划分出的高风险组件例如HTML解析器,JS虚拟机以及文档对象模型(DOM)放到他们各自的沙箱渲染引擎中。这些组件的复杂性从理论上说是使组件变得危险的原因。在沙箱中运行这些组件能够减少未经修复的漏洞带来的危害。浏览器内核负责管理持久化资源例如cookies和密码数据,浏览器内核还负责同操作系统进行交互,例如接收用户的输入,向屏幕进行绘制以及网络通讯等。这种架构基于两个决策设计:

        ● 这个架构必须与现存的网站兼容。尤其是引入的安全限制对于网站来说需要透明。这个决策极大的限制了架构的可能性但是对于使Chromium成为一款有效的浏览器来说是必要的一点。举例来说,这个架构必须允许用户上传文件以获得与提供电子邮件功能的网站的兼容。

        ● 这个架构把渲染引擎当做黑箱,未解析的HTML作为输入并把渲染的位图作为输出(见图1)。这个架构仅依赖渲染引擎去实现同源策略。这个策略减少了浏览器内核安全监控的复杂程度,因为浏览器内核仅需要保证粗粒度的安全限制。举例来说,浏览器内核可以授予所有渲染引擎上传文件的权限,即使这个权限可能仅有一个安全源需要。

        该体系结构不能阻止破坏渲染引擎的攻击者攻击其他网站(例如,通过阅读其Cookie)。该体系结构旨在防止攻击者阅读或写入用户的文件系统,帮助保护用户免受安装恶意软件的威胁。

        图1 浏览器内核将渲染引擎视为黑盒,其解析页面内容然后输出位图

        为了评估Chromium架构的安全性,我们检查了IE、FireFox和Safari中公开的浏览器漏洞。对于每个漏洞,我们确定哪个模块将受该漏洞影响,该漏洞是否也会对Chromium产生危害。我们发现67.4\%(87/129)的漏洞发生在渲染引擎中,这表明渲染引擎是导致浏览器复杂的主要部分。

        Chromium架构并不能减轻所有渲染引擎漏洞所带来的危害,Chromium架构被设计减少危险性最高的漏洞带来的危害,尤其是允许攻击者执行任意代码的漏洞。如果攻击者使用执行任意代码的漏洞,Chromium架构的目标就是限制攻击者使用浏览器内核接口。我们发现有38/87的渲染引擎漏洞允许攻击者执行任意代码,并且此部分漏洞能够被Chromium架构有效减轻其危害。这些漏洞占所有公开的允许执行任意代码的漏洞的70.4\%(38/54)。

        为了评估在沙箱中运行浏览器组件的安全性,我们检查了浏览器内核中可能发生的任意代码执行漏洞。 我们发现,有72.7\%(8/11)的漏洞是由对系统调用的验证不足而导致的,并且无法通过沙箱来减轻其危害。例如,一个此类漏洞涉及浏览器在处理外部协议时不正确地将参数转义给ShellExecute。 尽管计算漏洞是不完善的安全指标[24],但这些发现使我们相信Chromium的体系结构适合在浏览器内核和渲染引擎之间划分各种浏览器组件。

        通过将浏览器分为两个保护域,一个代表用户,另一个代表网络,Chromium的安全体系结构减轻了大约70%的关键浏览器漏洞带来的危害,这些关键浏览器漏洞使攻击者可以执行任意代码。其余的漏洞很难通过沙箱机制来缓解危害,这使我们得出结论,该架构在保持性能和与现有页面内容兼容的同时,获取了沙箱的大部分安全优势。

        我们采用三管齐下的方法来评估Chromium体系结构的兼容性。首先,我们的体系结构实现通过了WebKit项目的10,115个兼容性测试中的99\%。我们的实现未通过的测试是由于实现的细节,而不是由于体系结构的限制。其次,我们手动访问了500个最受欢迎的网站,并修复了发现的任何不兼容性。第三,我们将浏览器实现部署到全球数百万用户。

        第2节为浏览器定义了威胁模型。第3节详细说明Chromium的体系结构。第4节描述限制渲染引擎的沙箱。第5节介绍了沙盒渲染引擎使用的浏览器内核API。 第6节评估了体系结构的安全性。 第7节将Chromium的架构与其他浏览器架构进行了比较。 第8节总结。


        {测试窝原创译文,译者:lukeaxu}


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
168°|1688 人阅读|0 条评论

登录 后发表评论