人一般睡眠时间是多少:Windows Vista博客 : Windows Vista IE保护模式深度剖析

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 04:38:50

Windows Vista IE保护模式深度剖析

文章作者 盆盆 

技术难度 Level300 

内容简介 深度剖析了IE保护模式为什么能够帮助Windows Vista 达到前所未有的安全级别(甚至大大超过UAC能够达到的保护程度),同时还介绍了IE保护模式是如何利用文件虚拟重定向帮助老的IE加载项解决兼容性问题,真正完美实现既安全、又方便、且兼容的目的。最后还将介绍如何利用建立NTFS软链接的方法巧妙解决IE保护模式的兼容性问题,让不兼容的输入法插件可以顺利地在IE 7中顺利运行。                                                                                        
                                                                                 

如今这世上,可谓真假莫辨,真的可以变成假的,假的也可以宣称自己是真的。这不,这几天笔者就遇到了一个非常怪异的问题,差点被IE保护模式功能的虚拟重定向功能给搞糊涂了。不过总算藉此机会好好了解一下IE保护模式,对于Windows Vista的这个新增安全功能又平添了几分信心。

原理简述

IE保护模式(Protected Mode),以前也叫做IE低权利(Low Rights)。在拙作《您必须知道的IE 7安全特性》里,已经就IE保护模式的基本原理做了简单的论述。这里需要强调一下的是,IE保护模式可能是Windows Vista里最严厉的安全措施,比我们熟知的UAC(用户帐户控制)还要严厉。事实上,IE保护模式依赖于Windows Vista的以下三大特性:

 

(1) UAC(用户帐户控制)

相信大家已经很熟悉了,可以让管理员帐户自动获得一个标准用户的访问令牌,以减少Windows Vista系统的受攻击面。

(2) MIC(强制完整性控制)

这是Windows Vista安全架构中新增加的一种检测机制。大家知道,Windows 2000/XP安全体系里,安全子系统把进程的访问令牌和资源的访问控制列表进行匹配比较,以确认该进程是否具有访问该资源的权限。而在Windows Vista下,除了遵守传统的安全控制机制外,还必须检查进程和资源对象的完整性级别,完整性级别低的进程,不能写入完整性级别高的资源对象。

是不是有点晕?没事,下文就会对这个概念进行完整的实例阐述!

(3) UIPI(用户界面特权隔离)

完整性级别低的进程,不能向完整性级别高的进程发送Window消息。

怪异的权限问题

提示 假设Windows Vista安装在D盘(用户配置文件夹也在D盘),当前的登录帐户为管理员,帐户名是Admin。红色的命令提示符窗口表示命令行工具只能在管理员权限下运行,蓝色的命令提示符窗口表示可以在UAC权限下运行。

遇到这个案例也有一点运气的成分:不知为什么,在笔者的计算机上,无法在IE浏览器里正常打开“紫光拼音输入法”,非常麻烦。但是在其他朋友的机器上,并没有重复这个问题,甚至在虚拟机里也不存在这个问题!

 

这个问题困扰了我很长一段时间,甚至迫使我不得不改用其他输入法工具,这使得资质鲁钝、不懂得“灵活变通”的我感到非常郁闷……在IE页面里按Ctrl+Space组合键,尝试呼出“紫光拼音”的输入状态条,结果失败,在这个过程中,如果用Filemon工具进行监测,结果会看到当IE浏览器尝试往D:\Users\Admin\AppData\Roaming\Unispim目录里写入文件(例如usrwl.dat)时,会出现Access Denied错误,如下图所示。看来这就是问题的根源了,很显然紫光拼音把它的重要配置文件都存在[用户配置文件夹]里,只有具备读写权限,紫光拼音才能正常工作。


完整性级别的深远影响

看起来,只不过是IE进程没有D:\Users\Admin\AppData\Roaming\Unispim目录的写入权限。这还不简单,修改一下权限不就行了?

 

然而如果用AccessChk命令检查NTFS权限,发现当前帐户Admin对D:\Users\Admin\AppData\Roaming\Unispim目录拥有读写权限,如下图所示。



这就奇怪了,明明Admin帐户有权写入该目录,为什么系统要说“不”呢?这里就要应用到前面所说的MIC机制。原来在Windows Vista底下,系统不光是查看资源对象的ACL,还要查看进程和资源对象各自的完整性级别(Integrity Level),就算进程满足资源对象的ACL要求,如果进程的完整性级别更低,那么该进程还是无法拥有资源对象的写入权限。这就好比男女双方求爱,除了看对方的经济收入等条件(相当于ACL),还要看是否门当户对(相当于完整性级别)J。

而运行在保护模式下的IE浏览器,IE进程的完整性级别是Low,这可以从它的访问令牌里得知。借助Process Explorer查看IE进程属性的“安全”标签页,可以看到其访问令牌里有一个“Mandatory Label\Low Mandatory Level”的SID(相应的标志位是“Integrity”),这表明IE进程的完整性级别是“Low”。

 

看来D:\Users\Admin\AppData\Roaming\Unispim目录的完整性级别一定比IE进程高,所以IE进程才无法写入该目录。那么如何查看目录的完整性级别呢?非常可惜Windows Vista目前还没有提供查看的工具。不过幸运的是,Sysinternals所提供的AccessChk可以方便地进行查看。

提示 由于作者Mark(Sysinternals掌门,Windows Internals的合作者)已经就职于微软, 所以Windows Vista可能会内置这款工具喔。

在命令提示符下运行以下命令,就可以查看该目录下所有文件的完整性级别:

AccessChk -i D:\Users\Admin\AppData\Roaming\Unispim

可以看到该目录下的所有文件的完整性级别都是“Medium”,如下图所示,难怪IE进程要被拒绝了!


可见,IE保护模式有多厉害!在UAC模式下,应用程序会尽可能运行在普通用户权限下,但至少还是可以访问[用户配置文件夹]里的内容,因为这时候应用程序的完整性级别也是“Medium”,所以不会受到限制。

独立的四套班子

读者朋友可能会问,既然IE浏览器运行在“Low”的级别,那么它怎么能够访问IE临时文件、历史等工作目录,这些目录不都是在[用户配置文件夹]里,它们的完整性级别应该是“Medium”啊?

原来,对于保护模式下的IE浏览器来说,它拥有一套独立的“四套班子”:

 

(1) IE临时文件: %userprofile%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low

(2) 系统临时目录: %userprofile%\AppData\Local\Temp\Low

(3) Cookies: %userprofile%\AppData\Roaming\Microsoft\Windows\Cookies\Low

(4) 历史: %userprofile%\AppData\Local\Microsoft\Windows\History\Low

这些目录的完整性级别都是“Low”,以便IE进程能够正常访问。

注意

 

值得一提的是,收藏夹并没有保护模式IE的独立版本,这又是为什么?

盆盆评注 据微软IE保护模式的开发团队领导Robert Gu的提示,IE收藏夹默认允许低级别的IE进程访问,因为收藏夹也具有“低级”的完整性级别。

 

代理进程的引入,充分体现了Windows安全设计中的特权分离思想
Windows Vista把传统的IE进程一分为三,分别负责不同安全等级的任务。把最常用的、无需特权的网页浏览任务交给IE进程本身去完成;把中等特权的任务(例如保存图片),交给用户级代理进程(ieuser.exe)去完成;把高特权的任务(
例如安装加载项),交给管理级代理进程去完成(ieinstal.exe)。而老版本的Windows则是把所有的任务,不管其所需的安全等级,都交由一个IE进程去完成。以下的截图源自微软官方网站,由笔者对其进行“汉化”,仅供参考。


IE保护模式的文件虚拟重定向

然而奇怪的是,为什么紫光拼音只是在我这台计算机上有点“水土不服”,而在别的计算机上却能够过得好好的?

 

这就要说到IE保护模式的另外一个优势了:

如果IE保护模式只有这点“防守”的能耐,那么它还不足于成为IE 7+浏览器最重要的安全特性。事实上,IE保护模式既具备严厉的安全措施(防守),同时又具备灵活的兼容性手段(进攻),可以说是攻守兼备。

 

原来Windows Vista为了能够让绝大多数加载项都能在IE浏览器上正常运行,IE保护模式采用一种虚拟重定向技术。

 

原来IE保护模式在以下目录中,创建一个和[用户配置文件夹]完全一致的目录层次[拥有“Low”的完整性级别]:

%userprofile%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized
例如D:\Users\Admin,对于IE保护模式来说,还有一套完全一致的虚拟镜像版本:


D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized\D\Users\Admin


