欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

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权限,发现当前帐户AdminD:\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 VistaUAC处于同一层次,比起IE保护模式,其安全性还是有所不如。更重要的是,UACIE保护模式,既安全、又方便、且兼容

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

唯一遗憾的是,笔者的这台计算机,不知道出于什么原因,无论是Beta 25456,还是最新的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 ExplorerFilemonAccessChk等都是Sysinternals的工具,可以到www.sysinternals.com站点上下载。本文所述的Linkd命令行工具属于Windows Server 2003 Resource Kit Tools工具包,可以到微软官方站点搜索下载。


已发表 2006年7月23日 5:31 作者 ahpeng

评论通知

如果您想在帖子更新时接到邮件通知,请先登录。这里

订阅帖子评论使用 RSS

评论

2006年9月6日 12:15 by ahpeng

# re: Windows Vista IE保护模式深度剖析

经IE保护模式负责人Robert的提示,这里修正本文的一个错误:
IE收藏夹并不是由IEUser这个进程负责读写,而是默认允许Low MIC的IE进程访问,因为收藏夹也具有Low MIC级别。
注:Robert也是EFS的发明者。

# 安全功能,只能吃力不讨好?

现在看来,安全特性是一个“吃力不讨好”的主儿,UAC、IE保护模式等安全功能,莫不如此。 安全功能的特点注定它只能是幕后英雄,就算设计的再好,发挥的再极致,最高境界就是“让用户感觉不到它的存在”。一旦用户感觉到它的存在,它的末日就来临了。...
2007年1月18日 10:29 by limbo

# re: Windows Vista IE保护模式深度剖析

请问盆盆,为何您的计算机无法触发IE保护模式的文件虚拟重定向功能?搞清楚了么?

2007年2月25日 23:58 by 盆盆的博客

# 用户帐户控制、PsExec和安全边界

文章原著 Mark Russinovich 翻译作者 盆盆 [ITECN博客站长] http://blogs.itecn.net/blogs/ahpeng 盆盆导读 本文由Mark Russinovich(微软院士)所著,由盆盆所翻译,为了加深大家对本文的印象,盆盆还加注了自己对本文的理解和注释。Mark

2007年2月26日 11:08 by 盆盆的博客

#

Test 如果在 Process Explorer 的视图中添加" Integrity Level "列,如下图所示。我们可以看到系统进程,例如 Windows 服务进程,运行在"系统"完整性级别。登录会话中的绝大多数进程运行在"中级"完整性级别,以提升权限运行的进程在"高级"完整性级别,而

2007年2月27日 16:22 by 盆盆的博客

# Windows Vista有趣的标签SID

本文介绍Windows Vista的一个非常有趣的现象,可以绕过UAC的提示框,大家一定要去看看哈~~此外,本文还着重介绍了标签SID的两大作用,定义完整性级别、判断UAC权限提升,最后还分析了由此引发的安全意义探讨。

2007年3月8日 8:09 by ahpeng

# re: Windows Vista IE保护模式深度剖析

其实,我们完全可以用Windows Vista内置的icacls工具修改对象的完整性级别,而无须借助外部的虚拟重定向。

可以参考盆盆的文章:

http://blogs.itecn.net/blogs/winvista/archive/2006/10/08/3777.aspx

2007年3月8日 10:39 by 盆盆的博客

# 哪些输入法不能在Windows Vista IE 7下正常工作?

大家知道,Windows Vista的IE 7引入了一个革命性的安全特性-IE保护模式。在提供极大安全性的同时,微软还花费了极大的精力提升其兼容性,例如加入了IEUser和IEAdmin两个代理进程(Broker),并且单独为IE保护模式提供虚拟重定向的功能。这些兼容性措施能够解决大多数IE加载项的兼容性问题。

2007年3月12日 17:41 by 盆盆的博客

# 前言

由盆盆和刘晖撰写的《Windows Vista使用详解》一书,4月初就要在人民邮电出版社正式出版了。以下是这本书的前言。 前言 从来没有感受那么真切,Windows Vista已经真正走进了我们的生活。前后耗资60亿美元、动用9000多名工程师、共包含2700个创新特性,Windows

2007年3月12日 17:43 by 盆盆的博客

# 《Windows Vista使用详解》前言

由盆盆和刘晖撰写的《Windows Vista使用详解》一书,4月初就要在人民邮电出版社正式出版了。以下是这本书的前言。 前言 从来没有感受那么真切,Windows Vista已经真正走进了我们的生活。前后耗资60亿美元、动用9000多名工程师、共包含2700个创新特性,Windows

2007年3月21日 10:52 by 盆盆的博客

# 严正谴责PCHome抄袭盆盆的原创技术文章

PCHome抄袭盆盆的一篇技术文章《Vista下紫光拼音无法使用的解决办法》

2007年5月22日 14:36 by kamuiyay

# re: Windows Vista IE保护模式深度剖析

您好,我看了《Windows Vista IE保护模式深度剖析》对IE7的改进非常喜欢,我现在用的浏览器是世界之窗,属于调用IE内核的那种。我想问一下 向傲游 世界之窗这种调用IE内核,在VISTA下使用。IE7的保护功能是否还是在起作用?谢谢

2007年5月22日 15:20 by ahpeng

# re: Windows Vista IE保护模式深度剖析

To Kamuiyay:

IE保护模式只能对IE浏览器提供保护,对于调用IE内核的浏览器不起作用。

2008年1月7日 21:30 by nano

# re: Windows Vista IE保护模式深度剖析

非常好。第一次接触到integrity level的知识,学到了好多。

----------------------

这就好比男女双方求爱,除了看对方的经济收入等条件,还要看是否门当户对

       ----这个比喻真是不咋的

2008年2月17日 0:08 by Genuine

# re: Windows Vista IE保护模式深度剖析

在没有将网页添加到可信任站点前,IE保护模式会严重影响网页打开的速度,齐且容易造成程序没有响应,即使以前曾多次打开同一网页。

如果安全的代价是性能的大幅下降,我觉得此技术实在失败,至少也要在性能和安全寻求一个平衡点,现在看来天平严重倾向安全而忽视了性能。

一旦关闭保护模式,ie打开速度会有显著提高。

2008年2月18日 18:22 by ahpeng

# re: Windows Vista IE保护模式深度剖析

To Genuine:新年好!

并没有数据显示保护模式会降低IE浏览的速度,这和性能无关。

如果您的机器出现这个现象,应该和别的原因有关,例如不兼容的插件、非正常代码等。

2008年12月20日 22:51 by 非国大法国

# re: Windows Vista IE保护模式深度剖析

太高了,佩服

说说您的看法?

(必填) 
必填 
(必填)