管理员模式运行CMD进入DOS模式,输入"bcdedit /set nx OptIn"(双引号内文字),然后重启计算机。
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)
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)
除了上述方法外,我们还可以通过一个工具排除应用程序的DEP保护。这个工具就是DisableNX,它是微软应用程序兼容性套件(Microsoft Application Compatibility Toolkit )中的一个工具,该套件的最新版本为5.5,大家可以访问微软官方网站下载获得,下载地址是:http://www.microsoft.com/downloa ... 0-b45e-492dd6da2971。
该工具的使用比较简单,大家可根据命令帮助完成排错操作。
4、查看应用程序是否受到DEP保护
在Windows 7中,我们如何知道应用程序是否受到DEP保护呢?其实,通过任务管理器我们可以查看到我们想要知道的信息。不过,默认情况下Windows 7的任务管理器并不显示应用程序的DEP列,需要手动操作将其调出来。在任务栏上单击鼠标右键选择“启动任务管理器”,在Windows 任务管理器窗口中单击“查看”菜单选择“选择列”,然后从选择进程页列中找到并勾选“数据执行保护”项即可。这样就会在任务管理器中添加“数据执行保护”列,在其下面我们可以看到进程的DEP状态(启用或者停用)。笔者的Windows 7系统选择的是级别1,可以看到所有的系统进程进程都是启用了DEP保护,而非系统进程比如“WinRAR”则DEP状态为“停用”。不过,笔者这里要说明一下:虽然有些非系统的应用程序,但其DEP状态为“启用”(比如笔者系统中运行的“Windows 7优化大师”),这是因为这些应用程序在安装过程中会创建并注册成系统服务,所以在Windows看来它也是系统进程,当然也就会执行DEP保护。(图3)
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。如果我们要关闭DEP,只需将nx设置为Always0ff即可。在命令行下执行命令“bcdedit /set nx alwaysoff”,重启系统后Windows 7的DEP就关闭了。反之,如果要开启所有服务和应用程序的DEP,执行命令“bcdedit /set nx alwayson”就可以了。(图4)
总结:其实DEP并不是医治Windows系统缓冲区溢出问题的万能解药,它的意义在于使得恶意软件难以利用缓冲区溢出。而且DEP提供的缓冲区溢出保护也有一定的副作用,就是是被DEP阻止的应用程序通常将被挂起,即使DEP停止了恶意程序执行恶意代码,但是这种情况为恶意程序启动DOS攻击创造了新的机会。最后说明一点,本文有关DEP的解析虽然以Windows 7为例,但大部分也适用于Windows Vista和Windows Server 2008。希望本文对于大家认识DEP和理解Windows的安全机制有所帮助。