ROP 返回导向编程 攻击

20 篇文章 0 订阅

之前工作中一直研究ARM 体系结构函数调用标准(AAPCS),分析栈中内存溢出对ARM 体系结构函数调用产生的影响。

Android 的流行促进了hacker 对 Android root 的研究,最出名的莫过于 基于堆栈溢出攻击的 ROP gadgets ROOT方法。


首先看下ROP的基本概念(摘自wiki):

http://zh.wikipedia.org/wiki/%E8%BF%94%E5%9B%9E%E5%AF%BC%E5%90%91%E7%BC%96%E7%A8%8B


返回导向编程(Return-Oriented Programming, ROP)是计算机安全漏洞利用技术,该技术允许攻击者在安全防御的情况下执行代码。

攻击者控制堆栈调用以劫持程序控制流并执行针对性的机器语言指令序列(称为Gadgets)。 每一段 gadget 通常结束于 return 指令,并位于共享库代码中的子程序。

系列调用这些代码,攻击者可以在拥有更简单攻击防范的程序内执行任意操作。


ROP 是一种高级的堆栈溢出攻击。这类攻击往往利用操作堆栈调用时的程序漏洞,通常是缓冲区溢出。在缓冲区溢出中,在将数据存入内存前未能正确检查适当范围的函数会收到多于正

常承受范围的数据,如果数据将写入堆栈,多余的数据会溢出为函数变量分配的空间并覆盖替换 return 地址在原本用以重定向控制流并返回给调用者的地址被覆盖替换后,控制流将改写

到新分配的地址。

标准的缓冲区溢出攻击,攻击者只需要写出针对堆栈部分的代码(有效载荷) 。


Return-into-library technique (返回库攻击技术)

ROP 攻击最简单的方式是直接把要攻击的代码Gadgets 注入到栈中,让返回地址直接跳转到Attack 代码的地址去执行就行了。

不幸的是,新开发的一个feature 能阻止硬件执行用户可以具有写权限的内存区域的指令。这样,Attacker 只能寻找原先就位于执行权限的内存区域的代码,包括这个可执行文件本身,或是任何链接的共享库。

正是因为共享库,比如libc往往包含对于 Attacker 特别有用的执行系统调用的函数(比如, system() 系统调用)。

当前 Android root, IOS 越狱正是运用的这一技术,讲到关键的技术中文总是感觉表达不清楚,还是看下英文吧:

In a return-into-library attack, an attacker hijacks program control flow by exploiting a buffer overrun vulnerability, exactly as discussed above. 

Instead of attempting to write an attack payload onto the stack, the attacker instead chooses an available library function and overwrites the return address with its entry location.

Further stack locations are then overwritten, obeying applicable calling conventions, to carefully pass the proper parameters to the function so it performs functionality useful to the attacker. 

This technique was first presented by Solar Designer in 1997, and was later extended to unlimited chaining of function calls.





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值