用户帐户控制工作原理
用户帐户控制 (UAC) 是 Windows 安全性的关键部分。 UAC 通过限制恶意代码以管理员权限执行的能力来降低恶意软件的风险。 本文介绍 UAC 的工作原理以及它如何与最终用户交互。
UAC 进程和交互
使用 UAC 时,需要 管理员访问令牌 的每个应用程序都必须提示最终用户同意。 唯一的例外是父进程和子进程之间存在的关系。 子进程从父进程继承用户的访问令牌。 但是,父进程和子进程必须具有相同 的完整性级别。
Windows 通过标记进程的完整性级别来保护进程。 完整性级别是信任的度量:
- 高完整性应用程序是执行修改系统数据的任务的应用程序,例如磁盘分区应用程序
- 低完整性应用程序是执行可能危及操作系统的任务的应用程序,例如 Web 浏览器
具有较低完整性级别的应用程序不能修改具有较高完整性级别的应用程序中的数据。 当标准用户尝试运行需要管理员访问令牌的应用时,UAC 要求用户提供有效的管理员凭据。
为了更好地了解此过程的工作原理,让我们更详细地了解一下 Windows 登录过程。
登录过程
下图显示了管理员的登录过程与标准用户的登录过程有何不同。
默认情况下,标准用户和管理员用户访问资源,并在标准用户的安全上下文中执行应用。
当用户登录时,系统会为该用户创建访问令牌。 访问令牌包含有关授予用户的访问权限级别的信息,包括特定安全标识符 (SID) 和 Windows 权限。
管理员登录时,将为用户创建两个单独的访问令牌: 标准用户访问令牌 和 管理员访问令牌。 标准用户访问令牌:
- 包含与管理员访问令牌相同的特定于用户的信息,但已删除管理 Windows 特权和 SID
- 它用于启动不 (标准用户应用执行管理任务的应用程序)
- 它用于通过执行 进程来 显示桌面explorer.exe。 Explorer.exe 是所有其他用户启动的进程从中继承其访问令牌的父进程。 因此,除非用户提供许可或凭据来批准应用使用完整的管理访问令牌,否则所有应用都以标准用户身份运行
作为 Administrators 组成员的用户可以在使用标准用户访问令牌时登录、浏览 Web 和阅读电子邮件。 当管理员需要执行需要管理员访问令牌的任务时,Windows 会自动提示用户进行审批。 此提示称为 提升提示,可以通过策略或注册表配置其行为。
UAC 用户体验
启用 UAC 后,标准用户的用户体验不同于管理员用户。 建议的、更安全的运行 Windows 方法是确保主用户帐户是标准用户。 以标准用户身份运行有助于最大程度地提高托管环境的安全性。 使用内置的 UAC 提升组件,标准用户可以通过输入本地管理员帐户的有效凭据来轻松执行管理任务。
标准用户的默认内置 UAC 提升组件是 凭据提示。
作为标准用户运行的替代方法是在管理员审批模式下以管理员身份运行。 使用内置的 UAC 提升组件,本地管理员组的成员可以通过提供审批轻松执行管理任务。
管理员审批模式下管理员帐户的默认内置 UAC 提升组件称为同意提示。
凭据提示
当标准用户尝试执行需要用户管理访问令牌的任务时,会显示凭据提示。 还可以要求管理员提供其凭据,方法是将“用户帐户控制:管理员审批模式中管理员的提升提示行为”策略设置值设置为“凭据提示”。
许可提示
当用户尝试执行需要用户管理访问令牌的任务时,会显示同意提示。
UAC 提升提示
UAC 提升提示的颜色编码为特定于应用,以便更轻松地识别应用程序的潜在安全风险。 当应用尝试使用管理员的完全访问令牌运行时,Windows 首先分析可执行文件以确定其发布者。 应用首先根据文件的发布者分为三个类别:
- Windows
- 发布者已验证 (签名)
- 发布者未验证 (未签名)
提升提示颜色编码如下所示:
- 灰色背景:应用程序是 Windows 管理应用,例如控制面板项,或由已验证发布者签名的应用程序
- 黄色背景:应用程序未签名或已签名,但不受信任
“盾牌”图标
某些控制面板项(如日期和时间)包含管理员和标准用户操作的组合。 标准用户可以查看时钟并更改时区,但需要完全管理员访问令牌才能更改本地系统时间。 下面是日期和时间控制面板项的屏幕截图。
“ 更改日期和时间...” 按钮上的屏蔽图标指示该过程需要完整的管理员访问令牌。
保护提升提示
通过将提示定向到 安全桌面,可以进一步保护提升过程。 默认情况下,同意和凭据提示显示在安全桌面上。 只有 Windows 进程可以访问安全桌面。 为了提高安全级别,我们建议保持 用户帐户控制:在提示提升策略设置时切换到安全桌面 。
当可执行文件请求提升时, 交互式桌面(也称为 用户桌面)将切换到安全桌面。 安全桌面会调暗用户桌面,并显示必须在继续之前响应的提升提示。 当用户选择 “是” 或“ 否”时,桌面将切换回用户桌面。
注意
从 Windows Server 2019 开始,无法将剪贴板的内容粘贴到安全桌面上。 这与当前支持的 Windows 客户端 OS 版本的行为相同。
恶意软件可以呈现对安全桌面的模拟,但当“用户帐户控制:在管理员审批模式中管理员的提升提示行为”策略设置设置为“同意提示”时,如果用户在模拟中选择“是”,则恶意软件不会获得提升。 如果策略设置设置为 “提示输入凭据”,则模拟凭据提示的恶意软件可能能够收集用户的凭据。 但是,恶意软件不会获得提升的权限,并且系统具有其他保护,可缓解恶意软件即使使用已获取的密码也无法控制用户界面。
虽然恶意软件可能会模拟安全桌面,但除非用户以前在电脑上安装了恶意软件,否则此问题不会发生。 由于在启用 UAC 时无法以无提示方式安装需要管理员访问令牌的进程,因此用户必须通过选择“ 是 ”或提供管理员凭据来显式提供同意。 UAC 提升提示的特定行为取决于安全策略。
UAC 体系结构
下图详细介绍了 UAC 体系结构。
若要更好地了解每个组件,请查看下表:
用户
组件 | 描述 |
---|---|
用户执行需要特权的操作 | 如果操作更改了文件系统或注册表,则会调用虚拟化。 所有其他操作调用 ShellExecute。 |
ShellExecute | ShellExecute 调用 CreateProcess。 ShellExecute 在 CreateProcess 中查找ERROR_ELEVATION_REQUIRED错误。 如果收到错误,ShellExecute 会调用应用程序信息服务,以尝试使用提升的提示执行请求的任务。 |
CreateProcess | 如果应用程序需要提升,CreateProcess 会拒绝ERROR_ELEVATION_REQUIRED调用。 |
系统
组件 | 描述 |
---|---|
应用程序信息服务 | 一种系统服务,可帮助启动需要一个或多个提升的权限或用户权限才能运行的应用,例如本地管理任务,以及需要更高完整性级别的应用。 应用程序信息服务通过在需要提升时使用管理用户的完全访问令牌为应用程序创建一个新进程来帮助启动此类应用。 根据配置的策略,用户可能会同意。 |
提升 ActiveX 安装 | 如果未安装 ActiveX,系统会检查 UAC 滑块级别。 如果安装了 ActiveX,则会选中“用户帐户控制:在提示提升组策略时切换到安全桌面”设置。 |
检查 UAC 滑块级别 | UAC 具有一个滑块,可从四个通知级别中进行选择。
|
已启用安全桌面 | 选中 “用户帐户控制:在提示提升时切换到安全桌面” 策略设置:
|
CreateProcess | CreateProcess 调用 AppCompat、Fusion 和 Installer 检测来评估应用是否需要提升。 然后检查该文件以确定其请求的执行级别,该级别存储在文件的应用程序清单中。 如果清单中指定的请求执行级别与访问令牌不匹配,并且向 ShellExecute 返回错误 (ERROR_ELEVATION_REQUIRED) ,CreateProcess 将失败。 |
AppCompat | AppCompat 数据库将信息存储在应用程序的应用程序兼容性修补程序条目中。 |
融合 | Fusion 数据库存储来自描述应用程序的应用程序清单的信息。 更新清单架构以添加新请求的执行级别字段。 |
安装程序检测 | 安装程序检测可检测安装程序文件,这有助于防止在用户不知情和未经同意的情况下运行安装。 |
内核
组件 | 描述 |
---|---|
虚拟化 | 虚拟化技术可确保不符合要求的应用不会以无法确定原因的方式无提示地运行或失败。 UAC 还为写入到受保护区域的应用程序提供文件和注册表虚拟化以及日志记录。 |
文件系统和注册表 | 每用户文件和注册表虚拟化将每台计算机注册表和文件写入请求重定向到等效的每个用户位置。 读取请求首先重定向到虚拟化的每用户位置,然后重定向到每台计算机位置。 |
滑块永远不会完全关闭 UAC。 如果将其设置为 “从不通知”,它将:
- 使 UAC 服务保持运行
- 导致管理员发起的所有提升请求在未显示 UAC 提示的情况下自动批准
- 自动拒绝标准用户的所有提升请求
重要提示
若要完全禁用 UAC,必须禁用“用户帐户控制:在管理员审批模式下运行所有管理员”策略。
警告
禁用 UAC 时,某些通用 Windows 平台应用可能无法正常工作。
虚拟化
由于企业环境中的系统管理员尝试保护系统,因此许多业务线 (LOB) 应用程序设计为仅使用标准用户访问令牌。 因此,打开 UAC 后,无需替换大多数应用。
Windows 包含适用于不符合 UAC 且需要管理员访问令牌才能正常运行的应用的文件和注册表虚拟化技术。 当不符合 UAC 标准的管理应用尝试写入受保护的文件夹(如 Program Files)时,UAC 会为应用提供它尝试更改的资源的虚拟化视图。 虚拟化副本在用户的配置文件中维护。 此策略为运行不合规应用的每个用户创建虚拟化文件的单独副本。
大多数应用任务通过使用虚拟化功能可以正常运行。 尽管虚拟化允许大多数应用程序运行,但它是短期修复,而不是长期解决方案。 应用开发人员应尽快修改其应用,使其符合要求,而不是依赖文件、文件夹和注册表虚拟化。
在以下方案中,虚拟化不是一个选项:
- 虚拟化不适用于提升并使用完全管理访问令牌运行的应用
- 虚拟化仅支持 32 位应用。 未授权的 64 位应用在尝试获取句柄 (Windows 对象的唯一标识符) 时会收到拒绝访问消息。 本机 Windows 64 位应用需要与 UAC 兼容,并将数据写入到正确的位置
- 如果应用包含具有请求的执行级别属性的应用清单,则禁用虚拟化
请求执行级别
应用清单是一个 XML 文件,用于描述和标识应用在运行时应绑定到的共享程序集和专用并行程序集。 应用清单包含用于 UAC 应用兼容性的条目。 在应用清单中包含条目的管理应用会提示用户提供访问用户访问令牌的权限。 尽管它们缺少应用清单中的条目,但大多数管理应用都可以使用应用兼容性修补程序在不进行修改的情况下运行。 应用兼容性修补程序是数据库条目,使不符合 UAC 的应用程序能够正常工作。
所有符合 UAC 的应用都应将请求的执行级别添加到应用程序清单。 如果应用程序需要对系统进行管理访问权限,请将请求的执行级别标记为 “需要管理员 ”的应用可确保系统将此程序标识为管理应用,并执行必要的提升步骤。 请求的执行级别指定应用所需的权限。
安装程序检测技术
安装程序是设计用于部署软件的应用。 大多数安装程序写入系统目录和注册表项。 这些受保护的系统位置通常只能由安装程序检测技术的管理员写入,这意味着标准用户没有足够的访问权限来安装程序。 Windows 会启发式检测安装程序,并请求管理员凭据或管理员用户的批准,以便使用访问权限运行。 Windows 还会启发式检测卸载应用程序的更新和程序。 UAC 的设计目标之一是防止在用户不知情和同意的情况下运行安装,因为安装程序会写入文件系统和注册表的受保护区域。
安装程序检测仅适用于:
- 32 位可执行文件
- 没有请求的执行级别属性的应用程序
- 以启用了 UAC 的标准用户身份运行的交互式进程
在创建 32 位进程之前,会检查以下属性以确定它是否为安装程序:
- 文件名包括“install”、“setup”或“update”等关键字。
- 版本控制资源字段包含以下关键字:供应商、公司名称、产品名称、文件说明、原始文件名、内部名称和导出名称。
- 并行清单中的关键字嵌入到可执行文件中。
- 特定 StringTable 条目中的关键字在可执行文件中链接。
- 资源脚本数据中的键属性链接在可执行文件中。
- 可执行文件中有目标字节序列。
注意
关键字和字节序列派生自各种安装程序技术观察到的常见特征。
注意
必须启用 “用户帐户控制:检测应用程序安装并提示提升 ”策略,才能检测安装程序。 有关详细信息,请参阅 用户帐户控制设置列表。
后续步骤
详细了解 用户帐户控制设置和配置。