找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

神乎其神的Rowhammer:用比特位翻转实现云虚拟机夺权

admin| 2018-1-9 21:44 阅读 544 评论 0

其实我个人真正钟爱的领域是成像和半导体,在我去年也算是半只脚踏进神圣的安全行业之后,第一次听说比特位翻转这种听起来极为高端的攻击方式 就有些惊呆的感觉。而且这还不是个传说,先前Sun所推的UltraSparc II处理器就存在这样的问题——简单来说,采用UltraSparc II CPU的服务器有些时候会毫无征兆地出现随机性错误,最后发现问题出在SRAM介质之上,据说在生产过程中SRAM存储部分被辐射物污染,可以导致 Cache的比特位翻转。


Cache比特位如果出现这种随机的翻转,数据处理肯定会出问题,最终就是服务器崩溃。这个问题本身也是因为处理器SRAM缺乏错误检查和纠正机制。我个人在听说这种所谓的“BUG”之后的确是有点三观被毁。对半导体有研究的同学可以去看看这篇Paper:https://media.blackhat.com/bh-us-11/Dinaburg/BH_US_11_Dinaburg_Bitsquatting_WP.pdf


然而实际上,这种听起来很玄幻的攻击其实不算新鲜,虽然看起来具有很强的不可控性,但实际还是可以人为触发其中的“硬件”漏洞(只是据说!!!我很 怀疑)。这个漏洞名为Rowhammer,前两年就有人提出了,可能是有史以来最理想化的漏洞。由于其不可控性,很多人认为Rowhammer停留在理论 阶段。

去年9月份,有安全研究人员提出一种名为“风水翻转”的攻击技术,主要针对同处一个云环境下的其他虚拟机。其本质也是Rowhammer攻击,据说 具备了“高准确性”和“可控”的特点,可从其他虚拟机盗取加密密钥。谁曾想,这种硬件级别的漏洞可以应用到听起来如此靠上的层级(云算是非常上层吧)。


J003-Content-Dont-flip-your-bit_LK.jpg


颠覆攻击逻辑的Rowhammer技术


去网上查资料,会发现Rowhammer的描绘极为晦涩。但Rowhammer漏洞其实很容易理解,这里我用自己的话来科普以下,这是个特别针对 Memory的攻击技术,但不是缓冲区破坏或溢出攻击。一般的计算机Memory介质中,每个存储单元(晶体管+电容器)存放1bit数据,这个比特位要 么是0,要么是1——存储单元中充满电子表示1,清空表示0。内存就是由上亿这样的存储单元构成的,数据也因此得以存储。


不过电容器会泄露,一个电容器充满电子后,只需要几毫秒就会泄露殆尽。这就要求CPU(内存控制器)对电容进行充电,让“1”这个值能够保持住。整个过程是由内存控制器先读取电容器中的值,然后再把数据写回去。这种刷新操作,每秒会执行几千次。


这几年的内存容量正在大幅度上涨,所以存储比特位的电容器也就越来越小,排列越来越近。要防止相邻的电容之间相互干扰,难度也就变得更大。如果能够快速、反复访问一排电容,相邻行的电容更容易产生干扰错误和所谓的“比特位翻转”,也就是0变成1。


其实正常的数据读写一般是不会发生比特位翻转的,可是如果对某些行进行反复读写,问题就有可能产生。2014年卡内基梅陇大学的研究人员层发表过一 篇论文,题为《无访问情况下的内存比特位翻转——DRAM干扰行错误的试验研究》,其本质是通过机器码指令CLFUSH或Cache Line Flush,强制进行这种比特位的读取和更新。据说利用这种方式,可引起大量比特位翻转。


利用比特位翻转,很多事情都可以做,比如说执行未经授权的代码。这就是所谓的Rowhammer。这是一种颠覆人类对安全认知的攻击技术,软件层面几乎解决无望。先前已经有研究人员演示,如何用Rowhammer来进行提权,以及打破安全沙盒。

不过看原理就知道,这种攻击实在有够理想化,存在诸多不确定性,因为攻击者根本无法精准控制比特位如何翻转。比如说,这种攻击对数据所在的内存位置首先就有要求,这样才能实施内存翻转:但敏感数据存储在这些位置的几率可能并不算高。


bd23113ce5b92317e60fb01ffb8917bf (1).jpg


实现内存“风水逆转”


所以在去年9月,针对Rowhammer的内存位置限制,有人开发出一种名为Flip Feng Shui(风水翻转)的攻击技术,这本质上也是Rowhammer。这种攻击就是篡改deduplication操作——deduplication在云 端主机中应用得很常见,这种技术可让两个或者更多虚拟主机共享特定的数据块,起到节约内存资源的作用。

Flip Feng Shui在物理内存上做手脚,可致加密密钥和其他敏感数据存储到内存特定的位置——这些位置就很容易受Rowhammer的影响了。所以才叫风水翻转,就是让数据在内存中的“风水”位置变更好,Rowhammer攻击变得更可靠。


