RELRO,堆栈地址随机化, 是一种用于加强对 binary 数据段的保护的技术。
partial relro (部分开启,got 不可写)
full relro(全部开启,got 可写)
那么这是个什么玩意捏
1.基本介绍
堆栈地址随机化:是地址空间布局随机化(ASLR)的一种,它实现了栈帧起始地址一定程度上的随机化,令攻击者难以猜测需要攻击位置的地址。
地址空间布局随机化(ASLR):是一种防范内存损坏漏洞被利用的计算机安全技术。详细一点,就是地址空间配置随机加载是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的一种技术。
binary: sql 中固定长度的 n 个字节二进制数据。N 必须从 1 到 8,000。存储空间大小为 n+4 字节。 在此代表二进制
SQL:结构化查询语言,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,这里不做过多介绍。
GOT:Global Offset Table,全局偏移表/全局函数表,每一个外部定义的符号在这里有相应的条目,GOT位于ELF(一种用于二进制文件 、可执行文件、目标代码、共享库和核心转储格式文件的文件格式)的数据段中,叫做GOT段。
全局函数:定义在类外的函数,可以被其他文件内的函数调用。
PLT:Precedure Linkage Table,过程链接表/内部函数表,linux里的延迟绑定技术,顾名思义它就是一个过度,真正的终点还是在GOT表里。
内部函数:只能被本文件中其他函数所调用,定义内部函数时,在函数名和函数类型的前面加static。
那么这里可能会有疑问:为什么要存在PLT,存在过度,而不是直接到达GOT呢?
这就比如说,你是一个有很多亲戚的人,你每周都需要拜访这些亲戚,所以你将这些亲戚的地址都记在了一个本子上,等你要去拜访的时候就翻出来查找,那么这个本子就是一个PLT表,它里面每一个地址都会跳转到对应的GOT表地址(你的亲戚家)
假如有一天,你觉得每天跑来跑去好麻烦,于是把你所有亲戚全都接到了你家里住,每周只要到对应的房间去拜访就可以了,那个本子也就没用了,你扔掉了它。这时,就是在没有PLT表的情况下,直接把GOT表弄来了。
你觉得是一个登记本占地面积小,还是一屋子亲戚占地面积小呢。
这就是PLT表存在的原因之一,为了更高效的利用内存。
另一个原因就是可以增加安全性。
GOT可写:说明对GOT表具有写权限。
不可写就是没权限呗
(GOT覆写放下章了)
手动分割线
介绍完了,后面会出(二)实战
更多推荐
RELRO (ReLocation Read-Only)保护纯新手入门(一)
发布评论