内存去重 黑客的好朋友【转】

内存去重 黑客的好朋友

2017-02-07 nana 安全牛

第33届混沌通信大会(33C3)上,安东尼奥·巴雷西和埃里克·柏斯曼拿出了3个基于虚拟机内存去重漏洞利用的黑客方法演示。

内存去重是多虚拟机设置的禁果,即危险又诱人。想象一下你环境中托管了很多虚拟机,这些机器当中很多台在同一时刻内存中的东西都是一样的。或许我们都在看猫咪视频,那就完全可以只保存一个副本到全局内存中,每台用到该视频的虚拟机到共享内存块中自取即可。理论上隔离的机器其实是共享物理内存的。这里面存在什么漏洞呢?

基本上,当内存去重的时候,想要访问那块内存,所花的时间会稍长一些,因为虚拟机(VM)得去查找自身以外的内存地址。如果攻击者对找出有没有其他虚拟机也在看猫咪视频感兴趣,他可以将视频放到自己的内存中,等待VM管理器来去重,然后计时自身内存发生改变需要等多久。如果超出某个阈值,说明还有其他人也在看那段视频。两名研究人员的演讲,阐述了有关此漏洞的3种利用方法。

CAIN攻击可使攻击者找出邻居VM上给定内存页的地址。比如说,某个Windows动态链接库(DLL)的地址。基本的思路如上所述,但找出内存页中的代码偏移量是很难的。不过,通过对所有偏移量写入同一代码段来查找匹配项,他们可以暴力破解出正确的偏移量。该攻击目前还仅仅只是泄露出另一台虚拟机所运行程序的内存地址,但这完全可以当成垫脚石看待。

第二个攻击加入了硬件漏洞,著名的Rowhammer攻击,目的是利用同一台机上运行的进程。具体讲,就是运行JavaScript代码来侵入微软的“安全”Edge浏览器。他们用内存去重攻击获取到代码和堆指针的地址,创建代码对象,再用Rowhammer将对象地址转换成指针并运行之。所有这一切都归功于内存去重的存在。

最后,“风水逆转( Flip Feng Shui )”通过侵入共享内存的本地副本再镜像回受害VM的方式,将新数据写入受害VM。因为Rowhammer中翻转的比特位是不可预测但可重复的,第一阶段就是要找出这些需要被翻转的比特位的位置,然后在内存中整合起你想在受害VM上修改的数据副本。接着,就是Rowhammer那段内存,而且由于没有被显式写入,一会儿之后该内存就会被渗回给受害者。

演示包含了翻转受害者SSH公钥中的几个比特,将之转换为容易因式分解的密钥,然后登录。第二个攻击中,他们在密钥比特翻转中融合进“ubunvu.com”域名,使用其自动升级机制给受害VM上安装任意软件。酷!

话题或许略为沉重,但个中蕴意令人震惊。很显然,内存去重是个问题,但实际利用这个漏洞(3种方式!)就是绝技了。他们没说自己负责任地报告了该漏洞,但需要指出的是:Windows 10 不再使用内存去重!

演示视频:

演示PPT:

https://fahrplan.events.ccc.de/congress/2016/Fahrplan/system/event_attachments/attachments/000/003/152/original/33c3_memdedup_curse_slides_final.pdf

关于xmsg

技术面前人人平等.同时技术也不分高低贵贱.正所谓学无大小,达者为尊.
此条目发表在未分类分类目录。将固定链接加入收藏夹。