UAC-用户账户控制
UAC旨在让用户以标准用户权限而非管理员权限运行应用程序,让需要管理员访问令牌的每个应用都必须提示同意,例外:父进程和子进程,子进程从父进程继承用户的访问令牌,但父进程和子进程必须有相同的完整性级别
当管理员用户登陆时会创建两个单独的访问令牌:标准用户访问令牌和管理员访问令牌。标准用户访问令牌包含于管理员访问令牌相同的特定于用户的信息,但会删除管理Windows特权和SID,当管理员需要执行需要管理员访问令牌的任务时,Windows会提示用户
UAC体系结构:


对于图中的组件:
用户
用户执行需要特权的操作
如果操作更改了文件系统或注册表,则会调用虚拟化。 所有其他操作调用 ShellExecute。
ShellExecute
ShellExecute 调用 CreateProcess。 ShellExecute 在 CreateProcess 中查找ERROR_ELEVATION_REQUIRED错误。 如果收到错误,ShellExecute 会调用应用程序信息服务,以尝试使用提升的提示执行请求的任务。
CreateProcess
如果应用程序需要提升,CreateProcess 会拒绝ERROR_ELEVATION_REQUIRED调用。
系统
应用程序信息服务
一种系统服务,可帮助启动需要一个或多个提升的权限或用户权限才能运行的应用
提升 ActiveX 安装
如果未安装 ActiveX,系统将检查 UAC 滑块级别。 如果安装了 ActiveX,则会选中**“用户帐户控制:在提示提升组策略时切换到安全桌面**”设置。
检查 UAC 滑块级别
UAC 具有一个滑块,可从四个通知级别中进行选择。始终通知 、仅当程序尝试对我的计算机进行更改时,才会通知我 、 仅当程序尝试对我的计算机进行更改时通知我 (不调暗我的桌面) 不调暗桌面就是不切换到安全桌面,与禁用提示提升权限时切换到安全桌面设置是一样的、从不通知 (禁用 UAC 提示)
已启用安全桌面
选中 用户帐户控制:在提示提升时切换到安全桌面 策略设置:如果启用了安全桌面,则无论管理员和标准用户的提示行为策略设置如何,所有提升请求都会转到安全桌面。如果未启用安全桌面,则所有提升请求将转到交互式用户的桌面,并使用管理员和标准用户的每个用户设置。
CreateProcess
CreateProcess 调用 AppCompat、Fusion 和 Installer 检测来评估应用是否需要提升。 然后,检查该文件以确定其请求的执行级别,该级别存储在文件的应用程序清单中。 如果清单中指定的请求执行级别与访问令牌不匹配,并且向 ShellExecute 返回错误 (ERROR_ELEVATION_REQUIRED) ,CreateProcess 将失败。
AppCompat
AppCompat 数据库将信息存储在应用程序的应用程序兼容性修补程序条目中。
融合
Fusion 数据库存储来自描述应用程序的应用程序清单的信息。 更新清单架构以添加新请求的执行级别字段。
安装程序检测
安装程序检测可检测安装文件,这有助于防止在用户不知情和同意的情况下运行安装。
注:
滑块设置可在搜索中搜索uac选择
更改用户账户控制设置进行设置(非管理员的普通用户只能是仅当程序尝试对我的计算机进行更改时,才会通知我选项)滑块永远不会完全关闭 UAC,如果将其设置为
从不通知:使 UAC 服务保持运行
在不显示 UAC 提示的情况下,自动批准管理员发起的所有提升请求
自动拒绝标准用户的所有提升请求
若要完全禁用 UAC,必须禁用**用户帐户控制:在管理员审批模式下运行所有管理员 **策略,禁用之后:
自动拒绝标准用户的所有提升请求
自动批准管理员发起的所有提升请求
内核
虚拟化
虚拟化技术可确保不合规的应用不会以无法确定原因的方式无提示地运行或失败。当不符合 UAC 的管理应用尝试写入受保护的文件夹(如 Program Files)时,UAC 会为应用提供它尝试更改的资源的虚拟化视图
文件系统和注册表
每用户文件和注册表虚拟化将每台计算机注册表和文件写入请求重定向到等效的每个用户位置。 读取请求首先重定向到虚拟化的每用户位置,然后重定向到每台计算机位置。
UAC安全策略设置
以下设置均可通过secpol.msc->本地策略->安全选项来设置
以下所有更改都需要重启才能生效
用于内置管理员帐户的管理员批准模式
默认禁用,禁用表示内置管理员administrator任何需要特权的操作都不需要提示用户批准
内置管理员administrator默认不开启的可通过命令开启账户,开启前需要为其设置密码
注册表操作:
以管理员批准模式运行所有管理员
默认开启,开启代表管理员用户任何需要特权的操作需要用户批准(内置管理员除外)
注册表操作:
提示提升权限时切换到安全桌面
默认开启
非安全桌面下的提示提升:


