ASLR
ASLR等级与说明
等级 | 说明 |
---|
0 | 关闭 |
1 | 保留 共享库 栈 mmap vdso随机化 |
2 | 完全 1 基础上 brk() 分配的内存空间也将被随机化 |
ASLR等级查看
sysctl -n kernel.randomize_va_space
cat /proc/sys/kernel/randomize_va_space
ASLR修改
sysctl -w kernel.randomize_va_space=0
echo 0 > /proc/sys/kernel/randomize_va_space
gcc编译安全选项
PIE(代码段和数据段的随机)
效果 | 编译选项 |
---|
关闭 | 低版本默认关闭 高版本-fno-pie -no-pie |
可执行文件等级1 | -fpie -pie |
可执行文件等级2 | fPIE -pie |
共享库文件等级1 | -fpic |
共享库文件等级2 | -fPIC |
DEP/NX(数据不可执行保护)
效果 | 编译选项 |
---|
开启 | 默认开启 -z noexecstack |
关闭 | -z execstack |
canary(栈溢出保护)
效果 | 编译选项 |
---|
禁止 | -fno-stack-protector |
启用 针对部分char数组函数 | -fstack-protector |
启用 全部函数 | -fstack-protector-all |
FORTIFY(缓冲区溢出检查)
效果 | 编译选项 |
---|
关闭 | 默认 |
开启 较弱检查 编译时检查 | -D_FORTIFY_SOURCE=1 |
开启 较强检查 运行时也检查 | -D_FORTIFY_SOURCE=2 |
RELRO(只读保护)
效果 | 编译选项 |
---|
关闭 | -z norelro |
部分 Partial RELRO | 默认 -z lazy |
全部 | -z now |