处理器重大漏洞简析及通告

天融信.阿尔法实验室 李喆 李闪 胡进

一、事件描述

1.1 漏洞背景

谷歌公司的Project Zero 安全团队于2018年一月四日公布了英特尔和arm等处理器存在重大安全漏洞。影响甚广包括了受害处理器上的所有操作系统。此漏洞可以跨权限获取内存中的敏感数据。

涉及到的CVE编号为:

1: 边界检查绕过 (CVE-2017-5753)

2: 分支目标注入 (CVE-2017-5715)

3: 盗取缓存数据(CVE-2017-5754)

涉及到两种攻击方法Spectre (cve1,2)和 Meltdown(cve3)

 

1.2 漏洞影响

处理器:inter,arm,amd等

云平台影响甚广,都纷纷声明了响应此事件:

百度云,阿里云,微软Azure,亚马逊等

大多数的操作系统也受此影响包括windows,mac,Linux ,Android等

 

二、漏洞复现

2.1 漏洞环境

编译poc环境

microsoft visual studio 2010

因特尔处理器环境:

inter处理器i7

漏洞验证环境

windows 10 64位

 

2.2 漏洞POC测试

在编译测试poc过程中出现了一些调试和执行问题,经过了几处修改成功复现。

第一处

原poc

i-1

修改过的poc

i-2

第二处

原poc

i-3

修改过的poc

i-4

 

第三处需要先把malicious_x这行注释掉因为有两个,上面那个malicious_x获取的是secret字符串的地址,下面这个malicious_x是获取ntdll.dll的导出函数NtQuerySystemInformation这个地址

i-5

2.3 漏洞成功效果

我们测试下修改过的写进内存中的字符串,同时修改下获取的大小为24字节

i-6

i-7

最终成功验证的截图

i-8

三、漏洞分析

3.1 漏洞原理

3.1.1 概念介绍

这次漏洞主要涉及到三个技术概念乱序执行,分支预测,推测执行。下面会简单介绍下三个概念

乱序执行:

乱序执行(out-of-order execution)是指CPU采用了允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术。在按序执行中,一旦遇到指令依赖的情况,流水线就会停滞,如果采用乱序执行,就可以跳到下一个非依赖指令并发布它。这样,执行单元就可以总是处于工作状态,把时间浪费减到最少。

分枝预测(branch prediction)和推测执行(speculation execution)是CPU动态执行技术中的主要内容,动态执行是目前CPU主要采用的先进技术之一。采用分枝预测和动态执行的主要目的是为了提高CPU的运算速度。推测执行是依托于分枝预测基础上的,在分枝预测程序是否分枝后所进行的处理也就是推测执行。

这就好象在外科手术中,一个熟练的护士可以根据手术进展情况来判断医生的需要(象分枝预测)提前将手术器械拿在手上(象推测执行)然后按医生要求递给他,这样可以避免等医生说出要什么,再由护士拿起递给他(医生)的等待时间。当然如果护士判断错误,也必须要放下预先拿的器械再重新拿医生需要的递过去。尽管如此,只要护士经验丰富,判断准确率高,那么当然就可以提高手术进行速度。

推测执行时的分枝预测准确性至关重要,通过Intel公司技术人员的努力,现在的Pentium和Pentium Ⅱ系列CPU的分枝预测正确率分别达到了80%和90%,这样虽然可能会有20%和10%分枝预测错误但平均以后的结果仍然可以提高CPU的运算速度。

 

3.1.2 漏洞简析:

Meltdown 是通过攻击乱序执行来泄露目标物理内存,它主要和Spectre有两点区别。第一点是Meltdown没有使用分支预测的方式获取推测执行。它是依赖于观察一个指令异常,下一条被乱序执行的指令会被中止。第二点,Meltdown是针对Inter处理器的提权漏洞不同于推测执行可以绕过内存的保护,总结下就是meltdown是从用户空间进入到内核内存,这个进入导致了一个中止,但是在中止之前,就可以通过一个缓存通道获取到需要泄露的内存内容。不同与Meltdown,Spectre主要是通过使用分支预测的验证缺陷和乱序执行功能,再通过边信道攻击获取cpu缓存中的数据。边信道攻击是利用cpu缓存和内存的读取时间差异猜测cpu缓存中的数据。

 

四、修复建议

 

4.1 影响版本

微软方面:Windows 10今天连下四道补丁,分别是KB4056892、KB4056891、KB4056890和KB4056888,分别面向秋季创意者更新(Version 1709)、创意者更新用户(Version 1703)、年度更新(Version 1607)、秋季更新(Version 1511),升级后版本号迭代为Build 16299.192、15063.850、14393.2007和10586.1356。

 

4.2 补丁地址

Linux:http://appleinsider.com/articles/18/01/03/apple-has-already-partially-implemented-fix-in-macos-for-kpti-intel-cpu-security-flaw

 

Android:https://source.android.com/security/bulletin/2018-01-01

 

Microsoft:

https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV180002

https://support.microsoft.com/en-us/help/4073119/windows-client-guidance-for-it-pros-to-protect-against-speculative-exe

 

Amazon:https://aws.amazon.com/de/security/security-bulletins/AWS-2018-013/

 

ARM:https://developer.arm.com/support/security-update

 

Google:https://googleprojectzero.blogspot.co.at/2018/01/reading-privileged-memory-with-side.html

 

Intel:https://newsroom.intel.com/news/intel-responds-to-security-research-findings/

 

Red Hat:https://access.redhat.com/security/vulnerabilities/speculativeexecution

 

Nvidia:https://forums.geforce.com/default/topic/1033210/nvidias-response-to-speculative-side-channels-cve-2017-5753-cve-2017-5715-and-cve-2017-5754/

 

Xen:https://xenbits.xen.org/xsa/advisory-254.html

Written by lizhe