MS09-012补丁:修复"令牌劫持"漏洞的技术解析

本文详细解析了微软MS09-012安全更新如何修复"令牌劫持"漏洞,该漏洞允许攻击者从Network Service账户提升至Local System权限。文章深入探讨了涉及Windows内核、COM/DCOM子系统、WMI服务等多个核心组件的修复方案。

MS09-012: 修复"令牌劫持"漏洞

今天早晨我们发布了MS09-012更新,用于修复公开披露的"令牌劫持"漏洞(http://www.argeniss.com/research/TokenKidnapping.pdf)。该漏洞允许从Network Service账户提权至Local System账户。通常情况下,恶意用户不会以Network Service身份运行,除非是像IIS这样的少数程序,可以在以Network Service运行的服务中执行任意代码。这使得攻击者能够攻破并控制Windows系统。

我是否受影响?

此问题影响两种情况:在Network Service账户拥有的进程中执行不受信任的代码,或在具有SeImpersonatePrivilege的进程中执行代码。公开讨论的攻击方式是通过托管在IIS工作进程中的恶意Full Trust ASPX代码实现的。

技术背景

修复此问题需要微软有史以来最庞大的工程努力之一。本次安全更新涉及:

  • Windows内核修改
  • COM、DCOM和LSASS子系统
  • WMI和MSDTC内置服务
  • 服务控制管理器(SCM)

我们不得不将Vista和Server 2008中的服务令牌工作大量反向移植到XP和Server 2003。部分最资深的开发人员从Windows 7开发中抽调出来处理此问题。

修复的四个CVE漏洞

  1. CVE-2008-1436 (MSDTC)

    • 问题:MSDTC在创建RPC连接时请求过多权限
    • 修复:减少RPC连接时的权限请求
  2. CVE-2009-0079 (RPCSS)

    • 问题:Network Service账户下运行服务的权限问题
    • 修复:移植Vista的Service SID功能
  3. CVE-2009-0080 (线程池)

    • 问题:线程创建时的权限验证不足
    • 修复:强化线程访问权限
  4. CVE-2009-0078 (WMI)

    • 问题:WMI运行Network Service和Local Service提供程序时缺乏保护
    • 修复:采用基于Vista Service SID技术的WMI SID保护机制

未来方向

Windows 7和Server 2008 R2将引入"托管服务账户"功能,提供更灵活的解决方案:

  • 允许服务运行为独立账户
  • 提供自动密码管理功能
  • 简化域SPN远程认证流程

本文内容"按原样"提供,不提供任何担保,也不授予任何权利。

  • Nick Finco, MSRC工程团队
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计