Windows 7下的DEP解析

编辑:王万利

日期: 2010-1-12

    DEP(Data Execution Prevention) 即“数据执行保护”,这是 Windows 的一项安全机制,主要用来防止病毒和其他安全威胁对系统造成破坏。微软从 Windows XP SP2 引入了该技术,并一直延续到此后的 Windows Server 2003 、 Windows Server 2008 中。毫无例外,在 Windows 7 中 DEP 也作为一项安全机制被引入进来。本文将对 Windows 7 下的 DEP 进行一番解析。

    1、 DEP 的安全机制

 

    可以说,溢出是操作系统 ( 应用软件 ) 永远的痛, Windows 7 自然也不例外。所谓溢出主要指缓冲区溢出,就是利用系统 ( 应用软件 ) 漏洞从只有 Windows 和其他程序可以使用的内存位置执行恶意代码从而达到控制系统的目的。如前所述,缓冲区溢出攻击经常在其它程序的内存缓冲区写入可执行的恶意代码,然后诱骗程序执行恶意代码。使用 DEP 的目的是阻止恶意插入代码的执行,其运行机制是, Windows 利用 DEP 标记只包含数据的内存位置为非可执行 (NX) ,当应用程序试图从标记为 NX 的内存位置执行代码时, Windows 的 DEP 逻辑将阻止应用程序这样做,从而达到保护系统防止溢出。

    2、 DEP 的实现方式

微软 DEP 实现采用了两种方式,即硬件强制 DEP 和软件强制 DEP 。硬件强制 DEP ,这需要处理器的支持,不过现在大多数处理器是支持 DEP 的。软件强制 DEP ,这是由 Windows 操作系统在系统内存中为保存的数据对象自动添加的一组特殊指针提供。如何知道自己的处理器是否支持 DEP 呢?右键单击桌面上的“计算机”图标,选择“属性”,在打开的“系统”窗口中点击“高级系统设置”链接打开“系统属性”面板。在“高级”选项卡页面中的“性能”下点击“设置”打开“性能选项”面板。点击“数据执行保护”选项卡,在该页面中我们可确认自己计算机的处理器是否支持 DEP 。如果支持会在底部的一行显示“你的计算机处理器支持基于硬件的 DEP 。”,反之会显示“你的计算机处理器不支持基于硬件的 DEP ,不过, Windows 能使用 DEP 软件防止一些类型的攻击。” ( 图 1)

图1.jpg

   ** 3、 DEP** 的运行级别

    在 Windows 7 中, DEP 默认是激活的。不过, DEP 不能保护系统中所有运行的应用程序,实际 DEP 能够保护的程序列表由 DEP 的保护级别定义。 DEP 支持两种保护级别:级别 1 ,只保护 Windows 系统代码和可执行文件,不保护系统中运行的其它微软或第三方应用程序;级别 2 ,保护系统中运行的所有可执行代码,包括 Windows 系统代码和微软或第三方应用程序。默认情况下, Windows 7 的 DEP 运行在级别 1 的保护状态下。在“数据执行保护”配置面板中,我们

能够设置 DEP 的保护级别。如图所示笔者的 Windows 7 默认“只为基本的 Windows 程序和服务激活了 DEP ”,即 DEP 保护级别为 1 。当然,我们也可选择“除了以下所选择的,为所有程序和服务打开 DEP ”切换到 DEP 保护级别 2 。

    在保护级别 Level 2 可以选择特定的应用程序不受 DEP 保护。在实际应用中,这个功能非常重要,因为一些老的应用程序在激活 DEP 时无法正常运行。例如,我我们在使用 Word 进行文本编辑时,它会自动被排除在 DEP 保护之外。需要注意的是,在将 DEP 保护切换到级别 2 之前,必须运行应用程序兼容性测试,确保所有的应用程序在 DEP 激活时能正常运行。从 DEP 中排除应用程序,需要在 DEP 配置页面使用“添加”按钮,将应用程序的可执行文件加入到排除列表中。

( 图 2)

