Windows8测试版系统下载|预览版

Windows8测试版系统下载预览版

共同期待微软最新操作系统,体验全新概念

Windows8系统下载|主题|测试版|beta|界面

Mac OS X苹果系统下载 安装 帮助

Mac OS X苹果系统下载 安装 帮助

华语界最权威性的"黑苹果"电脑论坛

OS X Lion下载|安装|驱动|软件|帮助

查看: 6748|回复: 30

【ITECN技术专栏】之 Windows Vista IE保护模式深度剖析  关闭 [复制链接]

火星帮 UID:V CEO

UID
5
帖子
6010
PB币
33495
威望
5
贡献
-2
发表于 2006-7-31 16:25:13 |显示全部楼层
原文摘自ITECN Blog,作者:盆盆<Microsoft MVP>
原文地址: 点击查看
ITECN Blog是由近40位微软MVP和MCT、还有微软员工组成,旨在宣传微软IT Pro技术

文章作者 盆盆  
技术难度 Level300  
内容简介 深度剖析了IE保护模式为什么能够帮助Windows Vista 达到前所未有的安全级别(甚至大大超过UAC能够达到的保护程度),同时还介绍了IE保护模式是如何利用文件虚拟重定向帮助老的IE加载项解决兼容性问题,真正完美实现既安全又方便且兼容的目的。最后还将介绍如何利用建立NTFS软链接的方法巧妙解决IE保护模式的Bug,让不兼容的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(用户帐户控制)

相信大家已经很熟悉了,可以让管理员帐户自动获得一个标准用户的访问令牌,以提升系统安全性。

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

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

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

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

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


怪异的权限问题

提示 假设Windows Vista安装在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的独立版本,这又是为什么?原来无论是访问收藏夹,还是添加收藏夹,都会借助User代理进程(User Broker)完成,该代理程序和IE浏览器位于同一个目录,进程映像名为ieuser.exe。
代理进程的引入,充分体现了Windows安全设计中的特权分离思想:
Windows Vista把传统IE浏览器,把传统的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保护模式欺骗了。
在其他正常的计算机上,当在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保护模式,既安全、又方便、且兼容。

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

巧妙的解决办法

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

1.假作真时真亦假

由于暂时没有现成的工具可以修改目录的完整性级别,同时Windows Vista不能替我效劳实现虚拟重定向,那就我们就自己动手创建!

假如我们把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工具包,可以到微软官方站点搜索下载。
Nothing~

ITECN博客站长

UID
23679
帖子
496
PB币
2826
威望
7
贡献
0
发表于 2006-7-31 16:52:04 |显示全部楼层
多谢小功耗转载!大家如果有什么疑问,欢迎在此提问。本文涉及到NTFS的文件重定向、NTFS安全系统架构、Windows Vista新引入的Mandatory Integrity Control和虚拟重定向,读者最好能够具有这些基础知识。

ITECN博客站长:http://blogs.itecn.net
Microsoft MVP/Micorsoft MCT

我就是Kit...我就是白痴。。^_^

Rank: 7Rank: 7Rank: 7

UID
173
帖子
1937
PB币
5542
威望
14
贡献
0
发表于 2006-8-1 12:59:01 |显示全部楼层
每次这里有新的文章我都来看,呵呵,有时候要看好几遍才能看懂,呵呵

Windows Fan

Rank: 7Rank: 7Rank: 7

UID
30622
帖子
3103
PB币
10114
威望
30
贡献
0
发表于 2006-8-1 14:01:27 |显示全部楼层
难度高
技术改变未来

Ryo

UID
23134
帖子
7502
PB币
26273
威望
4
贡献
0
发表于 2006-8-1 20:32:59 |显示全部楼层
... 无语   这才是MVP才能写的   虽然不实用

ITECN博客站长

UID
23679
帖子
496
PB币
2826
威望
7
贡献
0
发表于 2006-8-1 22:23:06 |显示全部楼层
原帖由 hehecomputer 于 2006-8-1 20:32 发表
... 无语   这才是MVP才能写的   虽然不实用


要看读者的角色,作为一名IT Pro,这是很实用的知识。当IE 7+的保护模式发生问题,就可以利用本文所述的方法进行排错。

个人很推崇Jim Allchin(Windows之父)的一席话:永远不要满足只知道“How to”、小技巧之类的知识,而要想方设法地理解底层的原理。原话如下:
If you’re like me, you like to figure out how things really work. Reading “how to use” books or
“tips and tricks” has never been sufficient for me. If you understand how something works
internally, you know how to better use it, maximize performance and security, diagnose failures,
and frankly, have more fun. If you’re like me and want to see Windows from the “inside
out,” then you’re starting in the right place.

ITECN博客站长:http://blogs.itecn.net
Microsoft MVP/Micorsoft MCT

Rank: 7Rank: 7Rank: 7

UID
921
帖子
1334
PB币
6259
威望
2
贡献
0
发表于 2006-8-1 23:53:58 |显示全部楼层
原帖由 盆盆 于 2006-8-1 22:23 发表


要看读者的角色,作为一名IT Pro,这是很实用的知识。当IE 7+的保护模式发生问题,就可以利用本文所述的方法进行排错。

个人很推崇Jim Allchin(Windows之父)的一席话:永远不要满足只知道“How to”、小技 ...

看了您那么多篇文章和回复,不得不表示一下我的钦佩!

真正的高手,不仅要有技术,更需要会做人!呵呵!难怪gonghao那么崇拜您!

Ryo

UID
23134
帖子
7502
PB币
26273
威望
4
贡献
0
发表于 2006-8-2 05:55:55 |显示全部楼层
原帖由 盆盆 于 2006-8-1 10:23 发表


