工作流程UAC实现方法概念UAC架构触发UACUAC虚拟化文件虚拟化(File Virtualization)注册表虚拟化UAC分析Process Explorer和IDA总结
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
http://www.win7dll.info/appinfo_dll.html
确定这个dll和UAC直接相关
若想进一步观看可以用IDA进行逆向
总结在触发UAC时候,系统会创建一个consent.exe进程,该进程用以确定是否创建管理员进程(通过白名单和用户选择判断),然后creatprocess
请求进程将要请求的进程cmdline和进程路径通过LPC接口传递给appinfo的RAiLuanchAdminProcess函数,该函数首先验证路径是否在白名单中,并将结果传递给consent.exe进程,该进程验证被请求的进程签名以及发起者的权限是否符合要求,然后决定是否弹出UAC框让用户进行确认。这个UAC框会创建新的安全桌面,屏蔽之前的界面。同时这个UAC框进程是SYSTEM权限进程,其他普通进程也无法和其进行通信交互。用户确认之后,会调用CreateProcessAsUser函数以管理员权限启动请求的进程。