內(nèi)容簡(jiǎn)介 深度剖析了IE保護(hù)模式為什么能夠幫助Windows Vista 達(dá)到前所未有的安全級(jí)別(甚至大大超過(guò)UAC能夠達(dá)到的保護(hù)程度),同時(shí)還介紹了IE保護(hù)模式是如何利用文件虛擬重定向幫助老的IE加載項(xiàng)解決兼容性問(wèn)題,真正完美實(shí)現(xiàn)既安全、又方便、且兼容的目的。最后還將介紹如何利用建立NTFS軟鏈接的方法巧妙解決IE保護(hù)模式的兼容性問(wèn)題,讓不兼容的輸入法插件可以順利地在IE 7中順利運(yùn)行。
如今這世上,可謂真假莫辨,真的可以變成假的,假的也可以宣稱自己是真的。這不,這幾天筆者就遇到了一個(gè)非常怪異的問(wèn)題,差點(diǎn)被IE保護(hù)模式功能的虛擬重定向功能給搞糊涂了。不過(guò)總算藉此機(jī)會(huì)好好了解一下IE保護(hù)模式,對(duì)于Windows Vista的這個(gè)新增安全功能又平添了幾分信心。
原理簡(jiǎn)述
IE保護(hù)模式(Protected Mode),以前也叫做IE低權(quán)利(Low Rights)。在拙作《您必須知道的IE 7安全特性》里,已經(jīng)就IE保護(hù)模式的基本原理做了簡(jiǎn)單的論述。這里需要強(qiáng)調(diào)一下的是,IE保護(hù)模式可能是Windows Vista里最嚴(yán)厲的安全措施,比我們熟知的UAC(用戶帳戶控制)還要嚴(yán)厲。事實(shí)上,IE保護(hù)模式依賴于Windows Vista的以下三大特性:
(1) UAC(用戶帳戶控制)
相信大家已經(jīng)很熟悉了,可以讓管理員帳戶自動(dòng)獲得一個(gè)標(biāo)準(zhǔn)用戶的訪問(wèn)令牌,以減少Windows Vista系統(tǒng)的受攻擊面。
(2) MIC(強(qiáng)制完整性控制)
這是Windows Vista安全架構(gòu)中新增加的一種檢測(cè)機(jī)制。大家知道,Windows 2000/XP安全體系里,安全子系統(tǒng)把進(jìn)程的訪問(wèn)令牌和資源的訪問(wèn)控制列表進(jìn)行匹配比較,以確認(rèn)該進(jìn)程是否具有訪問(wèn)該資源的權(quán)限。而在Windows Vista下,除了遵守傳統(tǒng)的安全控制機(jī)制外,還必須檢查進(jìn)程和資源對(duì)象的完整性級(jí)別,完整性級(jí)別低的進(jìn)程,不能寫(xiě)入完整性級(jí)別高的資源對(duì)象。
是不是有點(diǎn)暈?沒(méi)事,下文就會(huì)對(duì)這個(gè)概念進(jìn)行完整的實(shí)例闡述!
(3) UIPI(用戶界面特權(quán)隔離)
完整性級(jí)別低的進(jìn)程,不能向完整性級(jí)別高的進(jìn)程發(fā)送Window消息。
怪異的權(quán)限問(wèn)題
提示 假設(shè)Windows Vista安裝在D盤(pán)(用戶配置文件夾也在D盤(pán)),當(dāng)前的登錄帳戶為管理員,帳戶名是Admin。紅色的命令提示符窗口表示命令行工具只能在管理員權(quán)限下運(yùn)行,藍(lán)色的命令提示符窗口表示可以在UAC權(quán)限下運(yùn)行。
遇到這個(gè)案例也有一點(diǎn)運(yùn)氣的成分:不知為什么,在筆者的計(jì)算機(jī)上,無(wú)法在IE瀏覽器里正常打開(kāi)“紫光拼音輸入法”,非常麻煩。但是在其他朋友的機(jī)器上,并沒(méi)有重復(fù)這個(gè)問(wèn)題,甚至在虛擬機(jī)里也不存在這個(gè)問(wèn)題!
這個(gè)問(wèn)題困擾了我很長(zhǎng)一段時(shí)間,甚至迫使我不得不改用其他輸入法工具,這使得資質(zhì)魯鈍、不懂得“靈活變通”的我感到非常郁悶……在IE頁(yè)面里按Ctrl+Space組合鍵,嘗試呼出“紫光拼音”的輸入狀態(tài)條,結(jié)果失敗,在這個(gè)過(guò)程中,如果用Filemon工具進(jìn)行監(jiān)測(cè),結(jié)果會(huì)看到當(dāng)IE瀏覽器嘗試往D:\Users\Admin\AppData\Roaming\Unispim目錄里寫(xiě)入文件(例如usrwl.dat)時(shí),會(huì)出現(xiàn)Access Denied錯(cuò)誤,如下圖所示??磥?lái)這就是問(wèn)題的根源了,很顯然紫光拼音把它的重要配置文件都存在[用戶配置文件夾]里,只有具備讀寫(xiě)權(quán)限,紫光拼音才能正常工作。
完整性級(jí)別的深遠(yuǎn)影響
看起來(lái),只不過(guò)是IE進(jìn)程沒(méi)有D:\Users\Admin\AppData\Roaming\Unispim目錄的寫(xiě)入權(quán)限。這還不簡(jiǎn)單,修改一下權(quán)限不就行了?
然而如果用AccessChk命令檢查NTFS權(quán)限,發(fā)現(xiàn)當(dāng)前帳戶Admin對(duì)D:\Users\Admin\AppData\Roaming\Unispim目錄擁有讀寫(xiě)權(quán)限,如下圖所示。
這就奇怪了,明明Admin帳戶有權(quán)寫(xiě)入該目錄,為什么系統(tǒng)要說(shuō)“不”呢?這里就要應(yīng)用到前面所說(shuō)的MIC機(jī)制。原來(lái)在Windows Vista底下,系統(tǒng)不光是查看資源對(duì)象的ACL,還要查看進(jìn)程和資源對(duì)象各自的完整性級(jí)別(Integrity Level),就算進(jìn)程滿足資源對(duì)象的ACL要求,如果進(jìn)程的完整性級(jí)別更低,那么該進(jìn)程還是無(wú)法擁有資源對(duì)象的寫(xiě)入權(quán)限。這就好比男女雙方求愛(ài),除了看對(duì)方的經(jīng)濟(jì)收入等條件(相當(dāng)于ACL),還要看是否門(mén)當(dāng)戶對(duì)(相當(dāng)于完整性級(jí)別)J。
而運(yùn)行在保護(hù)模式下的IE瀏覽器,IE進(jìn)程的完整性級(jí)別是Low,這可以從它的訪問(wèn)令牌里得知。借助Process Explorer查看IE進(jìn)程屬性的“安全”標(biāo)簽頁(yè),可以看到其訪問(wèn)令牌里有一個(gè)“Mandatory Label\Low Mandatory Level”的SID(相應(yīng)的標(biāo)志位是“Integrity”),這表明IE進(jìn)程的完整性級(jí)別是“Low”。
看來(lái)D:\Users\Admin\AppData\Roaming\Unispim目錄的完整性級(jí)別一定比IE進(jìn)程高,所以IE進(jìn)程才無(wú)法寫(xiě)入該目錄。那么如何查看目錄的完整性級(jí)別呢?非??上?/span>Windows Vista目前還沒(méi)有提供查看的工具。不過(guò)幸運(yùn)的是,Sysinternals所提供的AccessChk可以方便地進(jìn)行查看。
提示 由于作者Mark(Sysinternals掌門(mén),Windows Internals的合作者)已經(jīng)就職于微軟, 所以Windows Vista可能會(huì)內(nèi)置這款工具喔。
在命令提示符下運(yùn)行以下命令,就可以查看該目錄下所有文件的完整性級(jí)別:
AccessChk -i D:\Users\Admin\AppData\Roaming\Unispim
可以看到該目錄下的所有文件的完整性級(jí)別都是“Medium”,如下圖所示,難怪IE進(jìn)程要被拒絕了!
可見(jiàn),IE保護(hù)模式有多厲害!在UAC模式下,應(yīng)用程序會(huì)盡可能運(yùn)行在普通用戶權(quán)限下,但至少還是可以訪問(wèn)[用戶配置文件夾]里的內(nèi)容,因?yàn)檫@時(shí)候應(yīng)用程序的完整性級(jí)別也是“Medium”,所以不會(huì)受到限制。
獨(dú)立的四套班子
讀者朋友可能會(huì)問(wèn),既然IE瀏覽器運(yùn)行在“Low”的級(jí)別,那么它怎么能夠訪問(wèn)IE臨時(shí)文件、歷史等工作目錄,這些目錄不都是在[用戶配置文件夾]里,它們的完整性級(jí)別應(yīng)該是“Medium”啊?
原來(lái),對(duì)于保護(hù)模式下的IE瀏覽器來(lái)說(shuō),它擁有一套獨(dú)立的“四套班子”:
(1) IE臨時(shí)文件: %userprofile%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low
(2) 系統(tǒng)臨時(shí)目錄: %userprofile%\AppData\Local\Temp\Low
(3) Cookies: %userprofile%\AppData\Roaming\Microsoft\Windows\Cookies\Low
(4) 歷史: %userprofile%\AppData\Local\Microsoft\Windows\History\Low
這些目錄的完整性級(jí)別都是“Low”,以便IE進(jìn)程能夠正常訪問(wèn)。
注意
值得一提的是,收藏夾并沒(méi)有保護(hù)模式IE的獨(dú)立版本,這又是為什么?
盆盆評(píng)注 據(jù)微軟IE保護(hù)模式的開(kāi)發(fā)團(tuán)隊(duì)領(lǐng)導(dǎo)Robert Gu的提示,IE收藏夾默認(rèn)允許低級(jí)別的IE進(jìn)程訪問(wèn),因?yàn)槭詹貖A也具有“低級(jí)”的完整性級(jí)別。
代理進(jìn)程的引入,充分體現(xiàn)了Windows安全設(shè)計(jì)中的特權(quán)分離思想:
Windows Vista把傳統(tǒng)的IE進(jìn)程一分為三,分別負(fù)責(zé)不同安全等級(jí)的任務(wù)。把最常用的、無(wú)需特權(quán)的網(wǎng)頁(yè)瀏覽任務(wù)交給IE進(jìn)程本身去完成;把中等特權(quán)的任務(wù)(例如保存圖片),交給用戶級(jí)代理進(jìn)程(ieuser.exe)去完成;把高特權(quán)的任務(wù)(例如安裝加載項(xiàng)),交給管理級(jí)代理進(jìn)程去完成(ieinstal.exe)。而老版本的Windows則是把所有的任務(wù),不管其所需的安全等級(jí),都交由一個(gè)IE進(jìn)程去完成。以下的截圖源自微軟官方網(wǎng)站,由筆者對(duì)其進(jìn)行“漢化”,僅供參考。
IE保護(hù)模式的文件虛擬重定向
然而奇怪的是,為什么紫光拼音只是在我這臺(tái)計(jì)算機(jī)上有點(diǎn)“水土不服”,而在別的計(jì)算機(jī)上卻能夠過(guò)得好好的?
這就要說(shuō)到IE保護(hù)模式的另外一個(gè)優(yōu)勢(shì)了:
如果IE保護(hù)模式只有這點(diǎn)“防守”的能耐,那么它還不足于成為IE 7+瀏覽器最重要的安全特性。事實(shí)上,IE保護(hù)模式既具備嚴(yán)厲的安全措施(防守),同時(shí)又具備靈活的兼容性手段(進(jìn)攻),可以說(shuō)是攻守兼?zhèn)洹?/font>
原來(lái)Windows Vista為了能夠讓絕大多數(shù)加載項(xiàng)都能在IE瀏覽器上正常運(yùn)行,IE保護(hù)模式采用一種虛擬重定向技術(shù)。
原來(lái)IE保護(hù)模式在以下目錄中,創(chuàng)建一個(gè)和[用戶配置文件夾]完全一致的目錄層次[擁有“Low”的完整性級(jí)別]:
%userprofile%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized
例如D:\Users\Admin,對(duì)于IE保護(hù)模式來(lái)說(shuō),還有一套完全一致的虛擬鏡像版本:
D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized\D\Users\Admin
這樣,如果IE加載項(xiàng)需要修改[用戶配置文件夾]下的文件,系統(tǒng)就會(huì)自動(dòng)重定向到該文件的虛擬鏡像版本,對(duì)于該加載項(xiàng)來(lái)說(shuō),它根本不知道自己被IE保護(hù)模式“欺騙”了。
在正常的Windows Vista系統(tǒng)上,當(dāng)在IE保護(hù)模式下呼出紫光拼音輸入法時(shí),利用Filemon工具進(jìn)行檢測(cè),會(huì)發(fā)現(xiàn)當(dāng)紫光拼音想要修改D:\Users\Admin\AppData\Roaming\Unispim下的usrwl.dat文件時(shí),實(shí)際上是修改D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized\D\Users\Admin\AppData\Roaming\Unispim目錄下的usrwl.dat文件,如下圖所示,所以紫光拼音可以正常工作。
提示
不少讀者朋友提到某些第三方的Web應(yīng)用程序也有安全模式的功能。確實(shí)現(xiàn)在不少開(kāi)發(fā)商都注意到安全的重要性,但是IE保護(hù)模式的安全效果,無(wú)疑更占上風(fēng)。以電驢eMule為例,其安全模式是在系統(tǒng)里新增一個(gè)名為eMule_Secure的普通用戶,然后借助runas的方法以該普通用戶身份運(yùn)行eMule,以達(dá)到安全目的。這種方法的安全級(jí)別,和Windows Vista的UAC處于同一層次,比起IE保護(hù)模式,其安全性還是有所不如。更重要的是,UAC和IE保護(hù)模式,既安全、又方便、且兼容。
而Firefox的安全模式,則類(lèi)似于IE 7的NoAddons,和IE保護(hù)模式完全是兩個(gè)概念,其安全性也遠(yuǎn)非IE保護(hù)模式可比。
唯一遺憾的是,筆者的這臺(tái)計(jì)算機(jī),不知道出于什么原因,無(wú)論是Beta 2、5456,還是最新的5472.5版本,紫光拼音輸入法無(wú)法正常觸發(fā)IE的虛擬重定向功能,所以導(dǎo)致拒絕訪問(wèn)的錯(cuò)誤。
巧妙的解決辦法
作為一名狂熱的Windows Vista愛(ài)好者,自然不能束手就擒,也不能把電腦砸了,所以咱還得好好想想解決辦法。以下兩個(gè)解決辦法:
1.假作真時(shí)真亦假
假如我們把D:\Users\Admin\AppData\Roaming\Unispim目錄設(shè)置為某個(gè)“Low”目錄的軟鏈接(Soft Link),那么每次紫光拼音試圖訪問(wèn)D:\Users\Admin\AppData\Roaming\Unispim目錄時(shí),都會(huì)被NTFS文件系統(tǒng)自動(dòng)重新定向到這個(gè)完整級(jí)別為“Low”的新目錄中,這樣就可以順利達(dá)到目的了。
由于我們知道D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low目錄具有“Low”完整性級(jí)別,所以先在其下新建一個(gè)Unispim子目錄,該子目錄會(huì)自動(dòng)繼承“Low”完整性級(jí)別。
先刪除D:\Users\Admin\AppData\Roaming\Unispim目錄下的所有內(nèi)容,然后可以借助Linkd命令行工具,把D:\Users\Admin\AppData\Roaming\Unispim目錄“映射”到D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Unispim目錄,如下圖所示。
運(yùn)行完命令后,記住必須重啟或者注銷(xiāo)后重新登錄一下。
從《Windows Internals》里我們可以了解到,這種“映射”機(jī)制,實(shí)際上是給NTFS文件增加一個(gè)重解析點(diǎn)的屬性。用Filemon工具可以檢測(cè)到,當(dāng)紫光拼音訪問(wèn)D:\Users\Admin\AppData\Roaming\Unispim目錄下的某個(gè)文件時(shí),會(huì)被自動(dòng)“REPARSE”(重解析)到D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Unispim目錄下,如下圖所示。
這種方法雖然是個(gè)特例,但是大家也可以借鑒用于其他IE加載項(xiàng)不能正常工作的情況。
提示
不推薦映射到D:\Users\Admin\AppData\Local\Microsoft\Windows\Temporary Internet Files\virtualized目錄下,否則可能干擾正常的虛擬重定向功能。
2.把網(wǎng)頁(yè)添加到可信區(qū)域
如果不想那么麻煩,也可以把所需文字輸入的網(wǎng)頁(yè)添加到可信站點(diǎn)列表。因?yàn)樵诳尚艆^(qū)域里,IE瀏覽器默認(rèn)運(yùn)行在非保護(hù)模式,也就是運(yùn)行在普通的UAC安全級(jí)別。這樣紫光拼音就可以正常訪問(wèn)D:\Users\Admin\AppData\Roaming\Unispim目錄,因?yàn)檫@時(shí)候IE進(jìn)程和該目錄的完整性級(jí)別是一樣的。
在下圖中,可以看到IE瀏覽器的狀態(tài)欄上顯示該網(wǎng)頁(yè)位于Internet區(qū)域,保護(hù)模式處于啟用狀態(tài),這時(shí)候雙擊這里即可打開(kāi)IE的安全設(shè)置。
可以看到,可信站點(diǎn)區(qū)域默認(rèn)禁用“保護(hù)模式”,如下圖所示。只要把指定的網(wǎng)站加入到可信站點(diǎn)列表中,就可以正常使用紫光拼音。
參考資料
1.本文的原理部分,參考自《Protected Mode in Vista IE7》,大家可以訪問(wèn)微軟IE Team的官方Blog:
http://blogs.msdn.com/ie/archive/2006/02/09/528963.aspx
2.本文涉及的Process Explorer、Filemon和AccessChk等都是Sysinternals的工具,可以到www.sysinternals.com站點(diǎn)上下載。本文所述的Linkd命令行工具屬于Windows Server 2003 Resource Kit Tools工具包,可以到微軟官方站點(diǎn)搜索下載。
聯(lián)系客服