用户帐户控制工作原理

用户帐户控制 (UAC) 是 Microsoft 的总体安全构想的基本组件。 UAC 有助于缓解恶意软件的影响。

UAC 进程和交互

需要管理员访问令牌的每个应用都必须提示同意。 一个例外是父进程和子进程之间存在的关系。 子进程从父进程继承用户的访问令牌。 但是,父进程和子进程必须具有相同的完整性级别。 Windows 通过标记进程的完整性级别来保护进程。 完整性级别是信任度量值。 “高”完整性应用程序是执行修改系统数据(如磁盘分区应用程序)的任务,而“低”完整性应用程序是执行可能危及操作系统(如 Web 浏览器)的任务。 完整性级别较低的应用无法修改完整性级别较高的应用程序中的数据。 当标准用户尝试运行需要管理员访问令牌的应用时,UAC 要求用户提供有效的管理员凭据。

为了更好地了解此过程是如何发生的,让我们来看看 Windows 登录过程。

登录过程

下面显示了管理员的登录过程与标准用户的登录过程有何不同。

uac windows 登录过程。

默认情况下,标准用户和管理员在标准用户的安全上下文中访问资源并运行应用。 当用户登录到计算机时,系统会为该用户创建访问令牌。 访问令牌包含有关授予用户的访问级别的信息,包括特定的安全标识符 (SID) 和 Windows 权限。

当管理员登录时,将为用户创建两个单独的访问令牌:标准用户访问令牌和管理员访问令牌。 标准用户访问令牌包含与管理员访问令牌相同的特定于用户的信息,但管理 Windows 权限和 SID 将被删除。 标准用户访问令牌用于启动不执行管理任务的应用 (标准用户应用) 。 然后使用标准用户访问令牌来显示桌面 (explorer.exe) 。 Explorer.exe是所有其他用户发起的进程从中继承其访问令牌的父进程。 因此,除非用户提供同意或凭据来批准应用使用完整的管理访问令牌,否则所有应用都以标准用户身份运行。

作为管理员组成员的用户可以使用标准用户访问令牌登录、浏览 Web 和读取电子邮件。 当管理员需要执行需要管理员访问令牌的任务时,Windows 10或Windows 11会自动提示用户批准。 此提示称为提升提示,可以通过使用 Secpol.msc () 或 组策略 的“本地安全策略”管理单元进行配置。 有关详细信息,请参阅 用户帐户控制安全策略设置

UAC 用户体验

启用 UAC 后,标准用户的用户体验与管理员审批模式下的管理员的用户体验不同。 建议的、更安全的运行Windows 10或Windows 11方法是使主用户帐户成为标准用户帐户。 以标准用户身份运行有助于最大程度地提高托管环境的安全性。 使用内置 UAC 提升组件,标准用户可以通过输入本地管理员帐户的有效凭据轻松执行管理任务。 标准用户的默认内置 UAC 提升组件是凭据提示。

作为标准用户运行的替代方法是在管理员审批模式下以管理员身份运行。 使用内置 UAC 提升组件,本地管理员组的成员可以通过提供审批轻松地执行管理任务。 管理员审批模式下管理员帐户的默认内置 UAC 提升组件称为同意提示。

许可和凭据提示

启用 UAC 后,在启动需要完全管理员访问令牌的程序或任务之前,Windows 10或Windows 11提示同意或提示输入有效本地管理员帐户的凭据。 此提示可确保无提示安装任何恶意软件。

许可提示

当用户尝试执行需要用户管理访问令牌的任务时,会显示同意提示。 下面是 UAC 同意提示的示例。

UAC 同意提示。

凭据提示

当标准用户尝试执行需要用户管理访问令牌的任务时,会显示凭据提示。 还可要求管理员提供凭据,方法是将 “用户帐户控制:在审批模式策略设置值管理员的管理员的提升提示行为,以提示输入凭据

下面是 UAC 凭据提示的示例。

UAC 凭据提示。

UAC 提升提示

UAC 提升提示以特定于应用的颜色编码,可立即识别应用程序的潜在安全风险。 当应用尝试使用管理员的完整访问令牌运行时,Windows 10或Windows 11首先分析可执行文件以确定其发布者。 应用首先根据文件的发布者分为三个类别:Windows 10或Windows 11、发布者 (已签名) 以及发布者未验证 (未签名的) 。 下图演示了 Windows 如何确定要向用户显示的颜色提升提示。

提升提示颜色编码如下所示:

  • 带有红色防护图标的红色背景:应用被组策略阻止,或者来自被阻止的发布者。
  • 蓝色背景,带有蓝色和金色防护图标:应用程序是Windows 10和Windows 11管理应用,如控制面板项。
  • 带有蓝色防护图标的蓝色背景:应用程序使用 Authenticode 进行签名,并受本地计算机信任。
  • 带有黄色防护图标的黄色背景:应用程序未签名或已签名,但本地计算机尚不信任该应用程序。

