Intel CPU 漏洞分析
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进行训练,所以其运行速度相比利用乱序执行慢。
但是乱序执行中需要对非法内存访问进行特殊处理,实现相对利用分支预测麻烦。
安全建议
及时更新系统与浏览器,安装防护软件
参考质料
- https://cyber.wtf/2017/07/28/negative-result-reading-kernel-memory-from-user-mode/
- https://googleprojectzero.blogspot.com.es/2018/01/reading-privileged-memory-with-side.html
- http://0xffffff.org/2015/12/06/37-How-to-benchmark-code-execution-times/
- https://weibo.com/ttarticle/p/show?id=2309404192549521743410
- https://weibo.com/ttarticle/p/show?id=2309404192925885035405
- https://software.intel.com/en-us/articles/branch-and-loop-reorganization-to-prevent-mispredicts
- 《计算机组成:结构化方法》(塔嫩鲍姆 (Andrew S. Tanenbaum) )
Intel CPU 漏洞分析的更多相关文章
- [CNBETA]Intel CPU底层漏洞事件完全详解:全球手机/电脑无一幸免[转帖]
http://www.cnbeta.com/articles/tech/685897.htm 由Intel CPU漏洞问题衍生出来的安全事件已经波及全球几乎所有的手机.电脑.云计算产品,ARM确认 C ...
- CPU漏洞补丁KB4056892 卸载及忽略办法
2018.1.4微软发布了针对intel CPU漏洞的补丁 KB4056892 性能降低不说, 针对一般平民根本没多大意义, 另外还会导致一些软件无法正常使用, (我是使用蓝叠经典版, 启动就会蓝屏) ...
- CPU Meltdown和Spectre漏洞分析
一.背景: 1月4日,国外爆出了整个一代处理器都存在的灾难性漏洞:Meltdown和Spectre. 几乎影响了全球20年内所有cpu处理器:这两个漏洞可以使攻击者通过利用并行运行进程的方式来破坏处理 ...
- 【转帖】intel 2018年1 月2号爆出漏洞分析 知乎匿名用户
作者:匿名用户链接:https://www.zhihu.com/question/265012502/answer/288407097来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- CVE-2016-0095提权漏洞分析
1 前言 瞻仰了k0shl和鹏哥 的漏洞分析,感慨万千,任重而道远. 2 系统环境和工具 windows 7 32旗舰版 windbg 3 poc 3.1poc复现 首先k0shl大佬给出的poc() ...
- nginx漏洞分析与升级修复
一 .此次漏洞分析 1 nginx HTTP/2漏洞 [nginx-announce] nginx安全公告(CVE-2018-16843,CVE-2018-16844)在nginx HTTP / 2实 ...
- CPU性能分析
CPU性能分析工具 lscpu:查看CPU硬件信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Litt ...
- 从乌云的错误漏洞分析看Mifare Classic安全
前言 12年2月初国内著名安全问题反馈平台-乌云发布了有关某公司员工卡的金额效验算法破解的安全问题.从整个漏洞分析来看,漏洞的提交者把员工卡的数据分析得非常仔细,以至很多刚刚接触或者未曾接触的都纷纷赞 ...
- Linux漏洞分析入门笔记-CVE_2018_6323_整型溢出
操作系统 Ubuntu 16.04 /32 位 调试器 IDA pro 7.0 漏洞软件 binutils-2.29.1 0x00: 漏洞描述 1.什么是整数溢出: 在计算机中,整数分 ...
随机推荐
- Java学习笔记之——常用快捷键(eclipse)
* Ctrl+C 复制 * Ctrl+V 粘贴 * Ctrl+A 全选 * Ctrl+S 保存 * Ctrl+Z 撤销 * Ctrl+Y 还原 * Ctrl+X 剪切 * Ctrl+F 查找 * ...
- 【Java基础】4、java中的内部类
内部类的分类:常规内部类.静态内部类.私有内部类.局部内部类.匿名内部类. 实例1:常规内部类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...
- webpack4 系列教程: 前言
1. 什么是webpack? 前端目前最主流的javascript打包工具,在它的帮助下,开发者可以轻松地实现加密代码.多平台兼容.而最重要的是,它为前端工程化提供了最好支持.vue.react等大型 ...
- 【代码笔记】Web-HTML-表单
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 从零开始学习html(二)认识标签(第一部分)——上
一.语义化,让你的网页更好的被搜索引擎理 学习html标签过程中,主要注意两个方面的学习:标签的用途.标签在浏览器中的默认样式. 标签的用途:我们学习网页制作时,常常会听到一个词,语义化. 那么什么叫 ...
- Git应用—01初始化项目
1.环境变量GIT_HOME D:\GreenSoftware\PortableGit Path %GIT_HOME%\cmd; 2.初始化git config --global u ...
- Linux 操作系统下为网卡配置ip
Linux操作系统下为网卡配置ip by:授客 QQ:1033553122 1. Linux单一网卡设置多IP的配置方法 在Linux下网卡接口逻辑名被称为eth0,eth1,eth2,..... ...
- 最新安全狗 apache v4.0 sql注入 bypass
前言 最近没事学习一下 waf 的 bypass , 本文介绍下 bypass 安全狗的笔记.个人感觉 bypass 的总思路(正则匹配型 waf)就是利用各种语法特性来逃避正则(当然要保证语法正确性 ...
- Expo大作战(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- mysql的高级特性-存储过程
定义: 存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令. 语法: DELIMITER // 声明语句结束符,用于区分; CEATE PROCED ...