深入解析Windows并行缓存(WinSxS)机制与安全补丁MS08-052

本文详细解析了Windows Side-by-Side缓存(WinSxS)的工作原理,重点说明了安全公告MS08-052中针对GDI+漏洞的独特解决方案。通过文件访问限制和版本策略规则,确保应用程序只能加载已修复的安全版本,有效隔离易受攻击的代码。

您可能已经注意到,MS08-052公告中包含一个与以往不同的解决方案。这是因为在Windows 2000之后的所有操作系统中,gdiplus.dll都存储在名为Windows并行缓存(WinSxS)的机制中。

WinSxS缓存的目的是保留旧版本的程序集,以防应用程序需要特定版本而不愿使用新版本。它实现为%windir%下的一个名为winsxs的文件夹。在该文件夹中,您会找到WinSxS缓存管理的每个程序集的每个版本的子文件夹,每个文件夹中都包含该程序集的一个副本。当应用程序尝试加载由WinSxS缓存管理的DLL时,Windows会检查该应用程序是否有一个清单(manifest),指定它想要哪个版本的DLL。如果该信息不存在,应用程序将获得该DLL的默认版本。

您的系统上可能现在就有多个版本的gdiplus.dll。这就是为什么我们的解决方案中包含一个步骤,限制对%windir%\winsxs中所有名为gdiplus.dll的文件的访问:

1
for /F "tokens=*" %G IN ('dir /b /s %windir%\winsxs\gdiplus.dll') DO cacls %G /E /R everyone

这样,无论应用程序请求哪个版本,它都将无法加载该DLL,从而与易受攻击的代码隔离。

安装更新后,您显然不希望任何应用程序能够加载仍存在于WinSxS缓存中的旧版本。这就是为什么更新包含一个WinSxS策略规则,该规则指示Windows忽略对早于更新版本的gdiplus.dll的请求,并向这些应用程序提供更新后的版本。这是WinSxS缓存的一个功能,专为这种情况设计。

  • Kevin Brown, SVRD Blogger 发布内容“按原样”提供,不提供任何担保,也不授予任何权利。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计