Intel CPU漏洞分析报告

预备知识

存储分级

由于计算机存储分级的特性(第一级:寄存器,第二级:高速缓存,第三级:内存,第四级:磁盘),每一级之间的访问速度差距高达数量级。所以处理器会将用到的数据和指令加载进高速缓存(现代CPU分指令高速缓存与数据高速缓存),以提高计算机的执行速度。其加载数据或指令进高速缓存的原则是(空间局部性、时间局部性):

1. 时间局部性:如果一个数据被访问,那么在近期它很可能还会被再次访问。
2. 空间局部性: 与当前访问的数据紧挨着的数据,近期将会被访问
分支预测

分支预测分为动态分支预测与静态分支预测。其效果就是预测跳转地址,让CPU去执行该地址的指令,不用让CPU等待判断结果,进而提高程序速度。若预测错误,CPU也会保证预测执行不会造成影响.

静态分支预测:每次假设都跳转或都不跳转
动态分支预测:会根据以往的跳转结果来判断本次是否跳转
乱序执行

是指CPU不会严格按照指令的排列顺序执行(无依赖性),但是会保证其执行结果与按照顺序执行的结果一样。如

mov eax,1
mov ebx,1

其之间没有依赖关系,采用乱序执行可以提高执行速度。

漏洞证明

漏洞利用方法:首先我们创建一个数组(我创建的数组一项大小是一个页面,一共256项),然后清空该数组的缓存,通过利用不应该执行成功的指令(或永远不会执行的指令),获得对应地址的值,利用该值来访问我们数组中的某一项,将该项加入进缓存。然后通过测试我们创建的数组中每一项的访问时间,且由于被加载进缓存的访问速度最小,则我们可以获得该项的下标。然后得出对应地址的值。

可以看出漏洞利用的关键就是:如何让 “不应该执行成功的指令” 或 “永远不会执行的指令” 执行

“不应该执行成功的指令” 执行 -- 利用乱序执行
add rax,0x100
add rax,0x100
add rax,0x100
add rax,0x100
add rax,0x100
add rax,0x100
add rax,0x100
add rax,0x100
add rax,0x100
add rax,0x100
mov al,byte [kernelAddress]
shl rax,0xc
mov rbx,dword [target_arr + rax]

以上就是实现漏洞利用的最基本代码。1.获取内核数据,2.利用该值将用户空间创建的数组对应项加载进高速缓存,进而获得内核空间的数据。在我们分析看来,2步骤根本就不会执行,因为在第一步,用户进程试图访问内核空间,造成程序异常,从而退出程序。但是由于乱序执行的特性且为了高效性,权限检查会放在指令执行的最后,其会将我们的数组项加载进缓存,进而获得内核数据.

“永远不会执行的指令” 执行 -- 利用分支预测
void exposeValue(void *addr){
    int len = (unsigned long)addr;
    int idx = 0;
    int value = 0;

    clflushMyArr();

    if( likely( len< pMyArr->len) ){  //永远为假
        //never arrive
        idx = *((char*)addr);
        value = target_buf[idx*PAGE_SIZE];
    }
}

首先我们将pMyArr->len从缓存中清空,则在判断结果的时候需要一定的时间,这时分支预测判断为真,就会将我们的数组对应项加载进高速缓存。

这段代码只考虑的静态分支预测,没有考虑动态分支预测,所以在实际中我们为了让预测结果为真需要对CPU进行训练。

两种方法的比较

由于利用分支预测,需要对CPU进行训练,所以其运行速度相比利用乱序执行慢。
但是乱序执行中需要对非法内存访问进行特殊处理,实现相对利用分支预测麻烦。

安全建议

及时更新系统与浏览器,安装防护软件

参考质料

  1. https://cyber.wtf/2017/07/28/negative-result-reading-kernel-memory-from-user-mode/
  2. https://googleprojectzero.blogspot.com.es/2018/01/reading-privileged-memory-with-side.html
  3. http://0xffffff.org/2015/12/06/37-How-to-benchmark-code-execution-times/
  4. https://weibo.com/ttarticle/p/show?id=2309404192549521743410
  5. https://weibo.com/ttarticle/p/show?id=2309404192925885035405
  6. https://software.intel.com/en-us/articles/branch-and-loop-reorganization-to-prevent-mispredicts
  7. 《计算机组成:结构化方法》(塔嫩鲍姆 (Andrew S. Tanenbaum) )

