CVE-2018-3639 | 最新侧信道攻击详细分析

栏目: 编程工具 · 发布时间: 6年前

内容简介:本CSZQ最近对CPU相关漏洞感兴趣,于是深入研究了下CVE-2018-3639也就是Spectre4(幽灵4),有不对的地方欢迎指正。根据微软的一篇博客,已经发现的可用于揣测执行侧信道攻击的分支原语(英文原词在这里,speculation primitives,不太好翻译,就直译了)共有4种,分别是条件分支预测失误(conditional branch misprediction)、间接分支预测失误(indirect branch misprediction)、异常传递或延期(exception del

CVE-2018-3639 | 最新侧信道攻击详细分析

本CSZQ最近对CPU相关漏洞感兴趣,于是深入研究了下CVE-2018-3639也就是Spectre4(幽灵4),有不对的地方欢迎指正。

简介

根据微软的一篇博客,已经发现的可用于揣测执行侧信道攻击的分支原语(英文原词在这里,speculation primitives,不太好翻译,就直译了)共有4种,分别是条件分支预测失误(conditional branch misprediction)、间接分支预测失误(indirect branch misprediction)、异常传递或延期(exception delivery or deferral)以及今天的主角揣测存储绕过(Speculative Store Bypass)。

详细分析

直接上代码的最重要部分,此代码经过个人添加了注释并修改过一些BUG,可以在文章最后下载源码对照查看每个变量的含义:

CVE-2018-3639 | 最新侧信道攻击详细分析

最重要的代码在115行和122行,在 C语言 层面看不出任何问题,请查看汇编代码:

CVE-2018-3639 | 最新侧信道攻击详细分析

汇编代码中红色部分为115行代码,绿色部分为122行代码,紫色部分即为出现问题的关键代码。

这两行代码出现问题的原因是执行当前代码的核心认为两条指令仅存在输出相关,因此可以使用寄存器重命名的方式并行执行,在《计算机体系结构:量化研究方法(第五版)》中可以找到相关解释:

CVE-2018-3639 | 最新侧信道攻击详细分析

并行执行一定会出问题吗,那不一定,还需要让执行单元先执行testfun+138指令再执行test+135指令,这样才能保证testfun+138会错误的影响cache。示例代码能够达成这个条件的原因是test+135指令与testfun+128指令相关,因此需要等待前面代码执行完毕,而test+138则没有这个顾虑。

继续深入到核心内部的执行单元,查看其到底是如何完成并行执行的,下图是intel的sandy bridge微架构执行单元:

CVE-2018-3639 | 最新侧信道攻击详细分析

查询AMD的17代处理器微架构文档,查询到如下信息:

CVE-2018-3639 | 最新侧信道攻击详细分析

CVE-2018-3639 | 最新侧信道攻击详细分析

所以可以判断上述两条宏观指令分别被翻译为单条存储相关微指令和单条加载相关微指令,结合上述寄存器重命名技术,因此可以判断在此微架构中使用port2和port4来并行执行两条指令,真相大白。

虽然在test+135存储指令执行完毕后,test+138指令由于错误会回退,但是已经受到影响的cache不会回退,所以可以结合 rdtscp 指令对 cache line 进行时间测试观察是否cache hit即可判断出到数据是多少。

还记得幽灵1么,它主要是由于错误的分支预测导致的 cache line 缓存了错误的数据,而幽灵4,主要是由于错误的揣测执行(暗自揣测圣意认为两条指令无关)造成的。

不负责任的猜想

Meltdown,忘记从哪里看到的一个说法,虽然AMD也有异常抑制技术,但是不受到该漏洞影响的原因是核心的执行单元有限,个人觉得应该是AMD的Store和load执行单元为同一个所以免疫,有待后续查证,附带上几个Intel和AMD的架构以供参考:

Intel Haswell微架构:

CVE-2018-3639 | 最新侧信道攻击详细分析

Intel sandy bridge微架构:

CVE-2018-3639 | 最新侧信道攻击详细分析

AMD  17th 架构

CVE-2018-3639 | 最新侧信道攻击详细分析

DEMO程序编译命令:

gcc -o Spec4 Speculative4.c -Wall -DHIT_THRESHOLD=50 -DNO_INTERRUPTS -ggdb

参考文献

漏洞PoC地址:

https://www.exploit-db.com/exploits/44695/

微软针对CVE-2018-3639的解释:

https://blogs.technet.microsoft.com/srd/2018/05/21/analysis-and-mitigation-of-speculative-store-bypass-cve-2018-3639/

intel  sandy bridge微架构详解:

https://en.wikichip.org/wiki/intel/microarchitectures/sandy_bridge_(client)#MSROM_.26_Stack_Engine

intel  sandy bridge微架构详解(中文):

http://www.mouseos.com/arch/intel_microarchitecture.html

AMD 17代处理器优化说明:

https://developer.amd.com/wordpress/media/2013/12/55723_3_00.ZIP

架构相关的一本书:

《计算机体系结构:量化研究方法(第五版)》

Intel官方手册:

64-ia-32-architectures-optimization-manual.pdf

其他额外资料

AMD开发手册:

https://developer.amd.com/resources/developer-guides-manuals/

已知的CPU漏洞汇总:

https://wiki.osdev.org/CPU_Bugs

以上文章为 CSZQ 原创,转载请注明出处。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

正则表达式必知必会(修订版)

正则表达式必知必会(修订版)

福达 (Ben Forta) / 杨涛 / 人民邮电出版社 / 2015-1-1 / 29.00元

《正则表达式必知必会》从简单的文本匹配开始,循序渐进地介绍了很多复杂内容,其中包括回溯引用、条件性求值和前后查找,等等。每章都为读者准备了许多简明又实用的示例,有助于全面、系统、快速掌握正则表达式,并运用它们去解决实际问题。正则表达式是一种威力无比强大的武器,几乎在所有的程序设计语言里和计算机平台上都可以用它来完成各种复杂的文本处理工作。而且书中的内容在保持语言和平台中立的同时,还兼顾了各种平台之......一起来看看 《正则表达式必知必会(修订版)》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器