Windows Vista IE保护模式深度剖析

内容简介 深度剖析了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错误,如下图所示。看来这就是问题的根源了,很显然紫光拼音把它的重要配置文件都存在[用户配置文件夹]里,只有具备读写权限,紫光拼音才能正常工作。

  Windows Vista IE保护模式深度剖析_第1张图片

完整性级别的深远影响

  看起来,只不过是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进程要被拒绝了!

  Windows Vista IE保护模式深度剖析_第2张图片

  可见,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文件,如下图所示,所以紫光拼音可以正常工作。

  Windows Vista IE保护模式深度剖析_第3张图片

  提示

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

  而Firefox的安全模式,则类似于IE 7的NoAddons,和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 Vista IE保护模式深度剖析_第4张图片

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

  Windows Vista IE保护模式深度剖析_第5张图片

  这种方法虽然是个特例,但是大家也可以借鉴用于其他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的安全设置。

  Windows Vista IE保护模式深度剖析_第6张图片

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

  Windows Vista IE保护模式深度剖析_第7张图片


你可能感兴趣的:(Windows Vista IE保护模式深度剖析)