Windows Vista系统账户保护机制初探

最近Vista又有了很多新闻 , 还有Vista中的新成员WMP11也闪亮登场 。今天 , 我们就一起来看看Vista中是如何保护账户安全的 。
通常在提到微软的操作系统时 , 我们最关心的永远都是安全性 。因为普及率非常高 , 再加上全球无数各种水平的用户都在使用它 , 同时在微软的操作系统上运行有大量质量良莠不齐的应用程序 , 这一切结合起来就让微软产品的安全问题非常突出 。

例如前两年曾肆虐网络的冲击波、振荡波、斯文等病毒 , 都是利用了微软产品的漏洞以及用户的粗心大意传播开的 。

微软自然不会让这种问题继续下去 。在去年很长的一段时间里 , 微软全部的开发人员都停下了手头的开发工作 , 开始对现有产品进行安全性检查 。这个检查直接影响了Windows XP SP2和Vista的推出时间 , 不过从检查之后发布的Windows XP SP2和Windows Server 2003 SP1来看 , 安全性确实得到了很大提高 , 长时间的等待是值得的 。


虽然在打过补丁之后安全性得到了一定提高 , 不过这毕竟还是在现有漏洞上打补丁 , 总会让人觉得不够放心 。那么全新的下一代操作系统在安全性方面会有什么进步?我们可以通过Vista测试版体验一下 。本文以5219版Vista为例 , 在该版本中 , 安全性方面最主要的一个改进就是增加了一个叫做用户账户保护的功能(User Account Protection , UAP) 。

Vista发展动态

Vista新成员WMP11亮相

作为Windows捆绑的播放器 , WMP一直拥有巨大的用户群 , 它每一次新版本的发布都为很多Windows的粉丝们所关注 。最近 , WMP11的发布终于在Vista Beta1推出4个月后有了眉目 。从截图来看 , WMP11增加了预览功能 , 可以显示视频文件的缩略图 。其用户界面大体上与前作相同 , 但在细节上 , 更突出了面板的质感 , 和晶莹剔透的Vista配合而相得益彰 。

漂亮的Vista WMP11
你可能觉得 , 这是一套相当安全并且方便的机制 , 因为只要在登录系统的时候输入一次用户名和密码 , 就可以在整个登录过程中直接执行任何具有权限的操作 。同时只要保护好SAM数据库 , 也就不用担心系统的安全问题 。然而事实远非如此 , 这样的做法虽然方便 , 不过却相当不安全 。

我们可以考虑这样的情况:使用管理员账户登录系统后 , 我们运行的任何程序自然也将具有管理员权限 。如果我们不小心运行了网上下载的含有恶意程序的文件会怎样?恶意程序在运行的时候会使用当前用户的访问凭据 , 也就是说程序的进程也具有了管理员权限 , 进而该进程可以对系统进行任何操作 。意识到其中包含的风险了吧 。
所以很多介绍系统安全的文章都会建议 , 平时使用计算机的时候最好不要用管理员账户登录 , 而是用权限小一些的账户 , 只有在偶尔需要进行维护或者其他必要操作的时候才使用管理员账户 , 或者直接使用Runas命令 。这样才能保证系统安全 。

小知识:不得不提的Runas命令
这里再介绍一下Runas命令 。通过该命令 , 我们可以在保持当前用户登录的情况下使用其他用户的身份运行程序 。例如 , 对于开始菜单中某个程序的快捷方式 , 我们只需要在该快捷方式上点击鼠标右键 , 然后点击“运行方式”命令 , 接着在弹出的对话框中选择“下列用户”选项 , 指定一个用户名并输入密码 。这样程序就可以使用指定的用户身份运行了 。

当然 , 如果你喜欢使用命令行方式 , 也可以运行CMD打开命令提示符 , 使用类似这样的命令:“runas user:要使用的用户名 要运行的程序的路径和名称” , 按下回车 , 并输入该用户的密码 。例如通过“runas user:administrator regedit”这样的命令就可以使用Administrator的身份运行注册表编辑器 。

虽然我们可以在平时使用权限低的用户名登录 , 但在需要执行特定操作的时候使用runas命令 , 不过这还是有些麻烦 , 同时需要进行的额外操作也太多 。为了解决这一问题 , Vista中提供了UAP功能 。

在介绍这个功能之前 , 我们先了解一下Windows中的各种权限是如何控制的 。这部分主要以单机或工作组环境下的Windows XP Professional为例 , 同时也适用于Windows 2000/2003 , 不适用于Windows 98 。

系统安装好后 , 所有用户的凭据信息(也就是用户名和密码)都被保存在本地SAM(Security Accounts Manager , 安全账户管理器)数据库中 。当用户登录系统时 , 首先要输入用户名和密码 , 这些信息由winlogon进程获取 , 并由LSA(Local Security Authority , 本地安全验证)子系统提交到SAM数据库中验证 。

如果SAM数据库中有符合条件的记录 , 那么LSA子系统就会生成一个访问令牌(Access Token) , 并传递给用户 。当该用户需要运行程序或访问资源的时候 , 系统首先会在用户持有的访问令牌中查找相应的权限信息 , 然后和想要进行的操作所需要具有的权限进行比较 , 如果权限足够 , 那么就可以进行操作;反之操作则会被禁止 。