这种技术是由阿姆斯特丹自由大学的一名研究人员Ben Gras提出的。他说:“先前就已经有攻击方法表明,共同主机的虚拟机彼此间是可以相互攻击的,比如说获取对方的加密密钥。不过这次的攻击更具破坏性,也是此类攻击的第一例。”


“我们可以相当高的精度和可控性,针对目标虚拟机的内存进行篡改。针对这种软件堆栈中看似随机化的数据破坏方式,我们首次以极高的准确性和可控的方式,对其进行了展示。”这里Gras所谓的“看似随机化的数据破坏方式”也就是Rowhammer攻击。

5AC0E8FF-4797-4EAF-A163-F5874E8FF23D.png

研究团队演示了攻击者如何利用Flip Feng Shui攻击,获取另一台VM虚拟机上的RSA加密密钥——当然这要求被攻击的虚拟主机与攻击者处在相同的云环境中。在他们进行的某一例实验中,进行攻击 的虚拟机获取到可用于授权安全shell访问的密钥,这样一来,这台虚拟机就可以获取目标虚拟机的未授权访问了。

研究人员在报告中提到,进行攻击的虚拟机获取到GPG密钥——该密钥是Ubuntu系统开发者用来确认更新可靠性的。有了这个GPG密钥,攻击者就能迫使目标虚拟机下载和安装恶意更新。


其实整个攻击过程描述起来还是比较复杂的,首先需要获取目标公钥。发起攻击的虚拟机通过Flip Feng Shui,针对公钥的某个特定部分进行比特位翻转,也就是我们上面提到的Rowhammer攻击方式——这里实际上还利用了云环境的 deduplication技术。就像前文提到的,这种技术在云端主机中很常见,这是一种相较数据压缩粒度更大、节约存储资源的技术。基于此,物理页才会 在多个虚拟机用户间共享,针对共享数据块的比特位翻转才显得有意义。

在公钥的比特位发生翻转之后,就构造出了一个全新的公钥,这个公钥会非常简单(足以进行因式分解)。也就是说,Rowhammer攻击欺骗目标虚拟机,接受新的公钥;攻击者随后也就能够得到相对应的私钥,并进行未经授权的SSH访问,签署恶意Ubuntu更新了。


30907982735.jpg


鉴于篇幅关系,这里没法细致详述每一环技术细节,有兴趣的同学可以前往翻阅研究人员发表的论文,题为《Flip Feng Shui: Hammering a Needle in the Software Stack》。Gras表示,这次的实验虽然只针对RSA密钥,但他预期未来这种攻击方式还能针对数字签名算法、Diffie-Hellman加密算法、ECC等等。这样一来,攻击者就不仅能够进行未授权访问量了,还能窃听合法会话。


另外,这种攻击也需要一些条件才能发起,比如说像前文提到的,要求虚拟机开启Deduplication;而且本次实验依赖于基于内核的虚拟机,以 及Linux中的Kernel SamePage Merging特性。还有,内存芯片本身也需要具备比特位翻转的基础,先前有人做过相应的测试,129款DDR3内存中,110款存在攻击可行性,还有12款DDR4内存有8款也存在Rowhammer漏洞(对此,我也真的很震惊,为什么我总是震惊?)。


最后,研究人员还列出了一些可抵御Flip Feng Shui攻击的手段,硬件层面要求DRAM芯片制造商进行相应的Rowhammer测试,还有比如针对某些DDR4芯片实施的直接行刷新机制等;至于软件 层面,包括禁用内存的deduplication,开发者和工程师也应该考虑加入额外的措施,比如检查安全敏感信息完整性。

“这种攻击不需要攻击者进行什么复杂的操作,就能完全控制共用主机的云虚拟机。同时,我们认为Flip Feng Shui还能通过更多的形式发起攻击,这就需要系统安全社区能够对这样的威胁引起足够的重视。”

不过说实话,我对这种所谓Rowhammer的攻击精度还是持怀疑态度,是一种“怎么可能”的惊叹。有兴趣的真的很建议去看原paper。如果说针 对Memory(包括内存、Cache、Register)的这种比特位翻转攻击真的是可行的,那么任何提权、代码执行之类的操作何苦再从应用或者系统层 面去搞定呢?而且它还不是缓冲区溢出攻击那样的层面,应用层的恶意程序更多的是种逆向的边信道攻击。


不过的不过,我对安全本身了解得相当浅层,所以或许其精度有什么特别实现方式。毕竟先前在看ARM的安全文档谈Lab Attack的时候也有点惊呆——即边信道(或者叫侧信道)攻击远比你们想象得复杂和高端,就是实验室里不计成本用到的所谓“电子探针”。突然觉得还有点 小激动…

文章点评