所以我认为从理论上讲,这些都是以ret结尾的asm代码序列可以用作ROP攻击中的小工具吗?
这是错误的吗?谁能给我一些抵消的例子?
#1 楼
这是基于非返回的小工具的延续。ROP小工具本身就是一段代码,可用于操纵数据并获得所需的效果,同时保持对执行的控制。这是有关面向跳转的编程的论文。同样,没有返回的面向返回的编程。他们浏览了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-ing时,几乎必须使用较少的传统小工具。其中包括分支到寄存器中,例如
BX LR
(最传统的返回值)或BLX R3
,或直接加载到程序计数器中,例如LDMFD SP!,{R3,PC}
当然还有没有用的rop小工具。有很多小工具会让您失去执行控制的能力。根据您拥有的小工具的数量,您将始终无法控制所有寄存器,因此,如果您无法控制说
edx
,则任何以call [edx]
结尾的rop小工具现在都将不再有用。编辑:添加了详细信息有关ARM小工具的信息,并链接到无返回的面向收益的编程,以获取更完整的参考。
#2 楼
是的,所有以ret
结尾的操作码都可以视为一个小工具。但是,还要考虑以下事实:不仅法律指令可以被视为小工具,“从指令中间开始”或“使用指令的静态参数”也可以被视为潜在的工具。实际上,唯一的限制(除了必须以
ret
或类似字符结尾的事实之外),小工具必须位于声明为可执行文件的内存区域中。我强烈建议您阅读以下说明所有这些内容的文章(可能比您阅读的要好):Hovav Shacham撰写的《无骨肉的几何:无函数调用的返回libc》(在x86上)。
#3 楼
碰巧的是,在我的“ IA入门课程”中,我写了一篇对ROP相当详尽的总结。不,它从未发表过,但被告知我们必须遵循该论文的学术格式。问题所引用的实际上是以前三篇论文的摘要,这意味着您缺少有关Schacham出色著作的一些宝贵细节。当然,一长串的黑客至少可以追溯到破解49的Aleph One。这里有一个图形,详细说明了创建ROP的悠久历史。从本质上讲,这是我自己进行研究的路线图。
可以明确回答您的问题的论文是“无辜的人肉几何:在没有函数调用的情况下返回libc(在x86上)”,这已经引起了恐怖。在其中提供的伪代码告诉您我们正在寻找“无聊序列”,它在第2节中使用伪代码进行了完整定义。后来的论文证明了ROP本质上是跨架构的,我们可以使用jbh讨论过的某些jmp序列。
这里是我未经同行评审的未发表摘要的链接。其中包括参考文献列表,我将在这里放置:
1 FX&Halvar Flake,我们可以从这里获取。 Defcon 12 Media
存档,
http://www.defcon.org/html/links/dc-archives/dc-12-archive.html
2 Alan Turing。 “关于可计算数,并应用于
Entscheidungsproblem”,《伦敦数学学会学报》,
(1937年,第2卷,第2卷)
3 Nergal.The高级返回lib(c)漏洞(PaX案例研究).Phrack Mag-azine,58(4),2001年12月。
http://www.phrack.org/archives/ 58 / p58_0x04_Advanced%20return-to-lib(c)%20exploits%20(PaX%20case%20study)_by_nergal.txt。
4 Hovav Shacham。骨头上无辜的肉的几何形状:
不带函数调用的返回libc(在x86上)。 CCS '07
[14]第14届ACM计算机和通信安全会议论文集,
[5] Erick Buchanan,Ryan Roemer,Hovav Shacham和Steven Savage。当
好的指令变坏时:将面向返回的编程推广到RISC。第15届ACM计算机和通信安全性会议的CCS '08会议记录
[6] ASCC参考室
http://www-03.ibm.com/ibm/历史记录/展览/markI/markI_feeds.html
[7]AurélienFrancillon,Claude Castelluccia。哈佛建筑设备上的代码注入攻击。第15届ACM会议计算机和通信安全性CCS '08会议记录
[8]处理器– ARM。 http://www.arm.com/products/processors/index.php
[9]维基百科。 ARM9的。 http://en.wikipedia.org/wiki/ARM9#Chips
[10] Stephen Checkoway,Hovav Sacham等。等面向返回的
编程,没有返回。第17届ACM计算机和通信安全会议的CCS '10会议记录
[11] Ryan Roemer,Erik Buchanan,Hovav Shacham,Stefan Savage。
面向返回的程序设计:系统,语言和应用程序。
ACM信息和系统安全事务(TISSEC)-特刊
《计算机和通信安全性》第15卷第1期,3月
2012年。
评论
在x86程序集中:将dword 0按下,退出。@nrz是的!那是一个可以接受的例子!谢谢:)
ROP小工具并不一定总是以返回结尾,也可以以调用寄存器或函数结尾。
@jbh可以吗?您能给我一些更详细的例子或材料吗?谢谢!
@ user3215由于长度而回答了