一个简单的JavaScript攻击绕过了22个CPU架构上的ASLR保护
该漏洞存在于内存管理单元(MMU)的工作方式中,MMU是许多CPU的一个组件,导致绕过地址空间布局随机化(ASLR)保护。
ASLR是所有现代操作系统(从Windows和Linux到macOS、Android和BSD)部署的关键安全防御系统。
一般来说,ASLR是一种内存保护机制,它将程序在设备内存中运行的位置随机化。这反过来使得攻击者在利用缓冲区溢出或类似漏洞时,很难在内存中的特定位置执行恶意有效负载。
简而言之,对于攻击者来说,这就像是试图蒙住眼睛入室盗窃。
但现在,荷兰Vrije大学的一组名为VUSec的研究人员已经开发出一种攻击,可以绕过Intel、AMD、ARM、Allwinner、Nvidia等热门供应商提供的至少22个处理器微体系结构上的ASLR保护。
这种被称为ASLR缓存或AnC的攻击尤其严重,因为它使用简单的JavaScript代码来识别内存中执行系统和应用程序组件的基址。
因此,仅仅访问恶意网站就可以触发攻击,这使得攻击者可以针对内存的同一区域进行更多攻击,窃取存储在电脑内存中的敏感信息。
以下是攻击的工作原理:
该攻击利用了微处理器和内存相互作用的方式。
MMU存在于台式机、移动设备和服务器芯片中,用于映射计算机在内存中存储程序的位置。MMU不断检查一个名为页表的目录,以跟踪这些地址。
设备通常将页表存储在CPU的缓存中,这使得芯片速度更快、效率更高。但该组件也与不受信任的应用程序(包括浏览器)共享其部分缓存。
因此,恶意网站上运行的一段javascript代码也可以写入该缓存(侧通道攻击),使攻击者能够发现软件组件(如库和RAM映射文件)在虚拟内存中的位置。
有了这些位置数据,任何攻击者都可以读取计算机内存的一部分,然后他们可以利用这些数据发起更复杂的攻击,升级对整个操作系统的访问,并劫持计算机系统。
研究人员通过最新的Chrome和Firefox web浏览器,在大约90秒内成功地利用了22种不同的CPU微架构上的AnC JavaScript攻击,尽管这些浏览器中内置了ASLR保护,比如损坏的JavaScript计时器。
VUSec研究团队发表了两篇研究论文[1,2],详细介绍了AnC攻击,以及两段视频演示,展示了该攻击在64位Linux机器上的Firefox浏览器中运行。
在他们的攻击中,研究人员将他们的AnC JavaScript与攻击代码结合起来,利用Firefox中现已修补的释放后使用漏洞(CVE-2013-0753)。AnC攻击的问题通过几个CVE标识符进行跟踪,包括:
- 适用于英特尔处理器的CVE-2017-5925
- CVE-2017-5926适用于AMD处理器
- CVE-2017-5927适用于ARM处理器
- CVE-2017-5928了解影响多个浏览器的时间问题
VUSec团队已经在三个多月前通知了所有受影响的芯片制造商和软件公司,包括英特尔、AMD、三星、英伟达、微软、苹果、谷歌和Mozilla,但直到现在才公布了他们的调查结果。
“结论是,这种缓存行为和强大的地址空间随机化是相互排斥的,”论文总结道。“由于缓存层次结构对整个系统性能的重要性,所有修复程序的成本可能太高而不实用”。
“此外,即使可以在硬件上采取缓解措施,例如页表的单独缓存,这些问题也很可能在软件中重新出现。因此,我们建议ASLR不再被视为抵御内存错误攻击的第一道防线,并建议未来的防御不再依赖它作为关键构建块”。
根据该团队的说法,保护自己免受AnC攻击的唯一方法是启用插件,例如用于Firefox的NoScript或用于Chrome的ScriptSafe,以阻止网页上不受信任的JavaScript代码在浏览器中运行。
