深入解析IE安全公告中的多种缓解措施

本文详细解析了Microsoft针对Internet Explorer中DHTML数据绑定漏洞提供的九种缓解措施,包括禁用OLEDB32.dll、XML Island功能及完整性级别ACL配置,帮助用户选择最适合的防护方案。

关于近期IE公告中各种缓解措施的说明

今天,Microsoft修订了安全公告961051的“缓解措施”部分。我们希望在此分享有关该漏洞的更多细节,并解释新增的缓解措施,以帮助您保护计算机。

漏洞信息

该漏洞是由Internet Explorer处理DHTML数据绑定的方式导致的内存损坏引起的。这影响了所有当前受支持的Internet Explorer版本。针对此漏洞的恶意HTML会导致IE创建一个数据绑定对象数组,释放其中一个对象,然后稍后引用它。这类漏洞可通过在无效指针解引用之前用攻击者控制的数据(“堆喷射”)准备堆内存来利用。

应应用哪些缓解措施?

该公告现在列出了九种不同的缓解选项。我们在每次公告修订时都增加了额外的缓解措施,以提供更精确的选项来切断易受攻击的代码路径。只有IE8可以选择完全关闭数据绑定。因此,除非您使用IE8,否则您需要:

(A) 通过OLEDB阻止对MSHTML.dll中易受攻击代码的访问,以防护当前攻击
(B) 应用针对此特定漏洞的最安全配置

可选地,您可以选择 (C) 使堆喷射更加困难。

下表列出了每个公告缓解措施提供的保护类型。

缓解措施 A B C
1. 将Internet和本地Intranet安全区域设置设置为“高”,以在这些区域中运行ActiveX控件和Active脚本之前提示 X X
2. 配置Internet Explorer在运行Active脚本之前提示,或在Internet和本地Intranet安全区域中禁用Active脚本 X X
3. 禁用XML Island功能 X
4. 使用完整性级别ACL限制Internet Explorer使用OLEDB32.dll X
5. 禁用OLEDB32.dll的行位置功能 X
6. 注销OLEDB32.DLL X
7. 使用ACL禁用OLEDB32.DLL X
8. 在Windows Vista和Windows Server 2008上为Internet Explorer 7启用DEP X
9. 在Internet Explorer 8中禁用数据绑定支持 X X

应用(A)列中的缓解措施将防护当前攻击,但为了全面防护该漏洞,我们建议您还应用(B)列中的缓解措施。

为什么列出五种不同的防护OLEDB数据提供程序攻击向量的方法?

让我们简要谈谈缓解措施3-7,每种都是防护OLEDB数据提供程序攻击向量的不同方法。

6 & 7 – 注销或通过ACL禁用OLEDB32.DLL

我们在昨天的公告中列出了这些缓解措施,它们仍然是可行的选项。然而,这是两种较为激进的选择。依赖此DLL任何部分的所有应用程序都将无法运行。

5 - 禁用OLEDB32.dll的行位置功能

在我们的调查中,我们发现禁用单个OLEDB32 COM对象足以阻止访问受影响的代码路径。我们继续在公告中列出缓解选项#6和#7,但#5实际上更可取,因为它与#6或#7一样有效,且侵入性较小。

4 - 使用完整性级别ACL限制Internet Explorer使用OLEDB32.dll

此缓解选项是另一种阻止访问OLEDB数据提供程序的方法。此选项的优点是它仅阻止Internet Explorer的访问。它不会中断独立的数据访问应用程序。然而,它仅在Windows Vista和Windows Server 2008上同时启用了UAC和IE保护模式(默认配置)时存在。我们将在下面详细介绍此选项,因为它非常酷。:)

3 - 禁用XML Island功能

针对OLEDB数据提供程序的漏洞利用需要msxml3.dll以及OLEDB32.dll。我们最初考虑建议客户注销或ACL msxml3.dll以阻止利用该漏洞的尝试。系统范围内阻止msxml3.dll会导致许多功能中断。然而,仅禁用XML Data Island CLSID足以防止msxml3.dll仅为IE加载已知攻击。此外,从我们的测试来看,似乎没有很多网站使用XML Data Island功能,因此这是我们(A)列中侵入性最小的缓解措施,并且适用于所有受支持的平台。

