當今軟件開發中,面向組件的編程技術應用越來越廣泛。但是,組件的使用使編程人員在軟件開發過程中提高效率的同時,一并出現的
安全性問題也不可忽視。根據NVD(National Vulnerability Database)發布的信息,在2008年1月1日至2009年8月20日之間,共發布了227條描述為在
ActiveX控件中引發的
漏洞[1]。伴隨著網絡的普及與基于網絡的應用的快速發展,
ActiveX控件在應用的數量上非常巨大,而被收入到NVD數據庫的只是現存的眾多數量的
ActiveX漏洞中的極少數部分,還有大量的ActiveX
控件的
漏洞由于其軟件或控件流行范圍的局限而不被NVD所關注。 另一方面,伴隨著Windows 2003和SP2在操作系統
安全機制上的提升,很多漏洞的利用方式被成功遏制。如今要想在Windows系統中找到能夠利用的漏洞已經是一件很困難的事情,因此更多的黑客與
安全人員把目光轉向了第三方軟件。近幾年,一些知名的軟件公司都曾被發現其注冊的ActiveX控件中存在嚴重的漏洞,鑒于控件的特點,可以說這些漏洞跟IE自身的漏洞沒有多大的區別。所以在漏洞挖掘中盡早發現這類漏洞并及時地通知相關廠商,以便做出及時的應對措施顯得尤為重要。
1 ActiveX控件1.1 什么是ActiveXActiveX是微軟公司在1996年引進的,它是在組件對象模型(COM)、對象鏈接和嵌入(OLE)技術的基礎上發展而來[2]。COM規范是ActiveX技術的基礎,而COM的目的是創建對象和提供接口來實現代碼片段的簡單復用,而這些接口又能被其他的COM對象或者程序調用,ActiveX就是這項規范與IE的結合。這種結合提供了IE瀏覽器與第三方軟件的接口,使用ActiveX控件可以對IE瀏覽器進行功能擴展,可建立應用程序與網站之間的聯系,而這種聯系通過瀏覽器來實現。比如登錄一個在線視頻網站的時候,網站正是通過瀏覽器調用ActiveX控件打開本地的視頻資源。 每一個ActiveX控件通常使用CLSID(Class Identifier)來區別于其他的控件。CLSID是標識一個COM類對象的全球唯一的標識符,它是一個128位的隨機數。可以從注冊表中的HKEY_CLASSES_ROOTCLSID來讀出本機已經注冊的CLSID。 ActiveX控件并不能直接使用,它首先需要在目標機器中進行注冊,有很多種
方法可以注冊控件,除了所有的屬于IE和操作系統的控件以外,新安裝控件可以通過應用程序的安裝注冊一些控件;還可以通過網頁中OBJECT>標簽中的CODEBASE屬性,從指定位置下載并注冊控件;另外通過DOS命令regsvr32也能手動注冊一個控件。
1.2 腳本安全一個ActiveX控件可以被標注為腳本安全SFS(Safe For Scripting),這意味著IE可以通過腳本語言如JavaScript或VBScript調用控件,并設置或獲得它的屬性。 有兩種
方法可以描述一個控件是腳本安全的,第一種
方法是使用組件目錄管理(Component Categories Manager)來在系統注冊表中創建合適的項目。可以通過在這冊表編輯器中查看“HKEY_CLASSES_ROOTCLSIDcontrol clsid>Implemented Categories”是否擁有子鍵7DD95801-9882-11CF-9FA9-00AA06C42C4。第二種方法是通過實現IObjectSafety接口,通過調用IObjectSafety::SetInterfaceSafetyOptions方法來確定控件是否為腳本安全[3]。
1.3 KillBitKillBit是注冊表中的一項,用來標識控件使得在IE瀏覽器或者腳本環境運行時不加載控件。當發現有漏洞的控件時,可以先通過設置KillBit來使IE在使用默認設置時永不調用ActiveX控件。KillBit是ActiveX控件的兼容性標志DWORD值在注冊表中的特定值0x00000400。針對IE與操作系統的不同,KillBit在注冊表中的位置略有不同[4],可分別表示為: (1)32位IE/32位Windows:HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternetExplorerActiveX Compatibility (2)64位IE/64位Windows:HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternetExplorerActiveX Compatibility (3)32位IE/64位Windows:HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftInternet ExplorerActiveX Compatibility
1.4 控件函數枚舉由于ActiveX遵循COM規范,因此它也像其他的COM控件一樣使用相同的方式實現了COM接口,COM接口中很好地定義了一個COM組件中所實現的方法和屬性。如果控件實現了IDispatch或者IDispatchEx接口,那么可以通過獲得IDispatch接口來枚舉出控件的方法、參數以及屬性等信息。
2 不安全方法漏洞及檢測2.1不安全方法漏洞通過分析NVD以及US-CERT(US-Computer Emer-gency Readiness Team)中關于ActiveX漏洞的描述信息,ActiveX漏洞與其他的漏洞在類型上大致相同,占據漏洞比例絕大部份的是由于缺乏必要輸入驗證而帶來的緩沖區溢出漏洞。另外還包括由于IE加載惡意網頁而引發的在控件實例化過程中造成的崩潰[5]。本文要提到的不安全方法漏洞,也是在ActiveX控件中頻頻出現的一種漏洞。 如果一個方法被設計是由IE調用,那么它應該就被標記為腳本安全,微軟在MSDN中提供了編寫一個安全的控件時對于哪些應該被標為安全提供了指導。但是由于編程人員在安全性上的疏忽,或者根本就不熟悉ActiveX的調用機制,一些標記為腳本安全的方法能夠輕易地被遠程調用者不加任何限制地調用,或者一些本不應該被IE所使用的方法錯誤地被標注上了腳本安全,這些方法給系統帶來很大的安全隱患。這類漏洞往往表現為任意的注冊表讀寫、本地文件系統的讀寫、網絡端口的開放,執行文件、敏感信息的泄漏等。由于這類漏洞的利用一般非常簡單,因此這類漏洞利用門檻很低,危害性極大。
2.2 ActiveX控件的檢測2.2.1 威脅建模威脅建模(Threat modeling)是一個過程,軟件開發人員可以使用它來評估,從而減少控件所面臨的潛在的威脅[6]。威脅建模來自于軟件測試領域,威脅建模的一般步驟是先分解應用程序,建立數據流圖,然后識別所面臨的威脅,根據威脅識別潛在的漏洞。對于識別潛在的威脅,可以利用Howard和Leblanc提到的STRIDE威脅目錄[7]。 但是由于威脅建模一般是建立在擁有軟件設計細節的基礎上。作為漏洞挖掘工作,常常面臨的只是軟件的二進制文件形式,很難得到軟件設計的源代碼,構建完整的數據流圖。因此,基于威脅建模的漏洞挖掘工作,很難建立起準確的威脅模型。
關鍵詞:
漏洞
檢測技術
方法
安全
控件
ActiveX