Windows管理员保护绕过:利用UI访问实现权限提升
安全研究员揭示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访问标志前对可执行文件执行严格检查:
- 清单要求:可执行文件必须嵌入包含
uiAccess属性且设置为true的清单(manifest)。 - 代码签名:文件必须由受本地计算机根证书存储信任的代码签名证书签名。
- 安全位置:可执行文件必须位于系统驱动器的管理员专用位置,如:
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服务使用的
CreateProcessAsUserAPI不要求特定文件扩展名,允许执行任何文件。或者,攻击者可将可执行文件复制到安全位置中的可写目录。 -
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访问进程中实现任意代码执行,攻击者可破坏同一桌面上的任何其他高完整性进程。
- 无配置文件分离:缺乏配置文件分离破坏了管理员保护的核心安全改进。
建议
安全专业人员和系统管理员应采取以下措施降低相关风险:
- 应用补丁:确保所有Windows系统安装微软最新的安全补丁,以修复已知绕过漏洞。
- 监控UI访问进程:监控异常的UI访问进程创建,特别是运行于高完整性的进程。
- 限制安全位置访问:将
Program Files、Windows和System32等目录的写入权限限制为仅管理员可用。 - 审核代码签名证书:审查并限制受本地计算机根证书存储信任的代码签名证书,防止滥用。
- 禁用不必要的无障碍功能:禁用不需要UI访问的应用程序,减少攻击面。
结论
James Forshaw的研究凸显了Windows权限提升机制安全性的持续挑战。尽管UI访问旨在支持无障碍功能,但其实现引入了可被利用以绕过管理员保护的重大安全风险。微软已修复本文所述的漏洞,但该研究强调了严格安全测试和主动监控的重要性,以防范未来类似威胁。
更多技术细节,请参阅Forshaw在Project Zero的原始博文。