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

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

2018-5-9 11:11
9804

我们在之前的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 工作原理的详细信息, 请参阅以下文章: http://technet.microsoft.com/en-us/library/bb457155.aspx。


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

    这篇文章(https://technet.microsoft.com/en-us/library/cc700810.aspx)在解释了如何使用 boot.ini 或 GUI 配置 windows XP SP2 和 windows Server 2003 SP1 上的内存保护设置。请注意, 配置 "系统范围" DEP 策略需要管理员权限。

windows Vista 和 windows Server 2008

    要在 Windows Vista 和服务器2008上配置系统范围的 DEP 策略, 请从高权限的命令提示符处使用 bcdedit.exe 控制台应用程序修改启动配置数据库。如何执行此操作的更多信息: https://docs.microsoft.com/zh-cn/windows-hardware/drivers/devtest/boot-parameters-to-configure-dep-and-pae

将 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的选项。



[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

收藏
免费 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
游客
登录 | 注册 方可回帖
返回
//