用户账户控制
深刻了解 Windows 7 用户账户控制
Mark Russinovich
概览:
在家庭和公司环境中,使用标准用户账户能够提升安全性并下降整体拥有成本。当用户使用标准用户权限(而不是管理权限)运行时,系统的安全配置(包括防病毒和防火墙配置)将获得保护。这样,用户将能拥有一个安全的区域,能够保护他们的账户及系统的其他部分。对于企业部署,桌面 IT 经理设置的策略将没法被覆盖,而在共享家庭计算机上,不一样的用户账户将受到保护,避免其余账户对其进行更改。
可是,好久以来,Windows 的用户一直都在使用管理权限运行。所以,软件一般都开发为使用管理账户运行,而且(一般无心间)依赖于管理权限。为了让更多软件可以使用标准用户权限运行,而且帮助开发人员编写可以使用标准用户权限正常运行的应用程序,Windows Vista 引入了用户账户控制 (UAC)。UAC 集成了一系列技术,其中包括文件系统和注册表虚拟化、受保护的系统管理员 (PA) 账户、UAC 提高权限提示,以及支持这些目标的 Windows 完整性级别。我在个人
会议演示文稿和
TechNet 杂志
UAC 内部信息一文中详细讨论了这些内容。
Windows 7 沿用了 UAC 的目标,基础技术相对未作改变。可是,它引入了 UAC 的 PA 账户能够运行的两种新模式,以及某些内置 Windows 组件的自动提高机制。在此文章中,我将论述推进 UAC 技术发展的因素、
从新探讨 UAC 和安全性之间的关系、描述这两种新模式,并介绍自动提高的具体工做方式。请注意,此文章中的信息反映了 Windows 7 预发布版本的行为,该行为在许多方面与 beta 版有所不一样。
UAC 技术
UAC 技术的最基本元素和直接效益在于它能使标准用户更方便地使用 Windows。演示示例展现了 Windows XP 和 Windows Vista 上有关设置时区的权限要求的不一样之处。在 Windows XP 上,更改时区须要管理权限,实际上,即便是使用时间/日期控制面板小程序查看时区也须要管理权限。
这是由于 Windows XP 未将更改时间(安全敏感的系统操做)与更改时区(只是影响时间的显示方式)区分开来。在 Windows Vista(和 Windows 7)中,更改时区不是一项管理操做,而且时间/日期控制面板小程序也将管理操做与标准用户操做进行了分隔。仅仅这一项更改就让许多企业可以为出差的用户配置标准用户账户,由于用户将可以调整时区来反映他们的当前位置。Windows 7 进一步作出了改进,好比刷新系统的 IP 地址、使用 Windows Update 来安装可选的更新和驱动程序、更改显示 DPI,以及查看标准用户可访问的当前防火墙设置。
文件系统和注册表虚拟化在后台工做,能够帮助许多无心间使用管理权限的应用程序在没有管理权限的状况下也能正常运行。对于没必要要地使用管理权限而言,最多见的状况是将应用程序设置或用户数据存储在注册表或文件系统中系统所使用的区域内。举例来讲,某些旧版应用程序将其设置存储在注册表的系统范围部分 (HKEY_LOCAL_MACHINE\Software),而不是每用户部分 (HKEY_CURRENT_USER\Software),而注册表虚拟化会将尝试写入系统位置的操做转到 HKEY_CURRENT_USER (HKCU) 中的位置,同时保持应用程序兼容性。
设计 PA 账户的目的是为了鼓励开发人员将应用程序编写为只须要标准用户权限,同时使尽量多的在管理组件和标准用户组件之间共享状态的应用程序可以继续工做。默认状况下,Windows Vista 或 Windows 7 系统上的第一个账户(在 Windows 的早期版本上为彻底权限管理员账户)是 PA 账户。PA 用户执行的任何程序都使用标准用户权限运行,除非用户明确提高了应用程序,即授予应用程序管理权限。诸如安装应用程序和更改系统设置等用户活动会触发提高权限提示。这些提高权限提示是最显著的 UAC 技术,表现形式为切换到一个包含容许/取消对话框的屏幕,背景为灰色的桌面快照。
在安装以后建立的账户是标准用户账户,默认状况下,这些账户经过一个“即时权限提高”提示提供提高功能,该提示要求提供将用于授予管理权限的管理账户的凭据。利用这一便捷功能,只要共享家庭计算机的家庭成员或更注重安全的使用标准用户账户的用户知道管理账户的密码,他们就可以用管理权限来运行应用程序,而没必要手动切换到其余用户登陆会话。此类应用程序的常见示例包括安装程序以及家长控制配置。
在启用了 UAC 后,全部用户账户(包括管理账户)都将使用标准用户权限运行。这意味着,应用程序开发人员必须考虑他们的软件默认状况下将没有管理权限这一事实。这应会提醒他们将其应用程序设计为使用标准用户权限工做。若是应用程序或其功能的某些部分须要管理权限,它能够利用提高机制来容许用户解锁该功能。一般,应用程序开发人员只需进行少量更改就可以让其应用程序使用标准用户权限正常工做。如
有关 UAC 的 E7 博客文章所述,UAC 成功地改变了开发人员编写软件的方式。
提高权限提示的另外一个优势是:它们可以在软件想要对系统进行更改时“通知”用户,并使用户有机会来阻止这种状况。例如,若是用户不信任或不想容许修改系统的软件包要求管理权限,则它们能够拒绝提示。
提高和恶意软件安全性
UAC 的主要目标是让更多用户可以使用标准用户权限运行。可是,其中一项 UAC 技术看起来像是安全功能:许可提示。许多人认为,由于软件必需要求用户授予其管理权限,所以他们可以防止恶意软件得到管理权限。提示是一种视觉暗示,它仅为其所述操做获取管理权限,除此以外,用户还能够切换到不一样桌面来显示提高对话框,以及使用 Windows 完整性机制,包括用户界面特权隔离 (UIPI),这些都令人们更加坚信这一理念。
正如在 Windows Vista 推出以前
咱们所谈到的,提高的主要目的不是安全性,而是其方便性:若是用户必须经过登陆到管理账户或经过“快速用户切换”切换到管理账户,从而切换账户以执行管理操做,则大多数用户都只会切换一次,而不会切换回来。更改应用程序开发人员进行设计所针对的环境将不会有进展。那么,安全桌面和 Windows 完整性机制的目的是什么?
为提示切换到不一样桌面的主要缘由是:标准用户软件没法“欺骗”提高权限提示,例如,它们没法经过在对话框上的发布者名称上绘图来欺骗用户,让用户认为是 Microsoft 或另外一个软件供应商(而不是这些软件)生成了提示,从而欺骗提高权限提示。这种替代桌面称为“安全桌面”,由于它是系统(而不是用户)所拥有的,就像系统显示 Windows 登陆对话框的桌面同样。
使用其余桌面还有一个重要目的,就是为了实现应用程序兼容性:在正在运行其余用户拥有的应用程序的桌面上,若是内置辅助功能软件(好比屏幕键盘)可以正常工做,那么此时就有一个第三方软件不能正常工做。当本地系统账户拥有的提高对话框显示在用户拥有的桌面上时,该软件将没法正常工做。
Windows 完整性机制和 UIPI 的设计目的是在提高的应用程序周围创建一道保护性屏障。它最初的目标其中之一是防止软件开发人员投机取巧,利用已经提高的应用程序来完成管理任务。使用标准用户权限运行的应用程序没法将合成鼠标或键盘输入发送到提高的应用程序中,以使应用程序执行其指令,也没法将代码注入提高的应用程序以执行管理操做。
Windows 完整性机制和 UIPI 在 Windows Vista 中用于保护模式 Internet Explorer,使得感染 IE 的运行实例的恶意软件更难于修改用户账户设置,例如,将自己配置为在每次用户登陆时启动。尽管 Windows Vista 的一个早期设计目标是使用带有安全桌面的提高、Windows 完整性机制和 UIPI,在使用标准用户权限和管理权限运行的软件之间创建一个坚如盘石的屏障(称为安全边界),但因为如下两个缘由,而致使该目标未能实现,并随之被放弃:可用性和应用程序兼容性。
图 1
显示可执行文件的名称。
首先,考虑提高对话框自己。它显示将被授予管理权限的主要可执行文件的名称和发布者。遗憾的是,尽管愈来愈多的软件发布者为其代码添加了数字签名,但仍然有一些软件发布者没有这样作,而且还有许多未添加签名的旧版应用程序。对于未签名的软件而言,提高对话框只会显示可执行文件的文件名,所以,对于某些恶意软件(例如,已采用用户账户运行而且正在监视未签名 Setup.exe 应用程序安装程序的提高)而言,将可以将可执行文件替换为恶意的 Setup.exe,而用户却一无所知(请参阅
图 1)。
其次,该对话框不会告知用户可执行文件在启动时将会加载哪些 DLL。若是可执行文件位于用户能够控制的目录中,则使用用户标准权限运行的恶意软件将可以替换该位置中软件将使用的任何关联 DLL。此外,恶意软件可使用并行功能,使可执行文件加载应用程序或系统 DLL 的恶意版本。而且,除非用户警戒地单击详细信息按钮,并仔细查看为提高可执行文件列出的文件路径,不然恶意软件能够将可执行文件复制到名称相似的位置,例如,\ProgramFiles\Vendor\Application.exe(注意应为“Program Files”的内容中缺乏的空格),在该位置中,恶意软件将可控制应用程序加载哪些 DLL。在
图 2 中,我已将 Microsoft 网络监视器的一个组件复制到用户建立的 C:\ProgramFiles 目录(用户可控制该目录),并启动了该组件。
图 2
已启动的 Microsoft 网络监视器组件的副本。
最后,为了实现应用程序兼容性,提高的应用程序与标准用户环境共享实质性状态,恶意应用程序可使用该状态来影响提高的应用程序的行为。就这一点而言,最直观的示例就是用户的注册表配置文件 HKEY_CURRENT_USER (HKCU)。该配置文件是共享的,由于用户但愿他们做为标准用户注册的设置和扩展可以在提高的应用程序中工做。恶意软件可使用 HKCU 中注册的外壳扩展来加载到使用任何外壳浏览对话框(好比“打开文件”和“保存文件”)的已提高应用程序中。其余各类状态也是共享的,特别是基本命名对象命名空间,应用程序将在其中建立同步和共享内存对象。举例来讲,恶意软件能够利用该共享来劫持提高的应用程序使用的共享内存对象,从而对应用程序和系统形成危害。
至于 Windows 完整性机制,因为我前面提到的提高问题,所以它做为屏障的有效性是有限的,而它还存在因为应用程序兼容性而致使的限制。举例来讲,UIPI 不会阻止标准用户应用程序在桌面上绘图,这一点可能会被用来欺骗用户,采用为恶意软件授予管理权限的方式来与提高的应用程序交互。同时,Windows 完整性机制也不能跨网络应用。采用 PA 账户运行的标准用户应用程序将能访问 PA 账户具备管理权限的远程系统上的系统资源。若是解决这些限制,将会对应用程序兼容性形成很大影响。尽管如此,咱们一直在探寻提升系统安全性(例如,改善保护模式 IE),同时解决应用程序兼容性问题并与软件开发人员密切配合的方法。
那么,当您在启用了 UAC 的状况下采用 Windows Vista PA 账户运行时,您将获得什么程度的恶意软件防御?首先,请记住,要使任何这种状况发生,恶意软件首先必须进入系统而且开始执行。Windows 具备许多深层防护功能,其中包括数据执行保护 (DEP)、地址空间加载随机化 (ASLR)、保护模式 IE、IE 8
SmartScreen 筛选器,以及能够帮助防止恶意软件进入系统并运行的 Windows Defender。
至于恶意软件经过某种方式成功进入系统的状况,因为恶意软件做者(好比合法的开发人员)假设用户使用管理权限运行,所以大多数恶意软件将没法正常工做。仅这一点能够被视为一种安全优点。可是,已进入系统而且设计为可利用这些机会的恶意软件将可以在用户第一次提高时得到管理权限 — 但恶意软件甚至不须要等待“实际”提高,由于它能够促成提高,而这种提高甚至能够欺骗最注重安全的用户。我已经在个人
UAC 内部信息和
Windows 安全边界演示文稿中公开演示过恶意软件如何可以劫持提高过程(演示位于安全边界讨论的 1 分 03 秒处)。可是,请记住,若是恶意软件已经开始运行,它只需使用标准用户权限就可达到恶意软件想要达到的大部分目的,其中包括将自己配置为在每次用户登陆时运行、窃取或删除全部用户的数据,或者甚至成为僵尸网络的一部分。
Windows 7 中的不一样之处
我在前面提过,Windows 7 中的某些操做如今可由标准用户执行,但正若有关 UAC 的 E7 博客文章所述,咱们还认识到,咱们能够在不影响 UAC 的目标的状况下使 Windows 体验更加流畅。许多用户抱怨说,当他们执行常见的系统管理操做时,Windows Vista 自己会频繁地请求管理权限。使 Windows 可以针对标准用户环境正常工做对咱们最有利,由于这样将为咱们的客户带来利益。可是,提高权限提示并无告诫或鼓励咱们这样作,而是会强制用户在绝大多数用户都不理解的对话框中再次单击。所以,Windows 7 开始从默认 Windows 体验中最大程度地减小这些提示,并使以管理员身份运行的用户可以控制其提示体验。
为此,咱们进一步重构了系统,这样,拥有标准用户权限的用户将能执行更多任务,而且,咱们减小了若干多提示方案(例如,在 IE 中安装 ActiveX 控件)中的提示数量。Windows 7 还引入了两种新的 UAC 操做模式,能够在新的 UAC 配置对话框(请参阅
图 3)中选择这些模式。经过转到控制面板,单击“用户账户”,单击“用户账户”,而后单击“更改用户账户控制设置”,您能够打开该对话框。(您也能够经过单击提高权限提示上的“显示这些通知时进行更改”连接或经过访问“操做中心”来进入该对话框。)
图 3
可在新的 UAC 配置对话框中选择的两种新 UAC 操做模式。
图 3 中显示的默认设置就是其中一个新级别。与位于滑块顶部并至关于 Windows Vista 中的默认模式的“始终通知”不一样,只有当非 Windows 可执行文件请求提高时,Windows 7 才会默认提示用户;针对非 Windows 提高的行为与 Windows Vista 相同。
下面接下来的滑块位置是第二个新设置,它的标签相同,只是后面附加了“(不下降桌面亮度)”。该模式和默认模式的惟一不一样之处在于:提示将出如今用户的桌面(而不是安全桌面)上。这样的好处是:用户能够在提示处于活动状态的同时与桌面交互,但正如我以前提到的,将会出现第三方辅助功能软件可能没法在该提示对话框上正常工做的风险。
最后,若是选择最底部的滑块位置,将会彻底禁用 UAC 技术,这样,全部采用 PA 账户运行的软件都将使用彻底管理权限运行、文件系统和注册表虚拟化将被禁用,而且保护模式 IE 将被禁用。尽管采用此设置时将没有提示,但保护模式 IE 的损失是此模式的一个很大的弊端。
自动提高
在采用中间两种设置时,之因此(大多数)Windows 可执行文件的提高不会产生提示,其缘由在于系统“自动提高”了 Windows 可执行文件。首先,在此上下文中,Windows 对 Windows 可执行文件的定义是什么?答案取决于若干因素,但有两个条件必须获得知足:该可执行文件必须通过 Windows Publisher 的数字签名,Windows Publisher 是用于对 Windows 附带的全部代码进行签名的证书(仅由 Microsoft 进行签名是不够的,所以 Windows 未附带的 Microsoft 软件不包括在内);而且该可执行文件必须位于其中一个为数很少的“安全”目录中。安全目录是指标准用户没法修改的目录,而且它们包括 %SystemRoot%\System32(例如,\Windows\System32)及其大多数子目录、%SystemRoot%\Ehome,以及 %ProgramFiles% 下的少量目录(其中包括 Windows Defender 和 Windows 日记本)。
同时,视可执行文件是普通 .exe、Mmc.exe 仍是 COM 对象而定,自动提高还有一些附加规则。若是 .exe 种类的 Windows 可执行文件(如前面所定义)在其清单中指定了 autoElevate 属性,这些可执行文件将会自动提高。应用程序也将在该清单中向 UAC 指明它们须要管理权限。此处的 Sysinternals
Sigcheck 实用工具经过命令“sigcheck –m %systemroot%\system32\taskmgr.exe”来转储任务管理器 (Taskmgr.exe) 的清单,该清单显示任务管理器已加入自动提高,如
图 4 所示。
图 4
autoElevate 属性
在目录树中查找自动提高可执行文件的一种简便方法是,经过以下所示的命令使用 Sysinternals Strings 实用工具: