Rowhammer漏洞致“比特位翻转”,如何解决?

读者们也许会觉得Rowhammer和比特位翻转是音乐及舞蹈行业的专业术语,但其实他们指的是存在于动态随机访问存储(DRAM)——大多数电子设备中都存在的一种核心组件中的某种非常严重的漏洞。随着驱动器中在每个单独的DRAM芯片上的存储容量的提升,造成了其自身严重的漏洞,其允许攻击者把DRAM中比特位的值从1改成0,或翻转为相反的数值。这一基于硬件的攻击能够绕过核心系统保护措施,使数据安全和流程之间产生隔离。这威胁到了电子数据安全的基本原则,即内存位置的内容只有在它们被写入时才发生变化。

DRAM芯片包含数以百万计排的电容,包括充电或放电两种类型,这两种状态代表了比特位的值,即0和1。要访问DRAM芯片中存在的值,系统需要给整排电容进行同时加压,并读出所有的值,由于性能的原因使得要一次只读取其中某位比特的信息是不现实的。事实上,DRAM的读取操作实际上是一个读取和更新的操作。读取一行的值需要其电容放电,电容也就丢掉了它存的值。这意味着数据必须通过给电容充电的方式立即写回。这种读取和更新过程实际上发生在DRAM定期给电容放电来稳定自己,这就是术语中是动态RAM(Dynamic
RAM),而不是静态RAM的原因。

随着电容越来越小,排列越来越近,要防止相邻电容之间相互影响干扰已经变得越来越难。快速和反复地访问一排电容,会在相邻行的电容间产生干扰错误和比特位翻转。比特位翻转很少发生在正常操作期间,因为缓存会限制DRAM读取和更新循环需要发生的次数。然而,卡内基梅隆大学的研究人员在2014年发表的一篇题为《无访问情况下的内存比特位翻转——DRAM干扰性错误的试验研究》的论文表明,重复性使用机器码指令CLFLUSH或Cache
Line
Flush,能够清除缓存并强制进行读取和更新。研究人员发现,利用这一技术迫使内存反复读取并给一排电容充电的话,将引起大量的比特位翻转——产生所谓的Rowhammering现象。

谷歌的Project
Zero团队最近的研究发现,恶意程序可以利用比特位翻转的Rowhammering运行未经授权的代码。该团队设计出如何使CPU重定向,从错误的内存地址运行代码,利用Rowhammering改变操作系统的内存映射的内容。来自阿姆斯特丹自由大学的四位研究人员已经在Windows

10上使用Rowhammering与新近发现的一种存储重复数据删除矢量相结合的方法成功实现攻击。即使系统的补丁完全修复,并运行着各种安全加固措施,此种方式还是可以使攻击者控制操作系统。

Rowhammering漏洞在现实中出现可能还需要一段时间,但这种设计缺陷存在当今计算机设备的基本硬件之中。硬件供应商都试图在DDR4架构中引入防止或减少Rowhammering漏洞的缓解措施或功能,但谷歌公司以及Third
I/O公司的研究表明,DDR4也不能免疫Rowhammering,要防范这一漏洞,业界还有许多事情要做。

管理员们可以借助FuturePlus Systems Corp的FS2800 DDR
Detective软件的Rowhammer监测功能或谷歌的免费Rowhammer测试工具来检查自己的设备是否存在漏洞。而另一种否定的声音认为,没有必要认为设备在比特位翻转上存在漏洞,因为这一现象很难实现,他们的假设是基于比特位翻转是不存在。这些工具只能运行在测试机器上,要求测试机和真实环境具有类似的硬件配置,且那些包含敏感数据,因为工具的操作可以永久性地损坏DRAM芯片,导致数据受损或系统崩溃。

这一存在设备硬件端的漏洞,已然超越了传统反病毒和安全软件的对于解决方案的认识,该问题无法仅仅通过升级操作系统软件来解决。用户正寄希望于硬件供应商提供解决措施,例如提升最小内存更新频率来降低Rowhammering对比特位翻转的影响。不幸的是,这一办法将对DRAM能耗和性能产生不利影响。DRAM模块制造商们对他们的产品如何应对Rowhammering均守口如瓶,可能的缓解机制也被深埋在产品规格说明书中。思科在降低级别变化方面提出了一些建议能够缓解DRAM

Rowhammer漏洞,但任何新的参数都必须现在测试环境中进行配置测试后二次配置才能应用。由曼彻斯特大学计算机科学学院正在开发能够阻止Rowhammer漏洞的可行的硬件解决方案,简称为ARMOR,是一种内存运行时的热排探测器。

如果在测试过程中发生了比特位翻转,管理员应该考虑监视那些经常性具有很高CPU占用率和高缓存丢失的进程,这很有可能是基于Rowhammer攻击方式的特征。根据评估的风险水平,将硬件移动到支持伪目标行更新(Pseudo
Target Row Refresh)或目标行更新(Targeted Row Refresh)的平台,通过目标行更新运行某一hammered

row可能是一种选择,但最好的建议是直接与您的供应商寻求意见,如何才能完全地保护特定的环境免受攻击。最后,任何快速的解决方法将很有可能以BIOS更新的形式发布,管理员们应保证他们能实时跟踪硬件厂商的安全通知。

