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