正文

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

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


  

1.7.3  擴(kuò)展完整性防御

瀏覽器擴(kuò)展,特別是諸如ActiveX控件和行為之類的二進(jìn)制文件,都是傳統(tǒng)的攻擊對象。因此,IE在這個瀏覽器的所有新版本中都添加了額外的緩解措施。這些緩解措施試圖阻止被用于危害數(shù)據(jù)和系統(tǒng)完整性的常見場景和安全漏洞。

1. ActiveX的初始化安全和腳本編寫安全

ActiveX控件是在網(wǎng)頁中運(yùn)行的二進(jìn)制應(yīng)用程序。因?yàn)锳ctiveX控件可能是為了在受信任桌面應(yīng)用程序中使用而編寫的,所以開發(fā)人員可能沒有考慮到不受信任調(diào)用方的安全威脅。為了緩解這一問題,IE要求控件發(fā)出“選擇加入”聲明,使該控件在IE的默認(rèn)安全性設(shè)置之下運(yùn)行。在實(shí)例化一個控件之前,IE嘗試調(diào)用IObjectSafety::SetInterfaceSafetyOptions()方法,對不受信任的初始化數(shù)據(jù)和調(diào)用方,也能強(qiáng)制該控件的行為是安全的。

控件通過返回INTERFACESAFE_FOR_UNTRUSTED_DATA來聲明它們對初始化是安全的。這一固定信息通知IE:該控件能夠安全地處理傳遞給它的任何初始化數(shù)據(jù)(例如在OBJECT標(biāo)記的PARAME屬性中傳遞)。控件還可以通過返回INTERFACESAFE_FOR_ UNTRUSTED_CALLER來聲明自己“對腳本編寫也是安全的”。這一固定信息通知IE:該控件的方法和屬性可以由JavaScript或VBScript調(diào)用或設(shè)置。

如果一個控件未能實(shí)現(xiàn)SetInterfaceSafetyOptions()方法,或者未能指出它對不受信任數(shù)據(jù)或不受信任調(diào)用方是安全的,IE將立即卸載該對象。

2. ActiveX選擇加入

除了直接通過瀏覽器安裝的ActiveX控件以及一定數(shù)量廣泛應(yīng)用、面向Internet的控件(例如Flash和RealPlayer)之外,所有其他ActiveX控件在默認(rèn)情況下都禁止在IE中進(jìn)行實(shí)例化。用戶可以使用信息欄選擇在瀏覽器中使用一個ActiveX控件。

因?yàn)橐恍┏R姷拈_發(fā)工具會自動實(shí)現(xiàn)IObjectSafety,所以有些控件在承諾自己能夠安全地供瀏覽器使用時,可能會有些言過其實(shí)。這樣可能會導(dǎo)致可被攻擊的故障或者其他安全威脅?!癆ctiveX選擇加入”強(qiáng)制用戶事先驗(yàn)證一個控件,然后才能在IE中運(yùn)行它,從而極大地縮小了針對ActiveX控件的攻擊面。

3. ATL SiteLock模板和Per-Site ActiveX

ATL SiteLock模板和“Per-Site ActiveX”能夠混合使用顯式和隱式方法,將ActiveX控件綁定到一個或多個域。通過限制ActiveX控件的運(yùn)行位置和上下文,開發(fā)人員和用戶可以將改變控件用途的風(fēng)險降至最低。

ATL SiteLock是一種顯式機(jī)制,用于限制哪些域和哪些范圍可以加載一個給定Activex控件。希望使用這一約束條件的控件開發(fā)人員可以將SiteLock模板應(yīng)用到自己基于ATL的ActiveX控件。這些ActiveX控件沒有實(shí)現(xiàn)IObjectSafety,而是實(shí)現(xiàn)IObjectSafetySiteLockImpl;這個界面是從IObjectSaftey派生而來的,使開發(fā)人員能夠聲明一個許可域(或區(qū)域)的列表,以在運(yùn)行時進(jìn)行檢查。

SiteLock是防止ActiveX重用攻擊的最可靠機(jī)制,在這種攻擊方式中,惡意網(wǎng)站嘗試濫用為在另一網(wǎng)站中使用而設(shè)計的控件。如果一個網(wǎng)站嘗試加載SiteLock不允許的控件,將會防止該對象的實(shí)例化。不會出現(xiàn)信息欄或重載。

由于SiteLock機(jī)制需要控件開發(fā)人員付出一些努力,所以采用這一機(jī)制的控件數(shù)目有些不盡如人意。為此,微軟在IE 8中添加了一個新功能,用于提供SiteLock的一些好處。

“Per-Site ActiveX”功能使用戶能夠決定允許在哪些域中運(yùn)行一個控件。默認(rèn)情況下,通過瀏覽器安裝的控件只能在安裝該控件的站點(diǎn)上運(yùn)行。當(dāng)另一個網(wǎng)站要實(shí)例化一個已安裝控件時,會向用戶顯示信息欄,詢問是否允許在當(dāng)前域或所有域中運(yùn)行控件(見圖1-25)。

圖1-25  ScriptX的“Per-Site ActiveX”信息欄

這個域列表可以通過“管理加載項(xiàng)”用戶界面或通過“組策略”進(jìn)行管理。

4. Per-User(Non-Admin)ActiveX

“Per-User ActiveX”(也稱為“Non-Admin ActiveX”)使ActiveX控件包(CAB)能夠在一個用戶賬戶內(nèi)安裝,而不是在計算機(jī)范圍內(nèi)安裝。如果開發(fā)人員希望將其CAB轉(zhuǎn)換為按用戶安裝程序,可以在控件包的INF文件中設(shè)定InstallScope and RedirectToHKCU標(biāo)志,以達(dá)到這一目的。

“Per-machine”(例如CAB)通常將文件放在Downloaded Program Files文件夾中,并向注冊表的HKEY_LOCAL_MACHINE配置單元中寫入信息。與之相對,Per-user應(yīng)用程序?qū)⑽募旁诋?dāng)前用戶擁有的文件夾中,并將注冊表項(xiàng)寫到HKEY_CURRENT_USER。Per-user應(yīng)用程序并不是新東西,也不是僅限于CAB文件。任何安裝腳本或可執(zhí)行文件都可以將擴(kuò)展或應(yīng)用程序轉(zhuǎn)換為“Per-user”方式,只需要將安裝過程限制于非系統(tǒng)文件夾和注冊表項(xiàng)就行了。例如,谷歌Chrome將自己放在用戶的Application Data文件夾中,而不是放在計算機(jī)范圍內(nèi)的Program Files文件夾中。

注意:

在“Per-user ActiveX”之前,IE會顯式檢查一個用戶是否擁有管理權(quán)限,然后才會嘗試安裝一個網(wǎng)頁上的ActiveX控件。


上一章目錄下一章

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