基于内存漏洞的互联网与本地系统的跨界攻击:
The “Web/Local” Boundary Is Fuzzy
作者:Yaoqi Jia (新加坡国立大学)
早期的网页浏览器(Web browser)作为一个简单的网页文档显示软件,没有隔离不同的资源和对象。利用任何一个内存漏洞,攻击者就可以控制整个浏览器。现在主流的浏览器采用沙箱技术分离互联网网页和本地的资源,从而阻止恶意网页通过利用内存漏洞来影响本地系统。同时这些浏览器也采用了基于进程隔离的设计,用来隔离不同源的网页,从而确保相互之间不会受到安全漏洞的影响。谷歌Chrome与微软Internet Explorer拥有合计超过80%的市场占有率,都相继采用了这些安全隔离的设计。在这篇论文中,我们用作为代表的Chrome研究这种安全隔离的设计问题,以及这种隔离设计的不足带来的互联网与本地系统的跨边界攻击。
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。
Yaoqi Jia is a fifth year Ph.D student in School of Computing at the National University of Singapore. He is advised by LIANG Zhenkai and Prateek Saxena. Before coming to NUS, He obtained his B.S. degree in Computer Science from HUST. His home page is at http://www.comp.nus.edu.sg/~jiayaoqi/.
His research interests span the areas of web security/privacy, network security and applied cryptography. Presently, He is exploring solutions to secure the web infrastructure from two perspectives — networking and system, e.g., addressing privacy issues in web overlays using distributed ORAM/onion routing and identifying new attacks/vulnerabilities in web browsers.
His research work has been published in CCS, USENIX Security, PETS, RAID, ESORICS etc. He has received the Best Paper Award in W2SP (2014) and ICECCS (2014). His work got acknowledged by various vendors including Google and Apple (CVE-2014-7948 for Chrome and CVE-2015-5907 for Safari), as well as received attention from the media including Dailydot, Gizmodo and Techspot.