安全桌面下的提示提升:


注册表操作:
标准用户的提升提示行为
提示凭据(默认):提示用户输入管理用户名和密码(如果开启提示提升权限时切换到安全桌面还是会在安全桌面下输入凭据)
自动拒绝提升请求
在安全桌面上提示凭据
注册表操作:
管理员批准模式中管理员的提升权限提示行为
提升而不提示
在安全桌面上提示输入凭据
在安全桌面上提示同意
在安全桌面上提示同意
同意提示
提示同意非 Windows 二进制文件(默认)
注册表操作:
检测应用程序安装和提示提升
已启用 (默认) 检测到需要特权提升的应用安装包时,系统会提示用户输入管理用户名和密码
禁用 不会检测到应用安装包,并提示提升
注册表操作:
仅提升已签名和验证的可执行文件
此策略设置对请求特权提升的任何交互式应用程序强制实施公钥基础结构 (PKI) 签名检查
默认禁用
注册表操作:
仅提升安装在安全位置的 UIAccess 应用程序
此策略设置控制请求使用用户界面辅助功能 (UIAccess) 完整性级别运行的应用程序是否必须驻留在文件系统中的安全位置。 安全位置仅限于以下文件夹:
...\Program Files\,包括子文件夹
...\Windows\system32\
...\Program Files (x86) \,包括 64 位 Windows 版本的子文件夹
默认开启
注册表操作:
将文件和注册表写入错误虚拟化到每用户位置
当这个设置被启用时,如果一个程序尝试将文件或注册表项写入到受保护的系统区域,而当前用户没有管理员权限,则Windows会将这些写入操作重定向到用户特定的虚拟位置,而不是实际的系统位置,它可以防止程序尝试对受保护的系统区域进行意外或错误的写入操作
默认开启
注册表操作:
允许 UIAccess 应用程序在不使用安全桌面的情况下提示提升
启用 UIA 程序(包括 Windows 远程协助)会自动禁用提升提示的安全桌面
默认禁用
注册表操作:
横向移动中的UAC
因为有UAC的限制所以在横向移动中使用administrator的本地管理员会成功而其他的本地管理员会失败,但是如果把用于内置管理员帐户的管理员批准模式设置为启用更改之后administrator横向移动依然会失败,同理,更改以管理员批准模式运行所有管理员为禁用,其他的本地管理员也可以进行横向移动或者更改这个注册表项依然可以reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f,它控制本地管理员账户在执行某些系统管理任务时的权限。如果启用该策略,则管理员账户在本地执行的命令将以管理员身份运行
对于本地管理员的域用户,虽然在本地是有UAC限制但是微软文档提出
所以在横向中本地管理员组中的域成员是不受影响的
本章Windows的一些基础概念
安全桌面
这是Windows一个安全功能,提供一个安全的桌面环境由用于执行高风险、敏感的操作(授权,凭据管理,系统设置等),这个环境与普通桌面分离,只有Windows Trusted Installer、Local Security Authority等高权限的系统组件才能运行,其他程序和进程都无法访问安全桌面环境中的数据和资源,可用防止恶意软件截屏,键盘记录等操作
UIAccess
UIAccess 应用程序是一种 Windows 应用程序,它具有特殊的权限和访问级别,涉及到管理员的操作不需要通过UAC弹窗;UIAccess应用程序必须经过数字签名才能使用此特殊权限,并且必须放置在受保护的系统文件夹中才能运行
请求执行级别
应用清单是一个 XML 文件,应用清单中包含条目的管理应用会提示用户提供访问用户访问令牌的权限,所有符合 UAC 的应用都应将请求的执行级别添加到应用程序清单,请求的执行级别指定应用所需的权限
Last updated