研究

Windows管理员保护绕过:利用UI访问实现权限提升

1分钟阅读来源: Google Project Zero
Diagram illustrating Windows UI Access process flow and privilege escalation attack vectors

安全研究员揭示Windows UI访问功能中的五个关键漏洞,攻击者可绕过管理员保护实现权限提升。微软已修复全部九个绕过漏洞,建议立即更新系统。

Windows管理员保护绕过:利用UI访问实现权限提升

作者:[网络安全记者]

核心发现

安全研究员James Forshaw披露了微软UI访问(UI Access)实现中的五个关键漏洞的技术细节,这些漏洞允许攻击者绕过Windows管理员保护(Administrator Protection)。Forshaw在研究中发现的全部九个绕过漏洞——包括本文详述的五个——现已被微软修复。

这些漏洞源于UI访问功能,该功能最初在Windows Vista中引入,用于支持屏幕阅读器等无障碍工具。通过滥用此功能,攻击者能够在高完整性(High Integrity)的UI访问进程中执行任意代码,从而在无需用户交互的情况下破坏管理员保护的安全边界。

技术背景:UI访问与UIPI

窗口交互安全的演变

在Windows Vista之前,运行在用户桌面上的任何进程都可以通过窗口消息(window messages)控制另一个进程创建的窗口——包括特权进程。这种行为被用于所谓的“粉碎攻击”(Shatter Attacks),即低权限用户通过操纵特权UI组件来提升权限。微软通过从特权代码中移除UI元素来缓解这一问题。

随着Windows Vista中用户账户控制(UAC)的引入,同一桌面上的进程开始以不同的权限级别运行。为了防止跨权限窗口操作,微软实施了用户界面权限隔离(UIPI),利用强制完整性控制(MIC)限制进程间的交互。UIPI阻止进程发送窗口消息或使用钩子(hooks)与更高完整性进程创建的窗口交互。

例如:

  • 低权限用户进程(中完整性)无法向管理员进程(高完整性)发送消息。
  • UIPI还阻止其他UI功能(如窗口钩子)在不同完整性级别间使用。

无障碍工具的困境

UIPI的限制给屏幕阅读器等无障碍工具带来了重大问题。这些以低权限用户身份运行的应用程序无法与管理员进程交互,导致它们无法读取窗口内容或执行点击按钮等操作。为解决这一问题,微软引入了**UI访问(UI Access)**标志。

当进程的访问令牌(access token)在初始化时设置了UI访问标志后,该标志将授予进程绕过许多UIPI限制的特殊权限。启用此标志需要SE_TCB_NAME特权,该特权仅对系统服务可用。因此,创建UI访问进程需通过系统服务(通常是UAC服务)调用RAiLaunchAdminProcess RPC接口。

UI访问进程的创建流程

为防止滥用,UAC服务在启用UI访问标志前对可执行文件执行严格检查:

  1. 清单要求:可执行文件必须嵌入包含uiAccess属性且设置为true的清单(manifest)。
  2. 代码签名:文件必须由受本地计算机根证书存储信任的代码签名证书签名。
  3. 安全位置:可执行文件必须位于系统驱动器的管理员专用位置,如:
    • Program Files目录
    • Windows目录(排除已知可写位置)
    • System32目录(排除已知可写位置)

若满足上述条件,UAC服务将:

  • 复制调用者的访问令牌。
  • 启用UI访问标志。
  • 根据调用者提升完整性级别:
    • UAC管理员的低权限用户:设置完整性为高(High)。
    • 管理员:设置完整性为高(通常无变化)。
    • 普通用户:将完整性设置为调用者完整性+16,最高不超过高(High)。

重要说明:UI访问标志仅允许绕过有限的操作(如向更高完整性进程发送窗口消息),但不允许使用窗口钩子(可能导致代码注入)。

利用UI访问绕过管理员保护

核心漏洞