防护图标

某些控制面板项(如日期和时间属性)包含管理员和标准用户操作的组合。 标准用户可以查看时钟并更改时区,但需要完整的管理员访问令牌才能更改本地系统时间。 下面是日期和时间属性控制面板项的屏幕截图。

日期和时间属性中的 UAC 防护图标

“更改日期和时间”按钮上的防护图标指示该过程需要完全管理员访问令牌,并会显示 UAC 提升提示。

保护提升提示

通过将提示定向到安全桌面,进一步保护提升过程。 默认情况下,许可和凭据提示显示在安全桌面上Windows 10和Windows 11。 只有 Windows 进程可以访问安全桌面。 为了提高安全级别,建议保留 用户帐户控制:在提示启用提升策略设置时切换到安全桌面

当可执行文件请求提升时,交互式桌面(也称为用户桌面)将切换到安全桌面。 安全桌面会使用户桌面变暗,并显示提升提示,在继续操作之前必须对其进行响应。 当用户单击 “是 ”或 “否”时,桌面会切换回用户桌面。

恶意软件可以显示对安全桌面的模仿,但当用户帐户控制:管理员审批模式策略设置中管理员的提升提示行为设置为****“提示同意”时,如果用户单击“模拟的是”,恶意软件不会获得提升。 如果策略设置设置为 提示输入凭据,则模拟凭据提示的恶意软件可能能够从用户收集凭据。 但是,恶意软件不会获得提升的权限,并且系统还具有其他保护措施,可以缓解恶意软件无法控制用户界面(即使使用已收获的密码)。

虽然恶意软件可能会对安全桌面造成模仿,但除非用户以前在电脑上安装了恶意软件,否则不会出现此问题。 由于在启用 UAC 时,需要管理员访问令牌的进程无法以无提示方式安装,因此用户必须通过单击 “是 ”或提供管理员凭据来显式提供同意。 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 有一个滑块,可从四个级别的通知中进行选择。

  • 始终通知 将:

    • 当程序尝试安装软件或对计算机进行更改时通知你。
    • 更改 Windows 设置时通知你。
    • 冻结其他任务,直到你做出响应。

    建议你经常安装新软件或访问不熟悉的网站。

  • 仅当程序尝试更改计算机时才通知我

    • 当程序尝试安装软件或对计算机进行更改时通知你。
    • 更改 Windows 设置时,请通知你。
    • 冻结其他任务,直到你做出响应。

    建议不要经常安装应用或访问不熟悉的网站。

  • **仅当程序尝试对计算机进行更改时才通知我 (不会使桌面变暗,) ** 会:

    • 当程序尝试安装软件或对计算机进行更改时通知你。
    • 更改 Windows 设置时,请通知你。
    • 在响应之前不会冻结其他任务。

    不建议这样做。 仅当需要很长时间才能使计算机上的桌面变暗时才选择此选项。

  • **从不通知 (禁用 UAC 提示) ** 将:

    • 当程序尝试安装软件或对计算机进行更改时,请通知你。
    • 更改 Windows 设置时,请通知你。
    • 在响应之前不会冻结其他任务。

    出于安全考虑,不建议这样做。

已启用安全桌面

用户帐户控制:在检查提升策略设置提示时切换到安全桌面

  • 如果启用了安全桌面,则所有提升请求都将转到安全桌面,而不考虑管理员和标准用户的提示行为策略设置。

  • 如果未启用安全桌面,则所有提升请求将转到交互式用户'桌面,并且将使用管理员和标准用户的每个用户设置。

CreateProcess

CreateProcess 调用 AppCompat、Fusion 和 Installer 检测来评估应用是否需要提升。 然后检查该文件以确定其请求的执行级别,该级别存储在文件的应用程序清单中。 如果清单中指定的请求执行级别与访问令牌不匹配,并且将错误 (ERROR_ELEVATION_REQUIRED) 返回到 ShellExecute,则 CreateProcess 会失败。

AppCompat

AppCompat 数据库将信息存储在应用程序的应用程序兼容性修复条目中。

融合

Fusion 数据库存储描述应用程序的应用程序清单中的信息。 更新清单架构以添加新的请求执行级别字段。

安装程序检测

安装程序检测检测安装程序文件,这有助于防止安装在用户'知情和同意的情况下运行。

内核

组件 描述

虚拟化

虚拟化技术可确保不符合的应用不会以无法确定原因的方式以无提示方式运行或失败。 UAC 还为写入受保护区域的应用程序提供文件和注册表虚拟化和日志记录。

文件系统和注册表

每个用户的文件和注册表虚拟化会将每台计算机注册表和文件写入请求重定向到等效的每个用户位置。 读取请求首先重定向到虚拟化的每用户位置,第二个重定向到每台计算机的位置。

滑块永远不会完全关闭 UAC。 如果将其设置为 “从不通知”,它将:

  • 使 UAC 服务保持运行。
  • 导致管理员启动的所有提升请求自动批准,而不显示 UAC 提示。
  • 自动拒绝标准用户的所有提升请求。

重要

若要完全禁用 UAC,必须禁用策略用户帐户控制:在管理员审批模式下运行所有管理员

警告

禁用 UAC 时,某些通用 Windows 平台应用可能不起作用。

虚拟化

由于企业环境中的系统管理员尝试保护系统,因此许多业务线 (LOB) 应用程序设计为仅使用标准用户访问令牌。 因此,在启用 UAC 时,无需替换大多数应用。

Windows 10和Windows 11包括不符合 UAC 且需要管理员访问令牌才能正常运行的应用的文件和注册表虚拟化技术。 当不符合 UAC 的管理应用尝试写入受保护的文件夹(如程序文件)时,UAC 会为应用提供其尝试更改的资源的虚拟化视图。 虚拟化副本保留在用户的配置文件中。 此策略为运行不符合应用的每个用户创建虚拟化文件的单独副本。

大多数应用任务都使用虚拟化功能正常运行。 尽管虚拟化允许大多数应用程序运行,但它是一个短期修补程序,而不是一个长期解决方案。 应用开发人员应尽快修改其应用以使其符合要求,而不是依赖于文件、文件夹和注册表虚拟化。

在以下方案中,虚拟化不是一个选项:

  • 虚拟化不适用于提升并使用完整管理访问令牌运行的应用。

  • 虚拟化仅支持 32 位应用。 非提升的 64 位应用在尝试获取) Windows 对象的唯一标识符 (句柄时,只会收到拒绝访问的消息。 本机 Windows 64 位应用必须与 UAC 兼容,并将数据写入正确的位置。

  • 如果应用包含具有请求的执行级别属性的应用清单,则禁用虚拟化。

请求执行级别

应用清单是一个 XML 文件,用于描述和标识应用应在运行时绑定到的共享和专用并行程序集。 应用清单包含用于 UAC 应用兼容性的条目。 在应用清单中包含条目的管理应用会提示用户获得访问用户访问令牌的权限。 尽管它们在应用清单中缺少条目,但大多数管理应用都可以通过使用应用兼容性修补程序在不修改的情况下运行。 应用兼容性修复是数据库条目,使不符合 UAC 的应用程序能够正常工作。

所有符合 UAC 的应用都应将请求的执行级别添加到应用程序清单中。 如果应用程序需要对系统进行管理访问,则使用请求的执行级别“需要管理员”标记应用可确保系统将此程序标识为管理应用并执行必要的提升步骤。 请求的执行级别指定应用所需的权限。

安装程序检测技术

安装程序是设计用于部署软件的应用。 大多数安装程序都写入到系统目录和注册表项。 这些受保护的系统位置通常只能由安装程序检测技术中的管理员写入,这意味着标准用户没有足够的访问权限来安装程序。 Windows 10和Windows 11启发性地检测安装程序,并请求管理员凭据或管理员用户批准,以便使用访问权限运行。 Windows 10和Windows 11还会启发性地检测卸载应用程序的更新和程序。 UAC 的设计目标之一是防止安装在用户不知情和同意的情况下运行,因为安装程序写入到文件系统和注册表的受保护区域。

安装程序检测仅适用于:

  • 32 位可执行文件。
  • 没有请求的执行级别属性的应用程序。
  • 作为启用了 UAC 的标准用户运行的交互式进程。

在创建 32 位进程之前,将检查以下属性以确定它是否是安装程序:

  • 文件名包括关键字,如“安装”、“安装”或“更新”。
  • 版本控制资源字段包含以下关键字:供应商、公司名称、产品名称、文件说明、原始文件名、内部名称和导出名称。
  • 并行清单中的关键字嵌入到可执行文件中。
  • 特定 StringTable 条目中的关键字链接在可执行文件中。
  • 资源脚本数据中的密钥属性链接在可执行文件中。
  • 可执行文件中有目标字节序列。

备注

字节的关键字和序列派生自从各种安装程序技术中观察到的常见特征。

备注

用户帐户控制:必须启用“检测应用程序安装”和“提升策略设置提示”,以便安装程序检测到安装程序。 有关详细信息,请参阅 用户帐户控制安全策略设置