因此,通过阅读Shacham 博士的这篇 rop论文,我知道找到具有 Turning-complete 计算能力的 gadgets 集并不难。
所以我在想,理论上,所有以ret结尾的 asm 代码序列都可以用作 ROP 攻击中的小工具吗?
这是错的吗?谁能给我一些反例?
因此,通过阅读Shacham 博士的这篇 rop论文,我知道找到具有 Turning-complete 计算能力的 gadgets 集并不难。
所以我在想,理论上,所有以ret结尾的 asm 代码序列都可以用作 ROP 攻击中的小工具吗?
这是错的吗?谁能给我一些反例?
这是基于非退货的小工具的延续。
ROP-gadget 本身就是一段代码,您可以使用它来操作数据并获得一些所需的效果,同时保持对执行的控制。这是一篇关于Jump Oriented Programming的论文。此外,没有 Returns 的 Return Oriented Programming。他们浏览了 libc-2.7(Debian Linux 5.0.4 的 /lib/i686/cmov/libc-2.7.so)并找到了替代小工具。这些包括以jump
, call
, jump+call
,结尾的小工具ret
。从逻辑上讲,将会有更多的ret
rop 小工具,但是仍然有一些非常有用的非返回小工具,例如下面的那个。
popa ; Load all registers
cmc ; No practical effect
jmp far dword [ecx] ; Back to dispatcher via ecx
也看到对寄存器的调用并不少见,尤其是在处理利用对象的 vtables 的 C++ 二进制文件时。
在 ARM 上进行 ROP 时,几乎必须使用较少的传统小工具。其中包括进入寄存器的分支,例如BX LR
(最传统的返回)或BLX R3
,或直接加载到程序计数器中,例如LDMFD SP!,{R3,PC}
至于有没有无用的 rop 小工具,当然。有许多小工具会让您失去对执行的控制。根据您拥有的小工具数量,您不会始终控制所有寄存器,因此如果您无法控制edx
,那么任何以 a 结尾的 rop 小工具call [edx]
现在都没有用。
编辑:添加了有关 ARM 小工具的详细信息,并链接到无返回的面向返回的编程以获得更完整的参考。
是的,所有以 a 结尾的操作码ret
都可以被视为一个小工具。但是,还要考虑这样一个事实:不仅合法指令可以被视为小工具,“在指令中间开始”或“使用指令的静态参数”也可以被视为潜在的小工具。
事实上,唯一的限制(除了它必须以 aret
或类似的东西结尾)是小工具必须位于声明为executable的内存区域中。
我强烈建议阅读以下论文,它很好地解释了所有这些(可能比你读过的更好):骨头上无辜肉体的几何形状:没有函数调用的返回到 libc(在 x86 上)由 Hovav Shacham。
碰巧的是,在我的“IA 课程介绍”中,我写了一篇非常全面的 ROP 总结。不,这从未发表过,但我们被告知我们必须遵循论文的学术格式。
你的问题所引用的实际上是对之前三篇论文的总结,这意味着你错过了 Schacham 出色工作的一些有价值的细节。当然,一长串黑客至少会回到 phrack 49 的 Aleph One 中。有一个图形这里 ,详细说明在创建ROP已经达到了高潮悠久的历史。它本质上是我自己研究的路线图。
正如perror已经建议的那样,将明确回答您的问题的论文是“骨头上无辜肉体的几何形状:没有函数调用的返回到 libc(在 x86 上)” 。其中提供了伪代码,告诉您我们正在寻找“非无聊序列”,该序列在第 2 节中使用伪代码进行了完整定义。后来的论文证明了 ROP 本质上是跨架构的,我们可以使用jbh 讨论过的某些 jmp 序列。
我的非同行评审未发表摘要的链接在这里。 包括参考文献列表,我将放在这里:
1 FX & Halvar Flake,我们可以从这里拿走。Defcon 12 媒体档案, http://www.defcon.org/html/links/dc-archives/dc-12-archive.html
2 艾伦·图灵。“On Computable Numbers, with an Application to the Entscheidungsproblem”伦敦数学会会刊,(Ser. 2, Vol. 42, 1937)
3 Nergal.The advanced return-into-lib(c) 漏洞(PaX 案例研究)。Phrack Mag-azine,58(4),2001 年 12 月。http: //www.phrack.org/archives/58/p58_0x04_Advanced% 20return-into-lib(c)%20exploits%20(PaX%20case%20study)_by_nergal.txt。
4 霍瓦夫·沙查姆。骨头上无辜肉体的几何结构:没有函数调用的返回到 libc(在 x86 上)。CCS '07 第 14 届 ACM 计算机和通信安全会议论文集,2007
[5] 埃里克·布坎南、瑞安·罗默、霍瓦夫·沙查姆、史蒂文·萨维奇。当好的指令变坏时:将面向返回的编程推广到 RISC。CCS '08 第 15 届 ACM 计算机和通信安全会议论文集
[6] ASCC 资料室 http://www-03.ibm.com/ibm/history/exhibits/markI/markI_feeds.html
[7] Aurélien Francillon,Claude Castelluccia。对哈佛架构设备的代码注入攻击。CCS '08 第 15 届 ACM 计算机和通信安全会议论文集
[8] 处理器——ARM。http://www.arm.com/products/processors/index.php
[9] 维基百科。ARM9。http://en.wikipedia.org/wiki/ARM9#Chips
[10] Stephen Checkoway、Hovav Sacham 等。阿尔。面向回报的编程没有回报。CCS '10 第 17 届 ACM 计算机和通信安全会议论文集
[11] 瑞安·罗默、埃里克·布坎南、霍瓦夫·沙查姆、斯特凡·萨维奇。面向返回的编程:系统、语言和应用程序。ACM 信息和系统安全交易 (TISSEC) - 计算机和通信安全特刊,第 15 卷,第 1 期,2012 年 3 月。