正文

Internet Explorer體系結(jié)構(gòu)(3)

IE8 & 9開發(fā)實戰(zhàn):基于下一代IE的應(yīng)用開發(fā) 作者:(美)克羅利


  

Windows Vista和更高版本的完整性級別主要分為4個主要類別:

●       系統(tǒng):核心操作系統(tǒng)權(quán)限(NTAUTHORITY);系統(tǒng)組件、文件和數(shù)據(jù)

●       高:計算機級別訪問權(quán)限(管理員);程序文件和本地計算機注冊表配置單元

●       中:用戶級別訪問權(quán)限(用戶);用戶文件和設(shè)置、當(dāng)前用戶注冊表配置單元

●       低:不受信任的內(nèi)容、臨時文件和數(shù)據(jù)

Windows為通信處理和數(shù)據(jù)訪問設(shè)置了一些基本規(guī)則。首先,進(jìn)程只能向下發(fā)送命令,而不能向上發(fā)送;例如,以“低”級別運行的應(yīng)用程序不能直接運行一個需要中級訪問權(quán)限的API,也不能訪問需要中級訪問權(quán)限的文件。其次,不同級別的進(jìn)程只能通過該群組中的最低權(quán)限完整性級別進(jìn)行通信;例如,如果一個中級進(jìn)程和一個低級進(jìn)程需要進(jìn)行對話,它們只能通過一個具有低完整性級別的通道來實現(xiàn),例如通過一個低完整性命名管道。最后,正在運行的進(jìn)程不能在沒有用戶許可的情況下啟動具有更高級別的新進(jìn)程;例如,一個以中級權(quán)限運行的應(yīng)用程序需要啟動一個高級別的應(yīng)用程序,用戶將會看到一個UAC提示,以允許或拒絕該請求。對這個數(shù)據(jù)流,顯然還有很多微妙之處和規(guī)則,但其基本前提很清晰:應(yīng)用程序都獲得一個許可級別,它們必須在此級別范圍內(nèi)操作,必要時,這些應(yīng)用程序必須申請更高的訪問權(quán)限。

保護(hù)模式是IE的一項功能,用于在Windows的完整性級別中分隔IE組件。IE會觸及操作系統(tǒng)的很多不同部分;例如,為實現(xiàn)緩存和cookie需要訪問臨時Internet文件,為實現(xiàn)用戶預(yù)設(shè)置需要訪問用戶文件夾和注冊表項,為了實現(xiàn)持久數(shù)據(jù)及計算機范圍內(nèi)ActiveX控件,需要訪問計算機級別的文件和注冊表項。IE開發(fā)團(tuán)隊將這一非常廣泛的訪問權(quán)限與Windows的新MIC體系結(jié)構(gòu)進(jìn)行對比,最后得出結(jié)論:大量惡意攻擊都可以通過這些控件得到緩解。因此,IE現(xiàn)在分解為獨立的進(jìn)程、線程和通信控制器,使整個應(yīng)用程序能夠符合Windows在體系結(jié)構(gòu)上的這一新的隔離方式。

保護(hù)模式用到了Windows體系結(jié)構(gòu)的兩個關(guān)鍵組件:MIC和用戶界面特權(quán)隔離(UIPI)。MIC在前面已經(jīng)提到,限制低級進(jìn)程對高級位置和API的訪問。保護(hù)模式依靠MIC來保護(hù)用戶配置文件、注冊表和API(例如OpenProcess()、OpenThread()和CreateRemoteThread()),使其免受非授權(quán)訪問。UIPI是一種強制機制,它阻止向高級進(jìn)程發(fā)送特定的windows事件消息。保護(hù)模式依靠UIPI來防止低級進(jìn)程向更高級權(quán)限的進(jìn)程發(fā)送潛在的惡意消息(也就是所謂的“粉碎攻擊(shatter attack)”)。

IE采用一種符合MIC體系結(jié)構(gòu)的方式來分隔其進(jìn)程和功能(如圖1-2所示)。保護(hù)模式的網(wǎng)頁被加載到以低完整性級別實例化的iexplore.exe進(jìn)程中。默認(rèn)情況下,在這一進(jìn)程中工作的頁面和擴(kuò)展可以訪問標(biāo)有低完整性級別的臨時Internet文件、使用標(biāo)有低完整性級別的API和消息,并調(diào)用一組由高完整性級別IE“代理”進(jìn)程提供的安全API。

一般來說,不受信任的網(wǎng)頁內(nèi)容非常適于采用低完整性級別,但這些限制也阻礙了在這種頁面與其父框架之間進(jìn)行非常基本的通信。例如,一個頁面可能需要將其標(biāo)題發(fā)送給父框架,以便在IE標(biāo)題欄中顯示,或者,一個頁面可能需要啟動一個ActiveX控件的安裝。IE框架進(jìn)程允許低完整性級別通過UIPI執(zhí)行高級別任務(wù);較低完整性級別的頁面可以要求代理框架進(jìn)程為它們執(zhí)行那些不允許自己執(zhí)行的任務(wù)。

注意:

在IE 7中,中級完整性級別的代理是在ieuser.exe進(jìn)程中實現(xiàn)的。而在IE 8中,ieuser.exe中的功能被重構(gòu)回iexplore.exe中,作為松耦合Internet Explorer實現(xiàn)的一部分。

圖1-2  保護(hù)模式體系結(jié)構(gòu)框圖

在一個網(wǎng)頁內(nèi)容中運行的ActiveX控件、行為和其他擴(kuò)展(也稱為“內(nèi)容擴(kuò)展”)需要以其父進(jìn)程的完整性級別運行。另外,在框架中可以看到的擴(kuò)展(例如工具欄和菜單項、瀏覽器欄和工具欄)也必須符合這些新的策略。在剛引入IE 7時,這一變化導(dǎo)致了一個問題——大量加載項所依賴的API不能供那些以低完整性級別運行的進(jìn)程使用。為了降低兼容性影響,IE 7和IE 8提供了讀/寫虛擬化和包裝API。這些改變并沒有解決所有兼容性問題,其中一些只能通過創(chuàng)建代理應(yīng)用程序來緩解。在本章最后幾章中將討論這些API以及如何創(chuàng)建代理應(yīng)用程序。

這一功能是受安全區(qū)域設(shè)置(將在本章后面討論)控制的。在IE 7中,保護(hù)模式可以在“受限”、Internet和Intranet安全區(qū)域中的所有頁面上運行,而在IE 8中,它只能在前兩者中運行。在未使用保護(hù)模式時,IE進(jìn)程的權(quán)限級別與當(dāng)前用戶賬戶的權(quán)限級別相同(在Windows XP中總是如此)。

并非對于所有頁面或者所有Windows版本都使用了保護(hù)模式。在Windows XP和Windows 2003中,由于這些平臺上沒有MIC功能,所以也就沒有“保護(hù)模式”功能。對于WebBrowser控件或MSHTML的主機,這一功能也是不可用的。


上一章目錄下一章

Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號