Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3657637
  • 博文数量: 880
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6155
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-11 09:12
个人简介

To be a better coder

文章分类

全部博文(880)

文章存档

2022年(5)

2021年(60)

2020年(175)

2019年(207)

2018年(210)

2017年(142)

2016年(81)

分类: LINUX

2019-06-05 10:39:25

SMAP/SMEP

SMAP(Supervisor Mode Access Prevention,管理模式访问保护)和SMEP(Supervisor Mode Execution Prevention,管理模式执行保护)的作用分别是禁止内核访问用户空间的数据和禁止内核执行用户空间的代码。arm里面叫PXN(Privilege Execute Never)和PAN(Privileged Access Never)。SMEP类似于前面说的NX,不过一个是在内核态中,一个是在用户态中。和NX一样SMAP/SMEP需要处理器支持,可以通过cat /proc/cpuinfo查看,在内核命令行中添加nosmap和nosmep禁用。windows系统从win8开始启用SMEP,windows内核枚举哪些处理器的特性可用,当它看到处理器支持SMEP时通过在CR4寄存器中设置适当的位来表示应该强制执行SMEP,可以通过ROP或者jmp到一个RWX的内核地址绕过。linux内核从3.0开始支持SMEP,3.7开始支持SMAP。

在没有SMAP/SMEP的情况下把内核指针重定向到用户空间的漏洞利用方式被称为ret2usr。physmap是内核管理的一块非常大的连续的虚拟内存空间,为了提高效率,该空间地址和RAM地址直接映射。RAM相对physmap要小得多,导致了任何一个RAM地址都可以在physmap中找到其对应的虚拟内存地址。另一方面,我们知道用户空间的虚拟内存也会映射到RAM。这就存在两个虚拟内存地址(一个在physmap地址,一个在用户空间地址)映射到同一个RAM地址的情况。也就是说,我们在用户空间里创建的数据,代码很有可能映射到physmap空间。基于这个理论在用户空间用mmap()把提权代码映射到内存,然后再在physmap里找到其对应的副本,修改EIP跳到副本执行就可以了。因为physmap本身就是在内核空间里,所以SMAP/SMEP都不会发挥作用。这种漏洞利用方式叫ret2dir。



Google工程师对Linux内核做了一个改动,将使在Linux上利用禁用SMAP和SMEP保护作为其漏洞利用路径的一部分上变得更加困难。

管理程序模式执行保护(SMEP)和管理程序模式访问保护(SMAP)是最新一代英特尔CPU的安全功能,可防止内核访问非预期的用户空间内存,从而帮助抵御各种攻击。但是一些漏洞利用Linux内核的native_write_cr4函数来禁用SMEP/SMAP,因为这些安全选项的状态是通过CR4控制寄存器中的位控制的。

由于在Linux 5.1内核周期之前,tip tree中现在挂起了,所以SMEP和SMAP以及UMIP的位都被固定住了,因此它们不再容易被更改。UMIP同时也是一种用户模式的指令预防功能,可以防止某些指令在较高权限级别下执行,其行为也通过CR4位进行控制。

Google的Project Zero之前演示了一个漏洞利用路径,它使用这个CR4内核函数来禁用SMAP/SMEP保护,然后继续它的恶意活动。现在,多亏了Google工程师,这些SMAP/SMEP/UMIP位被固定在native_write_cr4函数中,因此不能在受支持的CPU上对该调用进行简单禁用。

阅读(5289) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~