正文

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

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


  

Windows Vista和更高版本的完整性級(jí)別主要分為4個(gè)主要類別:

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

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

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

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

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

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

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

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

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

注意:

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

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

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

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

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


上一章目錄下一章

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