什么是 DEP

问题描述:

什么是 DEP
1个回答 分类:综合 2014-10-26

问题解答:

我来补答
Windows XP SP2 中的数据执行保护功能的详细说明
文章 ID : 875352
最后更新日期 : 2004年8月18日
版本 : 1.0
本页内容
概要
简介
更多信息
概要
Microsoft Windows XP Service Pack 2 使用一项新的数据执行保护 (DEP) 功能,可禁止执行数据页中的代码.当尝试运行标记的数据页中的代码时,就会立即发生异常并禁止执行代码.这可以防止攻击者使用代码致使数据缓冲区溢出,然后执行该代码.
简介
数据执行保护 (DEP) 是 Microsoft Windows XP Service Pack 2 (SP2) 支持的一种处理器功能,它禁止在标记为数据存储的内存区域中执行代码.此功能也称作“不执行”和“执行保护”.当尝试运行标记的数据页中的代码时,就会立即发生异常并禁止执行代码.这可以防止攻击者使用代码致使数据缓冲区溢出,然后执行该代码.
更多信息
数据执行保护 (DEP) 有助于防止病毒和其他安全威胁造成破坏,它们的攻击方法是从只有 Windows 和其他程序可以使用的内存位置执行恶意代码.此类威胁使用以下方法造成破坏:它接管某个程序正在使用的一个或多个内存位置,然后进行传播并破坏其他程序、文件甚至您的电子邮件联系方式.
与防火墙或防病毒程序不同,DEP 不能阻止在您的计算机上安装有害程序.但是,它会监视您的程序,以确定它们是否安全地使用系统内存.为此,DEP 软件会单独或与兼容的微处理器一起将某些内存位置标记为“不可执行”.如果某个程序尝试从受保护的位置运行代码,DEP 将关闭该程序并通知您.即使该代码不是恶意代码,也会执行此操作.
64 位 Windows 版本上的 DEP
64 位处理器上的 64 位 Windows 版本可以在 64 位模式下运行程序.无论处理器的结构如何,64 位 Windows 版本的内核模式 DEP 均适用于堆栈、页面缓冲池和会话池.
默认情况下,在 Windows XP SP2 中启用 DEP,并且无法将其禁用.64 位应用程序将无法从堆栈或默认进程堆中运行.对于需要分配可执行内存的应用程序,可使用带有某个 PAGE_EXECUTE* 内存属性的 VirtualAlloc( ) 来运行.
32 位 Windows 版本上的 DEP• 用户模式 DEP
在不久的将来,许多运行 Windows 和 Windows 兼容程序的计算机都将使用运行 32 位 Windows 版本的 32 位处理器.但是,AMD Opteron 和 Athlon-64 等新的处理器同时支持 32 位和 64 位操作模式.(32 位操作模式是旧模式;而 64 位操作模式是本机模式.)
同时支持 32 位和 64 位操作模式的新处理器可以在 32 位操作系统和 32 位应用程序环境中运行,在启用物理地址扩展 (PAE) 模式后,它们还可以使用 DEP.
我们将探讨分别为每个 32 位应用程序禁用或启用 DEP 的方法.默认情况下,为 64 位应用程序启用 DEP.DEP 异常将导致 Windows 系统上出现状态代码 STATUS_ACCESS_VIOLATION (0xc0000005).在大多数进程中,这是一个未经处理的异常,并导致进程终止.
• 内核模式 DEP
对于用户模式和内核模式,DEP 的工作原理相同.在内核模式下,不能分别为每个驱动程序启用或禁用内存区域 DEP.默认情况下,在 32 位 Windows 版本上,DEP 仅适用于堆栈.在 64 位 Windows 版本上,DEP 适用于堆栈、页面缓冲池和会话池.内核模式下的访问冲突将导致出现 Bugcheck 0x000000FC:ATTEMPTED_EXECUTE_OF_NONEXECUTE_MEMORY.
兼容性问题
应用程序和驱动程序都可能会发生 DEP 兼容性问题.• 应用程序兼容性
有些应用程序行为可能与 DEP 不兼容.执行动态代码生成(如实时代码生成)的应用程序以及不使用“执行”权限明确标记生成的代码的应用程序与 DEP 之间可能存在兼容性问题.
试图违反 DEP 的应用程序将会出现异常,并显示状态代码 STATUS_ACCESS_VIOLATION (0xc0000005).如果应用程序需要可执行内存,则必须在相应的内存中明确设置此属性,方法是在 Virtual* 内存分配函数的内存保护参数中指定 PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE 或 PAGE_EXECUTE_WRITECOPY.
有关更多信息,请参阅下面的 MSDN 文章:
http://msdn.microsoft.com/security/productinfo/XPSP2/memoryprotection/exec_imp.aspx
• 驱动程序兼容性
驱动程序与 DEP 的兼容性问题主要是指由 PAE 模式引起的兼容性问题.DEP 本身可能与以下驱动程序之间存在兼容性问题:执行代码生成的驱动程序或使用其他方法实时生成可执行代码的驱动程序.始终为 64 位 Windows 版本上加载的驱动程序启用 DEP 支持.尽管许多创建可执行代码的驱动程序在 Windows XP SP2 中可能已得到修复,但是不能保证所有驱动程序都已更新.
不过,因为使用这些方法的驱动程序非常少,所以 DEP 本身不会产生很多驱动程序兼容性问题.大多数驱动程序兼容性问题与在 32 位系统上运行 PAE 模式有关.如果启用 PAE 模式,有些驱动程序可能无法加载,这是因为该设备可能无法进行 64 位寻址,或者驱动程序可能假定 PAE 模式需要超过 4 GB 的 RAM.这些驱动程序认为,当它们处于 PAE 模式时,它们将始终接收 64 位地址,并认为它们(或其设备)无法解释该地址.
其他驱动程序可通过直接修改系统页表项,以便在 PAE 模式下进行加载,但这会导致系统不稳定.这些驱动程序需要 32 位页表项,但在 PAE 模式下它们收到的却是 64 位页表项.驱动程序与 PAE 之间最大的兼容性问题与直接内存访问 (DMA) 传输和映射寄存器分配有关.许多支持 DMA 的设备(通常是 32 位适配器)都无法进行 64 位物理寻址.当设备在 32 位模式下运行时,它可以对所有物理地址空间进行寻址.
在 PAE 模式下,数据可以位于大于 4 GB 的物理地址中.在此情况下,为使具有这些限制的设备能够正常工作,Windows XP SP2 通过提供由映射寄存器指示的 32 位地址,为 DMA 事务提供双缓冲处理.设备可以执行到 32 位地址的 DMA 事务,而且内核将内存复制到为驱动程序提供的 64 位地址.
当系统在禁用 PAE 的情况下运行时,32 位设备的驱动程序根本不需要实际内存来支持它们的映射寄存器.这意味着,不需要进行双缓冲处理,因为 32 位地址空间中包含所有设备和驱动程序.根据在基于 x86 和基于 x64 的计算机上对 32 位设备驱动程序进行的测试,大多数经过客户端测试并支持 DMA 的驱动程序都需要无限制的映射寄存器.
为限制兼容性问题,Windows XP SP2 对硬件抽象层 (HAL) 进行了更改以模拟 32 位 HAL DMA 行为.修改后的 HAL 使系统在 PAE 模式下运行时可以具有无限制的映射寄存器.另外,内核内存管理器忽略任何大于 4 GB 的物理地址.
由于对 HAL 和内存管理器进行了这些更改,我们预计运行 Windows XP SP2 且支持 DEP 的系统上的设备驱动程序兼容性问题将会降到最低.
 
 
展开全文阅读
剩余:2000
下一页:奇偶性的应用。