来自荷兰的一组研究人员已经证实,可以避开纠错码(ECC)保护机制来执行Rowhammer内存操纵攻击。
什么是Rowhammer?
早在2015年,谷歌的Project Zero团队就曾发现,可以反复对相邻行中的存储单元进行充电和放电,来改变单个存储单元的值。如果攻击者准确地知道要攻击的位置,他们就可以更改特定位置,将指令或命令注入内存中,或是授予访问权限以访问包含敏感信息的受限制部分。
ECC保护机制在Rowhammer出现之前就已经开发出来了,ECC代表纠错码,是一种内存存储,包含作为具有高端RAM的控制机制,通常部署在昂贵的或者关键任务型系统中。ECC内存的工作原理是通过检测并校正单个比特值的变化,来防止比特翻转的情况,就像Rowhammer攻击造成的那样。
近日,阿姆斯特丹自由大学(The Vrije Universiteit Amsterdam)的一组研究人员表示,他们已经开发出了一种切实可行的方法,来精确地改变服务器RAM内存芯片中的比特,而不会触发ECC的校正机制。这就使得他们能够篡改数据,注入恶意代码和命令,并更改访问权限,以便可以窃取密码、密钥和其他秘密信息。
这一研究发现可谓意义非凡,因为虽然ECC曾被认为是阻止Rowhammer式攻击的可靠方法,但有人认为从理论上可以绕过这种防御机制。现在这种想法已经得到了证实。
结果是,恶意行为者可以利用该团队提出来的避开服务器上ECC的技术,使用Rowhammer手段从这些高价值目标中提取信息。当然,这些恶意行为者必须先进入他们可以在易受攻击的机器上翻转比特的位置,为了实现这一步,他们可能会使用设备上已有的恶意软件。
神奇的数字“3”
阿姆斯特丹自由大学的研究团队证实,ECC校验错误的方式存在一个可利用的漏洞:当一个比特被改变时,ECC系统会纠正该错误。而当发现两个比特被改变时,ECC就会使程序崩溃。
但如果三个比特可以同时被改变,ECC就无法捕获到这种改动行为。这一点是众所周知的,不过这里的关键是可以证明,它能够让Rowhammer攻击有机可乘。
至关重要的是,研究人员发现了一种类似竞争条件(race condition,即两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序)的情况,这让他们确信可以利用3比特翻转技术有效地操纵RAM地址。
研究人员认为,相比从不需要校正的地址读取内容,从需要纠正比特翻转的内存位置读取内容所花的时间通常来得更长。因此,实验过程中他们依次尝试每个比特,直到找到这样一个可以翻转三个易受攻击的比特的word。最后一步是让两个位置的所有三个比特都不相同,并实施最后一击,一次性翻转所有三个比特:任务完成。
研究人员表示,他们能够在四种不同的服务器系统上测试和重建漏洞:三个系统运行英特尔芯片,另一个系统使用AMD。他们拒绝透露任何特定的内存品牌。
幸运的是,虽然攻击很难防止,但在实际环境下也很难实现。阿姆斯特丹自由大学的研究团队梳理了众多地址以找到易受攻击的地址,然后实际执行Rowhammer攻击。他们表示,在有繁杂的系统中,攻击可能需要长达一周的时间才能顺利实现攻击。
研究人员表示,他们的研究结果不应被视为对ECC的谴责。相反地,它应该向系统管理员和安全专业人员展示ECC只是他们应该与其他安全机制(比如优化的硬件配置和认真仔细的记录及监测等)结合使用的几道保护层之一。
ECC无法阻止针对各种硬件组合的Rowhammer攻击。如果比特翻转的数字足够大,ECC只会减慢攻击速度。
据悉,介绍这种攻击技术的论文题目为《利用纠正码:关于利用ECC内存对付Rowhammer攻击的有效性》,并将于明年在安全与隐私研讨会上正式发表。