今天火狐因客户而成就,将来客户也因火狐而骄傲!
一 漏洞背景和影响
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等操作系统下,成功读取任意指定内存地址的内容,如下图所示: