使用ROP攻击技术

背景

前面介绍了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指令表,如果它还达不到目标,再跳到另一段retq,直到攻击目标实现。

在ret2plt攻击方法,我们使用PPR(pop, pop, ret)指令序列,实现顺序执行多个strcpy函数调用,其实这就是一种最简单的ROP用法。ROP更是ret2plt的升级版

ROP方法技巧性很强,那它能完全胜任所有攻击吗?返回语句前的指令是否会因为功能单一,而无法实施预期的攻击目标呢?业界大牛已经过充分研究并证明ROP方法是图灵完备的,换句话说, ROP可以借用libc的指令实现任何逻辑功能。

攻击实例

在这里省去对准EIP以及漏洞代码分析,直奔主题,如何构造ROP指令顺列来实现攻击逻辑。

简单起来,攻击目标为实现system(“echo success”) 这个函数调用。

首先,调用system的参数为”echo success”字符串的地址,而字符串是栈注入的内容,那它的地址应该是rsp + offset。而函数调用时,第一个参数是放到rdi寄存里面。 所以需要从libc里面,在retq或者call *reg指令前找到rdi = rsp + offset逻辑等价的指令序顺,发现有如下的两条指令:

0x7ffff7a610a3      lea 0x120(%rsp),%rdi
0x7ffff7a610ab      call    %rax

这样,可以将”echo success”字符串安排在rsp + 0x120的位置。但往下一条指令,要指令call %rax,因此需要在指令这个指令段前控制rax的值必须为system函数的地址。

然后,想将system地址放到rax相当容易,只需要在retq指令令,找到pop rax指令即可,从libc里面查找,发现如下:

0x7ffff7a3b076:     pop %rax
0x7ffff7a3b077:     pop %rbx
0x7ffff7a3b078:     pop %rbp
0x7ffff7a3b0f9:     retq

于是,构建如下的执行顺序:

pop %rax <— 这里弹出system函数地址

pop %rbx

pop %rbp

retq <— 这里从栈中跳到下段指令

lea 0x120(esp), %rdi <– 需要安排好”echo success”位置,使得此时的rsp + 0x120刚好是字符串地址

call *%rax <– 调用system,参数刚好。

通过gdb查看system函数的地址:

(gdb) p system
$4 = {<text variable, no debug info>} 0x7ffff7a61310 <system>

于是栈注入内容就很容易:

0x7fffff7a3b076 + address of system + dummy1 + dummy2 + 0x7ffff7a610a3 +dummy(0x120) + “echo success”

攻击图示

上面的攻击实例中,指令的执行过程和栈注入内存布局如下图所示。

ROP可以为所欲为

上面提到已有研究员称ROP攻击借用的多个代码片段串起来的程序逻加是图灵完备的,也即这个程序包含顺序执行语句(这个当然是废话),还有分支语句,甚至有循环语句。

稍有反编译或者逆向工程经验,或者对C语言生成的汇编结构熟悉都知道,retq指令是函数的返回指令,在此之前的指令是弹栈指令(如pop rax, pop rbx等),怎么可以出现分支指仅(bne等),甚至循环指令呢?

是的,这个是事实,但不是事实的全部。如果将glibc进行逆向工程,会发现retq指令前向全是清一色的pop指令,但是事实上攻击者总是不按常规出牌。

X86指令集是CISR指令集,密集度很高,一条指令中的一部分,也可能是一条新指令。

攻击者就是利用这一点,不按常规出牌。retq指令就只有一个字节,是C3。通过编写工具,对glibc进行扫描,把C3的指令内容找到,然后向前解码各种可能的指令,形成一个指令表。这些指令表会是非常丰富,有运算指令,转跳指令,以及访存指令。利用它们可以形成图灵完备的计算逻辑。

版权声明:本文为博主原创文章,承蒙转载请注明作者和出处

时间: 2024-08-06 19:26:37

使用ROP攻击技术的相关文章

【转】针对Android上的ROP攻击剖析

引言       ROP(Return-oriented programming),即“返回导向编程技术”.其核心思想是在整个进程空间内现存的函数中寻找适合指令片断(gadget),并通过精心设计返回堆栈把各个gadget拼接起来,从而达到恶意攻击的目的.构造ROP攻击的难点在于,我们需要在整个进程空间中搜索我们需要的gadgets,这需要花费相当长的时间.但一旦完成了“搜索”和“拼接”,这样的攻击是无法抵挡的,因为它用到的都是内存中合法的的代码,普通的杀毒引擎对ROP攻击是无计可施的. 栈溢出

Web 缓存欺骗攻击技术详解

