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进行训练,所以其运行速度相比利用乱序执行慢。

但是乱序执行中需要对非法内存访问进行特殊处理,实现相对利用分支预测麻烦。

安全建议

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

参考质料

  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) )

原文地址:https://www.cnblogs.com/r1ng0/p/9448031.html

时间: 2024-08-04 05:01:07

Intel CPU 漏洞分析的相关文章

亲历Intel CPU漏洞的正面袭击

作为已经3年多没有写过代码的程序员来说,本篇不应该算是一篇技术型的文章,而是作为服务上千家客户的ToB大数据创业公司的一次经历,可能很多人对于我们的产品了解并不多,所以我先简单介绍下我们的技术和业务应用场景,我们有多个SaaS产品,有给游戏公司提供免费使用的游戏数据分析平台,有专门做效果广告监测的Ad Tracking系统,以及把移动广告监测和多维用户行为分析数据打通的TrackingIO系统,其中系统架构较为复杂的是TrackingIO,同时使用TrackingIO的客户也较多,每天的数据点数

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

作者:匿名用户链接:https://www.zhihu.com/question/265012502/answer/288407097来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 首先要明确的是:1)这个漏洞不是去年说的Intel ME的漏洞:2)这个漏洞不是很多答主说的依靠时间推测内核加载地址的问题. 这是一个新爆出的漏洞,虽然看起来不是1月2号才暴露出来.因为Linux和Windows早在去年11月份左右就有动作开始修补了. 下面是科普时间: 首先我们需要知

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

前言 12年2月初国内著名安全问题反馈平台-乌云发布了有关某公司员工卡的金额效验算法破解的安全问题.从整个漏洞分析来看,漏洞的提交者把员工卡的数据分析得非常仔细,以至很多刚刚接触或者未曾接触的都纷纷赞叹.但从真实的技术角度出发来进行分析的话,从漏洞的标题以及其内部的分析和解决方案都可以看得出,乌云以及漏洞发布者完全不明白究竟哪里才是漏洞!从08年至今时隔四年,国内对于MIFARE Classic安全漏洞在著名的安全问题反馈平台却反映出了国内安全研究者的一种无知. MIFARE安全问题的由来 20

CPU性能分析

CPU性能分析工具 lscpu:查看CPU硬件信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 4 NUMA node(s): 1 Vendor ID: GenuineIntel CPU fami

NOE77101固件后门漏洞分析

NOE77101固件后门漏洞分析 固件获取 最近学习vxworks固件的分析,尝试对noe77101固件的经典后门漏洞进行分析,就好比学习msf时练习经典的ms08-067一样.noe77101固件的下载地址在此. 拿到固件之后,unzip noe77101_OS.bin_.zip解压固件,得到FLASH0文件夹和一个commandList.lst文件,FLASH0的文件目录如下: 在flash0/wwwroot/conf/exec/目录下找到了NOE77101.bin文件,这应该就是我们要分析

CVE-2019-0708 漏洞分析及相关测试

在CVE-2019-0708公布后几天就已经尝试过复现该漏洞,但借助当时exp并没能成功复现反弹shell的过程遂放弃,故借助这次漏洞复现报告再来尝试复现该漏洞,因为还在大三学习中,有很多知识还没有掌握,出现的错误希望得到指正,也想借此给19年的学习画上句号,希望这次可以成功吧. 漏洞背景 CVE-2019-0708 | 远程桌面服务远程执行代码漏洞 安全漏洞发布时间: 2019-05-14 MITRE CVE-2019-0708 当未经身份验证的攻击者使用 RDP 连接到目标系统并发送经特殊设

PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/phpcms_v9/index.php?m=member&c=index&a=login dosubmit=1&username=phpcms&password=123456%26username%3d%2527%2bunion%2bselect%2b%25272%2

CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析

漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc下载链接如下. github地址:https://github.com/edwardz246003/IIS_exploit 结合上面的POC,我们对漏洞的成因及利用过程进行了详细的分析.在分析过程中,对poc的exploit利用技巧感到惊叹,多次使用同一个漏洞函数触发,而同一个漏洞同一段漏洞利用代码

CVE-2014-1767 漏洞分析(2015.1)

CVE-2014-1767 漏洞分析 1. 简介 该漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的double free漏洞. 实现对漏洞的有效利用,攻击者利用成功可导致权限提升.afd.sys是内核用来管理socket的模块. 影响的系统包括(32bit & 64 bit):  Windows Server 2003 Windows Vista Windows Server 2008 Windows 7