首页
社区
课程
招聘
[翻译]DEP缓解技术(一)
发表于: 2018-5-9 11:11 10206

[翻译]DEP缓解技术(一)

2018-5-9 11:11
10206

我们在之前的1234个博客中提到过DEP。这篇博客将会回答以下问题:

1. 什么是DEP?

2. 如何开启DEP?

3. 不同DEP模式的风险有哪些?

这篇文章是DEP缓解技术的第一部分。

DEP(也称“数据执行保护”)是一种软件+硬件的机制,用来阻止从未被显式标记为可执行的内存页执行代码。Windows XP SP2、Windows Server 2003 SP1及其之后的操作系统将会检查CPU是否支持内存页的“不可执行”或“执行禁用”位。


在Windows XP SP2之前,利用代码(exp)会在分配的内存页执行,不需要检查内存保护常量(Memory Protection Constants)。例如,如果使用指定分配权限为PAGE_READWRITE 的VirtualAlloc ()函数分配了内存页, 则仍然可以从该内存页执行代码。从 windows XP SP2 和 windows Server 2003 SP1 开始, 如果 CPU 支持执行禁用 (XD) (针对Intel CPU)或不可执行 (NX)(针对AMD CPU) 位,则任何从被标记为PAGE_READWRITE(例)的内存页执行代码的行为,都将触发 STATUS_ACCESS_VIOLATION (0xC0000005) 访问冲突异常。有关硬件强制 DEP 工作原理的详细信息, 请参阅以下文章: 3b1K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8W2j5$3S2F1k6i4c8Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3u0T1y4o6f1%4x3e0f1#2i4K6u0W2j5i4y4H3P5q4!0q4x3#2)9^5x3q4)9^5x3R3`.`.


DEP 在64bit 版本的 Windows 上为64位进程 "always on(始终开启)"状态, 无法禁用。Windows DEP 策略可以在系统范围内和进程层面进行管理, 下面将讨论这两种方法。这篇文章适用于在32位或64位版本的 Windows 上运行的32位进程。

DEP阻碍了想要成功利用安全漏洞的攻击者。在某些情况下, 攻击者可以使用如return-to-libc这样的利用技术来绕过DEP。DEP本身通常不是一个强健的缓解方法。DEP 是微软开发的缓解技术的重要组成部分,这些缓解技术有ASLRSeHOPSafeSEH/GS等。这些缓解技术相辅相成,例如,DEP 的弱点往往被 ASLR 抵消, 反之亦然。DEP 和 ASLR 共同使用很难绕过。目前已知的绕过方法需要与特定的应用程序上下文结合起来看 (例如, IE7 and earlier bypass from Mark Dowd and Alex Sotirov)。

如果您的硬件支持 DEP, 并且您正在运行 Windows XP SP2 或较新的操作系统, 则您已经在某种程度上使用了DEP。硬件强制 DEP 可以配置为系统范围 (适用于所有进程) 或为单个进程配置策略。在支持DEP的平台上执行系统范围的DEP 策略有四种不同的方法。