你是否曾想过你只需要访问如:https://www.paypal.com/myaccount/home/stylesheet.css或https://www.paypal.com/myaccount/settings/notifications/logo.png这样的链接就可能会泄露你的敏感数据,甚至允许攻击者控制你的帐户? Web缓存欺骗是一种新的Web攻击向量,这种攻击技术的出现使得多种Web缓存技术和框架面临风险. Web缓存和服务器反应的一点介绍 很多网站通常都倾向于使用web缓存功能(

小心公共wifi 之小白客带你走进黑客世界:kali linux下的无线攻击技术

本文标签: 黑客世界 wifi安全 无线攻击技术 公共wifi不安全 kali+linux 原文地址:http://whosmall.com/?post=460 我们常说公共wifi不安全,那么到底不安全在哪些地方呢?当不怀好意者和你同在一个wifi下,你的手机或者笔记本会被监听吗?除了上网被监视以外,还会产生什么不好的后果?介于小伙伴们对于wifi这一块比较感兴趣,在这篇文章里,就先为大家普及一下在公共wifi下究竟有多危险. 实验环境 一台装有kali linux的笔记本(模拟攻击者)ip地

协议欺骗攻击技术常见种类简析及防范

IP欺骗攻击 IP欺骗技术就是通过伪造某台主机的IP地址骗取特权从而进行攻击的技术.许多应用程序认为如果数据包能够使其自身沿着路由到达目的地,而且应答包也可以回到源地,那么源IP地址一定是有效的,而这正是使源IP地址欺骗攻击成为可能的前提. 假 设同一网段内有两台主机A.B,另一网段内有主机X.B 授予A某些特权.X 为获得与A相同的特权,所做欺骗攻击如下:首先,X冒充A,向主机 B发送一个带有随机序列号的SYN包.主机B响应,回送一个应答包给A,该应答号等于原序 列号加1.然而,此时主机A已被

《图解Http》 10,11章:构建Web的技术, Web的攻击技术

10.2动态HTML 通过调用客户端脚本语言js,实现对web页面的动态改造.利用DOM文档对象模型,指定想发生变化的元素. 10.22 更容易控制的DOM 使用DOM可以将HTML内的元素当作对象操作. 10.3 Web应用 10.31通过Web提供功能的Web应用. 10.32 与web服务器协作的CGI Common Gateway Interface 通用网关接口:指服务器收到客户端发过来的请求后,转发给程序的一组机制. 10.4 数据发布的格式,语言 10.41 XML (extens

反爬虫和抗DDOS攻击技术实践

导语 企鹅媒体平台媒体名片页反爬虫技术实践,分布式网页爬虫技术.利用人工智能进行人机识别.图像识别码.频率访问控制.利用无头浏览器PhantomJS.Selenium 进行网页抓取等相关技术不在本文讨论范围内. Cookie是什么 大家都知道http请求是无状态的,为了让http请求从"无状态" to "有状态" , W3C 在 rfc6265 中描述了整个http协议的状态机制,既从客户端(通常是浏览器)到服务器端的流转过程,cookie 的引入使得 服务器在 接

HTTP通信安全和Web攻击技术

一.HTTPS,确保Web安全 在HTTP协议中可能存在信息窃听或身份伪装等安全问题,HTTP的不足: 通信使用明文(不加密),内容可能会被窃听  不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡改 1.通信使用明文可能会被窃听 HTTP本身不具有加密的功能,HTTP报文使用明文方式发送.另外TCP/IP协议的的通信机制,通信内容在所有的通信线路上都有可能遭到窥视.即使已经过加密 处理的通信,也会被窥视到通信内容.窃听相同段上的通信并非难事,只需要收集在互联网上流动

前端学HTTP之web攻击技术

前面的话 简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象.应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标.本文将详细介绍攻击web站点的手段 总括 与最初的设计相比,现今的Web网站应用的HTTP协议的使用方式已发生了翻天覆地的变化.几乎现今所有的Web网站都会使用会话(session)管理.加密处理等安全性方面的功能,而HTTP协议内并不具备这些功能 从整体上看,HTTP就是一个通用的单纯协议机制.因此它具备较多优势,但是在安全

浅谈无线攻击技术思路

本文只是简单叙述一些无线攻击的思路跟攻击工具,并无原理性的东西,等待下篇会介绍一些工具的原理性的东西跟常见工具的使用.写这篇文章目地只是为了不熟悉无线的童鞋了解. 一.无线钓鱼的几种方式 1:无Portal认证 1.本地建软ap 直接抓包(前提是有无线网卡 台式机不行没无线网卡) 2.利用3g路由器建立ap 连接路由器嗅探 3.刷dd-Wrt OpenWrt 直接抓包 安装tcpdump 2:有Portal认证 1.刷dd-wrt openwrt 利用wifidog做认证 2.本地建ap dns