为所有程序启用 DEP(数据执行保护)是否值得冒险?

信息安全 视窗 记忆
2021-08-15 21:07:54

Windows 中的数据执行保护据说是通过“监视您的程序以确保它们安全地使用计算机内存”来防御恶意代码的一道防线。但是,我也知道并非所有程序都是为 DEP 制作的,如果“安全”应用程序被阻止并被视为不安全,可能会导致崩溃和其他问题。

在 DEP 设置面板(下面的屏幕截图)中,我可以为我计算机上安装的所有程序启用此服务。

在此处输入图像描述

DEP 是否真的可以防止漏洞利用(假设我已经拥有良好的 AV 和防火墙),还是不值得冒兼容性风险?

1个回答

要了解 DEP 的作用,您首先需要了解一点内存在进程中的布局方式。关键概念是代码(CPU 可以执行的指令)和数据(堆栈和对象)存在于不同的内存区域中。用户输入、文件、程序数据等都存在于内存的数据区域中。

DEP 允许通过将内存中的代码页标记为“可执行”来强制执行这种分离。通过类似地不标记数据页,处理器现在可以识别内存区域何时用于 CPU 指令,何时不是。作为一种保护,CPU 将发生故障,允许操作系统在启用 DEP 并且处理器发现自己试图从数据内存运行代码时终止进程。

总之,这意味着用户不能简单地输入包含可执行代码的数据,并通过漏洞将处理器的指令指针指向该数据,然后开始执行代码,这在广泛采用 DEP 之前是可能的。

作为一种安全机制,这是缓解在系统上运行任意/恶意代码的漏洞利用的一种策略。然而,现代漏洞利用通常能够击败 DEP。

我从来没有遇到过不能处理 DEP 的程序,而且自从它首次在 Windows XP SP2 中提供以来我就启用了它。这并不是说没有可能被它破坏的程序,而是现代程序,即使是像网络浏览器这样极其复杂的程序,都能够在启用 DEP 时运行。

鉴于上面屏幕截图所示对 DEP 的硬件支持以及对 DEP 的广泛现代应用程序支持(以及更高级的缓解措施,如 ASLR),您不应该注意到启用 DEP 的任何性能差异,并且在禁用它时提供了一些额外的安全性。鉴于此,我认为只为系统服务运行 DEP 没有任何意义:为所有内容运行它并没有什么坏处。如果您遇到由于 DEP 导致崩溃的问题,您可以将该单个程序添加到黑名单中,尽管我也会考虑找到一个更新的产品,并且我绝对不允许面向 Internet 的应用程序在没有 DEP 的情况下运行(以及所有其他可用的利用缓解措施)已启用。我不知道在全球范围内启用 DEP 会带来风险:我'