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

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

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

2. 威胁模型

        为了刻画Chromium架构的安全性,我们通过列举攻击者的能力和目标来定义威胁模型。安全体系结构试图阻止具有这些能力的攻击者实现这些目标。我们可以使用这种威胁模型来评估Chromium的架构如何有效地保护用户免受攻击。

        攻击者能力.我们假设一个攻击者,它知道用户浏览器的一个未修复的漏洞并且他可以利用漏洞是浏览器渲染任何恶意内容。通常来说,这种能力足够威胁到用户的机器。更具体的说,我们假设具有下述能力:

        1.攻击者拥有一个域名,例如attacker.com,并且这个域名没有被列入恶意网站黑名单。对于这个域名攻击者拥有一个有效的HTTPS证书并且在网络中控制至少一台主机。这个能力大概仅需要花费$5。

        2.攻击者能够说服用户访问他或她的网站。有许多说服用户访问attacker.com的技术,例如发送垃圾邮件,托管受欢迎的内容或通过广告吸引流量。我们很难为这种功能定价,但是,在以前的研究中,我们能够以约50美元的价格吸引约25万的用户[1]。

        3.攻击者知道并且能够利用浏览器中未修复的任意代码执行漏洞。例如攻击者可能知道未修复的HTML解析器的缓存溢出漏洞,正则表达式中的整数溢出,或者书签系统的缓存溢出等。

        领域内目标.Chromium的架构主要目标是阻止攻击者实现3个危害最高的目标:

        ● 持久的恶意软件.攻击者尝试安装恶意软件到用户的计算机。举例来说,攻击者可能尝试安装从网络接收命令的僵尸网络客户端到用户计算机,使用户计算机参与对用户或网络目标的协同攻击。攻击者特别愿意安装那些即使用户关闭浏览器能够继续存活的恶意软件。

        ● 隐藏的键盘记录器.当用户与其他软件交互的时候,攻击者会尝试监控用户的键盘敲击。这种系统级别的键盘记录器往往用于窃取用密码,信用卡信息和其他私密信息。为了实现这个目标,攻击者的键盘记录器必须能够在关闭浏览器后仍能运行。

        ● 文件窃取.攻击者会尝试从用户的硬盘上读取用户隐私文件。举例来说,攻击者可能尝试读取系统的密码数据库或者用户的金融记录。对于计算机通常包含大量机密信息的企业用户,文件窃取是一个非常值得关心的问题。

        如果攻击者能够实现上述的一个或者多个目标,那么他或者她就可以对用户制造更严重危害。如果攻击者能够安装恶意软件,恶意软件将不受到浏览器安全策略的限制,并且恶意软件通常来说是完全“拥有”了用户的机器。Chromium的体系结构的目标就是阻止攻击者实现任何上述的目标。

        领域外目标.有一些攻击者的目标Chromium体系结构并不能提供额外的保护。Chromuium具有某些功能特性可以抵御这些攻击,但是这些功能特性依靠渲染引擎实施的同源策略。

        ● 钓鱼网络.在网络钓鱼攻击中,攻击者诱导用户将虚假的网站与真实的网站混淆。被迷惑用户将其密码提供给虚假的网站,然后攻击者可以在真实的网站上模拟用户。利用未修补漏洞的攻击者可以通过破坏显示真实站点的窗口来创建令人信服的网络钓鱼站点。Chromium有许多功能特性帮助避免此类攻击。例如浏览器的地址栏高亮网站的域名,帮助用户鉴别他们是否在访问虚假或者真实的网站。浏览器也有一个黑名单记录了已知的钓鱼网站,如果用户访问一个已知的钓鱼网站,浏览器将在整个页面显示警告。如果网站有有效的拓展证书,浏览器将显示附加的安全验证提示。许多安全特性都能够在其他浏览器以及类似Chromium体系结构的浏览器中找到。

        ● 站点隔离.Chromium的体系结构将渲染引擎视为代表整个Web的主体,这意味着攻击渲染引擎的攻击者可以对任何网站采取行动。例如,利用任意代码执行漏洞的攻击者可以获得每个网站的Cookie,并能够读取存储在浏览器密码数据库中的所有密码。如果攻击者无法利用未修补的漏洞,则通常的浏览器安全策略将阻止攻击者从不受其控制的主机名中读取Cookie或密码。

        ● 防火墙欺骗.同源策略能够限制攻击者通过浏览器进行网络访问。这些策略希望保护组织防火墙后的一些隐私资源。但是,利用未修补漏洞的攻击者可以绕过这些限制,并且可以利用浏览器的URL请求工具从浏览器内部读取HTTP响应。请求任意Web URL的能力遵循兼容性和黑盒设计决策,以便支持样式表和图像标签。

        ● 网站漏洞.Chromium的体系结构不会保护具有跨站脚本攻击(XSS),跨站请求伪造(CSRF)或者HTTP头注入漏洞的网站。为了抵御攻击,这些站点需要需要自助修复这些漏洞。Chromium支持的HttpOnlycookies作为可选项可以减轻XSS攻击的危害。