关于完整性级别ACL缓解措施的更多信息

为了提供这种选择性保护,新的缓解措施依赖于默认情况下Internet Explorer以保护模式运行的事实。这意味着iexplore.exe进程以低完整性级别运行。有关这意味着什么以及如何工作的更多信息,请参阅http://msdn.microsoft.com/en-us/library/bb250462.aspx。如文章中所述,完整性机制可以阻止进程写入具有更高完整性级别的安全对象(如文件)。然而,文章未提及的是,它还可以阻止进程读取或执行更高完整性级别的安全对象。这是通过将特殊的完整性级别条目应用于对象的访问控制列表(ACL)来完成的。在本文的后面,我们将引导您如何为OLEDB32.DLL执行此操作,以便Internet Explorer无法读取或执行它。

关于此缓解措施需要注意的一点是,Internet Explorer必须以保护模式运行。这要求同时启用保护模式和用户账户控制(UAC)(默认设置)。您可以通过检查Internet Explorer状态栏来确定是否启用了保护模式,如下面的屏幕截图所示:

启用缓解措施(仅适用于Windows Vista及更高版本的操作系统)

要使用此缓解措施,您必须首先创建一个临时目录,然后将附加的zip文件中的inf文件复制到其中。如果底层操作系统是32位,请使用BlockAccess_x86.inf文件;如果底层操作系统是64位,请使用BlockAccess_x64.inf文件。如果您不确定使用的是哪种操作系统,可以通过打开控制面板并选择“系统”来弄清楚。在结果窗口中查找以下输出:

复制适当的文件后,启动一个提升的管理员命令提示符,将提示符导航到临时目录,并运行以下命令,其中是您复制到目录中的文件的名称。

1
SecEdit /configure /db BlockAccess.sdb /cfg <inf>

运行命令后,您应该看到以下输出。

1
2
The task has completed successfully.
See log %windir%\security\logs\scesrv.log for detail info.

SecEdit还将在运行它的目录中创建一个名为BlockAccess.sdb的文件。您可以安全地删除它和inf文件。

验证缓解措施

可以使用icacls命令快速确定是否已应用缓解措施。如果您使用的是32位操作系统,只需运行以下命令:

1
icacls "%ProgramFiles%\Common Files\System\Ole DB\oledb32.dll"

另一方面,如果您使用的是64位操作系统,则需要运行icacls两次;一次用于32位版本的OLEDB32.DLL,一次用于64位版本。两个命令如下:

1
2
icacls "%ProgramFiles%\Common Files\System\Ole DB\oledb32.dll"
icacls "%ProgramFiles(x86)%\Common Files\System\Ole DB\oledb32.dll"

每次运行icacls时,在输出中搜索以下行。

1
Mandatory Label\Medium Mandatory Level:(NW,NR,NX)

如果该行存在并包含NR和NX值,则缓解措施已成功应用。然而,如果该行缺失,或者NR或NX值之一缺失,则缓解措施未成功应用。

撤销缓解措施

要撤销缓解措施,您需要再次创建一个临时目录,并将zip中的inf文件复制到其中。这次,如果您使用的是32位操作系统,则需要复制UnblockAccess_x86.inf;如果您使用的是64位操作系统,则需要复制UnblockAccess_x64.inf。复制文件后,启动一个提升的管理员命令提示符,导航到临时目录,并运行以下命令,其中是您复制到目录中的文件的名称。

1
SecEdit /configure /db UnblockAccess.sdb /cfg <inf>

您应该看到与之前相同的输出,并且与上次类似,您可以安全地删除UnblockAccess.sdb和UnblockAccess.inf文件。

如果您有任何问题,请告诉我们。

2008年12月13日更新:增加了“禁用XML Island功能”缓解措施。

  • Andrew Roths, Jonathan Ness, Chengyun (SVRD Bloggers)
    发布内容“按原样”提供,不提供任何担保,也不授予任何权利。

oledb32.zip

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计