作者:Yaoqi Jia (新加坡国立大学)
早期的网页浏览器(Web browser)作为一个简单的网页文档显示软件,没有隔离不同的资源和对象。利用任何一个内存漏洞,攻击者就可以控制整个浏览器。现在主流的浏览器采用 沙箱技术分离互联网网页和本地的资源,从而阻止恶意网页通过利用内存漏洞来影响本地系统。同时这些浏览器也采用了基于进程隔离的设计,用来隔离不同源的网 页,从而确保相互之间不会受到安全漏洞的影响。谷歌Chrome与微软Internet Explorer拥有合计超过80%的市场占有率,都相继采用了这些安全隔离的设计。在这篇论文中,我们用作为代表的Chrome研究这种安全隔离的设计 问题,以及这种隔离设计的不足带来的互联网与本地系统的跨边界攻击。
谷歌Chrome在两个方面使用权限隔离(privilege separation)。首先,Chrome使用沙箱技术将能直接与本地操作系统通信的浏览器内核进程(browser kernel)与负责解析和渲染网页的渲染进程(renderer)进行隔离。其次,Chrome将不同源的网站实例或者标签隔离到不同的进程中。与之前 研究(如Gazelle和OP)提出的隔离概念不同,Chrome权衡安全和性能在同源策略的实现上做出了折中。同源策略(The same-origin policy)确保两个不同源的网站相互之间不能使用JavaScript直接访问彼此的DOM内容,除非使用明确的通讯方式例如PostMessage 来传送数据。之前的研究强调将同源策略的实现作为明确的目标,同时将不同源的资源存放在不同的进程中,彼此之间使用IPC进行沟通。但是,Chrome为 了减小性能开销,仅将沙箱技术使用在隔离网站和本地文件系统。同源策略被实现在渲染进程中,如果同一个渲染进程包含多个网页来自多个源,那么这些不同源的 网页是没有被隔离的。
以往大家可能都认为Chrome的沙箱技术是用来隔离每个不同源网页。但是在之前的报告中,谷歌强调了基于不同源的隔离是不在他们的目标里面。实际上Chrome的隔离策略主要是用来隔离互联网和本地系统的。
在过去的几年中, 云服务逐步地与系统和设备整合。例如,像Dropbox,OneDrive和Google Drive这样的云盘和云存储服务大量出现。这些服务将云上的数据与用户的本地系统同步,例如本地创建文件会被自动同步到云服务器。类似的,像 Github这样的源代码仓库服务也会将云上的代码同步到用户的本地系统。应用商店和远程控制软件也方便用户通过云来远程安装软件和控制本地系统。所以, 现实中作为云服务门户的互联网已经不单单是通过浏览器访问的网站,而且是本地系统的一部分延伸。考虑到这样的现实,我们再次审视当前浏览器的权限隔离的设 计。
我们研究发现,在浏览器的权限隔离中,如果基于源的隔离策略没有实现,那么使用沙箱对网页和本地的隔离是不能够被保障的。在Chrome中,如果攻击者 利用内存漏洞控制了一个网页的渲染进程,那么他可以获得这个网页的任何内容。但是如果攻击者想访问任何其他源的网页,他必须越过同源策略。我们首先发现, 一旦绕过同源策略,攻击者可以借助云服务网站 a) 创建拥有任何权限的文件, b)远程操纵虚拟机,c)在用户的系统上安装软件,d)获取用户设备上传感器的信息如地理信息。通过绕过同源策略,攻击者可以通过渲染进程的漏洞同时利用 云服务就可以间接地访问本地系统—绕过了互联网和本地的隔离。
为了绕过隔离,我们另外研究了攻击者是如何利用渲染进程的内存漏洞绕过同源策略。为了限制内存漏洞的影响,Chrome引进了许多进程内的保护措施如内 部的地址空间布局随机化(ASLR),数据隔离(partitioning),同时数据执行防护(DEP)和控制流完整性保护(CFI)。这些防护措施使 得即使在同一个进程中,攻击者也很难通过篡改控制流来绕过同源策略。相反,我们采用面向数据的攻击(data-oriented attack)方式来篡改SOP相关的关键数据从而绕过Chrome内部防护和同源策略。在Chrome中,我们发现许多SOP相关的检查(如X- Frame-Options)是在渲染进程中的,而且这些函数大多数都是通过安全监视器(security monitor)和关键数据来判断来自不同源的访问请求可以通过与否。通过篡改这些关键数据,攻击者可以绕过这些SOP相关的函数,并且进一步绕过 SOP。而且这些攻击是不会篡改控制流,从而使得控制流的防护DEP和CFI无效。对于其他的内存防护措施,我们发现攻击者可以使用跨区域的指针来绕过隔 离和内存空间随机化。
在Chrome 33上我们验证了面向数据攻击的可行性。同时我们发现了超过10种不同的SOP相关的函数和关键数据。通过篡改这些关键数据,我们绕过了SOP,借助云服 务间接绕过了网页和本地的隔离并访问本地文件。我们向谷歌报告了我们的发现和相关的攻击细节。谷歌认可了我们的发现,并同时承认在Chrome上真正实现 基于源的进程隔离仍然需要大量的代码工作。我们也实现了轻量级的数据随机化保护措施,并作为第一次在Chrome保护同源策略免于数据攻击。
论文的细节请访问http://www.comp.nus.edu.sg/~jiayaoqi/publications/chrome_ccs.pdf。
如果对我们的攻击代码和视频感兴趣,可以访问https://github.com/jiayaoqijia/Web-Local-Attacks。
【转自:网安国际】