1.堆栈保护-SP
在缓冲区和控制信息间插入一个canary word
检查该值是否被修改,判断是否发生了溢出攻击
2.堆栈不可执行-noexecstack
缓冲区溢出后通过执行shellcode达到攻击的目的。
设置堆栈不可执行,一旦堆栈中的数据被执行,立刻报告错误。即使溢出成功,也不能执行shellcode.
3.动态库搜索路径-RPATH
4.位置无关代码-fPIC
节省物理内存、提高内存利用率,阻止mmap将代码段映射并使用mprotect将其改为可写。
5.GOT保护-RELRO
防止全局偏移表被恶意重写
以下哪个选项可以阻止通过重写GOT表中函数地址实现的攻击?
-WI, -z, relro, -z,now
6.位置无关可执行-fPIE (Position-Independent-Executable)
ASLR是基础,只有操作系统开启ASLR功能,-fPIE –pie选项添加的随机化特征才会在程序加载和运行时展现。
在ASLR基础上,编译时开启-fPIE/-pie 选项会新增哪个段地址随机化?
.test或.code
##### 7.FORTIFY_SOURCE
8.动态符号表优化 –fvisibility
9.整数溢出检查 –ftrapv
10.栈检查 –fstack-check
使用栈保护选项-fstack-protector后的程序,如果遇到栈上发生溢出,给出的错误提示是“stack smashing detected”
安全编译选项检查工具-binscope
ROP(Return-oriented Programming) 一种新型的基于代码复用技术的攻击,以下选项可以降低该攻击的成功率,提高攻击难度。
A.-WI,-z,noexecstack
B.-WI,-z,relro, -z,now
C.-fstack-protector-all
D.-fPIE -pie