CherieLi Student

安全编译选项

2020-12-25
CherieLi
gcc

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


下一篇 git学习

Comments

Content