Linux
地址空间随机化
ALSR(Address Space Layout Randomization)
ALSR将进程的某些内存空间地址进行随机化来增大入侵者预测目的地址的难度,从而降低漏洞被成功利用的风险。
ASLR要求执行程序被加载到内存时,它其中的任意部分都是随机的。包括Stack、Heap、Libs 、mmap、Executable、Linker和VDSO(virtual dynamic shared object)
Linux下ALSR是否开启取决于/proc/sys/kernel/randomize_va_space的值:
- 0:没有随机化,也就是关闭 ASLR 。
- 1:部分随机化,其中共享库、栈、mmap 以及 VDSO 将被随机化。
- 2:完全的随机化,在 1 的基础上,通过 brk() 分配的内存空间也将被随机化。
ALSR配置的修改
//查看
# sysctl -n kernel.randomize_va_space
# cat /proc/sys/kernel/randomize_va_space
//修改
# sysctl -w kernel.randomize_va_space=0
# echo 0 > /proc/sys/kernel/randomize_va_space
PIE(Position Independent Executable)
ASLR有一个模糊的值1,既不是全开启也不是全关闭,而是部分关闭,那这部分到底是什么,很容易产生歧义。
ASLR 不负责代码段以及数据段的随机化工作,这项工作由 PIE 负责。但是只有在开启 ASLR 之后,PIE 才会生效。
PIE是ALSR实现的一部分,PIE是开启executable的随机化,即可执行程序的代码段和数据段随机化。
$ gcc -o test test.c // 可能会默认开启PIE,如果不默认开启
$ gcc -no-pie -o test test.c // 关闭PIE
$ gcc -fpie -pie -o test test.c // 开启PIE 强度为1
$ gcc -fPIE -pie -o test test.c // 开启PIE 最高强度2
有如下程序
#include<stdio.h>
int global = 1024;
int main()
{
printf("%p\n", &global);
return 0;
}
当关闭PIE,可以看到数据段的全局变量global的地址都是固定的
young@ubuntu:~/c$ gcc -no-pie test.c -o test && chmod u+x test
young@ubuntu:~/c$ ./test
0x601030
young@ubuntu:~/c$ ./test
0x601030
young@ubuntu:~/c$ ./test
0x601030
开启PIE,可以看到数据段的全局变量global的地址都是随机的
young@ubuntu:~/c$ gcc -fPIE -pie test.c -o testwithpie && chmod u+x testwithpie
young@ubuntu:~/c$ ./testwithpie
0x55af44e03010
young@ubuntu:~/c$ ./testwithpie
0x55cb1193b010
young@ubuntu:~/c$ ./testwithpie
0x55ebe1526010
PIC(Position Independent Code)
PIC和PIE类似,与PIE不同的是PIC作用在executable的动态链接方面
$ gcc -no-pic -o test test.c // 关闭PIC
$ gcc -fpic -o test test.c // 开启PIC 强度为1 不会开启PIE
$ gcc -fPIC -o test test.c // 开启PIC 最高强度2 不会开启PIE
PIE和PIC都是实现ALSR的一部分,它们的区别是:
- PIC在生成动态链接库时使用(Linux中的so)
- PIE是在生成可执行文件时使用。
堆地址随机化
一般是使用 glibc 中的 malloc() 类接口分配内存,通过 man 3 malloc 可以发现其中有相关的介绍,也就是当超过了 MMAP_THRESHOLD 大小后会使用 mmap(),否则使用 brk() 申请。
如果当前 ASLR 等级为 1,那么当申请空间大于 128K 时,系统通过 mmap() 分配空间,得到的地址是随机的;而当申请空间小于 128K 时,系统是通过 brk() 进行分配的,得到的地址是静止的。
参考链接
版权声明:本文为qq_36963214原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。