博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[zz]intel sysret漏洞
阅读量:6272 次
发布时间:2019-06-22

本文共 1456 字,大约阅读时间需要 4 分钟。

http://blog.xen.org/index.php/2012/06/13/the-intel-sysret-privilege-escalation/
http://weibo.com/2093186395/yr9aR6RjU?type=repost
http://pastebin.com/n0rNbfVV
http://hi.baidu.com/yuange1975/blog/item/003e3a00f69a03a6e950cdf7.html

Intel的x64位芯片的sysret内部实现伪码如下——

if (Not in 64-Bit Mode or Syscall/Sysret not enabled)
throw #UD exception
if (CPL != 0)
throw #GP exception
if (RCX is not CANONICAL_ADDRESS)
throw #GPexception
...
...
CPL = 0x3;
....
RIP = RCX;

 

AMD的x64位芯片的sysret内部实现伪码如下——

if (System Call Extension is disable)
throw #UD exception
if (Protected mode is disable or CPL != 0)
throw #GP exception
...
...
CPL = 0x3;
...
RIP = RCX;

很明显能看出Intel的芯片在何处过早地检查并抛出针对非规范地址的GP异常。而AMD没有明确给出其芯片何时抛出针对非规范地址的GP异常的伪码,(根据AMD手册)估计是在sysret指令后试图根据RIP从内存读取下一条指令时抛出GP异常。

攻击过程:

1、利用映射获得指定虚拟内存页,首地址为:(1 << 47) - 4096

2、在该空间放置shellcode,并使得syscall指令地址位于:(1 << 47) - 2
3、计算并设置rdx寄存器为包含kernel_code函数地址的IDT表项数值
4、计算并设置rsp寄存器,使其指向IDT表中的适当位置(以用rdx的值覆盖IDT_GP表项)
5、跳转到shellcode执行。
A、触发syscall调用,此时CPU将自动将syscall指令后面的地址保存到rcx(返回地址)
B、执行完指定syscall调用后,sysret指令将触发GP异常(特权级为内核态,但rsp、gs等寄存器为用户态数值)
C、内核根据IDT表的IDT_GP表项定位并调用GP异常处理,在异常处理过程中,将包括rdx在内的多个寄存器压入rsp所指向的地址空间
D、由于rsp为用户态数值,并被指向系统IDT表区域,经过精确构造,可使rdx入栈时正好覆盖IDT_GP表项内容
E、由于gs为用户态数值,系统异常处理函数执行到mov %gs:0x20, %rdi时将再次触发GP异常
F、内核再度根据IDT_GP表项内容定位异常处理函数入口,此时kernel_code函数将获得调用
G、kernel_code以ring0特权级完成IDT表修复、线程提权、修复sysret环境等工作
H、调用sysret从内核态返回到用户态继续运行,即exit_usermode函数

转载于:https://www.cnblogs.com/moonflow/archive/2012/07/10/2584539.html

你可能感兴趣的文章
Linux车载系统的开发方向
查看>>
并发编程之五--ThreadLocal
查看>>
摄像头驱动OV7725学习笔记连载(二):0V7725 SCCB时序的实现之寄存器配置
查看>>
iOS播放短的音效
查看>>
[java] java 线程join方法详解
查看>>
JQuery datepicker 用法
查看>>
golang(2):beego 环境搭建
查看>>
天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十)态势标绘模块
查看>>
程序员社交宝典
查看>>
ABP理论学习之MVC控制器(新增)
查看>>
Netty中的三种Reactor(反应堆)
查看>>
网页内容的html标签补全和过滤的两种方法
查看>>
前端源码安全
查看>>
【CodeForces 618B】Guess the Permutation
查看>>
【转】如何实现一个配置中心
查看>>
Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】
查看>>
Threejs 官网 - Three.js 的图形用户界面工具(GUI Tools with Three.js)
查看>>
Atitit.Java exe bat 作为windows系统服务程序运行
查看>>
session的生命周期
查看>>
数据库的本质、概念及其应用实践(二)
查看>>