客户端攻击(Client-side-Exploit)值攻击者构造畸形数据发送给目标主机,用户在使用该含有漏洞的客户端应用程序处理这些数据时,发生程序内部处理流程的错误,执行了内嵌与数据中的恶意代码,从而导致了渗透入侵。常见于浏览器、Office为代表的流行应用软件。
基础知识
客户端渗透攻击特点
应用程序一般有三个模式:
- 客户端/服务端模式(C/S)
- 浏览器/服务端模式(B/S)
- 纯客户端模式。
客户端渗透就是针对这些客户端应用软件的渗透攻击。
对于前两者,以IE浏览器举例,攻击者发送一个访问连接给用户,该链接指向服务器上的一个恶意网页,用户访问该网页就会触发安全漏洞,执行嵌在网页内部的恶意代码,导致攻击发生。 纯客户端模式的攻击如Adobe、Office为例,通过社会工程学探测到目标用户的邮箱,即时通信账户个人信息,净额以文档发送给用户,打开文档就会触发恶意漏洞。
安全防护机制
DEP(数据执行保护) 基本原理是操作系统通过设置内存也得操作,知名数据所在的内存也为不可执行。若在这种页面执行指令,CPU会抛出异常。所以DEP需要CPU的支持,AMD和Intel都为此做了设计,AMD是No-Execute Page-Protection(NX),Intel的是Execute Disable Bit(XD)。
ASLR(地址空间布局随机化) 指系统在运行时,不用固定的基地址加载进程及相关的库文件。主要包括一下几个方面:堆地址的随机化、栈地址的随机化、PE文件基址的随机化、PE文件映像机制的随机化、PEB(Process Environment Block)、TEB(Thread Environment Block 或 Win32 Thread Information Block(TIB))地址的随机化。
针对浏览器的渗透攻击
攻击面
主要包括两大类:
1. 对浏览器程序本身的渗透攻击 2. 对浏览器内嵌的渗透攻击
Metasploit的针对windows系统下浏览器渗透攻击模块位于/exploits/windows/browser
堆喷射利用方式
In computer security, heap spraying is a technique used in exploits to facilitate arbitrary code execution. The part of the source code of an exploit that implements this technique is called a heap spray.[1] In general, code that sprays the heap attempts to put a certain sequence of bytes at a predetermined location in the memory of a target process by having it allocate (large) blocks on the process's heap and fill the bytes in these blocks with the right values.
堆喷射技术本身并不能造成什么安全问题,但是通过对喷射可以提高渗透成功的几率。
大部分针对浏览器的渗透攻击都会涉及该技术,主要由于在溢出客户端程序后,还要去执行不知在缓冲区的Shellcode,而Shellcode的地址必须是事先准备好的。在操作系统堆栈缓冲区加强后,攻击者在溢出楼哦东之后可能只能改变一个4字节程序内部的指针,难以一开溢出这个漏洞来获得一个稳定缓冲区来布置Shellcode。所以在溢出漏洞前,需要寻找一个稳定的内存区来存放Shellcode。。
堆喷射就是这样工作的,在溢出漏洞前,攻击者在兑取申请大量充满控制领的内存块,每个都尾随Shellcode。在溢出之后,根据内存块总体的大小,修改溢出知乎返回地址到这个对空间。由于空指令在这个空间中占了绝大部分提及,所以更大的可能性是返回地址在空指令区,而不是Shellcode所在的空间,这样当跳转至这段空间时,程序会先执行空指令,进而执行Shellcode。
堆喷射例子
下面Js代码
1 | js = %Q| |
- 在于200MB的内存空间即从0x00000000 ~ 0x0c800000。0x0C800000大于0x0C0C0C0C,所以只要程序在申请堆内存之前没有用掉这段空间,就可以使这个地址在布置的缓冲区内。
- 使用0x0C0C0C0C而不是0x0a0a0a0a是因为堆增长的方式是从低地址向高地址增加的,地址越高被程序提前占用的可能越小。0C是为了考虑4字节对齐问题,只要覆盖了附表地址,就肯定是0x0C0C0C0C,而不会是别的。
- 在比0x0c800000小的地址符合条件的只有0x0C0C0C0C。
- **除此之外0x0C0C0C0C也可作为空指令来顶替前面的0x90909090等等来填充堆区,这样的话就相当于在做堆喷射*
0x0C0C0C0C不唯一,要根据申请空间的大小来选择地址。2010年的BlackHat上便提出了JIT Spraying,吸收了堆喷射的思想,绕过了Windows7的DEP+ASLR组合。
MSF中自动化浏览器攻击
下面使用msf中的server/browser_sutopwn模块演示对WinXP SP3浏览器的攻击过程
1 | msf5 auxiliary(server/browser_autopwn) > show options |
v1.5.2