图2.jpg

    除了上述方法外,我们还可以通过一个工具排除应用程序的 DEP 保护。这个工具就是 DisableNX ,它是微软应用程序兼容性套件 (Microsoft Application Compatibility Toolkit ) 中的一个工具,该套件的最新版本为 5.5 ,大家可以访问微软官方网站下载获得,下载地址是: https://www.microsoft.com/downloads/details.aspx?displaylang=en\&FamilyID=24da89e9-b581-47b0-b45e-492dd6da2971 。该工具的使用比较简单,大家可根据命令帮助完成排错操作。

    4、查看应用程序是否受到 DEP 保护

在 Windows 7 中,我们如何知道应用程序是否受到 DEP 保护呢?其实,通过任务管理器我们可以查看到我们想要知道的信息。不过,默认情况下 Windows 7 的任务管理器并不显示应用程序的 DEP 列,需要手动操作将其调出来。在任务栏上单击鼠标右键选择“启动任务管理器”,在 Windows 任务管理器窗口中单击“查看”菜单选择“选择列”,然后从选择进程页列中找到并勾选“数据执行保护”项即可。这样就会在任务管理器中添加“数据执行保护”列,在其下面我们可以看到进程的 DEP 状态 ( 启用或者停用 ) 。笔者的 Windows 7 系统选择的是级别 1 ,可以看到所有的系统进程进程都是启用了 DEP 保护,而非系统进程比如“ WinRar ”则 DEP 状态为“停用”。不过,笔者这里要说明一下:虽然有些非系统的应用程序,但其 DEP 状态为“启用” ( 比如笔者系统中运行的“ Windows 7 优化大师” ) ,这是因为这些应用程序在安装过程中会创建并注册成系统服务,所以在 Windows 看来它也是系统进程,当然也就会执行 DEP 保护。 ( 图 3)

图3.jpg

    

   ** 5、如何关闭 DEP** 保护

    需要提醒的是,当 DEP 运行在保护级别为 2 时,由于需要在处理器和系统内存运行所有的 DEP 检查,会影响系统性能,使得系统运行将会变慢一些,所以在某些情况下我们可以考虑完全关闭 DEP 保护。我们知道在 DEP 设置面板中是不提供关闭 DEP 选项的,那如何关闭呢?如果是 Vista 以前的系统,我们可以通过修改 Boot.ini 文件,在其中添加 NoExecute=Always0ff 语句来关闭。而在 Windows Vista 、 Windows Server 2008 和 Windows 7 中, boot.ini 文件已经被启动配置数据 (Boot Configuration Data) 即 BCD 文件所代替,不过我们可以使用微软提供的命令行工具 bcdedit.exe 来编辑 BCD 文件。

我们在命令提示符下运行不带有任何参数的 bcedit 命令,可以看到当前的启动配置,如图所示显示了在 Windows 7 下运行 bcdedit 的结果,其中最后一行显示 nx OptIn ,表示当前的 DEP 保护级别为 1 ,如果显示为 OptOut 则表示当前的 EDP 保护级别为 2 。如果我们要关闭 EDP ,只需将 nx 设置为 Always0ff 即可。在命令行下执行命令“ bcdedit /set nx alwaysoff ”,重启系统后 Windows 7 的 EDP 就关闭了。反之,如果要开启所有服务和应用程序的 DEP ,执行命令“ bcdedit /set nx alwayson ”就可以了。 ( 图 4)

图4.jpg

   

    总结:其实 DEP 并部署医治 Windows 系统缓冲区溢出问题的万能解药,它的意义在于使得恶意软件难以利用缓冲区溢出。而且 DEP 提供的缓冲区溢出保护也有一定的副作用,就是是被 DEP 阻止的应用程序通常将被挂起,即使 DEP 停止了恶意程序执行恶意代码,但是这种情况为恶意程序启动 DOS 攻击创造了新的机会。最后说明一点,本文有关 DEP 的解析虽然以 Windows 7 为例,但大部分也适用于 Windows Vista 和 Windows Server 2008 。希望本文对于大家认识 EDP 和理解 Windows 的安全机制有所帮助。