以运行程序为例 , 当我们试图启动一个程序的时候 , 系统会使用我们的访问令牌来启动程序 , 这样被启动的程序就拥有了和令牌所有者一样的权限 。为了证实这一点 , 我们可以打开Windows任务管理器的进程选项卡 。该选项卡下列出了当前系统中的所有进程 , 每个进程在“用户名”一栏就显示了该进程的“身份” 。


以图1中的几个进程为例 , csRSS.exe是系统进程 , 因此用户名一栏显示的是“SYSTEM”;emeditor.exe是当前登录用户启动的程序 , 因此用户名一栏显示的是当前用户的用户名;eMule.exe虽然也是当前用户启动的 , 不过在启动的时候使用了Runas命令 , 因此看起来该程序就好像其他用户启动的 。当然 , 因为这三个进程使用了不同的访问令牌(也就是用户身份) , 那么这三个程序的权限也就会有所不同 。

进程显示
启用该功能之后 , Vista实际上自动运行在一个被减少了很多特权的安全级别上 。如果因为某些操作 , 系统需要更高的权限 , 就会显示一个对话框 , 并要你输入密码 。这个密码只能用于发起这次请求的操作 , 随后你进行的其他操作 , 哪怕是由此前的操作导致的额外操作 , 全部都是以最低的权限运行的 。

默认情况下UAP是被禁用的 , 要启用该功能 , 在开始菜单中点击“All Programs(所有程序)” , 然后点击“Turn UAP settings On or Off(打开或关闭UAP)” , 你将能看到图2所示界面 , 点击Yes按钮即可打开UAP , 随后我们需要注销并重新登录 。

试试看更改一下系统设置吧 , 例如随便打开控制面板中任何一个控制程序 , 你都将会看到图3所示的对话框 , 要求你输入管理员用户的密码 。

弹出警告框

需要输入管理员密码
有人担心这个功能在启用后会不会造成使用上的不便 , 其实担心是没必要的 , UAP只是一种保护 , 而不是单纯的限制 。假设我们已经启用了UAP功能 , 并要执行某个需要一定特权才能执行的操作 , 例如修改注册表 , 那么可能有两种情况:如果当前登录的账户已经有了修改注册表的权限 , 那么Vista会弹出一个对话框 , 询问用户是否继续该操作 , 用户可以作出选择;如果当前登录的用户没有修改注册表的权限 , Vista会弹出一个对话框 , 告知用户这一情况 , 并允许用户输入一个具有相应权限的账户的用户名和密码 , 验证成功后一样可以进行操作 。
如果你觉得这样还不够直观 , 也可以通过编辑注册表打开UAP的另一个界面 。在注册表编辑器中定位到HKEY_LOCAL_MacHINESoftwareMicrosoftWindowsCurrentVersionPolicIEsSystem , 将ConsentPromptBehavior的数值改为“1” , 重启动系统 。这样当运行一个需要一定特权的程序时 , 首先会看到图4所示对话框 , 如果确实打算执行该操作 , 那么可以点击“I want to complete this action(我想要执行该操作)” , 否则可以点击“I do not want to complete this action(我不想执行该操作)” , 返回到桌面 。

选择项
【Windows Vista系统账户保护机制初探】UAP是个相当好的改进 , 在保持了易用性的同时又增强了安全性 , 建议每个用户都使用 。然而该功能最大的一个不足就是和现有程序的兼容问题 , 因为UAP是Vista中一个新增的功能 , 因此有些老程序(尤其是工作在系统底层的程序 , 例如老版本的杀毒软件、防火墙、备份软件等)在启用UAP后可能无法正常工作 , 或者存在问题 。

例如我们安装的McAfee VirusScan Enterprise 8 , 虽然并没有针对Vista进行优化 , 不过在默认设置下完全可以在Vista中安装和使用 。但是启用UAP之后却有个小问题 , 不管用什么账户登录系统(包括管理员和来宾) , 当McAfee杀毒软件启动的时候都需要用户输入具有管理员权限的用户密码 。

其实仔细想想 , 这也是不可避免的 , 毕竟Vista太新了 , 大部分程序在设计的时候并没有考虑过这些新特性 。不过这个问题并不严重 , 毕竟以微软在个人电脑操作系统领域的绝对统治地位来说 , 软件开发商如果不能及时发布适应新版操作系统的应用程序 , 那必定会被用户所抛弃;相反 , 如果能紧跟微软脚步 , 在第一时间推出能够用在微软最新操作系统上的应用程序 , 那则会大获成功 。

因此可以肯定 , 当Vista正式发布之后 , 相应的应用程序都会在第一时间里发布针对Vista设计的新版本 , 或者为老版本提供补丁程序 。

编后:Vista中新增的或者改进的安全功能当然不止如此 , 其他诸如验证方式、防恶意软件、网络访问保护、防火墙、Windows服务加固、增强的IE , 以及数据保护等功能无不令Vista更加安全 。虽然这些功能目前可能还不够完善 , 甚至有些还处于开发阶段 , 本报会在以后的文章中向大家详细介绍这些内容 。