要看读者的角色,作为一名IT Pro,这是很实用的知识。当IE 7+的保护模式发生问题,就可以利用本文所述的方法进行排错。

个人很推崇Jim Allchin(Windows之父)的一席话:永远不要满足只知道“How to”、小技 ...


恩  我会 想了解更多关于我有兴趣的东西

火星帮 UID:V CEO

UID
5
帖子
6010
PB币
33495
威望
5
贡献
-2
发表于 2006-8-28 19:10:33 |显示全部楼层
在5536上也终于体会到了IE7+ PROTECTED MODE的这个功能,把紫光给拦截了,不给在给网站添加到trusted site里面终于恢复了紫光的权限
Nothing~

ITECN博客站长

UID
23679
帖子
496
PB币
2826
威望
7
贡献
0
发表于 2006-8-28 21:00:10 |显示全部楼层
原帖由 gonghao 于 2006-8-28 19:10 发表
在5536上也终于体会到了IE7+ PROTECTED MODE的这个功能,把紫光给拦截了,不给在给网站添加到trusted site里面终于恢复了紫光的权限

IE保护模式提供了很好的兼容性功能,同时又极大地提升IE的安全。只是由于在极个别的机器上,紫光无法自动触发IE保护模式的兼容性功能,导致无法正常运行。
我的机器上,5536紫光拼音已经正常。

ITECN博客站长:http://blogs.itecn.net
Microsoft MVP/Micorsoft MCT

火星帮 UID:V CEO

UID
5
帖子
6010
PB币
33495
威望
5
贡献
-2
发表于 2006-8-29 00:36:35 |显示全部楼层
原帖由 盆盆 于 2006-8-28 21:00 发表

IE保护模式提供了很好的兼容性功能,同时又极大地提升IE的安全。只是由于在极个别的机器上,紫光无法自动触发IE保护模式的兼容性功能,导致无法正常运行。
我的机器上,5536紫光拼音已经正常。


很奇怪,我的除了5536不行以外,其他以前的版本都是可以的/ph34r.gif
Nothing~

ITECN博客站长

UID
23679
帖子
496
PB币
2826
威望
7
贡献
0
发表于 2006-8-29 09:13:45 |显示全部楼层
原帖由 gonghao 于 2006-8-29 00:36 发表


很奇怪,我的除了5536不行以外,其他以前的版本都是可以的

不知道为什么无法触发IE保护模式的自动虚拟重定向。有机会我可以问问该Feature的owner。

ITECN博客站长:http://blogs.itecn.net
Microsoft MVP/Micorsoft MCT

Rank: 1

UID
73320
帖子
2
PB币
225
威望
0
贡献
0
发表于 2006-9-17 12:27:43 |显示全部楼层
用个输入法还这么麻烦。好像直接不能输入,自己随便找个能输入的地方打开了,以后就没问题了。

Rank: 1

UID
74790
帖子
3
PB币
235
威望
0
贡献
0
发表于 2006-9-18 22:46:07 |显示全部楼层
不错的安全设计

Rank: 1

UID
81144
帖子
42
PB币
274
威望
0
贡献
0
发表于 2006-10-5 17:18:12 |显示全部楼层
嗯,只有了解问题的根源,才能做到举一反三,而不是遇到类似的问题却还是不知道怎么解决
先收藏,以后肯定有用

Rank: 2Rank: 2

UID
48742
帖子
228
PB币
570
威望
0
贡献
0
发表于 2006-10-5 18:36:35 |显示全部楼层
94

微软Office2003里面的微软拼音也被拦截了(Vista自带的可以)

Rank: 5Rank: 5Rank: 5

UID
67198
帖子
661
PB币
2697
威望
0
贡献
0
发表于 2006-10-6 15:25:00 |显示全部楼层
这 个 比 较 复 杂 了 ,希 望 有 小 工 具 可 以 自 动 实 现 !
分享一个我最喜欢的英语学习网站
http://www.unsv.com/learning-english/?m=525267

Rank: 5Rank: 5Rank: 5

UID
67198
帖子
661
PB币
2697
威望
0
贡献
0
发表于 2006-10-6 16:08:10 |显示全部楼层
那 个 ACCESSCHK命 令 好 象 不 能 用 的 哎 !
分享一个我最喜欢的英语学习网站
http://www.unsv.com/learning-english/?m=525267

Rank: 2Rank: 2

UID
55525
帖子
184
PB币
837
威望
0
贡献
0
发表于 2006-12-1 23:28:22 |显示全部楼层
谢谢!!!!!!!!!!!

Rank: 7Rank: 7Rank: 7

UID
223232
帖子
1919
PB币
5863
威望
0
贡献
0
发表于 2007-2-25 02:52:36 |显示全部楼层
支持、辛苦、学习。
|| 不吃:提前进化 // 不喝:节约资源 // 不睡:克服懒惰 ||

Asus P6T SE / Intel Core i7 920 / Corsair 2G*3 / Seagate 500G*2-RAID0 / Tt VK60001W2Z
XFX GTX 260+ / Asus PA246Q-A / ESI Juli@ / ESI nEar05 eXperience
您需要登录后才可以回帖 登录 | 注册

关闭

临时公告

PCBETA畅游论坛之新手指南
漫游论坛、新手必备之良品。请新注册会员仔细阅读本指南以尽快融入论坛。

查看 »

回顶部
Copyright (C) 2005-2011 pcbeta.com, All rights reserved
Powered by Discuz!  沪ICP备10012085号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
我们的平台:远景在线 | 远景论坛 | 苹果论坛 | Windows8 | Windows7 | Windows Phone论坛 | 电脑硬件