数据执行保护(Data Execution Prevention,简称DEP)操作系统中的一项安全功能,旨在防止恶意代码利用缓冲区溢出漏洞执行。它通过将内存的某些区域标记为不可执行,从而防止从这些区域执行代码。这适用于所有程序,包括第三方程序,而不仅仅是Windows系统组件和服务。。根据设置,DEP的保护范围和严格程度会有所不同。
1. **为所有程序和服务启用DEP**:这种模式被称为“AlwaysOn”,它为所有程序和服务启用了DEP保护,不允许任何程序从受保护的内存区域执行代码。这种模式提供了最大程度的保护,但可能会影响一些旧版软件的兼容性。在64位操作系统上,默认情况下DEP就是以这种方式启用的。
2. **仅为基本Windows程序和服务启用DEP**:这种模式被称为“Option”,它只对Windows系统组件和服务启用DEP保护,而对其他第三方应用程序则不启用。这样既可以保护系统关键组件不受恶意代码的侵害,又能避免影响大多数第三方应用程序的正常运行。这是DEP的默认设置,在一些旧的Windows版本中,可以通过系统属性中的“数据执行保护”选项卡进行配置。
为所有程序和服务启用DEP与仅为基本Windows程序和服务启用DEP的主要区别在于保护范围和潜在的兼容性问题。当您选择“为所有程序和服务启用DEP”时,DEP将会对计算机上运行的所有程序进行监控,以确保它们安全地使用系统内存,从而提供更高级别的安全保护。然而,这也可能导致一些较旧的或不兼容的程序出现问题或无法运行。
相反,选择“仅为基本Windows程序和服务启用DEP”则仅对Windows系统组件和服务提供保护,这可以减少对第三方程序的干扰,但相应地降低了对某些潜在威胁的防护。这种模式通常足以满足大多数用户的需求,同时保持系统的稳定性和兼容性。
在“仅为基本Windows程序和服务启用DEP”的配置下,DEP仅对关键的Windows系统组件和服务提供保护,但这种模式可以被应用程序动态关闭。这意味着,如果第三方程序确定它们不会受到缓冲区溢出攻击的影响,或者它们需要执行某些特定的内存操作,它们可以选择关闭DEP。然而,这可能会使这些程序容易受到攻击,然后可能会传播到计算机上的其他程序和文件
数据执行保护开启步骤如下:
1. **打开系统属性**:
- 在Windows搜索栏中输入“系统”,然后打开它。
2. **进入高级系统设置**:
- 在系统属性窗口中,点击“高级”选项卡,然后点击“设置”按钮旁边的“性能”部分。
3. **打开数据执行保护选项**:
- 在性能选项窗口中,点击“数据执行保护”选项。
4. **选择DEP策略**:
- 在数据执行保护窗口中,可以选择以下选项之一:
- 仅为基本Windows程序和服务启用DEP。
- 为所有程序和服务启用DEP。
5. **应用更改**:
- 选择适当的选项后,点击“应用”按钮来保存更改。
6. **重启计算机**:
- 为了使更改生效,需要重启计算机。
7. **验证DEP状态**:
- 打开“命令提示符”(以管理员身份)。
- 输入命令 `wmic OS Get DataExecutionPrevention_SupportPolicy` 并按回车键。
- 系统将返回一个数字,代表DEP的当前状态:
- **0**:所有进程都禁用DEP。
- **1**:所有进程均启用DEP。
- **2**(默认):仅对Windows系统组件和服务启用DEP。
8. **验证DEP状态是否生效**:
运行包含故意制造缓冲区溢出的代码,例如使用不安全的gets函数。如果DEP生效,尝试运行该程序时,程序应该会因违反DEP规则而被操作系统终止
缓存区溢出代码示例:
#include <stdio.h> #include <stdlib.h> int main() { // 声明一个大小为256的字符数组 char buffer[256]; // 通过gets函数填充buffer,这是一个危险操作,因为它不检查边界 printf("请输入一些文本:"); gets(buffer); // 尝试执行buffer中的代码 // 如果DEP生效,此操作将导致程序被操作系统终止 ((void (*)())buffer)(); return 0; }