正文

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

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

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

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

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

注意:

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

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

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

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

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


上一章目錄下一章

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