Intel CPU 漏洞分析的更多相关文章

  1. [CNBETA]Intel CPU底层漏洞事件完全详解:全球手机/电脑无一幸免[转帖]

    http://www.cnbeta.com/articles/tech/685897.htm 由Intel CPU漏洞问题衍生出来的安全事件已经波及全球几乎所有的手机.电脑.云计算产品,ARM确认 C ...

  2. CPU漏洞补丁KB4056892 卸载及忽略办法

    2018.1.4微软发布了针对intel CPU漏洞的补丁 KB4056892 性能降低不说, 针对一般平民根本没多大意义, 另外还会导致一些软件无法正常使用, (我是使用蓝叠经典版, 启动就会蓝屏) ...

  3. CPU Meltdown和Spectre漏洞分析

    一.背景: 1月4日,国外爆出了整个一代处理器都存在的灾难性漏洞:Meltdown和Spectre. 几乎影响了全球20年内所有cpu处理器:这两个漏洞可以使攻击者通过利用并行运行进程的方式来破坏处理 ...

  4. 【转帖】intel 2018年1 月2号爆出漏洞分析 知乎匿名用户

    作者:匿名用户链接:https://www.zhihu.com/question/265012502/answer/288407097来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  5. CVE-2016-0095提权漏洞分析

    1 前言 瞻仰了k0shl和鹏哥 的漏洞分析,感慨万千,任重而道远. 2 系统环境和工具 windows 7 32旗舰版 windbg 3 poc 3.1poc复现 首先k0shl大佬给出的poc() ...

  6. nginx漏洞分析与升级修复

    一 .此次漏洞分析 1 nginx HTTP/2漏洞 [nginx-announce] nginx安全公告(CVE-2018-16843,CVE-2018-16844)在nginx HTTP / 2实 ...

  7. CPU性能分析

    CPU性能分析工具 lscpu:查看CPU硬件信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Litt ...

  8. 从乌云的错误漏洞分析看Mifare Classic安全

    前言 12年2月初国内著名安全问题反馈平台-乌云发布了有关某公司员工卡的金额效验算法破解的安全问题.从整个漏洞分析来看,漏洞的提交者把员工卡的数据分析得非常仔细,以至很多刚刚接触或者未曾接触的都纷纷赞 ...

  9. Linux漏洞分析入门笔记-CVE_2018_6323_整型溢出

    操作系统   Ubuntu 16.04 /32 位 调试器     IDA pro 7.0 漏洞软件   binutils-2.29.1 0x00: 漏洞描述 1.什么是整数溢出: 在计算机中,整数分 ...

随机推荐

  1. 【Java深入研究】9、HashMap源码解析(jdk 1.8)

    一.HashMap概述 HashMap是常用的Java集合之一,是基于哈希表的Map接口的实现.与HashTable主要区别为不支持同步和允许null作为key和value.由于HashMap不是线程 ...

  2. API接口规范V1.0——制定好规范,才好合作开发

    返回码规范: 统一六位 000000 表示成功! 参数相关返回码预留100000-199999:系统相关返回码预留200000-299999:数据中心310000-319999后续项目以此类推,后续根 ...

  3. spring boot (1):初尝

    工具:intellij idea 自定义banner: 控制台console显示的banner 自定义方式,在src/main/resources 下创建banner.txt增加文本即可,生成字符网站 ...

  4. mock数据的基础使用

    一.应用场景 在我们自己做一个项目时,会遇到后端还没完成数据输出或者接口没写好的情况.你没有办法想后台获取数据,这时候需要前端只好自己写静态模拟数据(假数据).mockjs就是用来创造假数据的,他的用 ...

  5. 【代码笔记】Web-HTML-列表

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  6. easyUI combobox combotree 模糊查询,带上下键选择功能,待完善。。。。

    /2017年4月9日 11:52:36 /** * combobox和combotree模糊查询 * combotree 结果带两级父节点(手动设置数量) * 键盘上下键选择叶子节点 * 键盘回车键设 ...

  7. 在Centos下面FTP映射方案

    前两天公司要在一台Centos的机子上,把一些文件定时备份到另外一台ftp服务器上, 在Linux系统中,mount是不支持直接挂在"ftp://192.168.1.1/backup&quo ...

  8. loadrunner 场景设计-学习笔记之性能误区

    场景设计-学习笔记之性能误区 by:授客 QQ:1033553122 场景假设: 每个事务仅包含一次请求,执行10000个并发用户数 性能误区: 每秒并发用户数=每秒向服务器提交请求数 详细解答: 每 ...

  9. 浅谈 Mysql 中的索引

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  10. 四则运算 Java 姚康友,黎扬乐

    github项目传送门:https://github.com/yaokangyou/arithmetic 项目要求 功能列表 [完成] 使用 -n 参数控制生成题目的个数 [完成] 使用 -r 参数控 ...