Return-into-libc分析

经典缓冲区溢出
利用溢出,攻击者可以将期望数据写入漏洞程序内存中的任意位置,甚至包括控制程序 执行流的关键数据(比如函数调用后的返回地址),从而控制程序的执行过程并实施恶意行为。因此,攻击者通过篡改函数的返回地址以其指向自己纺织的恶意shellcode,这样函数返回时就可以跳转到相应的恶意代码来执行,即将恶意代码注入目标程序,并在以后跳转到此执行此代码。
提出的安全机制
针对这种先写后执行的攻击行为提出了DEP/NX机制,表示数据执行预防,此技术将内存区域标记为不可执行,通常将堆栈和堆标记为不可执行,从而预防攻击者执行驻留在这些内存区域的代码,保证内存只能被写或者被执行而不能先写后执行。
当然还有一些其他机制,ASLR、Stack Canaries等,ASLR表示地址空间层随机化,这种技术使共享库、堆栈和堆被占用的内存的地址随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置。Stack Canaries(函数栈)在这种技术中,编译器在堆栈帧的局部变量之后和保存的返回地址之前放置一个随机化保护值。在函数返回之前检查此保护,如果它不相同,然后程序退出,如果攻击者试图修改返回地址,Canary也将不可避免地被修改。因此,在函数返回之前,检查这个Canary,从而防止利用。(这些安全机制详解可见0day安全软件漏洞分析技术第二篇9、10、11、12、13、14、15章)
Return-into-libc 攻击原理
攻击者可以利用栈中的内容实施 return-into-libc 攻击。这是因为攻击者能够通过缓冲区溢出改写返回地址为一个库函数的地址,并且将此库函数执行时的参数也重新写入栈中。这样当函数调用时获取的是攻击者设定好的参数值(比如/bin/sh),并且结束后返回时就会返回到库函数而不是 main()。而此库函数实际上就帮助攻击者执行了其恶意行为。更复杂的攻击还可以通过 return-into-libc 的调用链(一系列库函数的连续调用)来完成(https://bbs.pediy.com/thread-217007.htm)。

于攻击者可用的指令序列只能为应用程序中已存在的函数,所以这种攻击方式的攻击能力有限。由于这种 return-into-libc 攻击方式的局限性,返回导向编程(Return-Oriented Programming, ROP)被提出,并成为一种有效的 return-into-libc 攻击手段。
ROP攻击原理
返回导向编程攻击的方式不再局限于将漏洞程序的控制流跳转到库函数中,而是可以利用程序和库函数中识别并选取的一组指令序列。攻击者将这些指令序列串连起来,形成攻击所需要的 shellcode 来从事后续的攻击行为。因此这种方式仍然不需要注入新的指令到漏洞程序就可以完成任意的操作。同时,它不利用完整的库函数,因此也不依赖于函数调用时通过堆栈传递参数。
返回导向编程攻击时,攻击者首先需要选取构建 shellcode 的指令,指令可以来自于应用程序二进制代码也可以来自于链接库。这些指令串连起来就可以形成整个 shellcode 的功能。最简单来讲,选取的每个连续指令序列都以“return”指令结束,这样如果攻击者在栈中放入后一个以“return”指令结束的指令序列的首指令地址,则在前一个”return”指令执行并返回时会 pop 栈中的后一个指令序列的首指令地址,并从前一个指令序列跳转到下一个指令序列执行。以此类推,就可以串连形成一个 ROP 链完成整个攻击。
ROP是一个复杂的技术,允许我们绕过DEP和ALSR,但不幸的是(或对于用户来说幸运的是)这不能绕过Canary,但如果有额外的内存泄漏,我们可以通过泄露,leak canary的值和使用它。ROP技术并不能绕过Canay保护措施。
ROP re-uses ,即我们可以重用Bin文件或者Libc文件(共享库)中的代码。这些代码,或者说指令,通常被我们称作“ROP Gadget”。
ROP 攻击代码的指令流在形式上具有一定的特征,即 ROP 代码中包含有大量的“ret”指令。 同时,每一小段指令序列通常都比较短小,一般只包含两到三个汇编语句,它们仅仅完成整个 shellcode 的一部分工作。这些指令通过“return”指令串连起来,实现最终 shellcode 的执行。其与传统 return-into-libc 攻击不同,在传统攻击中每个指令序列实际上是整个函数,而不是 ROP 攻击中的几条汇编指令。因此 ROP 攻击在一个更低的抽象层来进行攻击,更加灵活。构建 ROP 链有很多的技巧,具体可以参见参考资源中关于返回导向编程的论文内容。

相应实验网上一堆、、、、、

参考:
Paper:一种不完全依赖栈的ROP攻击技术的研究_林志添
     https://www.csdn.net/article/a/2014-03-03/15818077
0day安全软件漏洞分析技术第二篇安全机制
http://netsecurity.51cto.com/art/201703/534647.htm
看雪精华帖18之使用链接的return-to-libc绕过NX bit (NX bit是一种硬件保护机制,它通过设置页目录表中的相关属性位来表明分配出来的页内存是否可执行)
帖子地址:https://bbs.pediy.com/thread-217007.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值