导语:阿姆斯特丹自由大学的研究员Ben Gras和他的同事Kaveh Razavi,发现了能破解ASLR的技术。
ASLR是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的,让系统免受普通攻击,例如缓冲区溢出、返回导向编程技术(Return-oriented programming,ROP)攻击等。ASLR是大多操作系统长期使用的系统防御机制,如今Windows、Linux、macOS、iOS和Andriod等主流操作系统都已采用了该技术。
现在,阿姆斯特丹自由大学的研究员Ben Gras和他的同事Kaveh Razavi,发现了能破解ASLR的技术,这意味着:软件应用中发现的任何常见的内存漏洞,都可能导致我们的PC或智能手机被更深层次的控制。而且,由于这种攻击利用的是芯片而不是某一款软件,所以,通过软件更新来修复该漏洞是根本不可能的,这也意味着无论我们的设备装的什么操作系统,都将被攻击。
ASLR保护失效的危险到底有大?攻击者仅用JavaScript就能攻击你的设备,也就是说,我们每访问一次恶意网站都会触发一次网络攻击。网络安全团队VUSec就发布了一段关于如何在火狐浏览器中运行JavaScript注入攻击的视频。
传统上,黑客们只能通过猜测来进行不断试错的攻击,得到被攻击者的内存布局信息,这样就可以知道代码或者数据放在哪里,来定位并进行攻击。比如可以找到ROP里面的gadget,如下图所示。
而ASLR保护的失效,让某些漏洞,比如内存信息泄露的情况下,攻击者会得到部分内存信息,比如某些代码指针。传统的ASLR只能随机化整个segment,比如栈、堆、或者代码区。这时攻击者可以通过泄露的地址信息来推导别的信息,如另外一个函数的地址等。这样整个segment的地址都可以推导出来,进而得到更多信息,VUSec就是利用了计算机硬件最深层次的核心——英特尔、AMD、Nvidia和三星等公司制造的芯片。
VUSec进行ASLR攻击的原理
VUSec所展示的这次攻击,就是利用了芯片与内存交互方式的漏洞,芯片有一个名为内存管理单元(MMU)的部件,专门负责映射计算机在内存中存储程序的地址。为了跟踪那些地址,MMU会不断地检查一个名为页表(page table)的目录。
VUSec此次在网页攻击中利用的页表目录的漏洞,通常设备会将页表存储在处理器缓存中,让最常访问的信息随时可被计算核调用的一小块内存。这种做法可以提升芯片处理速度和效率。
但是,网页上运行的一段恶意JavaScript代码,同样可以写入那块缓存。最关键的是,它还能同时查看MMU的工作速度,通过密切监视MMU,JavaScript代码可以找出其自身地址—。
VUSec研究人员的攻击就是将MMU的速度变成了一条暴露行踪的线索。攻击代码覆盖缓存,每次覆盖一个内存单元,直到它看到MMU的速度慢下来。这个迹象表明,无论缓存的哪个部分被覆盖,它都是MMU在寻找的页表的一块――MMU的速度之所以慢下来,是因为它要回过去头找随机存取存储器(RAM)中的页表副本,而不是找处理器缓存中的页表。
MMU要执行四次单独的页表查询,才能找到任给代码段的物理地址。因此,攻击会覆盖缓存四次,找出缓存中有一部分页表的四个地方。每次,恶意程序都会留意MMU速度慢下来的那一刻。MMU多久以后出现速度慢下来这个现象,这实际上给了黑客线索,当设备将攻击代码从缓存拷贝到内存时,就能清楚恶意代码自己在缓存中的地址,因而清楚其在RAM中的位置――这正是ASLR竭力隐藏起来、不让黑客看到的那种信息。
这种攻击好比是老式的撬窃保险箱的盗贼,他们边慢慢转动保险箱的拨盘,边用听诊器留意动静。
Ben Gras说:“缓存就像是保险箱的齿轮,它会发出让罪犯得以破解的密码的微小声音线索。”
所以想让ASLR再度恢复其以前的保护效果,恐怕不是操作系统或浏览器升级能做到的,对这些芯片地功能重新进行设计才是根本解决之道。
演示视频
芯片漏洞的应对之策
就在三个多月前,VUSec就已联系了荷兰国家网络安全中心,该中心随即又联系了所有受影响的芯片制造商和软件公司,包括英特尔、AMD、三星、NVIDIA、微软、苹果、谷歌和Mozilla,但是为了保护用户,研究人员给了这些公司足够的时间来解决该问题,而不是一发现就公之于众,另外研究人员也没有发布演示攻击的任何代码。不过他们警告,经验老到的黑客可以在短短几周内通过逆向工程,破解他们披露的那种攻击技术。
苹果已经开始着手缓解该威胁并且发布了旨在强化Safari的软件更新,但并未揭示该更新到底做了什么。苹果发言人表示,他们还向使用其芯片的那些公司建议联合起来共同应对这个威胁。
彻底的修复版最终需要更换硬件,而不是更换软件。众多设备需要采用新架构的新芯片,以便将MMU及其页表与处理器的缓存分开来。
Ben Gras说:“由于这是个底层问题,上面的软件层可以让这个缺陷更难被人钻空子,但是无法消除它。”
而英特尔、微软和Mozilla对这个问题却反应冷漠。
在微软发给《连线》杂志的一份声明称:“我们已查明,它不是一个安全问题。”英特尔也表示:“这个问题并不代表基于英特尔架构的系统的安全性出现了重大变化。”
来自这三家公司的发言人都同时指出,这个漏洞只有结合其他攻击才会带来真正的威胁。而三星、NVIDIA、AMD和Google更是对这个问题没有任何的回复。
Yossi Oren表示:“如果科技公司不认真重视ASLR攻击,那很快黑客就可以利用最常见的方法来对我们的操作系统就行大规模攻击,到时我们将毫无还手之力。”
为了应对这个威胁,Ben Gras建议了一些缓解之计,比如你可以安装插件,像是火狐的NoScript,或者Chrome的ScriptSafe,来封锁网页上的JavaScript,另外浏览器开发商应该可以调低它们允许脚本在时间度量方面的精准性,阻止脚本监视MMU的速度。
不过要彻底的防范ASLR攻击,最终还是需要更换芯片,而不是在软件上浪费时间。生产芯片的公司需要重新设计新的芯片,以便将MMU及其页表与处理器的缓存分开来。