Office 2010 中的数据

大家好,我叫 Vikas Malhotra,我是 Office 可信计算机团队 (TWC) 的安全项目经理。在这篇文章中,我将介绍针对数据执行保护 (Data Execution Prevention, DEP) 进行的一些安全更改。DEP 是我们在 Office 2010 中新增的众多深层防御 保护层之一。

首先,我要介绍什么是 DEP 以及它如何影响作为 IT 专业人员以及开发人员的用户。

什么是 DEP?

DEP 是在 Windows XP Service Pack 2 以及 Windows 2003 Server Service Pack 1 中引入的一项安全功能。有关 DEP 的更多一般信息,可阅读这篇 Microsoft 知识库文章

启动一个程序后,将为此程序分配内存页。这些内存页将带有一个“标记”,表示它们是否可执行。如果某个内存页标记为可执行,那么该内存地址里的代码就可以运行。如果某个内存页没有标记为可执行,那么它里面的代码就不允许运行。启用 DEP 后,如果代码试图在未标记为可执行的内存页上运行,则会引发 DEP 异常,并且会终止正在运行的进程。

现在,如果恶意软件感染了您的计算机,它首先执行的操作就是试图将“坏代码”写入标记为可写入和可执行的计算机内存区域。下一步,恶意软件将试图运行这些恶意代码。如果发生了这一步,并且 DEP 处于启用状态,那么将看到的就是 Office 应用程序崩溃。从安全的角度看,所发生的就是 Office 阻止了潜在恶意软件的执行并且自行关闭以保证您的计算机安全。

我如何才能知道程序运行时 DEP 处于启用状态?

最简单的方法就是使用任务管理器。在任务管理器中,确保“数据执行保护”列是可见的。现在,强制启用 DEP 的每个运行的进程旁边会出现“已启用”(Enabled) 标记。请看下图所示,winword.exe 正在运行,且已为该进程强制启用 DEP:

clip_image001

Office 是如何实现 DEP 的?

Office 应用程序在启用后,将调用 GetSystemDEPPolicy 函数来确定您的计算机 DEP 策略。此 API 将返回下列结果之一,表现如下:

  • AlwaysOn — 您的 Office 应用程序运行时将始终启用 DEP。必须修改您的系统引导配置文件并重新启动计算机才能更改此设置。
  • AlwaysOff — 您的 Office 应用程序运行时将始终禁用 DEP。必须修改您的系统引导配置文件并重新启动计算机才能更改此设置。
  • OptIn — 每个 Office 应用程序可在信任中心(请参见下面的部分)进行配置,以确定它运行时是否启用 DEP。
  • OptOut — 每个 Office 应用程序可在信任中心(请参见下面的部分)进行配置,以确定它运行时是否启用 DEP。

如果确定了某个 Office 应用程序运行时要启用 DEP,则该应用程序将调用 SetProcessDEPPolicy 以确保在该进程周期内永久启用 DEP。这样,我们就确保了加载到该 Office 进程的其他所有二进制文件也将强制启用 DEP。

作为 IT 专业人员,我将拥有哪些配置选项?

对于 64 位安装,DEP 针对 Office 应用程序将始终强制启用。对于 32 位安装,如果您需要在应用程序级别设置 DEP,则可以在信任中心进行配置。对于支持受保护的视图的应用程序,可在“受保护的视图”(Protected View ) 选项卡中找到配置 DEP 的选项。对于其他所有 Office 应用程序,您将在 DEP 选项卡中找到设置,如下所示:

clip_image003

图:为支持受保护视图的 Office 应用程序配置 DEP 设置

clip_image005

图:为不支持受保护视图的 Office 应用程序配置 DEP 设置

如果信任中心里启用 DEP 的选项处于灰显状态,这是因为您的计算机已经设置为“AlwaysOn”或“AlwaysOff”。

配置这些信任中心选项的选项也在组策略模板中提供,参见下图 Word 的示例:

clip_image007

作为一个开发人员,DEP 会怎样影响我的应用程序?

大部分情况下,DEP 将不会影响您的代码。但是,如果您的代码需要写入未标记为可执行的内存区域,并且试图执行该代码(正如 JIT 编译器执行的操作),那么,您有以下三个选择。第一个选择是,重写代码,使其不再以这种方式执行。如果您没有权限访问源代码,或无法得到更新的加载项,那么您可以按照前面提供的说明禁用 DEP。最后一个选择是使用 VirtualProtect 函数。使用 VirtualProtect,您可以将代码写入标记为“写入”和“执行”的内存页。一旦写入完成,就可以删除“写入”属性。这就确保您可以在以后执行代码,而不会出现异常。通过删除“写入”属性,确保恶意软件不能感染您的内存区域。

DEP 异常是什么样子的?

在大部分情况下,DEP 错误会出现在已安装的加载项中,而不会出现在 Office 应用程序中。如果某个加载项触发了 DEP 意外,Office 应用程序将终止,表现为似乎出现了常见的系统崩溃。重新启动 Office 应用程序后,将出现一个对话框,类似下图所示:

clip_image008

在下面的示例中,我的加载项,“my vc test com add-in”导致了 Office 变得不稳定。此时,我有两个选择。第一,我可以禁止加载项进行加载;第二,尝试重新加载这个加载项。我建议禁用这个加载行,使 Office 可以正常启动。当 Office 应用程序启动后,我可以在加载项管理器中查看我的加载项,找出被禁用的原因。

在下图中,我可以看到我的加载项出现了提示“由于出现数据执行错误,加载项被用户禁用”(add-in was disabled by the user after a Data Execution Failure)。

clip_image010

这时,我将保持这个加载项的禁用状态,直到我可以获得一个 DEP 支持的更新版本。

那么,我们可看到 Office 2010 现在的出厂设置为启用 DEP。数据执行保护是通过确保设计为不执行的代码永远不会执行来保证您的计算机的安全。

谢谢。
Vikas Malhotra
安全项目经理
Office 可信计算

最初发表时间: 2010 年 2 月 4 日,星期四,下午 4:04,作者:OffTeam

这是一篇本地化的博客文章。请访问 https://blogs.technet.com/office2010/archive/2010/02/04/data-excecution-prevention-in-office-2010.aspx 以查看原文。