谷歌Project Zero在2015年发现了Rowhammer,他们演示了页表项RAM位翻转可让攻击者入侵Linux系统。
因为该漏洞不是通过找寻开发者失误,而是通过攻击内存来入侵操作系统,即便仅适用于没有纠错保护(例如新型RAM中的错误检查和纠正)的有限存储类型,其能力也是十分强大的。
自 Project Zero 的初始结果发布之后,科学家们还探索了其他方式或其他受害者。例如,2016年Rowhammer就演变成了一种安卓root攻击。
本周Usenix在温哥华举办的W00T17大会上,IBM苏黎世研究所的一组科学家阐述了 MLC NAND 闪存Rowhammer攻击,并打算进行实际演示。
听起来很恐怖吧?不过,好消息也不是没有:这是个本地而非远程攻击,而且研究员们将攻击限制在了文件系统级别,而不是对整个系统。
坏消息是,NAND Rowhammer 对精确性的要求比前代要小:最初的谷歌研究通过翻转单个比特位起效,而现在攻击者可从MLC NAND闪存漏洞获得的攻击基础,则是粗粒度的破坏。
换句话说,他们较弱的攻击基础,仍然足以发起本地提权攻击。
研究人员在论文中指出,要达到这一步,从闪存芯片到操作系统的每层防护都必须突破掉:
芯片上存储单元间的干扰保护;
闪存控制器上用来提升设备可靠性的干扰及错误纠正代码;
SSD控制器上为让攻击者难以预测内存分配而设的损耗均衡及区块布局算法;
缓存和错误检测之类需绕过的文件系统防护措施。
只有层层突破到这种程度,攻击者才能最终拿出他们的攻击载荷。
下面的视频演示了一次成功提权:
在按4 KB块大小格式化的Linux ext3文件系统中,一个可以创建100GB大小文件的攻击者,有99.7%的概率进行成功的漏洞利用。
Linux中让该攻击可行的特性就是索引节点(inode),它存储了对象数据的属性和对该攻击非常重要的磁盘块位置数据的特殊数据结构。
当某文件大小超过12块时,内核文件系统驱动就会去写一个间接块,而这种写操作对于攻击者而言非常易于计时和触发的。
尽管研究员们只走到了本地漏洞利用这一步,但他们也指出,利用浏览器中JavaScript一类的东西,远程攻击也是可行的。
因为浏览器确实允许文件系统读写操作,尽管这是间接的。通过Web内容本地缓存、cookies,或者使用HTML5存储API,将该攻击方法扩展成远程攻击也不是不可能。
他们指出,最佳防御,就是用dm-crypt一类的东西进行磁盘加密。