CPU攻击简单易懂的解释和修复方法说明

本次攻击完全基于CPU 的预测执行(speculative execution ,也称投机执行)机制,有三个漏洞,他们互相配合。所谓预测执行就是在代码拥有分支指令时,在正确的信号未到达之前,处理器能够提前做出预测,预先进入分支流程进行计算,分支预测是实现这种机制的一种方式。
第一种漏洞叫做Bounds Check Bypass ,也称Side-Channel 攻击(边信道攻击)。这种攻击主要是通过一系列“旁敲侧听”的方式,从处理器的外部,获取处理器的内部信息和下一步行为。现实中,比如我们可以通过冒着水蒸气得知水杯里的是热水(而不需要接触水本事),这也是一种原理上的边信道攻击。
第二种漏洞叫做Branch Target Injection ,其主要利用的是分支预测运算器中的间接分支命令机制上的漏洞。直接分支和间接分支的区别不讨论,这种攻击在于利用这个漏洞,执行了特意准备的恶意攻击代码。
第三种漏洞叫做Rogue Data Cache Load ,其主要方法是通过执行特定的“预测”操作,固化L1 Cache 中的内容,从而获取到执行的结果(例如第二种漏洞中的恶意代码的返回结果)
使用第一种和第二种漏洞进行攻击的方法叫做Spectre ,使用第三种漏洞进行攻击的方法叫做Meltdown 。其中,第一种和第三种漏洞可以通过软件的更新即可修复,而第二种漏洞必须通过CPU 的微码(Microcode )更新来修复。
对于第一种攻击方法,Intel 的修复方式是插入了一个LFENCE 指令。该命令的作用是当有新的指令来临时,强制让旧的指令按照顺序执行。这种使得外部通过旁路推断的方式很难知道处理器内部的运行状态。当然,因为命令被强制序列化(至少一部分),会一定程度的降低预测执行的性能。
对于第二种攻击方法,有两种方式修正。第一种方式就是一定频率的强制刷新间接分支预测使用的寄存器和缓存,Intel 所说的过去5 年所有CPU 修复完成了,就是使用的这种方法。
而另外一种修正方式,目前也在实装中,就是引入全新的三种机制来解决这个问题。一种叫做间接分支限制性预测(IBRS ),一种叫做单线程间接分支预测器(STIBP ),最后一种叫做Indirect Branch Predictor Barrier(IBPB) ,间接分支预测器屏障,这个用于确保初期代码的行为不再被控制。这三种全新的机制对于目前的CPU 可以通过更新微码加入到CPU 中,同时也可以抑制未来的CPU 因为投机执行漏洞导致的性能损失。
Meltdown 攻击的修正主要是在操作系统上,只要确保用户模式在执行用户代码的时候,一些权限page 不被误映射到用户模式可以访问的地方就可以了。OS 只要支持用户page supervisor page 的双pagetable 机制就可以了。当然,支持这种机制后,因为需要频繁刷新TLB Translation Lookaside Buffer ),系统性能有一定程度拖慢,但Intel 承诺未来CPU 将解决这个问题。
至于具体对性能的影响,微软的Myerson 认为第一和第三中漏洞基本上不痛不痒,第二种有一些,而且既要更新系统,又要更新微码。
对于AMD 来说,第一种攻击同样适用,第二和第三种攻击因为构架不一样,基本免疫。当然,微软为了修复intel bug ,可以稍不注意对AMD 负优化了一下,只需要敬候接下来的补丁解决问题。

猜你喜欢

转载自blog.csdn.net/jehuyang/article/details/80059771