新闻动态LATEST NEWS

今天火狐因客户而成就,将来客户也因火狐而骄傲!

您当前位置:首页 > 新闻动态 > 公司新闻
影响全球的CPU漏洞深度解读:熔断去与幽灵2018-01-06
来源:成都火狐狸科技

一 漏洞背景和影响

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  mov al, byte [rcx]

2  shl rax, 0xc

3  mov 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 = array2[array1[x] * 256];

// do something using Y that is

// observable 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等操作系统下,成功读取任意指定内存地址的内容,如下图所示:

提醒:如果文章内容有侵权或涉及您的隐私,请来信告知,我们在确认后会纠正或者删除。
© 2007-2018 www.cdfirefox.com All Rights Reserved. 蜀ICP备10202512号-1
免责声明 - 企业邮箱 - | | 服务热线:028-86289202