主题 : 影响全球的CPU漏洞深度解读:熔断与幽灵
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605068
威望: 529823 点
无痕币: 39 WHB
贡献值: 0 点
在线时间: 62771(时)
注册时间: 2008-12-25
最后登录: 2024-05-28

0 影响全球的CPU漏洞深度解读:熔断与幽灵

本文出自公众号“腾讯安全联合实验室”
一漏洞背景和影响

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

这两组漏洞来源于芯片厂商为了提高CPU性能而引入的新特性。现代CPU为了提高处理性能,会采用乱序执行(Out-of-Order Execution)和预测执行(SpeculativePrediction)。乱序执行是指CPU并不是严格按照指令的顺序串行执行,而是根据相关性对指令进行分组并行执行,最后汇总处理各组指令执行的结果。预测执行是CPU根据当前掌握的信息预测某个条件判断的结果,然后选择对应的分支提前执行。乱序执行和预测执行在遇到异常或发现分支预测错误时,CPU会丢弃之前执行的结果,将CPU的状态恢复到乱序执行或预测执行前的正确状态,然后选择对应正确的指令继续执行。这种异常处理机制保证了程序能够正确的执行,但是问题在于,CPU恢复状态时并不会恢复CPU缓存的内容,而这两组漏洞正是利用了这一设计上的缺陷进行测信道攻击。
二漏洞原理解析
1、Meltdown漏洞原理
乱序执行可以简单的分为三个阶段,如下图所示:

每个阶段执行的操作如下:
1)获取指令,解码后存放到执行缓冲区Reservations Stations
2)乱序执行指令,结果保存在一个结果序列中
3)退休期Retired Circle,重新排列结果序列及安全检查(如地址访问的权限检查),提交结果到寄存器
结合Meltdown利用的代码片段来看:
; rcx = kernel address
; rbx = probe array
1洀漀瘀 al, byte [rcx]
2猀栀氀 rax, 0xc
3洀漀瘀 rbx, qword [rbx + rax]
Meltdown漏洞的利用过程有4个步骤:
1)指令获取解码
2)焀轎杞行3条指令,指令2和指令3要等指令1中的读取内存地址的内容完成后才开始执行,指令3会将要访问的rbx数组元素所在的页加载到CPU Cache中。
3)对2)的结果进行重新排列,对1-3条指令进行安全检测,发现访问违例,会丢弃当前执行的所有结果,恢复CPU状态到乱序执行之前的状态,但是并不会恢复CPU Cache的状态
4)通过缓存测信道攻击,可以知道哪一个数组元素被访问过,也即对应的内存页存放在CPU Cache中,从而推测出内核地址的内容
2、Spectre漏洞原理
与Meltdown类似,Spectre的原理是,当CPU发现分支预测错误时会丢弃分支执行的结果,恢复CPU的状态,但是不会恢复CPU Cache的状态,利用这一点可以突破进程间的访问限制(如浏览器沙箱)获取其他进程的数据。
Spectre的利用代码片段:
if (x< array1_size) {
y =愀爀爀愀礀2[array1[x] * 256];
// do猀漀洀攀琀栀椀渀最 using Y that is
//漀戀猀攀爀瘀愀戀氀攀 when speculatively executed
}
具体攻击过程可以分为三个阶段:
1)训练CPU的分支预测单元使其在运行利用代码时会进行特定的预测执行
2)预测执行使得CPU将要访问的地址的内容读取到CPU Cache中
3)通过缓存测信道攻击,可以知道哪一个数组元素被访问过,也即对应的内存页存放在CPU Cache中,从而推测出地址的内容。
三漏洞验证
目前开源社区github已经放出来了漏洞的验证代码(PoC),如下:
https://github.com/Eugnis/spectre-attack
https://github.com/feruxmax/meltdown
https://github.com/gkaindl/meltdown-poc
https://github.com/turbo/KPTI-PoC-Collection
经过我们和其他安全研究人员实际验证,漏洞可在Windows、Linux、Mac-OS等操作系统下,成功读取任意指定内存地址的内容,如下图所示:
Windows:

Ubuntu 16.04:

此外,有安全研究人员验证了可以通过漏洞获取到用户正在输入的密码,不过暂未放出相关代码。如下图所示:

级别: 十方秋水

UID: 88
精华: 0
发帖: 130120
威望: 221902 点
无痕币: 107420 WHB
贡献值: 0 点
在线时间: 51973(时)
注册时间: 2008-03-18
最后登录: 2024-04-25

谢谢分享了。
Total 0.055236(s) query 5, Time now is:05-28 02:06, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