深入理解DEP缓解技术(第一部分)

本文详细解析数据执行保护(DEP)技术的工作原理、启用方式及风险,涵盖硬件/软件协同机制、系统级/进程级配置策略,以及与其他安全技术(如ASLR)的协同防御效果。

我们已在近期多篇博客(1, 2, 3, 4)中提及DEP技术。本篇将解答:

  • 什么是DEP?
  • 如何启用DEP?
  • 不同DEP模式的启用风险?

这是关于DEP缓解技术系列文章的第一部分。

什么是DEP?

DEP(数据执行保护)是通过硬件+软件协同防止执行非可执行内存页代码的解决方案。自Windows XP SP2和Windows Server 2003 SP1起,操作系统会检测CPU是否支持内存页的"非执行"(Intel XD/AMD NX)位保护。

在Windows XP SP2之前,利用程序可从仅分配为PAGE_READWRITE的内存页执行代码。新版本系统中,若CPU支持XD/NX位,对此类内存页的执行尝试会触发STATUS_ACCESS_VIOLATION(0xC0000005)异常。64位进程在64位Windows上强制启用DEP且不可禁用。

DEP的防御强度

DEP虽能增加攻击难度,但可通过return-to-libc等技术绕过。其防御效果需与ASLR、SeHOP、SafeSEH、/GS等技术协同——例如DEP的弱点常被ASLR弥补,二者联用极难绕过(已知绕过方法仅限特定应用场景如IE7)。

如何启用DEP?

支持DEP的硬件运行Windows XP SP2及以上系统时已默认启用。硬件DEP支持四种系统级策略:

  1. Opt-In:仅对显式启用的进程生效(XP/Vista默认)
  2. Opt-Out:对除显式禁用外的所有进程生效(Server 2003/2008默认)
  3. Always On:强制所有进程启用(可能引发兼容性问题)
  4. Always Off:全局禁用

系统配置方法

  • XP SP2/Server 2003 SP1:通过boot.ini或GUI配置(需管理员权限)
  • Vista/Server 2008:使用bcdedit.exe修改启动配置数据库

兼容性问题

“Always On"模式可能导致:

  1. ATL 7.1之前版本因动态生成代码引发DEP崩溃(Opt-In模式下通过"ATL thunk模拟"规避)
  2. Office打开含VBA宏的文档时可能崩溃

进程DEP状态检测

使用Process Explorer查看进程DEP状态(View->Select Columns->Process DEP status)。进程启用DEP的判定逻辑包括:

  1. 系统策略设为AlwaysOn
  2. 应用兼容数据库标记为Opt-In
  3. 系统策略为OptOut且未显式禁用
  4. 可执行文件通过/NXCOMPAT链接器选项编译(Vista+)
  5. 注册表Image File Execution Options中设置ExecuteOptions=0(Vista+)
  6. 进程调用SetProcessDEPPolicy API(Vista SP1/XPSP3/Server 2008)

进程级DEP策略实现

XP SP2/Server 2003 SP1

通过应用兼容数据库(sysmain.sdb)启用,使用"AddProcessParametersFlags"或"EnableDEP"兼容性修复标记。例如Windows组件进程默认启用:

Vista/Server 2008+新增方式

  1. /NXCOMPAT链接选项:使用Visual Studio 2003+链接器编译时添加该标记

    1
    
    dumpbin /headers dllhost.exe
    

    输出中含"NX compatible"即生效

  2. ExecuteOptions注册表项:强制进程启用DEP(禁用ATL thunk模拟)

  3. SetProcessDEPPolicy API:新系统版本支持动态启用(保留ATL thunk模拟能力)

开发者建议

建议ISV采用DEP等缓解技术。当前Acrobat/Flash/QuickTime/JRE 6 Update 12等均已支持。ATL相关DEP崩溃解决方案见KB948468。

(第二部分将演示如何通过调整DEP策略防御实际攻击)

本文内容"按原样"提供,不具任何保证
[原始附件:AddProcessParametersFlags - XPSP2.txt]

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计