码迷,mamicode.com
首页 > 其他好文 > 详细

intel漏洞详细解析

时间:2018-03-08 18:36:19      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:例子   href   预测   div   int   理论   出现   执行顺序   程序   

1. CVE-2017-5754(Meltdown):恶意数据缓存加载
即采用特定指令,探测内核访问不到的内存内容。
通过本地运行特定程序的方式读取系统运行的CPU缓存,获得当前运行系统缓存的所有信息

比喻:https://baijiahao.baidu.com/s?id=1588835621748074141&wfr=spider&for=pc
简化的例子:https://baijiahao.baidu.com/s?id=1589161700913499450&wfr=spider&for=pc

1)乱序执行:
代码:
a = 1; b = 2; c = 3; d = a + b + c;
CPU:
a = 1
b = 2 -> d = a + b + c;
c = 3
乱序执行出现bug -> oops -> 恢复现场 -> cache中的数据仍存在 -> 通过cache的访问延时来推测

2)Meltdown –限制
只能访问同一地址空间的内容,因此被攻击的数据必须与攻击者位于同一地址空间。
传统的Linux进程与内核采用同一页表,成为用户程序获取内核数据的基础。
理论上,用户程序可以获取位于同一地址空间的任何数据(比如没有r权限的数据)。
另外,攻击手段依赖CPU的设计失误,也就是乱序执行时不检查访问权限,因此只对intel的CPU有效。

3)Meltdown –防御
内核与用户态页表隔离
KASLR: kernel address isolation to have side-channels efficiently removed
KPTI: Kernel Page Table Isolation

4)性能问题
由于引进了PCID技术,性能影响较小
PCID:
进程切换不需要刷新TLB(ASID in ARM)
12bits: 4096项
多核问题

 

2. CVE-2017-5753(Spectre1):分支目标注入
即利用了间接分支预测器,有意让间接分支目标出现错误的(攻击者指定的)预测。

 

3. CVE-2017-5715(Spectre2):边界检查旁路
即利用了条件分支指令之后的预测执行,有意让条件分支出现错误的(攻击者指定的)预测。

if (condition){
codea();
}
codeb();

CPU执行顺序(预测):两个分支同时执行
if (condition) > codea() > codeb() > ...
                    > 回退


Meltdown vs Spectre
Meltdown: 攻击者在自己的代码中访问目标数据,依赖CPU的乱序执行不检查权限Bug
Spectre: 攻击者创造条件,让攻击者之外的代码去访问目标数据

 

intel漏洞详细解析

标签:例子   href   预测   div   int   理论   出现   执行顺序   程序   

原文地址:https://www.cnblogs.com/stellar/p/8530094.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!