ROP攻击技术

本文详细介绍了ROP(Return-oriented programming)攻击技术,解释了x86_64架构如何通过寄存器传递参数使得传统的攻击方式失效,以及ROP如何通过利用libc中的短指令序列实现任意逻辑。通过实例展示了如何构造ROP指令序列实现system函数调用,证明了ROP的图灵完备性,即能够实现复杂的计算逻辑。
摘要由CSDN通过智能技术生成

原文地址:


http://blog.csdn.net/linyt/article/details/48738757



背景

前面介绍了ret2libc和ret2plt,这两个攻击技术的相通点是函数参数是通过压栈来传递,这也是i386架构的调用约定。然而随着64位服务器的普及,以及后来越来越广泛,以致几乎所有服务器都升级到64位的硬件上。

x86_64天生具有免疫力

根据X86_64 ABI的调用约定函数间传递参数不再以压栈的方式,而是以寄存器方式传递参数,前面6个参数依次以rdi, rsi, rdx, rcx, r8和r9寄存来传递。

Linux系统,64位架构只使用48位的虚拟地址空间,也即每个地址高16位全部为0,因此在64位系统上,地址已天然零化。

前面介绍的攻击方法似乎一夜之间没有用武之地,很快安全人员在ret2plt攻击方法基础上,做了一个升级片本的攻击方法,称为ROP(Return-oriented programming)方法。

何谓ROP

顾名思义ROP,就是面向返回语句的编程方法,它借用libc代码段里面的多个retq前的一段指令拼凑成一段有效的逻辑,从而达到攻击的目标

为什么是retq,因为retq指令返到哪里执行,由栈上的内容决定,而这是攻击者很容易控制的地址。

那参数如何控制,就是利用retq执行前的pop reg指令,将栈上的内容弹到指令的寄存器上,来达到预期

一段retq指令未必能完全到想攻击目标的前提条件,那可在栈上控制retq指令跳到另一段retq指令表,如果它还达不到目标,再跳到另一

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值