Linux Kernel Exploitation 理论学习

基础

内核为用户空间提供的一些服务

  1. 文件系统的IO
  2. 权限管理
  3. 系统调用(Syscalls)
  4. 进程管理
  5. ……

内核通熟来说就是底层的代码(它是操作系统的核心),有两个主要的职能:

  1. 跟硬件交互,控制硬件
  2. 为应用程序提供一个运行环境

内核空间Ring0,我们用户空间就是Ring3

使用的常用的库函数也有所区别

内核管理进程,所以权限也是他管了

利用相关

我们可以用commit_credit,更新进程的credentials

我们可以prepare_kernel_cred_t构造一个cred数据结构

那就是两步

由于在内核中我们很难修改文件系统,创建新的进程,创建网络连接,所以我们要回到用户空间

我们可以通过下面的方式劫持控制流

我们熟悉的防护有下面的

一些新的防护

mmap_min_addr

它可以使空指针引用的漏洞利用更加困难

一般空指针引用流程如下,而mmap_min_addr不允许程序申请低地址的内存,所以极大增加了利用难度

kallsyms

/proc/kallsyms提供内核的符号

假如我们没有信息泄露漏洞,那么我们就需要它

那么假如有这个防护,那么没有权限的用户就会返回0了

SMEP / SMAP

SMEP: Supervisor Mode Execution Protection
Introduced in Intel IvyBridge
SMAP: Supervisor Mode Access Protection
Introduced in Intel Haswell

一般提权的代码是这样的

SMEP避免这种攻击是通过触发一个页错误(page fault)来完成大的, 就是如果一个设置了user bit的程序在ring0中执行内存中的代码,那就触发一个page fault

SMAP也是类似的,不过这个是防御对数据的读取

reference

https://github.com/RPISEC/MBE

1元也是爱,谢谢支持