熔断(Meltdown)与幽灵(Spectre)漏洞原理

您所在的位置:网站首页 meltdown伴奏 熔断(Meltdown)与幽灵(Spectre)漏洞原理

熔断(Meltdown)与幽灵(Spectre)漏洞原理

2024-07-08 07:18| 来源: 网络整理| 查看: 265

引言

2018年1月4日,两组CPU漏洞:Meltdown(熔断)与Spectre(幽灵)被公布,由于漏洞严重而且影响范围广泛,引起了全球的关注。利用Meltdown漏洞,低权限用户可以访问内核的内容,获取本地操作系统底层的信息;当用户通过浏览器访问了包含Spectre恶意利用程序的网站时,用户的如帐号,密码,邮箱等个人隐私信息可能会被泄漏;在云服务场景中,利用Spectre可以突破用户间的隔离,窃取其他用户的数据。Meltdown漏洞影响几乎所有的Intel CPU和部分ARM CPU,而Spectre则影响所有的Intel CPU和AMD CPU,以及主流的ARM CPU。从个人电脑、服务器、云计算机服务器到移动端的智能手机,都受到这两组硬件漏洞的影响,甚至可能造成挟持核武操作按钮等重大安全问题。

漏洞攻击原理

熔断与幽灵漏洞来源于为提高CPU性能而引入的新特性。现代CPU为提高处理性能,会采用乱序执行和预测执行机制。乱序执行使CPU不严格按照指令的顺序串行执行,而是根据相关性对指令进行分组并行执行,最后汇总处理各组指令执行的结果。预测执行使CPU根据当前掌握的信息预测某个条件判断的结果,然后选择对应的分支提前执行。乱序执行和预测执行在遇到异常或发现分支预测错误时,CPU会丢弃之前执行的结果,将CPU状态恢复到乱序执行或预测执行前的正确状态,然后选择正确的指令继续执行。这种异常处理机制保证了程序能够正确的执行,但在CPU恢复状态时并不会恢复CPU缓存的内容,而这两组漏洞正是利用了这一设计上的缺陷进行旁信道攻击。

1)旁信道攻击原理

 旁信道攻击(Side-Channel Attack)是一种基于对加密算法运行时的物理实现特征分析,主要利用加密电子设备在运行过程中的时间消耗、功率消耗或电磁辐射等旁信道信息对加密设备进行攻击,从而获取密钥等保密信息的攻击方式。

假设我们的密码是Wyt……,首先以a试探第一位密码,经过时间t1后返回错误,再次以b试探第一位密码,仍然经过时间t1后返回错误,以此类推,逐一试探字母,直到以W试探第一位密码,经过时间t2 (t2 > t1)后返回错误。在比对正确的第一位密码后,继续比对第二位密码错误返回,程序运行时间较长,以此推测出第一位密码是W,依此类推可破解所有的密码。此例中旁信道是验证密码所用时间,时间差暴露了信息正确与否。

2)乱序执行原理

乱序执行是一种应用在高性能微处理器中,利用指令周期以避免特定类型的延迟消耗的范式。处理器在一个由输入数据可用性所决定的顺序中执行指令,而不是由程序的原始数据所决定。在这种方式可以避免因获取下一条程序指令而引起处理器等待,从而处理下一条可以立即执行的指令。换言之,CPU不会严格的按照代码的顺序去依次执行程序,而是会乱序执行。

假设有3条语句:a. mov rax (rdx) | b. add rax $123 | c. mov rcx (rbx)

按顺序执行方式,CPU会依次执行这三条语句,先将内存中的数据放到rax中,在对rax中的数据做加法,再将rbx中的数据放到rcx中。可以发现,在c指令中需要加载的内存模块,在处理b指令时是闲置的,这是一种资源的浪费。而按乱序执行方式,CPU会在a执行结束后就将c中的数据加载到cache中,这样c语句的执行就会快很多。

需要注意,如果c语句访问的数据进程并不能修改,乱序执行仍会将其加载到cache中,在执行c语句时,操作系统进行权限的判断,发现进程并无权限,从而放弃乱序执行结果,重新回到初始状态依次执行,为漏洞攻击埋下伏笔。

3)分支预测原理

程序中的条件分支语句(如if - else和switch)会导致程序执行的不确定性。在程序运行时,计算机无法预先知道要执行哪一条路径,降低了程序运行效率。因此提出一种优化原理,即计算机系统可根据历史的分支执行信息,预测下一次分支的执行路径。计算机通过记录分支指令的历史行为,建立预测模型,并根据当前的上下文信息进行预测,这样计算机可提前决定执行哪一条路径上的指令,避免流水线的停顿,提高系统性能。

分支预测技术允许操作系统先将对应数据加载到cache中,若条件判断正确则执行主体语句,使主体语句可直接从cache而不是内存中读取数据。与乱序执行类似,但是如果分支预测失败,那么CPU的状态信息会被还原,但cache中数据保持不变,为漏洞攻击埋下伏笔。

4)熔断漏洞原理

熔断漏洞利用计算机系统乱序执行的方式,结合旁信道攻击原理推测出内核地址内容。上文提到过,乱序执行在发现进程并没有权限修改访问的数据时,会放弃乱序执行的结果,回到初始状态依次执行,此时cache中的信息没有被还原。之后我们通过旁信道攻击测试数据,发现对某个数据的访问要远远快于对其他数据的访问,则推知该数据存放在cache中,并可反推回其内存地址,以此推测出内核地址内容,攻击计算机。

5)幽灵漏洞原理

类似的,幽灵漏洞利用计算机系统预测执行的方式,结合旁信道攻击推测出内核地址内容。在执行分支判断前,CPU先将预测执行的数据加载到cache中,在发现分支预测错误时,会丢弃分支执行的结果,恢复CPU的状态,但不恢复Cache中存储内容。与熔断漏洞一样,幽灵漏洞也通过旁信道攻击来测试数据,当发现对某个数据的访问远远快于对其他数据的访问时,推知该数据在cache中,可反推其内存地址。

总结

总体来说,熔断与幽灵漏洞分别利用计算机系统乱序执行和分支预测的原理,在发生错误恢复状态时,cache中的内容并不会被恢复,因此可结合旁信道攻击原理推测出内核地址内容,从而实现对计算机系统的攻击。

参考文献

[1] 深入理解CPU的分支预测(Branch Prediction)模型 - 知乎 (zhihu.com)

[2] 计算机体系结构-分支预测 - 知乎 (zhihu.com)

[3] 影响全球的CPU漏洞深度解读:熔断与幽灵 - 知乎 (zhihu.com)

[4] Meltdown: Reading Kernel Memory from User Space



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3