在我们之前的博客文章中,我们解释了DEP的工作原理以及如何确定进程是否/如何选择加入DEP。现在我们将演示如何使用DEP来缓解现实世界攻击的风险。
我们在二月份发布了一份安全公告,描述了完全修补的Excel中存在的漏洞,该漏洞在有限的定向攻击中被利用。正如我们在SRD博客中指出的,这些漏洞利用针对运行在Windows XP上的Office 2007。我们现在将演示如何让Excel选择加入DEP,以帮助缓解利用此漏洞的尝试。
首先,为什么Excel默认不选择加入DEP?
如果您查看Windows XP SP2上的sysmain.sdb或iexplore.exe(IE 7)或excel.exe(或任何Office应用程序)的“DLL Characteristics”头值,您可以看到这些进程默认不选择加入DEP。IE 7和Office不选择加入DEP是为了那些需要在IE和Office应用程序内部运行的第三方扩展和插件。IE和Office应用程序本身在启用DEP的情况下工作正常,因此如果您不需要使用旧的第三方扩展,您可能可以通过让这些进程选择加入DEP来避免问题。
有三种不同的方法可以让excel.exe选择加入DEP:
- 使用应用程序兼容性工具包为Excel创建一个AppCompat数据库,使用sdbinst.exe安装(Windows XP SP2 / Windows Server 2003 SP1及更高版本),或
- 将系统范围的DEP策略更改为“OptOut”或“AlwaysOn”(潜在的兼容性风险*)
- 使用ExecuteOptions注册表设置(Windows Vista或Windows Server 2008,潜在的兼容性风险*)
(*)系统范围的“AlwaysOn”设置和ExecuteOptions注册表设置不允许在启用DEP后为进程禁用DEP,如果这些应用程序尝试使用VBA或宏,可能会导致Office应用程序出现DEP相关的崩溃,因此从应用程序兼容性的角度来看,最安全的选择是使用应用程序兼容性工具包让进程选择加入DEP,这将在下面详细讨论。
在XP SP2 / Server 2003 SP1及更新版本上使用应用程序兼容性工具包
在应用程序兼容性数据库中创建条目仅针对受影响的应用程序,因此您可以将默认的系统范围DEP设置为“OptIn”。这是在Windows XP SP2和Server 2003 SP1及更新版本上最针对性、风险最小的解决方案。关于如何为Excel创建AppCompat数据库的详细信息可以在本文关于缓解应用程序兼容性的部分底部找到(搜索“Enabling DEP for an application”)。
按照上述文章中的步骤并在步骤2中提供EXCEL.EXE的路径后,您应该会看到一个类似这样的屏幕:
现在已为Excel创建了一个appcompat修复程序,如果安装此修复程序,AppCompat层将针对名为EXCEL.EXE且文件描述字段包含“Microsoft Office Excel”且“公司名称”为“Microsoft Corporation”的进程。您可以添加额外的匹配条件/属性或删除这些条件以针对所有名为EXCEL.EXE的进程。在我们的示例中,此AppCompat修复程序保存在c:\temp\enable_DEP_excel.sdb中。要将此数据库部署到系统,请以管理员身份运行“sdbinst.exe –q c:\temp\enable_DEP_excel.sdb”。更改立即生效,可以通过SMS或机器启动脚本在企业中部署。
注意:如果在部署SDB后Excel似乎没有启用DEP运行,请确保兼容性管理员是以‘/x’开关运行的。只有在以/X命令行开关启动兼容性管理员时,您才会看到圈出的“参数”按钮并能够输入适当的“命令行”值(如下圈出)。如果您第一次没有这样做,您可以在以/X命令行开关启动兼容性管理员后,在兼容性管理器的右窗格中右键单击“Excel.exe”并选择“编辑应用程序修复”来随时修复它(如下所示)。
如果您只想为您的Office应用程序启用DEP但不想下载应用程序兼容性工具包,我们创建了一个应用程序兼容性数据库文件,该文件将为所有Office Professional套件应用程序启用DEP。要安装此应用程序兼容性数据库,您可以单击下面的FixIt4Me按钮:
点击此处为Office启用DEP!
要卸载应用程序兼容性数据库,您可以单击下面的Fixit4Me按钮:
点击此处为Office禁用DEP!
我们还创建了一个应用程序兼容性数据库,该数据库将为所有版本的Internet Explorer启用DEP(如果您在XPSP3或Vista SP1或更高版本上使用Internet Explorer 8,则不需要此操作,因为IE8在这些平台上默认选择加入DEP)。要安装此应用程序兼容性数据库,您可以单击下面的Fixit4Me按钮:
点击此处为IE启用DEP!
要卸载应用程序兼容性数据库,您可以单击下面的Fixit4me按钮:
点击此处为IE禁用DEP!
使用ExecuteOptions注册表设置(Windows Vista或Windows Server 2008)
在Windows Vista和Windows Server 2008上,有一种更简单的方法。以下以管理员权限运行的注册表脚本将使Excel选择加入DEP,而无需使用AppCompat数据库,但如果您的环境中使用VBA /宏,则应用程序兼容性问题的风险略高。
1
2
3
4
|
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\excel.exe]
"ExecuteOptions"=dword:00000000
|
演示:DEP与Excel零日漏洞
在为运行在未修补的Windows XP SP2机器上的Excel 2007启用DEP后,我们尝试双击一个恶意XLS文件,该文件试图利用Excel零日漏洞。没有DEP,这会导致可靠的代码执行。启用DEP后,我们预计漏洞利用将被阻止。让我们看看:
调试崩溃,我们看到一旦漏洞利用触发在非可执行内存页上的代码执行,就立即引发了访问冲突:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
0:000> r
Last set context:
eax=001363c0 ebx=02f45800 ecx=001363b8 edx=009c2404 esi=02fce05c edi=00000000
eip=001363c0 esp=0013608c ebp=00136374 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
0x1363c0:
001363c0 eb1c jmp 0x1363dd (001363de)
0:000> kv
*** Stack trace for last set context - .thread/.cxr resets it
ChildEBP RetAddr Args to Child
WARNING: Frame IP not in any known module. Following frames may be wrong.
00136088 3006853a 02fce05c 0232f204 301f736c 0x1363c0
00136374 303eeb6e 02f45800 fd010008 00010019 EXCEL!Ordinal40+0x6853a
00138658 3019f8b7 00000005 02fc3a28 0013b7b8 EXCEL!Ordinal40+0x3eeb6e
00138704 301a3a4c 00138ed4 0013b7b8 0013b5b4 EXCEL!Ordinal40+0x19f8b7
0013b9d4 301a27a4 0013cd6c 00000826 00000001 EXCEL!Ordinal40+0x1a3a4c
0013dfcc 301a2b85 0013ebf4 00000012 00000000 EXCEL!Ordinal40+0x1a27a4
0013e2a0 301a2ea1 0013ebf4 00000012 00000000 EXCEL!Ordinal40+0x1a2b85
0013e55c 3018c1fa 00000000 0013ebf4 00000012 EXCEL!Ordinal40+0x1a2ea1
0013e580 30030075 0013ebf4 00000012 00000000 EXCEL!Ordinal40+0x18c1fa
0013e7d0 30937c19 00000001 0013ebf4 00000012 EXCEL!Ordinal40+0x30075
0013f890 30d146a6 001a1360 0013f904 00020000 EXCEL!Ordinal40+0x937c19
0013fd38 303ceace 0013fd9c 00000001 000080df EXCEL!LPenHelper+0x12e041
0013fdd8 3002788a 00000000 30f08430 7e418e28 EXCEL!Ordinal40+0x3ceace
0013fec0 30003ae8 00000000 30f08974 00162348 EXCEL!Ordinal40+0x2788a
0013ff30 300037fc 30000000 00000000 00162348 EXCEL!Ordinal40+0x3ae8
0013ffc0 7c817067 0018c28a 00daef68 7ffd6000 EXCEL!Ordinal40+0x37fc
0013fff0 00000000 30002efc 00000000 78746341 kernel32!BaseProcessStart+0x23 (FPO: [Non-Fpo])
0:000> !vprot 001363c0
BaseAddress: 00129000
AllocationBase: 00040000
AllocationProtect: 00000004 PAGE_READWRITE
RegionSize: 00017000
State: 00001000 MEM_COMMIT
Protect: 00000004 PAGE_READWRITE
Type: 00020000 MEM_PRIVATE
0:000> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
<snip>
FAULTING_IP:
tyle+1363bf
001363c0 eb1c jmp 0x1363dd (001363de)
EXCEPTION_RECORD: 00135da4 -- (.exr 0x135da4)
ExceptionAddress: 001363c0 (0x001363c0)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000008
Parameter[1]: 001363c0
Attempt to execute non-executable address 001363c0</snip>
|
您可以看到系统在尝试从非可执行(PAGE_READWRITE)地址执行代码时引发了访问冲突。DEP拯救了这一天!
- Robert Hensing, MSRC Engineering
发布内容“按原样”提供,不提供任何保证,也不授予任何权利。