分享

冷门但每天都用到的安全技术:数据执行保护

 吴雨虹2kzpi83a 2020-08-15

1 数据执行保护(DEP)技术概述

前面的文章介绍过,缓冲区溢出存在的根本原因是系统无法分辨出内存中哪些是数据,哪些是执行的代码。而数据执行保护(Data Execution Prevention,以下简称 DEP)就是针对这一问题提出的解决技术。

DEP 能够自动在程序执行时将其可执行代码所占用的区域标记出来,支持 DEP 的 CPU 利用一种叫做“No execute 不执行”的技术识别标记出来的区域。如果发现当前执行的代码没有明确标记为可执行(例如程序执行后由病毒溢出到代码执行区的那部分代码),则禁止其执行,那么利用溢出攻击的病毒或网络攻击就无法利用溢出进行破坏了。因此DEP 简单地说可以看作操作系统底层的安全防护机制,本身不具备对病毒检测的功能,但如果有利用漏洞溢出包括本地溢出的病毒发作时,DEP 可以进行防护作用。

DEP技术也需要硬件设备的支持,如果要完整地支持 DEP 必须拥有支持 DEP 技术的 CPU,目前大部分CPU都支持。此外,需要启用硬件DEP,需在BIOS设置中将CPU Configuration下的Execute Disable Function设置为Enable,才可以打开CPU防御病毒的能力。如果 CPU 不支持 DEP,Windows会以软件方式模拟出 DEP 的部分功能。要确定计算机上是否启用了DEP,可打开“系统属性”,依次单击“开始→控制面板”,然后双击“系统”。单击“高级”选项卡,之后单击“性能”下的“设置”,单击“数据执行保护”选项卡。默认情况下,DEP只针对基本Windows操作系统程序和服务启用。要使用DEP帮助保护其他程序,需选择“为下列程序之外的所有程序启用DEP”。如果您的CPU支持DEP并具备相关的技术,则在该选项下面会显示“你的计算机处理器支持基于硬件的DEP。”,如果不支持,则显示“你的计算机处理器不支持基于硬件的DEP,不过,Windows能使用DEP软件防止一些类型的攻击。”,表明使用的是软件DEP。

DEP最早由微软推出,并从 WinXP SP2 和Windows 2003 sp1 开始新增这一功能。因此可能你平时很少听过,但实际上每天都在使用到它。

2.DEP设置

DEP有四种设置选项:

  • 选择启用(Opt-In)。在此模式下DEP仅用于显式选择开启DEP 的进程。这是客户端

    操作系统的默认配置。

  • 选择不启用(Opt-Out)。在这个模式下,DEP是每个进程的默认配置,不需要使用

    DEP的进程应该显式标明。这是服务器操作系统的默认配置。

  • 始终开启(Always On)。无论程序是否与DEP兼容,所有进程都启用DEP。

  • 始终关闭(Always Off)。所有进程都不启用DEP。

其中,前面两种选项可以通过上图中的操作界面设置。但如果想设置后面两种选项,需要通过配置相关文件。在Windows XP SP2 和Windows  2003 sp1中,是通过配置c:\boot.ini文件中的/noexecute值实现。

在之后的Windows版本,可使用微软提供的命令行工具bcdedit.exe来编辑BCD文件开关该功能。比如在命令行下执行命令“bcdedit /set nx alwaysoff”关闭DEP。而要开启所有服务和应用程序的DEP,则执行命令“bcdedit /set nx alwayson”。

注意,修改DEP值后,系统需要重启修改蔡有效。

3 与DEP有关的故障

与数据执行保护支持有关的故障的症状包括:在启用DEP时尝试从内存执行的应用程序中发生访问冲突。在此情况下,将出现一个对话框,指示应用程序因DEP而出现错误。该对话框包含与以下内容类似的消息:

另外一种与DEP有关的错误是BEX错误。

遇到此类问题,先从程序本身方面分析。如果是自己开发的程序,检查一下是否存在缓冲区溢出或内存泄漏的地方;如果是第三方的程序,可以找一下这些程序的更新补丁或最新版本,试下是否已经解决问题。如果还是不能解决,那就设置DEP来解决,即将出问题的程序设置为不启用DEP,但有些应用程序或驱动程序的兼容性不强,即使在DEP中将其放行,它还是不能正常运行,这时就要始终关闭DEP了,兼容性问题虽然解决了,但也少了一堵安全保护的墙。

4 DEP常见问题

  • 如果 DEP 已关闭程序,再次运行该程序是否安全?

安全,但是仅当打开该程序的DEPWindow才可以继续检测那些从受保护的内存位置运行代码的尝试,这样有助于防止受到攻击。

  • 如果 DEP 正在关闭作为 Windows 一部分的程序(如 svchost.exe 或 explorer.exe),我应该做什么?

svchost.exeexplorer.exe程序是Windows操作系统的一部分。如果DEP关闭它们或其他Windows服务,则可能是由其他软件发行者创建的以及在Windows中运行的小程序(例如扩展程序)所导致的。如果最近安装了某个程序,并且注意到DEP关闭了基于Windows 的程序,请与软件发行者核对以查看是否有与DEP 兼容的更新版本可用,或者尝试卸载该程序。

  • 设置DEP时遇到“您不能在64位可执行文件上设置DEP属性”

这个没什么办法,系统就是不支持64位程序的设置。不过网上很多答案说是选择错了程序的路径,应该选择C:\Windows\SysWOW64\下的程序就可以设置成功,因为这才是64位的。这种说法是搞错了基本概念:SysWow64文件夹,是64Windows,用来存放32Windows系统文件的地方,而System32文件夹,是用来存放64位程序文件的地方。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多