windows XP SP2 和 windows Server 2003 SP1

    这篇文章(70dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6@1k6h3y4Z5L8X3g2@1i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8X3I4A6j5Y4u0S2M7Y4W2Q4x3V1k6U0j5K6M7H3x3o6R3I4x3q4)9J5k6h3q4K6M7s2S2Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8e0g2Q4z5f1y4Q4b7e0S2Q4c8e0S2Q4b7e0N6Q4b7e0y4Q4c8e0W2Q4z5o6N6Q4z5p5q4Q4c8e0c8Q4b7V1q4Q4z5o6k6Q4c8e0g2Q4b7e0k6Q4z5o6u0Q4c8e0c8Q4b7V1c8Q4z5e0g2Q4c8e0c8Q4b7V1c8Q4b7V1k6Q4c8e0N6Q4z5e0c8Q4b7e0R3`. boot.ini 或 GUI 配置 windows XP SP2 和 windows Server 2003 SP1 上的内存保护设置。请注意, 配置 "系统范围" DEP 策略需要管理员权限。

windows Vista 和 windows Server 2008

    要在 Windows Vista 和服务器2008上配置系统范围的 DEP 策略, 请从高权限的命令提示符处使用 bcdedit.exe 控制台应用程序修改启动配置数据库。如何执行此操作的更多信息: 3dbK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3P5X3S2Q4x3X3c8U0L8W2)9J5c8Y4N6A6L8X3c8G2N6%4y4Q4x3X3c8Z5j5i4u0V1N6$3q4J5k6g2)9J5c8X3c8J5K9i4k6W2M7Y4y4Q4x3V1k6V1k6i4k6@1k6i4y4@1i4K6u0r3j5X3!0G2N6q4)9J5k6s2m8S2M7X3q4E0k6i4c8W2M7Y4y4Q4x3X3c8@1L8#2)9J5k6r3y4G2L8X3k6A6k6%4g2J5k6g2)9J5k6r3c8W2M7q4)9J5k6r3q4F1k6q4)9J5k6s2m8S2k6b7`.`.

将 DEP 设置为始终为所有进程启用, 可能会增加应用程序问题的风险,这一风险是因版本7.1 之前的 ATL 版本中的某些行为而导致的。旧版本的 ATL 在运行时生成了机器码,然后试图从未标记为可执行的内存页执行此代码, 从而在开启DEP时导致冲突。如果系统范围的设置是 "选择启用", 则使用名为"ATL thunk emulation" 的进程来避免与ATL相关的 DEP 崩溃。如果 DEP "始终开启", 则不使用 “ATL thunk emulation”。注意: 当DEP设置为"始终开启" , 在打开包含 VBA (Visual Basic应用程序) 的宏 (可能导致 DEP 相关崩溃) 的文档时,Microsoft Office 应用程序存在已知的兼容性问题。

判断进程当前是否使用 DEP 的最简单方法是使用"进程管理器"并将其配置为显示进程DEP状态 (视图->选择列->进程DEP状态), 如下所示:


要确定进程使用 (或不使用) DEP 的原因, 需要进行更多的调查工作。下面是系统决定进程的 DEP 状态的方法。在以后的文章中, 将对每个细节进行详细的探讨。

Windows XP SP2和Windows Server 2003 SP1十分强调安全性。因此许多Windows默认程序通过应用程序兼容性数据库将DEP设置为“选择开启”。要了解哪些程序在 windows XP SP2 或 windows Server 2003 SP1 上 选择启用DEP, 您可以下载并安装最新的应用程序兼容性工具包(Application Compatibility Toolkit)并在该程序 "Windows 组件" 下查看主系统数据库。

如果在 "windows 组件" 类别中应用了兼容性修补标志 "AddProcessParametersFlags", 则所有 Windows XP SP2 应用程序被设置为”选择开启“。


Windows Server 2003 SP1 默认系统策略为 "选择不开启"。这意味着所有未显式指定不开启进程都将启用 DEP。如果更改了系统范围的策略, 则应用程序仍可以使用 EnableDEP 兼容性修复程序启用DEP, 如下所示:


这些兼容性修复程序将PEB 的 ProcessParameters值设置为 0x00020000, 使windows XP SP2 和 windows Server 2003 SP1 可以选择进程是否开启 DEP 。我们在 windows XP SP2 和 windows Server 2003 SP1 中找到了305个进程, 这些进程通过主应用程序兼容性数据库 (%windir%\AppPatch\sysmain.sdb) 使用此特定的兼容性修复程序将DEP设置为“选择开启”。我们在此附上这些进程的列表:点击下载

Microsoft 已在较新的操作系统上为进程提供了选择使用DEP的选项。



[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 4
活跃值: (170)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享,期待更多
2018-5-9 14:25
0
雪    币: 479
活跃值: (411)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2019-12-6 17:12
0
游客
登录 | 注册 方可回帖
返回