PIE && ALSR


0. Introduction

这是PIC与PIE在wiki上给出的解释,同我们熟知的PLT与GOT一样,PIE与PIC也是linux下的一对姊妹花

In computing, position-independent code (PIC) or position-independent executable (PIE) is a body of machine code that, being placed somewhere in the primary memory, executes properly regardless of its absolute address.

PIC指的是位置无关代码,PIE是地址无关可执行程序

现代的GNU/Linux以及ELF系统可以随机化shared library的加载地址,这种技术叫做: ASLR. libc肯定是PIC,也就是说可以被加载 在任意地址,而且可以在各个进程之间共享已经加载入RAM的代码段.加载地址的随机化使依赖固定地址的攻击(BOF)变得难以进行.

虽然ASLR可以随机化shared library的加载地址,但是ELF可执行文件在由linker处理的时候被分配了一个固定的入口地址(在i386下是一个略大于0x08048000的值,在x86_64是一个略大于0x4000000的值),这样就提供了Attackdr 一个地址范围,根据应用程序的偏移就可以计算出应用程序加载内存中的实际地址
如果把分配入口的权限的给了kernel,那么kernel就可以给main executable 一个随机的入口地址,而linker需要生成Position Independent Executable或PIE,这样很大程度上可以解决一大类的安全问题.

基于这样的考虑,就出现了PIE保护技术,让应用程序的地址也同libc一样随机化,进一步提高Attacker的攻击难度

Continue reading

RELRO



0.Introduction

linux下的有两个著名的函数表Or姐妹花,plt表,got表,他们分别称位进程连接表与全局描述表

其中,GOT表在lazy binding后储存的是函数的真实地址,Got.plt中存放的全局变量的偏移地址
在Attacker的攻击过程中,经常能够获得任意地址写的权限,很多情况下都会选择修改got表中内容来hijack control flow,这种相关类似的攻击手段被称之为hijack Got或者GOT overwrite attack
由于Got表中存放的是非常关键的信息,所以如何能够保护好Got表,成为了一个重要问题
RELRO保护为此而生,它是一种比较古老的技术,至少2008年之前就已经进入了upstream
其全称为RELocation Read-Only,重定位表只读技术

Continue reading

Canary



0.Introduction

由于stack overflow而引发的攻击非常普遍也非常古老, 相应地一种叫做canary的 mitigation技术很早就出现在gcc/glibc里, 直到现在也作为系统安全的第一道防线存在。

canary不管是实现还是设计思想都比较简单高效, 就是插入一个值, 在stack overflow发生的 高危区域的尾部, 当函数返回之时检测canary的值是否经过了改变, 以此来判断stack/buffer overflow是否发生.

Canary与windows下的GS保护都是防止栈溢出的有效手段,它的出现很大程度上防止了栈溢出的出现,并且由于它几乎并不消耗系统资源,所以现在成了linux下保护机制的标配

Continue reading

ROP



ROP的全称为Return-oriented programming(返回导向式编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(NX,ASLR)。
ROP是一种攻击技术,其中攻击者使用堆栈的控制来在现有程序代码中的子程序中的返回指令之前,立即间接地执行精心挑选的指令或机器指令组。
因为所有执行的指令来自原始程序内的可执行存储器区域,所以这避免了直接代码注入的麻烦,并绕过了用来阻止来自用户控制的存储器的指令的执行的大多数安全措施。
因此,ROP技术是可以用来绕过现有的程序内部内存的保护机制的。

Continue reading

Strip

最近在学习ptmalloc,对于malloc中许多需要注意深入的地方,要用到gdb调试,但是gdb在调试进入到glibc so库中就"瞎"掉了
我废了挺大的力气配置gdb,让它能够源码级别调试malloc,但是对于libc.so.dbg是什么,为什么需要它却不太理解,其实这就涉及到了Strip。

Continue reading