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

不认真任的猜想

Meltdown,忘怀从哪里看到的一个说法,虽然AMD也有非常抑制技巧,然则不受到该破绽影响的缘故原由是核心的履行单元有限,小我感觉应该是AMD的Store和load履行单元为同一个以是免疫,有待后续查证,附带上几个Intel和AMD的架构以供参考:

Intel Haswell微架构:

Intel sandy bridge微架构:

AMD17th 架构

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/

intelsandy bridge微架构详解:

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

intelsandy 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开拓手册:

Developer Guides, Manuals & ISA Documents

已知的CPU破绽汇总:

https://wiki.osdev.org/CPU_Bugs

本CSZQ近来对CPU相关破绽感兴趣,于是深入钻研了下CVE-2018-3639也便是Spectre4(鬼魂4),有纰谬的地方迎接斧正

简介

根据微软的一篇博客,已经发明的可用于忖度履行侧信道进击的分支原语(英文原词在这里,speculation primitives,不太好翻译,就直译了)共有4种,分手是前提分支猜测掉误(conditional branch misprediction)、间接分支猜测掉误(indirect branch misprediction)、非常通报或延期(exception delivery or deferral)以及本日的主角忖度存储绕过(Speculative Store Bypass)

具体阐发

直接上代码的最紧张部分,此代码颠末小我添加了注释并改动过一些BUG,可以在文章着末下载源码对比查看每个变量的含义:

最紧张的代码在115行和122行,在C说话层面看不出任何问题,请查看汇编代码:

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

这两行代码呈现问题的缘故原由是履行当前代码的核心觉得两条指令仅存在输出相关,是以可以应用寄存看重命名的要领并行履行,在《谋略机体系布局:量化钻研措施(第五版)》中可以找到相关解释:

并行履行必然会出问题吗,那不必然,还必要让履行单元先履行testfun+138指令再履行test+135指令,这样才能包管testfun+138会差错的影响cache示例代码能够杀青这个前提的缘故原由是test+135指令与testfun+128指令相关,是以必要等待前面代码履行完毕,而test+138则没有这个挂念

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

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

以是可以判断上述两条宏不雅指令分手被翻译为单条存储相关微指令和单条加载相关微指令,结合上述寄存看重命名技巧,是以可以判断在此微架构中应用port2和port4来并行履行两条指令,本相大年夜白

虽然在test+135存储指令履行完毕后,test+138指令因为差错会回退,然则已经受到影响的cache不会回退,以是可以结合 rdtscp 指令对 cache line 进行光阴测试察看是否cache hit即可判断出到数据是若干

还记得鬼魂1么,它主如果因为差错的分支猜测导致的 cache line 缓存了差错的数据,而鬼魂4,主如果因为差错的忖度履行(暗自忖度圣意觉得两条指令无关)造成的

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包