针对管理程序的“风水反转”攻击对企业用户有着短期和长期的影响。专家Ed Moyle在本文中介绍了这个漏洞攻击的工作原理以及应应对方法。
在安全领域中的相关专业人员都应该知道的是,当后果和影响足够严重时, 比较有利的一种做法就是将当前环境保持在趋势模型中相对不会发生的场景中。例如,最近荷兰阿姆斯特丹Vrije大学学生所报告针对云服务虚拟机内存的风水反转攻击。
对于云用户来说,这项技术是相当危险的,因为它的攻击方式是出人意料且相当聪明的:它主要利用了内存管理的功能(特别是重复数据删除功能)来为Rowhammer带来最大的影响,它打破了管理程序在过程中的隔离状态。换而言之,这是一个在管理程序环境中针对分段模式的攻击——而这恰恰是众多企业组织的云威胁模型中假定绝不会发生的情况。
什么是“风水反转”?
“风水反转”主要涉及跨虚拟边界找到并反转一个或多个单个比特位。这意味着管理程序上的一台虚拟机(VM)会对在同一物理主机上不同虚拟机中的比特位进行反转。这一攻击方式能够奏效的原因有二:内存重复数据删除与Rowhammer。理解这两个原因是了解风水反转如何在技术层面上发挥攻击作用的关键所在。
首先,让我们来谈谈内存重复数据删除。这是一个用于在数据中心环境中最大程度实现系统效率和性能的功能。可以想像一下,一个管理程序运行相同配置的实例,如Linux(例如运行一个LAMP堆栈的东西)。由于这些实例都具有相同的配置,那么可以想象这些机器的存储和内存中存在着多少的冗余——在任意时间点的相同状态下。内存重复数据删除功能可以有助于最大程度地减少此类浪费:与系统保留多个完全相同内存页的做法不同,它只保留一个页面以供在该页面可能出现的任意位置所共享。所以,例如两个不同的虚拟机实例可能指向同一个内存页面,该内存页面也同时被这两个实例所拥有。
其次,则是Rowhammer。Rowhammer是一个硬件级问题,它能够让某些有心人有意识地通过专为引起中断的手工访问模式来改变动态RAM(DRAM)中单个电容的充放电状态。因为DRAM的充放电状态代表了其中所存储的数值(无论是打开或是关闭、充电或放电、1还是0),这些访问模式可以以一个带外方式来改写其他内存空间。
风水反转的攻击方式是通过在有可能发生比特位反转且正在运行的虚拟机上查找内存空间,从而从攻击者的角度(内存模板)获得所需的便利。这种内存部署的方式使攻击者能够控制比特反转。最后,攻击者执行比特反转,从而使目标内存被破坏(或当作漏洞被利用)。
那么,攻击者跨虚拟化边界执行比特反转会带来什么危害呢?好吧,事实证明,通过一个比特位的反转,攻击者可以造成很多的破坏。例如,在SSH公共密钥中进行比特反转就可以轻松实现密钥因数分解(从而破坏认证)或者针对系统更新修改可信任软件库(从而允许在主机上安装任意软件)。所以,从实质上来说,通过对单个比特位的反转操作,攻击者可以在目标系统上为所欲为。
补救措施与宝贵教训
从实践的角度来看,相关从业人员显然会希望在短期内就采取措施来防止这种类型的攻击。那么,他们能做些什么呢?风水反转一文建议在多租户环境中应禁用内存重复数据删除功能。
显而易见,目前并不是每一个云用户都拥有控制权,或者甚至知道云供应商对客户所使用的何种配置状态。这意味着,客户在多租户环境中与公有云供应商还有着不少的准备工作要做。具体来说,应由客户来询问关于配置状态的问题,并根据风险容限来决定是否采用配置状态已知和/或可知的(例如裸机云)服务。
但是,就长期来说,还是有着更广泛的含义的。具体来说,云客户可以冒险忽略隔离攻击。也就是说,威胁建模场景甚至在它们的风险/对策演算中都不会包括隔离攻击。在面临诸如“风水反转”攻击时,这就是一个问题。
虽然隔离攻击是很罕见的,但那并不是说它们是不存在的,事实上它们确实会不时地发生。因此,设置分层防御并特别地解决风险建模和风险应对方案中的隔离攻击是非常重要的。