ROP
ROP
=Return-Oriented Programming
=面向返回编程
- 是什么:一个攻击手段=技术
- 借用libc代码段里面的多个retq前的一段指令拼凑成一段有效的逻辑,从而达到攻击的目标
- 解释
- 为什么是retq ?
- 因为retq指令返到哪里执行,由栈上的内容决定,而这是攻击者很容易控制的地址
- 那参数如何控制 ?
- 就是利用retq执行前的pop reg指令,将栈上的内容弹到指令的寄存器上,来达到预期
- 一段retq指令未必能完全到想攻击目标的前提条件,那可在栈上控制retq指令跳到另一段retq指令表,如果它还达不到目标,再跳到另一段retq,直到攻击目标实现
- 在ret2plt攻击方法,我们使用PPR(pop, pop, ret)指令序列,实现顺序执行多个strcpy函数调用,其实这就是一种最简单的ROP用法,ROP更是ret2plt的升级版
- ROP方法技巧性很强,那它能完全胜任所有攻击吗?返回语句前的指令是否会因为功能单一,而无法实施预期的攻击目标呢?业界大牛已经过充分研究并证明ROP方法是图灵完备的,换句话说, ROP可以借用libc的指令实现任何逻辑功能
- 为什么是retq ?
- 是什么:一个攻击手段=技术