Linux下程序的保护机制
前言
相信很多人,查看程序信息时会用到,checksec这个命令。它会给你返回如下图的结果,但是很多最开始看到的人,很多都看不懂,如果身为小白的我,跟在大佬后面比葫芦画瓢,这样用。这篇博文就是用来解释下面信息的,希望对你有所帮助,同时也是为了以后自己忘记可以回顾。
Stack Canary
Stack Canray是专门针对栈溢出攻击涉及的一中保护机制。由于栈溢出攻击的主要目标是通过溢出覆盖函数栈高位的返回地址,因此其思路是在函数开始执行前,即返回地址前写入一个字长的随机数据(canary),在函数返回前校验该值是否被改变,如果改变则认为是栈溢出,程序直接终止,以此来防止信息泄露。
GCC默认使用Stack Canary保护,关闭方法编译时加入“-fno-stack-protector”参数
ALSR
ALSR,全称 Address Space Layout Randomization(地址空间分布随机化)。目的是将程序的堆栈地址和动态链接库的加载地址进行一定的随机化,这些地址之间是不可读写执行的未映射内存,降低攻击者对程序内存结构的了解程序。这样,即使攻击者布置了shellcode 并可以控制转跳,由于内存地址结构的未知,依然无法执行shellcode。
ASLR是系统等级的保护机制,关闭方式是修改/proc/sys/kernel/randomize_va_space文件的内容为0
PIE
与ASLR保护十分类似,PIE保护的目的是让可执行程序ELF的地址进行随机化加载,从而使得程序的内存结构对攻击者完全未知。
GCC编译时开启PIE的方法是添加参数 “-fp


1685

被折叠的 条评论
为什么被折叠?



