UAC(User AccountControl)是从windows vista开始出现的技术 通过限制应用程序的执行权限来达到提升操作系统安全性的目的
在开启UAC的前提下,即使管理员用户,默认也只能获取到标准权限 当用户某些动作可能会影响系统安全性和稳定性的时候,就会弹窗请求管理员权限 提醒用户该操作属于敏感操作
工作流程
通过UAC,应用程序和任务可始终在非管理员账户的安全上下文中运行,除非管理员特别授予管理员级别的系统访问权限
UAC可以阻止未经授权的应用程序自动进行安装
防止无意中更改系统设置。
https://docs.microsoft.com/en-us/library/bb38468.aspx
从上图可知,如果启动进程需要管理员权限
- 进程已经拥有管理权限控制
- 进程被用户允许通过管理员权限运行
UAC实现方法
概念
- ACL(Access Control List):windows中所有资源都有ACL,这个列表决定了拥有何种权限的用户/进程能够这个资源。
- 在开启了UAC之后,如果用户是标准用户,windows会给用户分配一个标准Access Token
- 如果用户以管理员权限登录,会生成两份访问令牌,一份是完整的管理员访问令牌(Full Access Token),一份是标准用户令牌权限启动Explorer.exe进程,如果用户同意,则赋予完整管理员权限访问令牌进行操作
UAC架构
基本架构如下:
触发UAC
- 配置windows update
- 增加或删除用户帐户
- 改变用户的帐户类型
- 改变UAC设置
- 安装ActiveX
- 安装或移除程序
- 安装设备驱动程序
- 设置家长控制
- 将文件移动或复制到Program Files或Windows目录
- 查看其他用户文件夹
UAC虚拟化
Virtualization也被称为重定向(Data Redirection).在权限判定的过程中,如果用户的权限没有达到程序所需的权限,UAC就会重定向该文件夹
例如如果程序尝试写到
C:\Program Files\Contoso\Settings.ini目录下
但用户没有写入权限,这个写操作就会被重定向至
C:\Users\Username\AppData\Local\VirtualStore\Program Files\contoso\settings.ini.
UAC虚拟化分为文件虚拟化和注册表虚拟化
以下情况虚拟化不可用
- 64位程序
- 非交互式程序
- 模拟令牌的进程(Processes that impersonate)
- 内核模式调用方
- 带有requestedExecutionLevel(请求执行等级)的可执行程序
文件虚拟化(File Virtualization)
Luafv.sys实现的是改变写入文件位置
注册表虚拟化
Ntoskrnl.exe 实现的是改变写入注册表位置
UAC分析
Process Explorer和IDA
- 先用procexp查看现有进程
- 右键使用管理员权限运行一个文件以弹出UAC提示框,可以看到多了一个进程consent.exe
- 这个进程中有一个dll appinfo,UAC主要实现文件在于 appinfo.dll这个文件中
- 查看此dll的string
确定这个dll和UAC直接相关
- 若想进一步观看可以用IDA进行逆向
总结
在触发UAC时候,系统会创建一个consent.exe进程,该进程用以确定是否创建管理员进程(通过白名单和用户选择判断),然后creatprocess
请求进程将要请求的进程cmdline和进程路径通过LPC接口传递给appinfo的RAiLuanchAdminProcess函数,该函数首先验证路径是否在白名单中,并将结果传递给consent.exe进程,该进程验证被请求的进程签名以及发起者的权限是否符合要求,然后决定是否弹出UAC框让用户进行确认。这个UAC框会创建新的安全桌面,屏蔽之前的界面。同时这个UAC框进程是SYSTEM权限进程,其他普通进程也无法和其进行通信交互。用户确认之后,会调用CreateProcessAsUser函数以管理员权限启动请求的进程。