PAX

来源:互联网 发布:怎样删除淘宝评价 编辑:程序博客网 时间:2024/06/05 05:28

1. Grsecurity/PaX

0x1: 什么是Pax

PaX是针对linux kernel的一个加固版本的补丁,它让linux内核的内存页受限于最小权限原则,是一个有效的防御"系统级别0DAY"的方案,第1版的设计和实现诞生于2000年,但是当年Linux内核不收PaX进入upstream是因为很多人觉得PaX不是那么的好维护,之后linux内核推出了LSM(Linux Security Module),LSM利用了一堆CAPABILITY的机制提供了一些限制用户态程序访问控制的接口,SELinux和Apparmor就是基于LSM开发的。需要注意的是LSM并不是一个传统意义上的linux kernel module

1. 必须在bootloader启动内核时启动,不能在内核加载完后启动 2. 不能同时启动2个LSM的实现,当然后来有人实现了一套LSM Stacking堆栈式调用方式,但是并没有进入Linux内核原生支持

当我们谈到PaX时都会写Grsecurity/PaX,这是因为PaX从一开始就主要关注如何防御和检测memory corruption,后来Grsecurity社区发现PaX和他们所关注的非常类似,所以就合并了,在很长的一段时间里PaX主要关注memorycorruption,而Grsecurity则实现其他的功能包括RBAC,但后来2个社区的工作开始模糊了:包括USERCOPY, STACKLEAK, RANDSTRUCT, etc..都是整个Grsecurity/PaX共同实现的特性

PaX team认为会导致漏洞利用的bug给予了攻击者(区分攻击者和黑客是不同的term)在3个不同层面上访问被攻击的进程

1. 执行任意代码2. 执行现有代码但打破了原有的执行顺序3. 原有的执行顺序执行现有代码,但加载任意数据

0x2: PaX里vma mirroring的设计

在2003年的晚些时候PaX实现了虚拟内存空间的镜像( vma mirroring),vmamirroring的目的是为了在一组物理页上做特殊文件隐射时有2个不同的线性地址,这2个地址即使在swap-out/swap-in或者COW后依然是不会改变的。这样做的目的为了满足几种场景

复制代码
1. 把可执行的区域在使用SEGMEXEC隐射进入代码段。在32-bit的linux内核里的4GB地址空间是其中3GB给用户空间,1GB给内核空间,而vma mirroring把用户空间的3GB划分成了2个1.5GB分别是给代码段和数据段,在可执行区域里包含的数据的部分(常量字符串,函数指针表等)都会mirroring到数据段里2. 实现可执行区域的地址随机化(RANDEXEC)3. 这个引出了第3种情况,就是SEGMEXEC和RANDEXEC同时激活,这个的效果和PIE+ASLR的效果类似,不同的不是整个elf binary的代码段随机化,而是在mirroring时对代码段和数据段进行随机化 
复制代码

Relevant Link:

https://raw.githubusercontent.com/citypw/DNFWAH/master/4/d4_0x01_DNFWAH_archeological_hacking_on_pax.txthttps://wiki.gentoo.org/wiki/Hardened/PaX_Quickstarthttps://linux.cn/article-5750-qqmail.html