刚在网上看了一些文章试图解释最近发现的计算机处理器硬件安全漏洞,有些文章笼统把幽灵(Spectre) 与熔断(Meltdown) 混为一谈。其实这两者非常不同。熔断是 INTEL 特有的缺陷,是 INTEL处理器设计中允许猜测性非法访问的严重错误,熔断漏洞很容易被利用。幽灵(Spectre) 缺陷则是利用所谓间接分叉预测 (indirect branch prediction --- IBP)。幽灵缺陷存在许多不确定因素,要利用相对困难许多。
首先我们得搞清一个基本概念,现代处理器、现代操作系统下,程序的运行实例(称为进程 ---process)访问的是它自己的虚拟地址空间,而不是物理地址。一个进程的代码可以见到的只是自己的虚拟空间。所以,不存在一个进程直接访问或者改变另一个进程内存的指令。一个进程的指令只能是改变或者访问自己的虚拟空间。网上的很多文章好像在说一个进程的指令在直接访问另一个进程的空间,这是不可能的事情。
一个进程可能用到系统内核的功能,例如读写硬盘文件。核心代码及其内存空间是在一个进程的虚拟空间内,但是现代处理器有至少两个运行级别,用户级别与核心级别。当在用户级别的时候,试图访问核心空间是非法的。这样用户程序无法干扰核心的正常运行,也无法获取核心的信息。如果程序在用户级别时试图访问核心的数据,处理器会禁止操作。
显然,处理器正确的处理方式是,在用户级别时先判断试图访问的空间是否非法,如果非法,则拒绝执行。INTEL的熔断缺陷是,其处理器先进行猜想性访问,然后再去判断是否合法,如果不合法就消除影响。这个看似无辜的顺序颠倒虽然不影响最终计算结果,却产生了系统其他部分如缓存的变化,这种变化使攻击者能推导出本来被禁止读取的信息内容。这一缺陷是如此明显,针对INTEL熔断缺陷的攻击手段非常简单。如果是正确的先进行合法性检测,检测通过才执行指令,就不存在这个问题了。AMD的CPU 没有熔断缺陷,就是这个原因。INTEL是从个人桌面起家,是一个友善的环境。AMD的CPU鼻祖源自 DEC ALPHA,是一款企业服务处理器构架,安全意识方面可能要强不少。AMD处理器率先增加了NX功能,防止数据被执行。其最新的EPYC 32核处理器甚至能够将不同虚拟机(VM)内存用不同的密码加密。
熔断很好理解,就是INTEL处理器未能正确的事先判断内存访问的合法性。熔断代码是攻击者自己编写,与IBP无关。幽灵是基于 IBP ,它复杂多了,也难以操作。
幽灵是攻击者利用被攻击程序中的一段分叉代码,诱骗后者走上歧途。与熔断代码不同,幽灵需要很多现成的条件。通俗地说,幽灵攻击必须利用被攻击代码与处理器的双重缺陷,被攻击代码必须会根据某个条件产生习惯性操作,而且这个条件是在攻击者的控制下。假设攻击目标中有“如果A则B”这样的代码,攻击的方式是,攻击者先不断调用被攻击代码,每次给出条件A为TRUE,如果处理器根据之前的经验预测下一个操作条件不变而根据错误的预测进行猜想执行,攻击者就可能诱发数据的泄露。幽灵攻击难度相当大,因为它需要被攻击代码的配合与处理器能被惯性欺骗。幽灵论文作者找到了INTEL处理器 IBP 的简单规律,成功诱导某些目标代码误入歧途。相关幽灵攻击演示包括在INTEL机器上用 JAVASCRIPT 获取谷歌 CHROME 浏览器内存空间的其他信息。因为幽灵是利用被攻击代码的分叉执行,被攻击代码不配合就不行了,因此谷歌修改了 CHROME 浏览器代码,使其难以被利用。理论上,凡是具备间接分叉预测(IBP) 执行的处理器都可能存在幽灵缺陷,但AMD的指令分叉预测系统比较复杂(具备人工智能),研究人员目前尚未找到其规律与实际突破口。
怎么判断用户自己的计算机是否存在熔断与幽灵缺陷呢?微软提供了测试工具。下面是安装测试方法。
2. 将下载文件解压放在某个文件夹下 。
3. 用管理员权限打开 PowerShell.
3. 进入 上述文件夹,运行下列三条指令
Set-ExecutionPolicy RemoteSigned -Scope Currentuser
Import-Module .\SpeculationControl.psd1
Get-SpeculationControlSettings
在我的桌面机器上,结果如下 (截屏)
从上面可以看出,我的处理器 (RyZEN 7, 8核16线程)不存在 CVE-2017-5754 [rouge cache load] 漏洞,也就是没有熔断缺陷。如果提示信息是 “Hardware requires kernel VA shadowing: True”(硬件是否需要操作系统核心虚拟地址阴影化:是),那么很不幸,你的处理器有“熔断”缺陷。
至于幽灵缺陷,网络上的很多说法危言耸听,说是这一缺陷虽然难以被利用,但永远无法消除。事实并非如此,很多处理器具有暂时关闭间接分叉预测的功能。这一功能甚至连某些著名专家都不知道 -- David Kanter 就在网络讨论中表现出对这一功能的陌生 。以 AMD 的处理器为例,它们有两个设置,IBPB 与 IBRS,分别可以控制间接分叉预测缓存的清空与间接分叉预测限制。如果将 IBPB设为2,则 AMD处理器在进入核心高级模式前会将间接分叉预测记录清空,幽灵攻击就无法施展了。
对于INTEL处理器来说,必须将 IBRS设为1,也就是在核心模式下完全关闭间接分叉预测。这当然会产生一定的性能影响,但是影响应该不大 -- 一般系统调用都已经高度优化,关键部分甚至是手写的汇编代码。INTEL最大的问题是其独有的“熔断”缺陷 。
我在一部笔记本电脑上进行测试结果如下图。结果表明该笔记本存在“熔断”缺陷。运行 CPU-Z发现其CPU为 “INTEL Core i5 4210U”。
转载本文请联系原作者获取授权,同时请注明本文来自岳东晓科学网博客。 链接地址: https://blog.sciencenet.cn/blog-684007-1093420.html
上一篇:
INTEL处理器爆致命设计缺陷 下一篇:
中国文明与负数的概念