数据执行保护DEP
2013-08-14 23:12
134 查看
由于许多通用的漏洞利用方法和大量的蠕虫! 微软决定在硬件层和软件层加入内存保护。所以从windows XP SP2 (Windows XP Tablet PC Edition 2005) , Windows Server 2003 Service Pack 1 (OS level) 开始、从 visual studio 2003 (编译器方面)开始加入了许多内存保护功能。
我简单的介绍下 数据执行保护Data Execution Prevention (DEP)
DEP是用来弥补计算机对数据和代码混淆这一天然缺陷。DEP的作用是阻止数据页(列如堆页,各种堆栈页以及内存池页)执行代码。根据实现的机制不同分为:软件DEP,硬件DEP。软件DEP页就是微软增加的SafeSeh保护,这种机制与CPU硬件无关,safeseh保护就不在本文作介绍了。硬件DEP保护,需要CPU支持,DEP的工作状态可以分为四种。
1- OptIn : DEP只对所有的系统服务和必须的程序有效。(必须的程序:VS中编译时启用了/NXCOMPACT选项的程序)多用于普通用户板的操作系统,windows
xp, windows Vista, windows7(32位)
2- OptOut: DEP对所在系统服务和第三方程序有效,但是你可以从控制面板中设置某些程序为例外。多用于服务器版操作系统windows2003, window2008
3- AlwaysOn : 完全启用DEP保护,没有例外。工作在64位操作系统
4- AlwaysOff :所有进程禁用DEP
在xp系统中 通过编辑boot.ini文件的noexecute段来设置DEP。
怎样攻击DEP?
DEP针对溢出攻击的本源,完善了内存管理机制。同过将内存特设置成不可执行,来阻止堆栈中shellcode的执行。但DEP也有自身的局限性
由于兼容性的原因windows不能对所有进程开启DEP保护(除64操作系统),否则可能会出现异常。当DEP工作在OptIn和OptOut,利用API可以动态关闭DEP,这些API函数的调用没有任何限制,所有的进程都可以调用这些API函数,这也为我们突破DEP铺上大道。
DEP的介绍到此,下面是正面挑战DEP
开启DEP保护是将数据页设置成不可执行,那我们将存放shellcode的内存页修改成可执行状态,或者直接关闭DEP保护不是就OK了,没错正面击败DEP常用的就是使用的这个思想。
(1)通过跳转到ZwSetInformationProcess函数将DEP关闭后再转入shellcode执行。
(2)通过跳转到VirtualProtect函数将存放shellcode所在内存页设置为可以执行,然后在跳到shellcode执行
(3)通过调转到VritualAlloc函数申请一片可执行区域,然后将shellcode拷贝进去,然后去执行shellcode
本文我将主要介绍用第三种方法攻击DEP,因为在做这个实验时遇到了不少的问题,我觉得这个方法也比前两种复杂些,希望大家在看过我的这篇文章后,若有什么好的方法可以一起交流。
实验环境:
操作系统 windowssp3 (在不同平台上shellcode的构造会有差异的)
DEP状态:Optout (为直管绕过DEP,本次试验不开启GS,SafeSeh)
编译器: vc+6.0
build版本 dubeg
使用工具: Ollydbg.exe,OllyFindAddr插件,windbg
首先看
我简单的介绍下 数据执行保护Data Execution Prevention (DEP)
DEP是用来弥补计算机对数据和代码混淆这一天然缺陷。DEP的作用是阻止数据页(列如堆页,各种堆栈页以及内存池页)执行代码。根据实现的机制不同分为:软件DEP,硬件DEP。软件DEP页就是微软增加的SafeSeh保护,这种机制与CPU硬件无关,safeseh保护就不在本文作介绍了。硬件DEP保护,需要CPU支持,DEP的工作状态可以分为四种。
1- OptIn : DEP只对所有的系统服务和必须的程序有效。(必须的程序:VS中编译时启用了/NXCOMPACT选项的程序)多用于普通用户板的操作系统,windows
xp, windows Vista, windows7(32位)
2- OptOut: DEP对所在系统服务和第三方程序有效,但是你可以从控制面板中设置某些程序为例外。多用于服务器版操作系统windows2003, window2008
3- AlwaysOn : 完全启用DEP保护,没有例外。工作在64位操作系统
4- AlwaysOff :所有进程禁用DEP
在xp系统中 通过编辑boot.ini文件的noexecute段来设置DEP。
怎样攻击DEP?
DEP针对溢出攻击的本源,完善了内存管理机制。同过将内存特设置成不可执行,来阻止堆栈中shellcode的执行。但DEP也有自身的局限性
由于兼容性的原因windows不能对所有进程开启DEP保护(除64操作系统),否则可能会出现异常。当DEP工作在OptIn和OptOut,利用API可以动态关闭DEP,这些API函数的调用没有任何限制,所有的进程都可以调用这些API函数,这也为我们突破DEP铺上大道。
DEP的介绍到此,下面是正面挑战DEP
开启DEP保护是将数据页设置成不可执行,那我们将存放shellcode的内存页修改成可执行状态,或者直接关闭DEP保护不是就OK了,没错正面击败DEP常用的就是使用的这个思想。
(1)通过跳转到ZwSetInformationProcess函数将DEP关闭后再转入shellcode执行。
(2)通过跳转到VirtualProtect函数将存放shellcode所在内存页设置为可以执行,然后在跳到shellcode执行
(3)通过调转到VritualAlloc函数申请一片可执行区域,然后将shellcode拷贝进去,然后去执行shellcode
本文我将主要介绍用第三种方法攻击DEP,因为在做这个实验时遇到了不少的问题,我觉得这个方法也比前两种复杂些,希望大家在看过我的这篇文章后,若有什么好的方法可以一起交流。
实验环境:
操作系统 windowssp3 (在不同平台上shellcode的构造会有差异的)
DEP状态:Optout (为直管绕过DEP,本次试验不开启GS,SafeSeh)
编译器: vc+6.0
build版本 dubeg
使用工具: Ollydbg.exe,OllyFindAddr插件,windbg
首先看
LPVOID VirtualAlloc( LPVOID lpAddress, DWORD dwSize, DWORD flAllocationType, DWORD flProtect ); lpAddress:申请内存缓冲区起始地址;(传入0x00300000) dwSize: 申请内存大小 (本实验申请0xFF(256)空间, 这个值注就是因为这里困扰我好久) flAllocationType: 申请空间类型 (0x00001000) flProtect: 申请空间的内存访问类型,(0x00000040 可读可写可执行) 由于参数含有0x00使用strcpy系列函数会造成shellcode截断,所以本实验使用memcpy函数来引发异常。 使用windbg的u 函数名, 反汇编VritualAlloc memcpy函数(为了后面参数准备)。 VirtualAlloc函数最终会去调用VritualAllocEx函数。VritualAllocEx函数多增加了一个参数hProcess,由于是本进程自身,所以传入0xFFFFFFFF 7C809AE1 > 8BFF MOV EDI,EDI 7C809AE3 55 PUSH EBP 7C809AE4 8BEC MOV EBP,ESP 7C809AE6 FF75 14 PUSH DWORD PTR SS:[EBP+14] 7C809AE9 FF75 10 PUSH DWORD PTR SS:[EBP+10] 7C809AEC FF75 0C PUSH DWORD PTR SS:[EBP+C] 7C809AEF FF75 08 PUSH DWORD PTR SS:[EBP+8] 7C809AF2 6A FF PUSH -1 7C809AF4 E8 09000000 CALL kernel32.VirtualAllocEx 函数地址 7C809AF9 5D POP EBP 7C809AFA C2 1000 RETN 10 VritualAlloc函数返回是带有16个字节偏移 memcpy函数 ntdll!memcpy: 7c921db3 55 push ebp 7c921db4 8bec mov ebp,esp 7c921db6 57 push edi 7c921db7 56 push esi 7c921db8 8b750c mov esi,dword ptr [ebp+0Ch] 目的地址(开辟的可执行空间首地址) 7c921dbb 8b4d10 mov ecx,dword ptr [ebp+10h] 复制长度 7c921dbe 8b7d08 mov edi,dword ptr [ebp+8] 源地址存放shellcode 7c921dc1 8bc1
相关文章推荐
- 修复SP2 DEP数据保护执行
- 数据执行保护DEP
- 数据执行保护DEP 案例1
- 如何关闭Win XP SP2中的数据执行保护(DEP)功能
- 关闭VISTA中的数据执行保护 (DEP)
- DEP数据执行保护参数设置
- Windows 缓冲区溢出与数据执行保护DEP
- Windows 缓冲区溢出与数据执行保护DEP
- Windows 缓冲区溢出与数据执行保护DEP
- 关于缓冲区溢出与数据执行保护DEP…
- 关于DEP - 数据执行保护
- 缓冲区溢出与数据执行保护DEP介绍
- 缓冲区溢出与数据执行保护DEP介绍
- [转载]Windows 缓冲区溢出与数据执行保护DEP
- 数据执行保护DEP
- Windows 缓冲区溢出与数据执行保护DEP
- /NXCOMPAT编译选项 : 数据执行保护DEP
- 解决windows的数据访问保护(DEP)导致windows installer不能工作的问题
- windows2003的数据执行保护会造成无法正常安装SQL SERVER
- 如何解决每次登陆服务器弹出:数据执行保护问题