3.Chromium体系结构

        Chromium体系结构中有两个模块:渲染引擎和浏览器内核。从较高层面来看,渲染引擎负责将HTTP响应和用户输入事件转化为位图,而浏览器内核负责同操作系统进行交互。浏览器内核暴露API供渲染引擎使用,例如访问网络,访问持久化存储,显示位图到用户屏幕。浏览器内核可以被信任充当浏览器用户;而渲染引擎仅被信任充当网络站点。

        ● 渲染引擎.渲染引擎通过提供的默认行为(例如绘制input元素)和调用DOM API来解释并执行网页内容。渲染网页内容需要经历若干阶段,首先是解析(parsing),然后经历建立DOM在内存中的表示,图形化文档,根据脚本执行操作文档等步骤。渲染引擎也负责执行同源策略,防止恶意网站破坏用户与真实网站的会话。渲染引擎具有一定的复杂性,并且直接同不能完全信任的网页内容进行交互。例如大部分的解析发生在渲染引擎中,包括HTML解析,图像解码和JS解析等。这些复杂的组件往往有一些关于安全的历史遗留漏洞(见第6节)。为了同用户、同本地机器以及网络进行交互,渲染引擎使用浏览器内核提供的API。渲染引擎运行在受限的沙箱中。

        ● 浏览器内核.浏览器内核负责管理渲染引擎的多个实例并且实现浏览器内核的API(见第5节)。举例来说,浏览器内核实现了一个基于标签页的窗口系统,包括显示当前浏览网页URL的地址栏和与之关联的安全标记。浏览器内核管理持久的状态,像用户的书签,cookies以及保存密码。它也负责访问网络并且作为中间层联系渲染引擎和操作系统原生的窗口管理器。为了实现其API,浏览器内核会维护有关已授予每个渲染引擎的权限的状态信息,例如允许每个渲染引擎上传哪些文件的列表。浏览器内核使用此状态来实施安全策略,该策略约束渲染引擎能够与操作系统进行何种交互。

        浏览器的组件功能分配到浏览器内核还是渲染引擎考虑了多方面的因素,例如安全,兼容性和性能等,但是有些组件功能分配则考虑了其历史因素。例如浏览器内核负责展示JavaScript中的弹窗,而渲染引擎处理下拉框。有一些特性,例如cookie数据库,由浏览器内核实现的直接原因是浏览器内核能够直接访问文件系统。其他有些特性,例如正则表达式,由渲染引擎实现主要因为他们与性能有关而且通常是安全漏洞发生的原因。

        如表1所示,渲染引擎负责大部分的解析和解码工作,因为历史原因,这些任务是众多浏览器漏洞的重要来源。举例来说,展示网站的缩略图到浏览器标签中,浏览器内核从网络接收图片数据但是并不会直接尝试将图片解码,而是将图片传递给渲染引擎去执行解码操作,渲染引擎返回一张未经压缩的位图,然后浏览器内核复制位图显示到屏幕上。这一系列看起来很复杂的步骤有助于防止知道图像解码器中未修补漏洞的攻击者控制浏览器内核。

        这个模式的一个例外是网络堆栈。HTTP堆栈负责解析HTTP响应头,根据Content-Encodings调用相应的gzip或者bzip2解码器去解压缩HTPP响应内容。这个任务可以放到渲染引擎中去做,不过会带来网络堆栈的复杂或以及性能降低等问题。另一个例子是浏览器内核和渲染引擎都在解析URL,因为URL处理无处不在。

        处理粒度.粗略来说,Chromium中每一个标签都使用了一个独立的渲染引擎去显示来自网络的内容,这样便对渲染引擎的崩溃具有了一定的容错性。Chromium页使用渲染引擎去展示受信任的内容,例如插页式的HTTPS证书错误或者钓鱼网站等。然而,这些渲染任务运行在单独的渲染引擎实例中并不会直接处理从网络获得的内容。这个模式的一个例外是Web Inspector,它显示受信任的内容并由包含Web内容的渲染引擎进行渲染。使用此种设计的原因是Web Inspector与他所检查的页面需要进行非常频繁的交互。

        插件.在Chromium的体系结构中,每个插件运行在一个独立于浏览器内核和渲染引擎之外的单独的客户端进程中。为了保持对现存网站的兼容性,浏览器插件不能在渲染引擎中执行因为插件供应商希望对于整个浏览器只有至多有一个插件运行于浏览器内核,插件崩溃将带来整个浏览器的崩溃。

        默认情况下,每一个插件在沙箱之外执行并且拥有用户的所有权限。这种设置维持了对现有插件以及网站的兼容性,因为插件可以具有任意行为。举例来说,Flash Player插件能够访问用户的麦克风以及摄像头,当然也能够写入到文件系统(更新自己以及存储Flash Cookies)。此设置的缺点在于,攻击者可以利用插件中未修补的漏洞在用户的计算机上安装恶意软件。

        未来,供应商可以编写可在Chromium沙箱中运行的插件,以提供更强大的防御插件漏洞的能力。Chromium还包含一个选项,可以在沙箱中运行现有的插件。为此,请使用–safe-plugins命令行选项运行浏览器。此设置是实验性的,可能会导致不稳定或意外行为。例如,在沙箱中运行的插件可能无法将自己更新为较新版本。

        译者注:自2017年3月(Chrome 57),Chrome已弃用插件功能


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



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

登录 后发表评论