首页 » Network_security » Network_A_D » 正文

一文了解CPU芯片级漏洞-“崩溃”与“幽灵”

0x00 概述

1月初,网上爆出了Intel cpu芯片的三个漏洞,合称崩溃(cve-2017-5754)和幽灵(cve-2017-5715与cve-2017-5753),利用这两个漏洞可以从普通程序入口获取受保护的内存内容,这两个漏洞严重影响Intel芯片,而对AMD和ARM的影响相对较小(能顶住崩溃,顶不住幽灵)。

(图片来源:http://www.freebuf.com/articles/terminal/160424.html

0x01 影响范围

cpu芯片: Intel,AMD,ARM

操作系统:Windows,Linux,macOS,Android

云服务商:Amazon,Google,Microsoft

 

0x02 危害

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

泄露出本地操作系统底层运作信息,秘钥信息等;

通过获取泄露的信息,可以绕过内核(Kernel), 虚拟机超级管理器(HyperVisor)的隔离防护;

云服务中,可以泄露到其它租户隐私信息;

通过浏览器泄露受害者的帐号,密码,内容,邮箱,cookie等用户隐私信息;

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

—引用自http://www.freebuf.com/vuls/159341.html

 

0x03 原理

乱序执行(OoO):处理器优化技巧。早期处理器是顺序执行,现代处理器在指令要等待资源的时候会利用这些时间去执行后续指令。

 

指令出现问题(如用户级权限访问内核地址)会出现异常,但是内存已经加载到cpu缓存,而且不检测地址合法性(在cpu缓存到cpu寄存器才检测地址合法性),且安全检查在指令退休时才进行。

 

边信道攻击猜测cpu缓存。

 

攻击者可以影响推测,如下:
边界检查绕过(5753)、分支目标注入(5715)、流氓数据加载(5754)。

 

崩溃幽灵是缓存侧信道攻击/边信道攻击/旁路攻击。

侧信道攻击/边信道攻击/旁路攻击:顾名思义,就是从侧面获取信息,如噪声、辐射、指示灯闪烁等。

页面共享:内存复用,不同进程可以共享主内存。

COW(copy-on-write): 数据延后写入内存。

Flush+reload

攻击思路:

多级缓存方案中,如果擦出L3的数据,则其他各级缓存数据都会擦除。

攻击步骤:
监控某特定Lx-擦除数据-等待-重载Lx

若载入时间久,则说明从主内存载入,同时说明目标未载入Lx;若时间短,则说明目标载入过Lx。

 

分支预测预测后面的分支,事先准备数据(内存加载到cpu),提取相应的指令代码执行,正确就提升了效率,错误就丢弃结果,重置cpu状态。

 

0x04 崩溃(Meltdown)

崩溃漏洞可以让低权限用户级应用程序访问系统内存,造成数据泄漏,破坏的是用户和操作系统的隔离,利用了乱序执行和安全检查的空隙,要求乱序执行的指令必须在安全检查之前执行完,还要抑制异常。

所以,本人认为meltdown攻击分为两部分

  • 乱序执行把需要获取的数据(如密钥)放入缓存。
  • 边信道攻击(时间长短)从缓存获取数据。

KAISER/KPTI可以修复meltdown,但是貌似影响性能。

 

0x05 幽灵(Spectre)

幽灵漏洞利用推测执行,破坏了不同应用程序间的隔离,可以获取私有数据。

攻击方式和崩溃差不多,但幽灵的重点是分支预测,后面的指令先预测执行,数据放入了缓存,再测量请求载入时间,通过时间长短判断数据。

幽灵比崩溃攻击难度更大,环境要求更高。

 

0x06 崩溃幽灵重现

环境:Intel i3 + ubuntu16.04

meltdown:
exp:
https://github.com/paboldin/meltdown-exploit

先make再./run.sh

spectre:
https://github.com/Eugnis/spectre-attack

先make再./spectre.out

检测崩溃幽灵:

工具:https://github.com/speed47/spectre-meltdown-checker

 

0x07 修复方案

由于这是一个严重的硬件芯片漏洞,所以需要cpu(固件修复)、操作系统、应用程序厂商的协作共同修复。并且Intel和Microsoft修复补丁可能会降低设备性能,还可能出现不可预料的情况。

这两漏洞修复较难,请关注各大产商的补丁和安全公告。

根本的修复:换cpu!

 

0x08 其他

1.崩溃幽灵可以通过web(如javascript)进行远程攻击从而窃取数据,所以要及时更新浏览器。

2.Windows的系统更新(系统级修复)可能与一些安全产品不兼容,可以尝试添加注册表项进行更新或者等待安全产品的更新。

Key=”HKEY_LOCAL_MACHINE” Subkey=”SOFTWARE\Microsoft\Windows\CurrentVersion\QualityCompat” Value=”cadca5fe-87d3-4b96-b7fb-a231484277cc” Type=”REG_DWORD”

3.各大产商似乎在约半年前即2017年7月就已经得到这两个漏洞的消息,并签署了保密协议

4.Google的幽灵攻击修复方案Retpoline据说比其他修复方案可以减少性能下降。

 

0x09 结语

这可以说是非常具有纪念意义的两个漏洞了,危害之大,波及之广,影响之深都难得一见,本人对于系统安全和硬件安全都不甚了解,所以暂时就理解到这浅显的一层,日后有时间再深入理解(攻击操作,代码编写)。

 

0x0A 参考资料

https://meltdownattack.com

https://cyber.wtf/2017/07/28/negative-result-reading-kernel-memory-from-user-mode/

https://nakedsecurity.sophos.com/2018/01/03/fckwit-aka-kaiser-aka-kpti-intel-cpu-flaw-needs-low-level-os-patches/

https://spectreattack.com/spectre.pdf

https://meltdownattack.com/meltdown.pdf

www.freebuf.com/articles/system/159811.html

www.freebuf.com/articles/terminal/160424.html

www.freebuf.com/vuls/159269.html

https://zhuanlan.zhihu.com/p/32654221

https://www.t00ls.net/articles-43664.html

 

Comment