管理员保护(Administrator Protection)是Windows的新功能,旨在通过将低权限用户与“影子管理员”分离来创建安全边界。然而,Forshaw发现UI访问进程能够破坏这一边界:

  • 当低权限用户通过RAiLaunchAdminProcess创建UI访问进程时,该进程以调用者(低权限用户)的令牌运行,但启用了UI访问标志且完整性设置为高(High)。
  • 高完整性进程可破坏同一桌面上的任何其他高完整性进程,即使其运行于不同用户。
  • 由于UI访问进程以低权限用户身份运行,因此不存在配置文件分离(profile separation)——这是管理员保护的关键改进之一。
  • 提升至高完整性的过程是静默的,攻击者无需用户交互即可破坏安全边界。

实现任意UI访问执行

Forshaw发现了多种在高完整性UI访问进程中实现任意代码执行的方法。尽管微软曾表示这些问题不属于修复优先级,但其中多个已被修复。这些技术主要分为三类:

1. 绕过安全应用程序目录检查

UAC服务的AiCheckSecureApplicationDirectory方法验证可执行文件是否位于安全位置。Forshaw发现了多种绕过此检查的方法:

  • NTFS命名流(Named Streams):2017年,Forshaw报告了一种绕过方法,攻击者可向低权限用户可写的目录写入NTFS命名流。例如,C:\Windows\tracing目录可写但被安全检查排除。通过写入命名流(如C:\Windows\tracing:file.exe),该文件会被视为位于C:\Windows内,从而通过安全检查。此问题已在后续Windows版本中修复。

  • 安全位置中的可写文件/目录:攻击者可用恶意可执行文件覆盖安全位置中现有的可写文件。UAC服务使用的CreateProcessAsUser API不要求特定文件扩展名,允许执行任何文件。或者,攻击者可将可执行文件复制到安全位置中的可写目录。

  • MSIX安装程序滥用:在近期研究中,Forshaw发现Windows安装程序可将MSIX文件放入C:\Program Files\WindowsApps目录,该目录未被安全检查排除。Windows 11默认允许安装由任意证书签名的MSIX文件,无需管理员权限。攻击者可将UI访问可执行文件打包为MSIX安装程序并签名,从而将其放置在安全位置。此问题已通过排除WindowsApps目录修复。

2. 其他历史绕过方法

Forshaw还提及了其他实现任意UI访问执行的历史方法,包括:

  • DLL劫持(DLL Planting):通过在安全位置植入恶意DLL,劫持合法可执行文件。
  • COM滥用:利用仅消息窗口(message-only windows)的COM组件破坏进程,且不显示UI。

影响分析

本研究描述的漏洞对启用管理员保护的Windows系统构成重大风险:

  • 权限提升:攻击者可从低权限用户提升至高完整性,有效绕过管理员保护的安全边界。
  • 静默利用:提升至高完整性无需用户交互,增加了检测难度。
  • 任意代码执行:一旦在高完整性UI访问进程中实现任意代码执行,攻击者可破坏同一桌面上的任何其他高完整性进程。
  • 无配置文件分离:缺乏配置文件分离破坏了管理员保护的核心安全改进。

建议

安全专业人员和系统管理员应采取以下措施降低相关风险:

  1. 应用补丁:确保所有Windows系统安装微软最新的安全补丁,以修复已知绕过漏洞。
  2. 监控UI访问进程:监控异常的UI访问进程创建,特别是运行于高完整性的进程。
  3. 限制安全位置访问:将Program FilesWindowsSystem32等目录的写入权限限制为仅管理员可用。
  4. 审核代码签名证书:审查并限制受本地计算机根证书存储信任的代码签名证书,防止滥用。
  5. 禁用不必要的无障碍功能:禁用不需要UI访问的应用程序,减少攻击面。

结论

James Forshaw的研究凸显了Windows权限提升机制安全性的持续挑战。尽管UI访问旨在支持无障碍功能,但其实现引入了可被利用以绕过管理员保护的重大安全风险。微软已修复本文所述的漏洞,但该研究强调了严格安全测试和主动监控的重要性,以防范未来类似威胁。

更多技术细节,请参阅Forshaw在Project Zero的原始博文。

分享

TwitterLinkedIn