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.什么是整数溢出: 在计算机中,整数分 ...
随机推荐
- 【Spring】10、Spring中用@Component、@Repository、@Service和 @Controller等标注的默认Bean名称会是小写开头的非限定类名
@Service用于标注业务层组件(我们通常定义的service层就用这个) @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即 ...
- 最长子串(FZU2128)
最长子串 Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- elasticsearch安装之各种坑
我用的是centos6.5,安装elasticsearch5.2.0 首先不说了,安装JDK1.8,下载elasticsearch5.2.0 https://www.elastic.co/downlo ...
- HDU2196(SummerTrainingDay13-D tree dp)
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- php获取指定月份月初和月末的时间戳
获取指定月份的开始时间戳和结束时间戳,只需传入年月即可(2018-01,2018-1两种格式都可以) $data['sel_time'] = '2018-11'; $data['begin_time' ...
- 【代码笔记】Web-HTML-脚本
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 【读书笔记】iOS-优化内存
imageNamed:方法创建UIImage对象,这些对象不再使用的时候 会放到应用的默认自动回收池中,而不是当前的事件循环的自动回收池中,这样的对象占用的内存只有在应用结束的时候 才会回收.如果用这 ...
- python总结(更新中)
1 python函数中的参数传递(注意可变和不可变传递) 可更改(mutable)与不可更改(immutable)对象 在 python 中,strings, tuples, 和 numbers 是不 ...
- Testlink Testlink在Windows下的安装
Testlink在Windows下的安装 by:授客 QQ:1033553122 测试环境 testlink-1.9.14 下载地址:http://pan.baidu.com/s/1pLrcu ...
- Android 2018最新验证手机号正则表达式
/** * 判断字符串是否符合手机号码格式 * 移动号段: 134,135,136,137,138,139,147,150,151,152,157,158,159,170,178,182,183,18 ...