本發(fā)明屬于系統(tǒng)安全研究中的隔離
技術(shù)領(lǐng)域:
:,更具體地,涉及一種基于硬件虛擬化技術(shù)的共享庫隔離保護(hù)方法及系統(tǒng)。
背景技術(shù):
::在現(xiàn)代操作系統(tǒng)中,動(dòng)態(tài)鏈接庫在程序啟動(dòng)時(shí)或者運(yùn)行時(shí)被加載到地址空間并提供函數(shù)接口服務(wù)。這種方法提供了一種動(dòng)態(tài)且隔離的方法來進(jìn)行代碼復(fù)用。相比與靜態(tài)鏈接的方式,這種方法由于不會(huì)增加二進(jìn)制文件的大小且獨(dú)立于應(yīng)用程序,因此更加易用和高效?,F(xiàn)代操作系統(tǒng)為用戶空間以及內(nèi)核空間提供了強(qiáng)制的內(nèi)存隔離機(jī)制來保障內(nèi)核代碼與數(shù)據(jù)的安全。然而用戶空間內(nèi)并沒有類似的安全機(jī)制。所有的共享庫與應(yīng)用程序都處于同一個(gè)地址空間中,共享庫的安全與應(yīng)用程序的安全緊密的聯(lián)系在一起。一旦共享庫被加載到應(yīng)用程序的地址空間中,應(yīng)用程序可以隨意的執(zhí)行共享庫的代碼或者存取共享庫的數(shù)據(jù),相反亦然。正因如此,這為用戶帶來了嚴(yán)重的安全威脅?,F(xiàn)有的實(shí)現(xiàn)共享庫隔離防護(hù)的方法主要有兩種,第一種是以虛擬機(jī)隔離為主的方法,其將共享庫與應(yīng)用程序放入不同的虛擬機(jī)中,通過虛擬機(jī)的切換來保障共享庫與其它組件的正常交互;第二種是以進(jìn)程隔離為主的方法,其將共享庫與應(yīng)用程序放入不同的進(jìn)程中,通過進(jìn)程切換的方法來保證共享庫與其它組件的正常交互。然而,上述兩種共享庫隔離防護(hù)的方法存在以下問題:第一種方法由于采用了虛擬機(jī)切換,會(huì)導(dǎo)致系統(tǒng)開銷巨大;第二種方法需要對應(yīng)用程序進(jìn)行重新設(shè)計(jì),以適應(yīng)隔離環(huán)境,這會(huì)導(dǎo)致通用性差。技術(shù)實(shí)現(xiàn)要素:針對現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于硬件虛擬化技術(shù)的共享庫隔離保護(hù)方法及系統(tǒng),其目的在于,解決現(xiàn)有隔離方法中存在的開銷大、通用性差的技術(shù)問題。為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種基于硬件虛擬化技術(shù)的共享庫隔離保護(hù)方法,包括以下步驟:(1)根據(jù)虛擬機(jī)操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)獲取虛擬機(jī)操作系統(tǒng)中共享庫的物理頁面地址信息;(2)根據(jù)獲取的共享庫的物理頁面地址信息并通過虛擬機(jī)管理器創(chuàng)建共享庫隔離空間;(3)在創(chuàng)建的共享庫隔離空間中對庫函數(shù)調(diào)用、回調(diào)函數(shù)調(diào)用、以及操作系統(tǒng)中的中斷行為分別進(jìn)行ept頁表切換;(4)對虛擬機(jī)操作系統(tǒng)中除了上述步驟(3)中庫函數(shù)調(diào)用、回調(diào)函數(shù)調(diào)用、以及操作系統(tǒng)中的中斷行為以外的共享庫運(yùn)行時(shí)的所有行為進(jìn)行惡意行為檢測,并提供惡意行為發(fā)生時(shí)的虛擬機(jī)上下文信息。優(yōu)選地,步驟(1)具體為,首先是通過修改操作系統(tǒng)中的鏈接器,從而在共享庫加載到應(yīng)用程序的地址空間時(shí)將應(yīng)用程序的進(jìn)程號(hào)發(fā)送給內(nèi)核,通過內(nèi)核中記錄的內(nèi)存頁面信息,獲取到所有共享庫物理頁面的起始地址,通過對共享庫的每一個(gè)頁面進(jìn)行讀操作將共享庫物理頁面鎖在內(nèi)存之中,將獲得的共享庫的物理頁面地址信息通過虛擬機(jī)管理器與虛擬機(jī)內(nèi)核之間的傳輸機(jī)制傳遞給虛擬機(jī)管理器。優(yōu)選地,步驟(2)包括以下子步驟:(2-1)在虛擬機(jī)管理器啟動(dòng)時(shí)創(chuàng)建一個(gè)不同于其固有的可擴(kuò)展頁表ept-s的空白新ept頁表ept-l;(2-2)根據(jù)獲取的共享庫的物理頁面地址信息在創(chuàng)建的新ept頁表ept-l中創(chuàng)建共享庫的物理頁面的虛擬機(jī)物理地址gpa與共享庫的物理頁面的主機(jī)物理地址hpa之間的映射關(guān)系;(2-3)根據(jù)共享庫的物理頁面地址信息遍歷虛擬機(jī)管理器固有的可擴(kuò)展頁表ept-s,以將該表中存儲(chǔ)的共享庫的物理頁面的gpa與共享庫的物理頁面的hpa之間的映射關(guān)系刪除,從而形成了由固有的可擴(kuò)展頁表ept-s和新ept頁表ept-l構(gòu)成的共享庫隔離空間。優(yōu)選地,步驟(2)進(jìn)一步包括在子步驟(2-3)之后的如下步驟:(2-4)修改操作系統(tǒng)中的堆內(nèi)存分配函數(shù),具體為記錄其堆內(nèi)存分配的地址范圍,并將該地址范圍發(fā)送給虛擬機(jī)管理器進(jìn)行保存,其中堆內(nèi)存分配函數(shù)是malloc函數(shù)。優(yōu)選地,驟(3)包括以下子步驟:(3-1)根據(jù)虛擬機(jī)操作系統(tǒng)中應(yīng)用程序或共享庫運(yùn)行時(shí)的行為判斷是庫函數(shù)調(diào)用、回調(diào)函數(shù)調(diào)用、還是操作系統(tǒng)中的中斷行為,如果是庫函數(shù)調(diào)用,則進(jìn)入步驟(3-2),如果是回調(diào)函數(shù)調(diào)用,則進(jìn)入步驟(3-3),如果是操作系統(tǒng)中的中斷行為,則進(jìn)入步驟(3-4);(3-2)將應(yīng)用程序的二進(jìn)制文件中保存的全局偏移表got中的共享庫函數(shù)起始地址修改為具有ept頁表切換功能的代碼的地址,該代碼中包括執(zhí)行ept-s頁表到ept-l頁表切換的代碼,以及將ept-l頁表到ept-s頁表切換的代碼地址壓入應(yīng)用程序棧中的操作;(3-3)通過虛擬機(jī)管理器的ept頁表缺頁異常處理函數(shù)修改虛擬機(jī)控制結(jié)構(gòu)的ept頁表指針域,其中在庫函數(shù)進(jìn)行回調(diào)調(diào)用時(shí),是將eptp域修改為指向etp-s,在庫函數(shù)進(jìn)行調(diào)用返回時(shí),是將eptp域修改為指向etp-l;(3-4)判斷操作系統(tǒng)中的中斷行為是屬于中斷異常還是進(jìn)程切換,如果是屬于中斷異常,則進(jìn)入步驟(3-5),如果是屬于進(jìn)程切換,則進(jìn)入步驟(3-6);(3-5)通過ept頁表缺頁異常處理函數(shù)動(dòng)態(tài)地在ept-l頁表中構(gòu)建虛擬機(jī)內(nèi)核頁面的gpa與hpa之間的映射關(guān)系;(3-6)在ept頁表缺頁異常處理函數(shù)中通過vmcs中的虛擬機(jī)上下文信息判斷當(dāng)前eptp指針的狀態(tài),以及發(fā)生缺頁異常的頁面屬性,如果當(dāng)前eptp指針指向ept-s頁表,且發(fā)生缺頁異常的頁面為共享庫頁面,則直接將eptp指針修改為指向ept-l頁表,如果當(dāng)前eptp指針指向ept-l頁表,且發(fā)生缺頁異常的頁面為應(yīng)用程序頁面,則直接將eptp指針修改為指向ept-s頁表,其他情況不做任何處理。優(yōu)選地,步驟(3-2)包括以下子步驟:(3-2-1)對應(yīng)用程序的二進(jìn)制文件中保存的got表進(jìn)行分析,以得到針對應(yīng)用程序調(diào)用的每個(gè)共享庫函數(shù)所生成的ept頁表切換代碼,該ept頁表切換代碼中包括執(zhí)行ept-s頁表到ept-l頁表切換的代碼、以及將ept-l頁表到ept-s頁表切換的代碼地址壓入應(yīng)用程序棧中的操作;(3-2-2)將虛擬機(jī)操作系統(tǒng)鏈接器中的共享庫函數(shù)地址查詢函數(shù)的返回值修改為生成的ept頁表切換代碼的地址。一種基于硬件虛擬化技術(shù)的共享庫隔離保護(hù)系統(tǒng),包括:第一模塊,用于根據(jù)虛擬機(jī)操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)獲取虛擬機(jī)操作系統(tǒng)中共享庫的物理頁面地址信息;第二模塊,用于根據(jù)獲取的共享庫的物理頁面地址信息并通過虛擬機(jī)管理器創(chuàng)建共享庫隔離空間;第三模塊,用于在創(chuàng)建的共享庫隔離空間中對庫函數(shù)調(diào)用、回調(diào)函數(shù)調(diào)用、以及操作系統(tǒng)中的中斷行為分別進(jìn)行ept頁表切換;第四模塊,用于對虛擬機(jī)操作系統(tǒng)中除了上述第三模塊中庫函數(shù)調(diào)用、回調(diào)函數(shù)調(diào)用、以及操作系統(tǒng)中的中斷行為以外的共享庫運(yùn)行時(shí)的所有行為進(jìn)行惡意行為檢測,并提供惡意行為發(fā)生時(shí)的虛擬機(jī)上下文信息??傮w而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:(1)本發(fā)明的通用性好:由于本發(fā)明采用了步驟(2)和步驟(3),其首先通過底層硬件的支持,避免修改應(yīng)用程序的虛擬地址空間,然后通過靜態(tài)插裝與動(dòng)態(tài)處理相結(jié)合的方式進(jìn)行隔離空間切換,其中主要是對應(yīng)用程序二進(jìn)制文件進(jìn)行分析并進(jìn)行代碼插裝,在這個(gè)過程中既不需要對應(yīng)用程序進(jìn)行重新設(shè)計(jì)同時(shí)也維護(hù)了共享庫的共享特性,因此具有良好的通用性。(2)本發(fā)明的開銷低:本發(fā)明通過步驟(3-2),其通過采用了intel虛擬化拓展指令vmfunc,在不陷入虛擬機(jī)管理器的情況下能夠直接進(jìn)行地址空間切換的處理。因此相比于現(xiàn)有的虛擬化隔離方案,本發(fā)明通過這種方式更能有效的減少頻繁的庫函數(shù)調(diào)用帶來的性能開銷。(3)本發(fā)明的安全性高:本發(fā)明通過步驟4,其通過對陷入虛擬機(jī)管理器中的缺頁行為進(jìn)行判斷來確定該行為的合法性。對于應(yīng)用程序未經(jīng)特定接口調(diào)用共享庫函數(shù)的行為,本發(fā)明將在虛擬機(jī)管理器截獲這些行為并將行為發(fā)生時(shí)的虛擬機(jī)上下文信息返回給用戶,因此用戶可以根據(jù)這些信息來判斷惡意行為所在的進(jìn)程,操作的內(nèi)存位置以及操作性質(zhì)等。附圖說明圖1是本發(fā)明基于硬件虛擬化技術(shù)的共享庫隔離保護(hù)方法的系統(tǒng)架構(gòu)實(shí)現(xiàn)圖。圖2是本發(fā)明隔離地址空間中的內(nèi)存布局圖。圖3是本發(fā)明地址空間切換時(shí)的控制流圖。圖4是本發(fā)明進(jìn)程切換時(shí)的eptp切換實(shí)現(xiàn)圖。圖5是本發(fā)明基于硬件虛擬化技術(shù)的共享庫隔離保護(hù)方法的流程圖。具體實(shí)施方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。本發(fā)明的最終目標(biāo)是實(shí)現(xiàn)基于硬件虛擬化技術(shù)的共享庫隔離保護(hù)系統(tǒng),以防止攻擊者利用應(yīng)用程序漏洞隨意的執(zhí)行共享庫代碼或者存取共享庫數(shù)據(jù)。下面給出本發(fā)明基于kvm虛擬化平臺(tái)的具體實(shí)施方案。如圖5所示,本發(fā)明基于硬件虛擬化技術(shù)的共享庫隔離保護(hù)方法包括以下步驟:(1)根據(jù)虛擬機(jī)操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)獲取虛擬機(jī)操作系統(tǒng)中共享庫的物理頁面地址信息(physicalpageaddressinformation);具體而言,本步驟首先是通過修改操作系統(tǒng)中的鏈接器(linker),從而在共享庫加載到應(yīng)用程序的地址空間時(shí)將應(yīng)用程序的進(jìn)程號(hào)發(fā)送給內(nèi)核,通過內(nèi)核中記錄的內(nèi)存頁面信息,可以獲取到所有共享庫物理頁面的起始地址;由于現(xiàn)代操作系統(tǒng)在內(nèi)存管理中存在著延遲的機(jī)制,這意味著只有當(dāng)代碼或者數(shù)據(jù)真正要被存取時(shí),才分配真正的物理頁面,因此在鏈接器中,接下來需要通過對共享庫的每一個(gè)頁面進(jìn)行讀操作來保證這些物理頁面已經(jīng)被載入到內(nèi)存中;與此同時(shí),為了避免交互機(jī)制對共享庫的物理頁面的影響,下一步必須將這些物理頁面鎖在內(nèi)存之中;最后,將獲得的共享庫的物理頁面地址信息通過一種虛擬機(jī)管理器與虛擬機(jī)內(nèi)核(guestos)之間的傳輸機(jī)制(hypercall)傳遞給虛擬機(jī)管理器(hypervisor),本過程結(jié)束。(2)根據(jù)獲取的共享庫的物理頁面地址信息并通過虛擬機(jī)管理器創(chuàng)建共享庫隔離空間;本步驟具體包括以下子步驟:(2-1)在虛擬機(jī)管理器啟動(dòng)時(shí)創(chuàng)建一個(gè)不同于其固有的可擴(kuò)展頁表(extendedpagetable,簡稱ept)ept-s的空白新ept頁表ept-l;(2-2)根據(jù)獲取的共享庫的物理頁面地址信息在創(chuàng)建的新ept頁表ept-l中創(chuàng)建共享庫的物理頁面的虛擬機(jī)物理地址(guestphysicaladdress,簡稱gpa)與共享庫的物理頁面的主機(jī)物理地址(hostphysicaladdress,簡稱hpa)之間的映射關(guān)系;如圖2所示,可以清楚的看到填充后的新ept頁表ept-l中包括有共享庫棧、共享庫a和b、以及共享庫堆;(2-3)根據(jù)共享庫的物理頁面地址信息遍歷虛擬機(jī)管理器固有的可擴(kuò)展頁表ept-s,以將該表中存儲(chǔ)的共享庫的物理頁面的gpa與共享庫的物理頁面的hpa之間的映射關(guān)系刪除,從而形成了由固有的可擴(kuò)展頁表ept-s和新ept頁表ept-l構(gòu)成的共享庫隔離空間;如圖2所示,左側(cè)的固有的可擴(kuò)展頁表ept-s中灰色部分是刪除了映射關(guān)系以后的應(yīng)用程序地址空間,最終,ept-s與ept-l形成一種“互補(bǔ)”的映射結(jié)構(gòu)??蛇x的,本步驟還可以包括在子步驟(2-3)之后的如下步驟:(2-4)修改操作系統(tǒng)中的堆內(nèi)存分配函數(shù),具體為記錄其堆內(nèi)存分配的地址范圍,并將該地址范圍發(fā)送給虛擬機(jī)管理器進(jìn)行保存;在本發(fā)明中,該堆內(nèi)存分配函數(shù)是malloc函數(shù)。(3)在創(chuàng)建的共享庫隔離空間中對庫函數(shù)調(diào)用(libraryfunctioncall)、回調(diào)函數(shù)調(diào)用(callback)、以及操作系統(tǒng)中的中斷行為(interrupt)分別進(jìn)行ept頁表切換;如圖3所示(其中trampoline指的是應(yīng)用程序進(jìn)行庫函數(shù)調(diào)用時(shí)的ept頁表切換代碼,springboard指的是庫函數(shù)調(diào)用返回時(shí)的ept頁表切換代碼),本步驟包括以下子步驟:(3-1)根據(jù)虛擬機(jī)操作系統(tǒng)中應(yīng)用程序或共享庫運(yùn)行時(shí)的行為判斷是庫函數(shù)調(diào)用、回調(diào)函數(shù)調(diào)用、還是操作系統(tǒng)中的中斷行為,如果是庫函數(shù)調(diào)用,則進(jìn)入步驟(3-2),如果是回調(diào)函數(shù)調(diào)用,則進(jìn)入步驟(3-3),如果是操作系統(tǒng)中的中斷行為,則進(jìn)入步驟(3-4);(3-2)將應(yīng)用程序的二進(jìn)制文件中保存的全局偏移表(globaloffsettable,簡稱got)中的共享庫函數(shù)起始地址修改為具有ept頁表切換功能的代碼的地址,該代碼中包括執(zhí)行ept-s頁表到ept-l頁表切換的代碼,以及將ept-l頁表到ept-s頁表切換的代碼地址壓入應(yīng)用程序棧中的操作;本步驟具體包括以下子步驟:(3-2-1)對應(yīng)用程序的二進(jìn)制文件中保存的got表進(jìn)行分析,以得到針對應(yīng)用程序調(diào)用的每個(gè)共享庫函數(shù)所生成的ept頁表切換代碼,該ept頁表切換代碼中包括執(zhí)行ept-s頁表到ept-l頁表切換的代碼、以及將ept-l頁表到ept-s頁表切換的代碼地址壓入應(yīng)用程序棧中的操作;在該ept頁面切換代碼中使用了基于intel虛擬化技術(shù)的拓展指令vmfunc,其能夠?qū)崿F(xiàn)在虛擬機(jī)用戶態(tài)下直接進(jìn)行ept頁表的切換;(3-2-2)將虛擬機(jī)操作系統(tǒng)鏈接器中的共享庫函數(shù)地址查詢函數(shù)(在本發(fā)明中是dl_runtime_resolve函數(shù))的返回值修改為生成的ept頁表切換代碼的地址;(3-3)通過虛擬機(jī)管理器的ept頁表缺頁異常處理函數(shù)(ept-violationhandler)修改虛擬機(jī)控制結(jié)構(gòu)(vmcontrolstructures,簡稱vmcs)的ept頁表指針(eptpointer,簡稱eptp)域,其中在庫函數(shù)進(jìn)行回調(diào)調(diào)用時(shí),是將eptp域修改為指向etp-s,在庫函數(shù)進(jìn)行調(diào)用返回時(shí),是將eptp域修改為指向etp-l;(3-4)判斷操作系統(tǒng)中的中斷行為是屬于中斷異常還是進(jìn)程切換,如果是屬于中斷異常,則進(jìn)入步驟(3-5),如果是屬于進(jìn)程切換,則進(jìn)入步驟(3-6);具體而言,進(jìn)程切換伴隨著虛擬機(jī)中cr3寄存器的改變,而中斷異常則不存在上述情況;(3-5)通過ept頁表缺頁異常處理函數(shù)動(dòng)態(tài)地在ept-l頁表中構(gòu)建虛擬機(jī)內(nèi)核頁面的gpa與hpa之間的映射關(guān)系;該映射關(guān)系構(gòu)建的過程與上述步驟(2-2)中相同,在此不再贅述。(3-6)在ept頁表缺頁異常處理函數(shù)中通過vmcs中的虛擬機(jī)上下文信息判斷當(dāng)前eptp指針的狀態(tài),以及發(fā)生缺頁異常的頁面屬性,如果當(dāng)前eptp指針指向ept-s頁表,且發(fā)生缺頁異常的頁面為共享庫頁面,則直接將eptp指針修改為指向ept-l頁表,如果當(dāng)前eptp指針指向ept-l頁表,且發(fā)生缺頁異常的頁面為應(yīng)用程序頁面,則直接將eptp指針修改為指向ept-s頁表,其他情況不做任何處理(如圖4所示)。(4)對虛擬機(jī)操作系統(tǒng)中除了上述步驟(3)中庫函數(shù)調(diào)用、回調(diào)函數(shù)調(diào)用、以及操作系統(tǒng)中的中斷行為以外的共享庫運(yùn)行時(shí)的所有行為進(jìn)行惡意行為檢測,并提供惡意行為發(fā)生時(shí)的虛擬機(jī)上下文信息。具體而言,在上述步驟(3)中,已經(jīng)對庫函數(shù)調(diào)用、回調(diào)函數(shù)調(diào)用、以及操作系統(tǒng)中的中斷行為進(jìn)行了ept頁表切換處理,因此,一旦攻擊者的行為不屬于這些行為,由于沒有對應(yīng)的ept頁表切換處理,則將導(dǎo)致虛擬機(jī)陷入ept頁表缺頁異常處理函數(shù),因此,通過執(zhí)行惡意行為檢測,即在ept-s頁表下發(fā)生共享庫頁面的缺頁異常,則認(rèn)為該行為是惡意行為,此時(shí)通過在該ept頁表缺頁異常處理函數(shù)中讀取vmcs中保存的虛擬機(jī)上下文信息,并將該信息返回給用戶的方式,就能夠讓用戶發(fā)現(xiàn)惡意行為所在的應(yīng)用程序。圖1展示了本發(fā)明基于硬件虛擬化技術(shù)的共享庫隔離保護(hù)系統(tǒng)實(shí)現(xiàn),其中主要包括有三個(gè)部分:(1)創(chuàng)建共享庫隔離空間;(2)共享庫運(yùn)行時(shí)交互控制;(3)惡意行為檢測。(1)創(chuàng)建共享庫隔離空間共享庫隔離空間主要包括了代碼部分的隔離以及數(shù)據(jù)部分的隔離。代碼隔離主要是依賴于intelept頁表技術(shù)實(shí)現(xiàn)的,ept頁表為每個(gè)虛擬機(jī)維護(hù)了虛擬機(jī)物理地址到主機(jī)物理地址之間的映射。通過創(chuàng)建不同的ept頁表,虛擬機(jī)內(nèi)存映射的具體內(nèi)容也會(huì)隨之發(fā)生改變。在的實(shí)現(xiàn)中,原本虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建的ept頁表稱之為ept-s,而創(chuàng)建的一張新的ept頁表稱之為ept-l。具體如圖2所示。其中ept-s頁表中主要記錄了應(yīng)用程序,共享庫以及操作系統(tǒng)所有頁面的地址映射關(guān)系,而在ept-l頁表中主要記錄了在共享庫數(shù)據(jù)和代碼頁面的地址映射關(guān)系。根據(jù)上一個(gè)步驟中所獲得的共享庫頁面的物理地址信息,可以在ept-l創(chuàng)建出相關(guān)的地址映射關(guān)系并將ept-s中原有的地址映射關(guān)系刪除。整個(gè)過程相當(dāng)于是將ept-s中共享庫頁面映射信息"剪貼-復(fù)制"到了ept-l中。(2)共享庫運(yùn)行時(shí)交互控制由于共享庫在運(yùn)行時(shí)會(huì)頻繁的與其他的組件進(jìn)行交互,因此當(dāng)將共享庫與其他的組件進(jìn)行隔離后,必須進(jìn)行地址空間的切換來保證交互的正確性。主要包含有以下幾種情況:應(yīng)用程序庫函數(shù)調(diào)用,庫函數(shù)系統(tǒng)調(diào)用,庫函數(shù)回調(diào)調(diào)用。具體的運(yùn)行時(shí)控制流圖如圖3所示。應(yīng)用程序庫函數(shù)調(diào)用時(shí)的地址空間切換是通過修改.got表實(shí)現(xiàn)的。由于.got表中存放了庫函數(shù)的起始地址,因此可以將這個(gè)地址修改為特定代碼片段的地址(對于特定代碼片段稱之為“trampoline”),在這段代碼中使用vmfunc指令來完成ept頁表的切換以及棧空間的切換。與此相反庫函數(shù)調(diào)用返回時(shí)也需要進(jìn)行棧空間的切換,由于棧上保存了函數(shù)調(diào)用的返回地址,通過修改這個(gè)返回地址指向特定的代碼片段地址(簡稱為“springboard”),在這段代碼中同樣使用vmfunc指令來完成ept頁表的切換以及??臻g的切換。為了對每個(gè)庫函數(shù)調(diào)用生成對應(yīng)的trampoline以及springboard,需要對應(yīng)用程序進(jìn)行二進(jìn)制文件分析獲得應(yīng)用程序.got表信息,最后生成獨(dú)立的文件映射到應(yīng)用程序地址空間中。庫函數(shù)系統(tǒng)調(diào)用時(shí)的地址空間切換主要是依賴hypervisor中特殊的缺頁處理ept-violationhandler。由于在初始化過程中,ept-l頁表中沒有映射操作系統(tǒng)內(nèi)核頁面,因此庫函數(shù)一旦進(jìn)行了系統(tǒng)調(diào)用,就會(huì)導(dǎo)致陷入hypervisor中并進(jìn)行ept-violation處理。通過這個(gè)方法,直接在運(yùn)行時(shí)將操作系統(tǒng)內(nèi)核頁面動(dòng)態(tài)的映射到ept-l中,從而保證了庫函數(shù)系統(tǒng)調(diào)用的正常執(zhí)行。庫函數(shù)回調(diào)調(diào)用時(shí)的地址空間切換同樣也是依賴于ept-violationhandler進(jìn)行處理。由于在ept-l頁表中沒有映射應(yīng)用程序代碼頁面,因此一旦庫函數(shù)進(jìn)行回調(diào)函數(shù)調(diào)用,那么就會(huì)導(dǎo)致陷入hypervisor中并進(jìn)行ept-violation處理。與上述情況不同的是,為了保證共享庫的安全,不能直接將回調(diào)函數(shù)所在頁面直接映射到ept-l中,在的實(shí)現(xiàn)中,將在ept-violationhandler中進(jìn)行eptp的切換,從而保證回調(diào)函數(shù)運(yùn)行在ept-s態(tài)下。特殊情況下的地址空間切換主要是由于系統(tǒng)中發(fā)生的異步事件會(huì)對應(yīng)用程序執(zhí)行狀態(tài)發(fā)生改變,例如進(jìn)程切換以及中斷事件等。圖4中具體描繪了進(jìn)程切換下的控制流。通過cr3寄存器以及ept-violation中保存的上下文,能夠判斷出是否發(fā)生了進(jìn)程切換并依據(jù)判斷結(jié)果在ept-violationhandler中完成地址空間切換。除此之外,中斷時(shí)間與系統(tǒng)調(diào)用下的地址空間切換則是類似的,直接在ept-violationhandler中完成相關(guān)頁面的映射。(3)惡意行為檢測通過上述處理,對共享庫與其他模塊之間正常交互的各種情況進(jìn)行了處理。因此一旦系統(tǒng)中發(fā)生除上述情況以外的其余事件時(shí),就可以通過在ept-violationhandler中截獲到的上下文信息進(jìn)行判斷。例如:應(yīng)用程序直接執(zhí)行共享庫函數(shù)中間的某一段指令,由于沒有特定的接口進(jìn)行空間切換且由于ept-s頁表中沒有映射共享庫頁面,最終將觸發(fā)ept-violation。在ept-violationhandler中截獲到的上下文中將會(huì)記錄這是在ept-s態(tài)下發(fā)生了共享庫頁面的ept-violation。因此這不屬于之前正常交互情況下的任何一種,那么最后將直接判定程序的控制流被惡意篡改,并立即停止程序的執(zhí)行。當(dāng)前第1頁12當(dāng)前第1頁12