如何滥用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 攻击流程概述

  1. 寻找或启动一个UIAccess进程
  2. 获取该进程的访问权限
  3. 复制并修改进程令牌
  4. 使用修改后的令牌创建新进程
  5. 自动化操作特权UI

2.2 详细步骤说明

步骤1:获取UIAccess进程

寻找系统中已有的UIAccess进程(如屏幕键盘OSK.EXE),或创建一个新的UIAccess进程。由于AppInfo服务不会为UIAccess请求弹出UAC对话框,此步骤可以隐蔽完成。

步骤2:打开目标进程

使用PROCESS_QUERY_LIMITED_INFORMATION访问权限打开目标进程。在Windows 7上更容易实现,Windows 10 RS5有沙箱缓解措施。

步骤3:操作进程令牌

  1. TOKEN_DUPLICATE权限打开进程令牌
  2. 复制令牌为新的可写主令牌
  3. 设置新令牌的完整性级别以匹配当前令牌

步骤4:创建新进程

使用CreateProcessAsUser和修改后的令牌创建带有UIAccess标志的新进程。

步骤5:自动化UI操作

利用SendKeys类等方法自动化操作特权窗口(如命令提示符)执行任意命令。

2.3 技术要点

  • UIAccess令牌被当作桌面其他进程的兄弟单元,只要完整性级别等于或低于当前级别,就可以分配主令牌
  • 与之前的管理员令牌窃取不同,这里使用的是UIAccess令牌而非管理员令牌
  • AppInfo服务修改的是调用方的令牌副本,不使用链接令牌

0x03 高级利用技术

3.1 组策略利用

如果管理员设置了"用户帐户控制: 允许UIAccess应用程序在不使用安全桌面的情况下提升权限"组策略,可以:

  1. 利用UIAccess进程禁用安全桌面
  2. 自动提升权限

3.2 历史漏洞参考

  • 目录NTFS命令流绕过(2014年已修复):曾可用于绕过安全位置检查
  • UACME第32种方法:利用IFileOperation技巧将文件写入安全位置

0x04 防御措施

  1. 保持系统更新,修补已知漏洞
  2. 限制UIAccess策略,不启用"允许UIAccess应用程序在不使用安全桌面的情况下提升权限"
  3. 监控可疑的令牌操作行为
  4. 实施代码签名验证
  5. 保护系统目录和Program Files目录的写入权限

0x05 总结

虽然Windows RS5阻止了直接的令牌提权攻击,但UIAccess机制仍可被稳定利用来绕过UAC。这再次证明UAC并非绝对的安全边界,系统管理员应结合其他安全措施进行纵深防御。

附录:PowerShell示例脚本

参考作者的GitHub仓库获取完整实现脚本,主要功能包括:

  • 查找UIAccess进程
  • 令牌复制和修改
  • 新进程创建
  • UI自动化操作

注意:本文仅用于安全研究目的,请勿用于非法用途。

滥用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自动化操作 注意:本文仅用于安全研究目的,请勿用于非法用途。