Windows Vista的UAC也可以很方便:脚本原理的解释
在前篇文章里,盆盆描述了如何用一个脚本文件轻松完成所有设置。这里就来解释一下这个脚本的具体含义。
其实这个脚本里,最重要的命令就两条,下面逐条解释一下。
一、允许两个Explorer进程
《Windows Vista的UAC也可以很方便》这篇文章,最核心的方法,就是以高特权创建一个独立的文件夹窗口(Explorer进程)。这样就可以在其下直接运行安装程序、管理任务等,而不需要再次提升权限。
盆盆评注 问题的关键就是,默认情况下,Windows不允许启动多个Explorer进程,具体的原因可以参考MVP Smallfrogs的文章《Explorer进程被杀死以后会被Windows重新加载吗》。
要想启动多个Explorer进程,就必须在“文件夹选项”的“查看”标签页中启用“在单独的进程中打开文件夹窗口”复选框。
难点就在于,如何用命令行实现这个功能。多亏了Youyang兄弟的提醒,参考了他的一篇KB,该KB记录文件夹选项的高级设置所对应的注册表布局。再通过实验分析,总算找出了这个设置所对应的注册表键值。
实验方法是通过Process Monitor对其进行监控,由于启用该值不需要管理员权限,所以初步判断可能修改HKCU下的键值。
结果发现,当尝试修改该文件夹选项时,系统首先定位到HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Advanced\Folder\DesktopProcess下的键值,去查询该设置项所对应的注册表键值。
接下来发现,“在单独的进程中打开文件夹窗口”这个设置,对应为HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced下的DWORD键值SeparateProcess,当其数值数据为1时,表示启用,如附图所示。在图中,Process Monitor检测到系统把DWORD键值SeparateProcess的数值数据设置为1。
所以就用以下命令添加该注册表键值:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /V SeparateProcess /T REG_DWORD /d 1 /f
三、设置Explorer进程提示提升权限
为了能够单击Explorer进程,就能自动提示提升权限,需要在设置其兼容模式为“以管理员身份运行该程序”。一般我们可以在文件属性对话框的“兼容性”标签页上勾选“请以管理员身份运行该程序”复选框,这实际上对应于在注册表HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers下新增一个键值,以程序可执行文件的完全路径为键值名称,其数值数据为“RUNASADMIN”。
其实这个方法早在去年3月份盆盆就已经发表在ITECN博客上,大家可以参考《Windows Vista的UAC功能浅析(二)》。
三、安全问题
1. 一个命令行就可以提升权限,那是不是太危险?
一点都不危险。因为这种修改注册表的方法,只是告诉系统自己需要提升权限。在执行这个程序时,需要用户做出选择。
那么病毒会不会采用这种方法提示提升权限?
不会!尤其是为Windows Vista设计的病毒,肯定不会这样做。因为病毒都不喜欢被人发现,都喜欢悄悄地进村,打枪的不要。正好比《天下无贼》里的傻根大喊“唉,有贼吗?你们谁是贼呀?站出来给俺看看!”相信没有贼会公然回应,否则他就是一个笨贼,还不如改行做文抄公,至少还能抄个脑满肠满钵满。
2. 恶意程序会不会劫持高特权Explorer进程?
如果是Windows 2000/XP,很可能会发生这个问题,这是因为所有应用程序运行在一个桌面上,低特权的恶意进程可以给高特权的Explorer窗口发送Window Message,以诱使Explorer重新加载该恶意进程,这就是所谓的Luring Attack。
但是Windows Vista下不会这样,这是由于MIC和UIPI的作用,低级进程无法控制高级进程,也无法向其发送Window Message,这种攻击会失败。
当然正如Mark Russinovich所说,UAC并非是一个安全边界,可以想象,专门针对Windows Vista迟早会出现,只是时间问题而已。在盆盆所译的那篇文章里,Mark Russinovich还介绍了可能的攻击方法。
当然如果您不幸在高特权的资源管理器窗口里运行了恶意程序,那么神仙也救不了您。这是一个信任的问题,如果您不信任该进程,那么就不要运行它。
在下一篇文章里,将向大家介绍,如何在Windows 2000/XP下使用类似的方法,平时用标准用户身份登录系统,执行管理任务时,用管理员凭据打开资源管理器窗口,从而以更高权限运行管理任务。