ROP概述
- Return-oriented Programming,面向返回的编程,是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码
- ROP的核心思想:攻击者扫描已有的动态链接库和可执行文件,提取出可以利用的指令片段(gadget),这些指令片段均以ret指令结尾,即用ret指令实现指令片段执行流的衔接。
- ROP攻击是利用以ret结尾的程序片段,操作这些栈相关寄存器,控制程序的流程,执行相应的gadget,实施攻击者预设目标
- ROP不同于return-to-libc攻击之处在于,ROP攻击以ret指令结尾的函数代码片段,而不是整个函数本身去完成预定的操作
- 广义上说,return-to-libc攻击是ROP的一种特例
- 最初ROP攻击实现在X86体系结构下,随后扩展到各种体系结构
- ROP攻击的程序主要使用栈溢出的漏洞,实现程序控制流的劫持。因此,栈溢出漏洞的防护是阻挡ROP攻击最根源性的方法。如果解决了栈溢出的问题,ROP攻击将会在很大程度上受到抑制
基础知识
- BSS段:通常是指用来存放程序中未初始化的全局变量的一块内存区域,BSS段属于静态内存分配。在溢出时EIP的值可以是BSS段的地址
- DATA段:数据段,通常是指用来存放程序中已初始化的全局变量的一块内存区域,属于静态内存分配