这样,如果IE加载项需要修改[用户配置文件夹]下的文件,系统就会自动重定向到该文件的虚拟镜像版本,对于该加载项来说,它根本不知道自己被IE保护模式“欺骗”了。


在正常的Windows Vista系统上,当在IE保护模式下呼出紫光拼音输入法时,利用Filemon工具进行检测,会发现当紫光拼音想要修改D:\Users\Admin\AppData\Roaming\Unispim下的usrwl.dat文件时,实际上是修改D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized\D\Users\Admin\AppData\Roaming\Unispim目录下的usrwl.dat文件,如下图所示,所以紫光拼音可以正常工作。


提示

不少读者朋友提到某些第三方的Web应用程序也有安全模式的功能。确实现在不少开发商都注意到安全的重要性,但是IE保护模式的安全效果,无疑更占上风。以电驴eMule为例,其安全模式是在系统里新增一个名为eMule_Secure的普通用户,然后借助runas的方法以该普通用户身份运行eMule,以达到安全目的。这种方法的安全级别,和Windows Vista的UAC处于同一层次,比起IE保护模式,其安全性还是有所不如。更重要的是,UAC和IE保护模式,既安全、又方便、且兼容

Firefox的安全模式,则类似于IE 7NoAddons,和IE保护模式完全是两个概念,其安全性也远非IE保护模式可比。

唯一遗憾的是,笔者的这台计算机,不知道出于什么原因,无论是Beta 2、5456,还是最新的5472.5版本,紫光拼音输入法无法正常触发IE的虚拟重定向功能,所以导致拒绝访问的错误。

巧妙的解决办法

作为一名狂热的Windows Vista爱好者,自然不能束手就擒,也不能把电脑砸了,所以咱还得好好想想解决办法。以下两个解决办法:

 

1.假作真时真亦假

 

假如我们把D:\Users\Admin\AppData\Roaming\Unispim目录设置为某个“Low”目录的软链接(Soft Link),那么每次紫光拼音试图访问D:\Users\Admin\AppData\Roaming\Unispim目录时,都会被NTFS文件系统自动重新定向到这个完整级别为“Low”的新目录中,这样就可以顺利达到目的了。

由于我们知道D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low目录具有“Low”完整性级别,所以先在其下新建一个Unispim子目录,该子目录会自动继承“Low”完整性级别。

先删除D:\Users\Admin\AppData\Roaming\Unispim目录下的所有内容,然后可以借助Linkd命令行工具,把D:\Users\Admin\AppData\Roaming\Unispim目录“映射”到D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Unispim目录,如下图所示。
运行完命令后,记住必须重启或者注销后重新登录一下。



从《Windows Internals》里我们可以了解到,这种“映射”机制,实际上是给NTFS文件增加一个重解析点的属性。用Filemon工具可以检测到,当紫光拼音访问D:\Users\Admin\AppData\Roaming\Unispim目录下的某个文件时,会被自动“REPARSE”(重解析)到D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Unispim目录下,如下图所示。



这种方法虽然是个特例,但是大家也可以借鉴用于其他IE加载项不能正常工作的情况。

提示 

不推荐映射到D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\virtualized目录下,否则可能干扰正常的虚拟重定向功能。

2.把网页添加到可信区域

如果不想那么麻烦,也可以把所需文字输入的网页添加到可信站点列表。因为在可信区域里,IE浏览器默认运行在非保护模式,也就是运行在普通的UAC安全级别。这样紫光拼音就可以正常访问D:\Users\Admin\AppData\Roaming\Unispim目录,因为这时候IE进程和该目录的完整性级别是一样的。

在下图中,可以看到IE浏览器的状态栏上显示该网页位于Internet区域,保护模式处于启用状态,这时候双击这里即可打开IE的安全设置。



可以看到,可信站点区域默认禁用“保护模式”,如下图所示。只要把指定的网站加入到可信站点列表中,就可以正常使用紫光拼音。


参考资料

1.本文的原理部分,参考自《Protected Mode in Vista IE7》,大家可以访问微软IE Team的官方Blog:
http://blogs.msdn.com/ie/archive/2006/02/09/528963.aspx

2.本文涉及的Process Explorer、Filemon和AccessChk等都是Sysinternals的工具,可以到www.sysinternals.com站点上下载。本文所述的Linkd命令行工具属于Windows Server 2003 Resource Kit Tools工具包,可以到微软官方站点搜索下载。