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漏洞
-
CVE-2008-1436 (MSDTC):
- 问题:MSDTC在创建RPC连接时请求过多权限
- 修复:减少RPC连接时的权限请求
-
CVE-2009-0079 (RPCSS):
- 问题:Network Service账户下运行服务的权限问题
- 修复:移植Vista的Service SID功能
-
CVE-2009-0080 (线程池):
- 问题:线程创建时的权限验证不足
- 修复:强化线程访问权限
-
CVE-2009-0078 (WMI):
- 问题:WMI运行Network Service和Local Service提供程序时缺乏保护
- 修复:采用基于Vista Service SID技术的WMI SID保护机制
未来方向
Windows 7和Server 2008 R2将引入"托管服务账户"功能,提供更灵活的解决方案:
- 允许服务运行为独立账户
- 提供自动密码管理功能
- 简化域SPN远程认证流程
本文内容"按原样"提供,不提供任何担保,也不授予任何权利。
- Nick Finco, MSRC工程团队