作者:Michael Cobb

来源:51CTO

时间: 2024-10-09 14:00:32

Rowhammer漏洞致“比特位翻转”,如何解决?的相关文章

用 JavaScript 实现内存位翻转漏洞

研究人员在今年初披露了一个利用计算机硬件弱点的Rowhammer攻击方法,现在一个研究团队公布了基于JavaScript的概念验证攻击代码,让看起来不可能利用的物理漏洞变得日益实用. Rowhammer漏洞是指DRAM临近内存单元之间电子的互相影响,当重复访问特定内存位置数百万次后,攻击者可以让该位置的值从0变成1,或从1变成 0.这种位翻转漏洞可以让一个不受信任的应用获得几乎任意的系统权限,或绕过防止恶意代码访问敏感系统资源的沙盒机制.研究人员公布了一个工作在浏览器上概念验证攻击代码Rowha

Javascript浮点数乘积运算出现多位小数的解决方法

 这篇文章主要介绍了Javascript浮点数乘积运算出现多位小数的解决方法,需要的朋友可以参考下 Javascript在进行浮点数的乘积运算,会出现多位小数的情况.    这是由于在运算的时候先把浮点数转化成二进制后进行运算,但是有的小数在二进制编码后出现无限循环,因而导致计算出现了误差,在其它变成语言中也有类似的问题.    原因解释参考自百度知道:    例如:求1038.1-1000  1038.1=10000001110.00011001100110011001100110011001

win8.1update致win8.1激活失效解决方法

  win8.1update致win8.1激活失效解决方法: 上周,微软通过Windows Update向所有Win8.1平台免费推送Win8.1 Update更新.但有些用户升级并不顺利,不仅安装失败(代码80070020.80073712),而且还会导致Win8.1系统激活失效. 据外媒Softpedia报道,不少现有Win8.1平台用户遇到Win8.1 Update安装失败问题,但更严重的问题在后面. 当重启Windows 8.1系统后,用户意外发现Win8.1弹窗"需要重新激活"

ios-哪位大虾能够解决:IOS获取是否飞行模式状态,不能用reachability

问题描述 哪位大虾能够解决:IOS获取是否飞行模式状态,不能用reachability 应用场景是获取苹果手机是否处于飞行模式状态,但不能通过reachability来判断是否只有网络状态,用networkcontroller和coretelephony两个判断能够解决大部分问题,但发现有4个版本的操作系统返回不正确,因此无法通用,不知道如何是好了,有哪位大虾出手相助,谢谢!不行的4个IOS版本分别是:6.1.3.7.0.4.7.1.1.8.3 解决方案 楼主解决了吗,同求啊

VS2010无法启动此程序,拒绝访问。请哪位好心人帮忙解决一下?

问题描述 VS2010无法启动此程序,拒绝访问.请哪位好心人帮忙解决一下? 解决方案 启动vs时以管理员身份运行,删除bin/debug目录,重新生成.编译,运行. 最后实在不行,重新复制代码到vs. 解决方案二: 我会告诉你吗?你点:调试==>附加到进程==>然后选着传输:默认值, 下面的可用进程找到:LOlClient.exe, 点附加, 你把这个编译器放在游戏里面就可以了, TX就检查不出来了!!!!![img=http://forum.csdn.net/PointForum/ui/sc

sql-有哪位大神能解决这个问题吗?SQL

问题描述 有哪位大神能解决这个问题吗?SQL .创建一个insert触发器,名称为t1,当在student表中插入一条新记录时,给出'你插入了一条新记录!!!'的提示信息.create Trigger t1on student AFTER insertASif (select COUNT(*) from student s join inserted ion i.sno=s.sno)>10beginprint '你插入了一条新记录!!!'ROLLBACKENDinsert into studen

angularjs-这段代码哪里有错啊,运行结果不对啊,哪位大神解决下。

问题描述 这段代码哪里有错啊,运行结果不对啊,哪位大神解决下. <!doctype html> Hello {{ clock}}! function MyController($scope, $timeout) { var updateClock = function() { $scope.clock = new Date(); $timeout(function() { updateClock(); }, 1000); }; updateClock(); }; 运行结果如下: 解决方案 请稍

web service-webservice报错问题,求哪位大神解决

问题描述 webservice报错问题,求哪位大神解决 报这个错误(Exception in thread "main" javax.xml.ws.WebServiceException: Provider com.sun.xml.ws.spi.ProviderImpl not found)该如何解决? 解决方案 webservice文件读写报错问题关于windows 2008 server R2 文件共享问题,求大神帮忙解决一下!

位运算枚举解决象棋将帅问题

引子问题:在一把象棋的残局中,象棋双方的将帅不可以相见,即不可以在中间没有其他棋子的情况下在同一列出现.而将.帅各被限制在己方的3*3的格子中运动.相信大家都非常熟悉象棋的玩法吧,这里就不详细说明游戏规则了. 用A.B代表将和帅,请写出一个程序,输出A.B所有合法的位置.要求在代码中只能用一个变量. 中国象棋将帅问题: 分析与解法: 这个问题的解法并不复杂. 遍历A的所有位置 遍历B的所有位置 如果A的位置和B的位置在同一列 输出结果 否则 继续寻找 地图可以用0-8表示A或B可能的9个位置 0