如何滥用Access Tokens UIAccess绕过UAC
字数 1693 2025-08-27 12:33:48
滥用Access Tokens UIAccess绕过UAC技术详解
0x00 技术背景
Windows RS5系统虽然阻止了通过Access Tokens直接提升到管理员权限的攻击方式,但UIAccess机制仍可被利用来绕过UAC(用户账户控制)。本技术文档将详细介绍如何利用UIAccess进程实现令牌窃取,自动化操作特权进程UI来绕过UAC。
0x01 UIAccess基础概念
1.1 UIPI与UIAccess
用户界面特权隔离(UIPI)是UAC的一个安全功能,它限制低权限进程与高权限进程窗口的交互,防止恶意程序自动化操作特权UI来提升权限。
UIAccess是UIPI的一个例外机制,主要为辅助技术(如屏幕阅读器、屏幕键盘等)设计,允许这些程序与高权限UI交互。UIAccess通过访问令牌中的特殊标志实现。
1.2 UIAccess的工作机制
- 需要
SeTcbPrivilege权限设置UIAccess标志(通常只有SYSTEM账户拥有) - 通过AppInfo服务或
ShellExecute以适当标志运行进程 - 需要满足以下条件:
- 可执行文件必须签名(可自签名)
- 必须位于安全位置(如System32或Program Files目录)
- 令牌完整性会被调整为High级别或当前完整性+16
0x02 技术实现步骤
2.1 攻击流程概述
- 寻找或启动一个UIAccess进程
- 获取该进程的访问权限
- 复制并修改进程令牌
- 使用修改后的令牌创建新进程
- 自动化操作特权UI
2.2 详细步骤说明
步骤1:获取UIAccess进程
寻找系统中已有的UIAccess进程(如屏幕键盘OSK.EXE),或创建一个新的UIAccess进程。由于AppInfo服务不会为UIAccess请求弹出UAC对话框,此步骤可以隐蔽完成。
步骤2:打开目标进程
使用PROCESS_QUERY_LIMITED_INFORMATION访问权限打开目标进程。在Windows 7上更容易实现,Windows 10 RS5有沙箱缓解措施。
步骤3:操作进程令牌
- 以
TOKEN_DUPLICATE权限打开进程令牌 - 复制令牌为新的可写主令牌
- 设置新令牌的完整性级别以匹配当前令牌
步骤4:创建新进程
使用CreateProcessAsUser和修改后的令牌创建带有UIAccess标志的新进程。
步骤5:自动化UI操作
利用SendKeys类等方法自动化操作特权窗口(如命令提示符)执行任意命令。
2.3 技术要点
- UIAccess令牌被当作桌面其他进程的兄弟单元,只要完整性级别等于或低于当前级别,就可以分配主令牌
- 与之前的管理员令牌窃取不同,这里使用的是UIAccess令牌而非管理员令牌
- AppInfo服务修改的是调用方的令牌副本,不使用链接令牌
0x03 高级利用技术
3.1 组策略利用
如果管理员设置了"用户帐户控制: 允许UIAccess应用程序在不使用安全桌面的情况下提升权限"组策略,可以:
- 利用UIAccess进程禁用安全桌面
- 自动提升权限
3.2 历史漏洞参考
- 目录NTFS命令流绕过(2014年已修复):曾可用于绕过安全位置检查
- UACME第32种方法:利用IFileOperation技巧将文件写入安全位置
0x04 防御措施
- 保持系统更新,修补已知漏洞
- 限制UIAccess策略,不启用"允许UIAccess应用程序在不使用安全桌面的情况下提升权限"
- 监控可疑的令牌操作行为
- 实施代码签名验证
- 保护系统目录和Program Files目录的写入权限
0x05 总结
虽然Windows RS5阻止了直接的令牌提权攻击,但UIAccess机制仍可被稳定利用来绕过UAC。这再次证明UAC并非绝对的安全边界,系统管理员应结合其他安全措施进行纵深防御。
附录:PowerShell示例脚本
参考作者的GitHub仓库获取完整实现脚本,主要功能包括:
- 查找UIAccess进程
- 令牌复制和修改
- 新进程创建
- UI自动化操作
注意:本文仅用于安全研究目的,请勿用于非法用途。