zoukankan      html  css  js  c++  java
  • intel漏洞详细解析

    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() > ...
                        > 回退

    解决:

    让CPU支持IBRS、STIBP、IBPB操作,新处理器直接支持,老处理器需要更新微码。
    进程切换等位置使用上述指令,控制分支预测操作。


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

    侧信道:

    CPU在执行代码时,除了本身功能之外的、可以被检测到的影响,都属于侧信道。
    如热量、功率、CPU压力、cache等数据,以及CPU内部的BTB和分支历史记录

  • 相关阅读:
    cf1043C. Smallest Word(贪心)
    洛谷P1081 开车旅行(倍增)
    NOI.AC NOIP2018 全国热身赛 第四场
    cf444E. DZY Loves Planting(并查集)
    NOI.AC NOIP模拟赛R3解题报告
    中国第一计算机编程高手横瓜的天才求职之路异常艰辛,天妒奇才呀
    C语言全局未初始化数据段分析
    js问题总结
    ios7新增基础类库以及OC新特性
    jquery.post用法
  • 原文地址:https://www.cnblogs.com/stellar/p/8530094.html
Copyright © 2011-2022 走看看