一種虛擬化環(huán)境中的數(shù)據(jù)擦除系統(tǒng)及方法
【專利摘要】本發(fā)明涉及一種虛擬化環(huán)境中的數(shù)據(jù)擦除系統(tǒng)及方法,屬于云計算中的數(shù)據(jù)安全和用戶隱私領(lǐng)域,基于Xen虛擬化架構(gòu),包括進程監(jiān)控模塊、控制模塊、虛擬機自省模塊和數(shù)據(jù)擦除模塊;所述控制模塊、虛擬機自省模塊和數(shù)據(jù)擦除模塊部署在管理域中,進程監(jiān)控模塊部署在虛擬機管理器,即VMM內(nèi)核中。本發(fā)明用于減小用戶客戶機運行時內(nèi)存中存儲的敏感數(shù)據(jù)面臨的威脅,用盡可能小的代價,縮短敏感數(shù)據(jù)被攻擊的時間窗口,保障用戶的客戶機內(nèi)敏感數(shù)據(jù)的保密性。
【專利說明】一種虛擬化環(huán)境中的數(shù)據(jù)擦除系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及云計算中的數(shù)據(jù)安全和用戶隱私領(lǐng)域,特別是涉及在虛擬化環(huán)境下內(nèi)存中的敏感數(shù)據(jù)的擦除系統(tǒng)及方法。
【背景技術(shù)】
[0002]虛擬化技術(shù)通過對計算、網(wǎng)絡(luò)、存儲資源的抽象,不同用戶的客戶機共享使用硬件資源,提高了資源的利用率,降低了 IT管理的成本。然而用戶運行在客戶機中的進程地址空間內(nèi)可能含有密碼、隱私等敏感數(shù)據(jù),現(xiàn)有的研究主要使用加密或者訪問控制的方法保護客戶機運行過程中內(nèi)存中的頁面內(nèi)容,這兩種保護敏感數(shù)據(jù)的方法存在以下問題:(I)加解密不可避免地對虛擬化平臺運行效率產(chǎn)生影響,需要付出很大的計算成本;(2)訪問控制的方法沒有考慮到虛擬化環(huán)境中的共享屬性,虛擬化平臺存在虛擬機運行中動態(tài)增減內(nèi)存,釋放的內(nèi)存分配給其他用戶的情況,這時便存在敏感數(shù)據(jù)泄漏的風(fēng)險;(3)如果程序在開發(fā)過程中沒有加入釋放數(shù)據(jù)時的數(shù)據(jù)擦除的功能,包含敏感數(shù)據(jù)的內(nèi)存部分在進程釋放后依然會存在泄露的風(fēng)險,無疑增加了敏感數(shù)據(jù)泄露的時間窗口。
[0003]綜上所述,迫切需要一種針對用戶客戶機內(nèi)存中數(shù)據(jù)擦除的系統(tǒng)及方法,采用盡可能小的代價,縮短敏感數(shù)據(jù)被攻擊的時間窗口,保障用戶客戶機內(nèi)存數(shù)據(jù)的安全。
【發(fā)明內(nèi)容】
[0004]本發(fā)明技術(shù)解決問題:克服現(xiàn)有技術(shù)的不足,提供一種虛擬化環(huán)境中的數(shù)據(jù)擦除系統(tǒng)及方法,以減小用戶客戶機運行時內(nèi)存中存儲的敏感數(shù)據(jù)面臨的威脅,用盡可能小的代價,縮短敏感數(shù)據(jù)被攻擊的時間窗口,保障用戶的客戶機內(nèi)敏感數(shù)據(jù)的保密性。
[0005]本發(fā)明技術(shù)解決方案:一種虛擬化環(huán)境中的數(shù)據(jù)擦除系統(tǒng),其特征在于所述系統(tǒng)采用Xen虛擬機架構(gòu),包括控制模塊、進程監(jiān)控模塊、虛擬機自省模塊和數(shù)據(jù)擦除模塊;所述控制模塊、虛擬機自省模塊和數(shù)據(jù)擦除模塊部署在管理域中,進程監(jiān)控模塊部署在虛擬機管理器,即VMM內(nèi)核中;
[0006]控制模塊:滿足云服務(wù)提供商或者客戶機用戶的隱私需求,提供與進程監(jiān)控模塊通信的功能,并通過調(diào)用數(shù)據(jù)擦除模塊的數(shù)據(jù)擦除部分實現(xiàn)數(shù)據(jù)擦除的功能;該模塊包括用戶接口部分、監(jiān)控準(zhǔn)備部分、消息監(jiān)聽部分、消息分析與傳遞部分;其中,用戶接口部分提供本系統(tǒng)對外的功能接口 ;監(jiān)控準(zhǔn)備部分為進程退出事件的監(jiān)控創(chuàng)建參數(shù)存儲與傳遞的空間,并建立起用于事件發(fā)生通知的事件通道;消息監(jiān)聽部分通過事件通道監(jiān)聽并接收進程監(jiān)控模塊發(fā)送給控制模塊的事件通知;消息分析與傳遞部分分析接收到的事件通知消息,在監(jiān)控準(zhǔn)備部分創(chuàng)建的參數(shù)空間中讀取客戶機id以及進程id,將這些參數(shù)傳遞給數(shù)據(jù)擦除豐吳塊;
[0007]進程監(jiān)控模塊:對客戶機中進程退出事件進行監(jiān)視和處理,并把發(fā)生進程退出事件的客戶機id以及進程id傳遞給管理域中的控制模塊;進程監(jiān)控模塊由控制邏輯設(shè)定和事件處理兩部分構(gòu)成,其中控制邏輯設(shè)定部分通過對客戶機虛擬機控制域(VirtualMachine Control Structure,簡稱為VMCS)中調(diào)試寄存器以及相關(guān)控制位的設(shè)置,實現(xiàn)當(dāng)客戶機內(nèi)發(fā)生進程退出事件時引發(fā)處理器異常產(chǎn)生虛擬機退出事件(VM_EXIT),該事件被VMM內(nèi)核截獲后調(diào)用事件處理部分;事件處理部分實現(xiàn)對管理域和VMM內(nèi)核參數(shù)空間的寫入以及與控制模塊的交互的功能,當(dāng)有進程退出事件發(fā)生時,事件處理部分將發(fā)生進程退出事件的客戶機id以及進程id信息寫入控制模塊創(chuàng)建的管理域與VMM內(nèi)核的參數(shù)空間中,使用事件通道告知控制模塊有進程退出事件發(fā)生;
[0008]虛擬機自省模塊:該模塊作為控制模塊和數(shù)據(jù)擦除模塊的輔助模塊存在,提供在管理域讀寫不同客戶機操作系統(tǒng)指定進程地址空間的接口,并提供訪問客戶機操作系統(tǒng)內(nèi)部重要對象的接口 ;該模塊包括操作系統(tǒng)識別部分、參數(shù)配置部分和數(shù)據(jù)存取部分;操作系統(tǒng)識別部分負(fù)責(zé)根據(jù)不同的操作系統(tǒng)在內(nèi)存中數(shù)據(jù)結(jié)構(gòu)的特點識別操作系統(tǒng)的類型和版本,數(shù)據(jù)存取部分實現(xiàn)在客戶機進程地址空間某地址讀取或?qū)懭霐?shù)據(jù),并為其它模塊提供數(shù)據(jù)存取的接口 ;參數(shù)配置部分定義不同類型的客戶機操作系統(tǒng)用于內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)在地址空間中的相對地址以及內(nèi)部關(guān)鍵屬性的偏移量;
[0009]數(shù)據(jù)擦除模塊:接收控制模塊傳遞過來的客戶機id以及退出進程id的參數(shù)信息并實現(xiàn)對客戶機內(nèi)某進程數(shù)據(jù)區(qū)域的數(shù)據(jù)擦除功能;該模塊包括消息解析部分,內(nèi)存數(shù)據(jù)區(qū)遍歷部分及數(shù)據(jù)擦除部分;其中消息解析部分通過控制模塊傳遞的參數(shù)信息獲得客戶機id以及進程的id,識別客戶機操作系統(tǒng)的類型以及版本號信息,調(diào)用對應(yīng)的內(nèi)存數(shù)據(jù)區(qū)遍歷函數(shù);內(nèi)存數(shù)據(jù)區(qū)遍歷部分讀取虛擬機自省模塊設(shè)置的客戶機操作系統(tǒng)內(nèi)存管理數(shù)據(jù)結(jié)構(gòu)的相對地址以及關(guān)鍵屬性的偏移量,訪問用于進行內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu),實現(xiàn)內(nèi)存數(shù)據(jù)區(qū)域的遍歷;數(shù)據(jù)擦除部分實現(xiàn)對給定的進程地址空間內(nèi)容的擦除功能。
[0010]一種虛擬化環(huán)境中的數(shù)據(jù)擦除系統(tǒng)實現(xiàn)數(shù)據(jù)擦除的方法,其特征包括客戶機操作系統(tǒng)進程退出事件截獲和客戶機進程內(nèi)存數(shù)據(jù)區(qū)域擦除方案的執(zhí)行,具體步驟如下:
[0011](I)云服務(wù)提供商管理員或用戶調(diào)用控制模塊的用戶接口部分,需要對某一客戶機進行監(jiān)視并進行數(shù)據(jù)擦除操作,用戶接口部分接受該請求將這一請求傳遞給監(jiān)控準(zhǔn)備部分,監(jiān)控準(zhǔn)備部分建立管理域和VMM內(nèi)核間的參數(shù)空間以及事件通道,為參數(shù)傳遞和事件通知做準(zhǔn)備;獲得客戶機操作系統(tǒng)中負(fù)責(zé)處理進程退出系統(tǒng)調(diào)用的地址,將該系統(tǒng)調(diào)用地址以及客戶機id作為參數(shù),使用Xen提供的超級調(diào)用機制把該請求傳遞給進程監(jiān)控模塊;與此同時,消息監(jiān)聽部分開始監(jiān)聽事件通道,監(jiān)視是否有進程監(jiān)控模塊傳來的發(fā)生進程退出事件的通知;
[0012](2)進程監(jiān)控模塊接收到管理域發(fā)起的超級調(diào)用,解析超級調(diào)用的參數(shù),確定目標(biāo)客戶機id以及客戶機操作系統(tǒng)負(fù)責(zé)處理進程退出的系統(tǒng)調(diào)用的地址;通過對客戶機內(nèi)調(diào)試寄存器的設(shè)置將該系統(tǒng)調(diào)用地址設(shè)置為執(zhí)行斷點,這樣當(dāng)客戶機中發(fā)生進程退出事件時,會產(chǎn)生調(diào)試中斷;為了使VMM內(nèi)核感知并能夠處理客戶機內(nèi)部產(chǎn)生的調(diào)試中斷,接下來需要對VMCS中攔截調(diào)試中斷的控制位進行設(shè)置,當(dāng)客戶機內(nèi)有進程退出時,會產(chǎn)生處理器異常,客戶機產(chǎn)生VM_EXIT將處理器的控制權(quán)交給VMM內(nèi)核;
[0013](3) VMM內(nèi)核接收到客戶機產(chǎn)生的VM_EXIT,進程監(jiān)控模塊的事件處理部分在VMCS中的虛擬機退出信息區(qū)域讀取VM_EXIT發(fā)生的原因,當(dāng)VM_EXIT是由于客戶機內(nèi)部發(fā)生了調(diào)試中斷而導(dǎo)致時,對比客戶機發(fā)生調(diào)試中斷的地址以及客戶機操作系統(tǒng)內(nèi)負(fù)責(zé)進程退出的系統(tǒng)調(diào)用的地址,如果兩者相同,說明該客戶機內(nèi)發(fā)生了進程退出事件;事件處理部分將客戶機id以及進程的id作為參數(shù)寫入步驟(I)創(chuàng)建的參數(shù)空間中,然后通過事件通道通知控制模塊有進程退出的事件發(fā)生;
[0014](4)控制模塊通過消息監(jiān)聽部分收到進程退出事件的通知后,從參數(shù)空間中讀取發(fā)生進程退出事件的客戶機以及進程的id參數(shù),將這些參數(shù)傳給數(shù)據(jù)擦除模塊;
[0015](5)數(shù)據(jù)擦除模塊首先要判斷指定客戶機操作系統(tǒng)的類型和版本,為不同的操作系統(tǒng)類型及版本調(diào)用不同的數(shù)據(jù)擦除的接口,確定客戶機操作系統(tǒng)的類型和版本后,遍歷指定進程的數(shù)據(jù)區(qū),并進行擦除操作。概括來說,Windows系統(tǒng)使用EPROCESS、HEAP、PEB、HEAP_SEGMETN、HEAP_ENTRY五種數(shù)據(jù)結(jié)構(gòu)完成堆內(nèi)存的數(shù)據(jù)管理,利用虛擬機自省模塊提供的偏移量和接口依次訪問五種管理結(jié)構(gòu),遍歷內(nèi)存管理最底層HEAP_ENTRY管理結(jié)構(gòu),對每個HEAP_ENTRY結(jié)構(gòu)管理下的數(shù)據(jù)塊進行置I操作,實現(xiàn)該部分的數(shù)據(jù)擦除;在Windows系統(tǒng)中,當(dāng)程序執(zhí)行過程中申請的內(nèi)存塊大小超過規(guī)定的闕值的時候,Windows的內(nèi)存管理機制將這種情況下申請的堆內(nèi)存以鏈表的形式存放到HEAP結(jié)構(gòu)的VirtualAllocdBlocks元素指向的鏈表中,因此數(shù)據(jù)擦除的最后一步需要將該鏈表控制下的內(nèi)存區(qū)塊進行擦除操作。
[0016]本發(fā)明與現(xiàn)有技術(shù)相比具有以下的優(yōu)點:
[0017](I)避免了使用加密手段帶來的性能上的損失。當(dāng)前流行的公有云架構(gòu)中,大多數(shù)依然采用是分塊存儲保護用戶數(shù)據(jù)的隱私性,因為使用加解密的方法產(chǎn)生的性能損耗是十分巨大的。本發(fā)明的性能損耗只存在于客戶機內(nèi)運行的進程退出的時候,帶來的性能損失十分微小,特別是沒有進程退出的情況時對客戶機的運行沒有影響;
[0018](2)在虛擬化層添加用戶的訪問控制機制雖然能有效避免共享資源引起的敏感數(shù)據(jù)泄漏的問題,但不足之處在于對VMM內(nèi)核做了大量的修改,容易引入新的安全漏洞。而本發(fā)明僅針對客戶機發(fā)生進程退出的事件進行處理,對VMM內(nèi)核只做了作了少量的修改,不會給Xen平臺帶來新的安全威脅,同時保障用戶客戶機中內(nèi)存敏感數(shù)據(jù)的保密性;
[0019](3)本發(fā)明使用虛擬機自省技術(shù)完成內(nèi)存數(shù)據(jù)區(qū)域的擦除工作,對不同的操作系統(tǒng)都可以使用,因此該方法具有較強的可擴展性。
【專利附圖】
【附圖說明】
[0020]圖1為本發(fā)明系統(tǒng)架構(gòu)圖;
[0021]圖2為圖1中進程監(jiān)控模塊的實現(xiàn)流程圖;
[0022]圖3為圖1中控制模塊的實現(xiàn)流程圖;
[0023]圖4為圖1中數(shù)據(jù)擦除模塊的實現(xiàn)流程圖;
[0024]圖5為圖1中虛擬機自省模塊的功能實現(xiàn)圖。
【具體實施方式】
[0025]云環(huán)境中如何避免敏感數(shù)據(jù)的泄漏是云服務(wù)供應(yīng)商和用戶都非常關(guān)心的問題。本發(fā)明利用虛擬化技術(shù)實現(xiàn)了在客戶機中運行的進程退出時對進程的數(shù)據(jù)區(qū)進行擦除工作,從縮短敏感數(shù)據(jù)泄漏的時間窗口的角度減小用戶客戶機運行時敏感數(shù)據(jù)面臨的威脅。客戶機內(nèi)進程運行時內(nèi)存空間可以分為代碼區(qū)、全局?jǐn)?shù)據(jù)區(qū)、堆區(qū)和棧區(qū)。其中用戶的敏感數(shù)據(jù)可能以全局變量或靜態(tài)變量的形式存放在全局?jǐn)?shù)據(jù)區(qū),也可能以局部變量的形式存放在棧區(qū),同樣也可能以動態(tài)申請變量的形式處于堆區(qū),考慮到敏感數(shù)據(jù)(密鑰、密碼等)很少以靜態(tài)變量的形式硬編碼到程序中,以及棧區(qū)對同一區(qū)域頻繁的分配釋放操作且棧中保存著運行的函數(shù)上下文信息,對棧區(qū)進行擦除容易導(dǎo)致程序甚至系統(tǒng)崩潰的問題,本發(fā)明選擇對進程的堆區(qū)進行數(shù)據(jù)擦除;為了不影響進程的正常運行,本發(fā)明選擇在客戶機內(nèi)部進程退出時對進程地址空間的堆區(qū)進行數(shù)據(jù)擦除操作。
[0026]在詳細(xì)介紹各個模塊實現(xiàn)的功能和相互之間的關(guān)系之前,有必要對本發(fā)明用到的一些虛擬化相關(guān)的名詞術(shù)語做簡要的解釋。本發(fā)明基于Xen虛擬化架構(gòu),Xen是由劍橋大學(xué)開發(fā)的一款開源的虛擬機監(jiān)視器(Virtual Machine Monitor,簡稱VMM),是一個位于計算機硬件和操作系統(tǒng)間的軟件層,它運行在CPU的特權(quán)模式,管理和隔離上層運行的各個客戶機。管理域(DomO)是一個特權(quán)的客戶機,用來輔助Xen管理其它客戶機,并提供真實的設(shè)備驅(qū)動訪問物理硬件。本發(fā)明主要利用了 Xen提供的三種基本機制:超級調(diào)用、事件通道以及共享內(nèi)存,超級調(diào)用是Xen向控制域以及其它使用半虛擬化技術(shù)的客戶機提供的接口,類似于操作系統(tǒng)中的系統(tǒng)調(diào)用;事件通道是用于客戶機和Xen之間、使用半虛擬化技術(shù)的客戶機之間的異步事件通知機制,經(jīng)常與超級調(diào)用一起完成異步控制的功能。共享內(nèi)存允許客戶機與Xen內(nèi)核以及客戶機之間共享地址空間。硬件輔助虛擬化是Xen支持的一種虛擬化的形式,指是支持虛擬化的CPU帶有特別優(yōu)化過的指令集控制虛擬化過程以提高執(zhí)行效率。硬件輔助虛擬化引入了兩種專門針對虛擬化打造的運行模式,稱為根操作模式和非根操作模式,其中VMM內(nèi)核運行在根操作模式下,具有最高的執(zhí)行權(quán)限,客戶機運行在非根操作模式下,兩種模式間的相互切換的行為被稱作虛擬機退出(VM_EXIT)和虛擬機進入(VM_ENTRY)。虛擬機控制域(Virtual Machnie Controller Data Structure,簡稱為 VMCS)是用來控制虛擬CPU執(zhí)行在非根模式下的VM_EXIT和VM_ENTRY行為的數(shù)據(jù)結(jié)構(gòu),同時用來保存虛擬CPU調(diào)度或者根模式和非根模式間切換時的處理器上下文環(huán)境保存和恢復(fù)使用的數(shù)據(jù)。
[0027]如圖1所示,本發(fā)明基于虛擬化的數(shù)據(jù)擦除系統(tǒng)主要由四個基本模塊組成:分別是:控制模塊、進程監(jiān)控模塊、虛擬機自省模塊、和數(shù)據(jù)擦除模塊。控制模塊、虛擬機自省模塊和數(shù)據(jù)擦除模塊部署在管理域中,進程監(jiān)控模塊部署在VMM內(nèi)核中??刂颇K和進程監(jiān)控模塊存在控制和消息監(jiān)視的關(guān)系,控制模塊通過進程監(jiān)控模塊實現(xiàn)系統(tǒng)對某個客戶機進行監(jiān)視的功能,進程監(jiān)控模塊截獲客戶機中的進程退出的事件并把截獲的事件消息傳遞到控制模塊;控制模塊和數(shù)據(jù)擦除模塊存在調(diào)用和被調(diào)用關(guān)系,控制模塊接收到某客戶機進程退出事件的消息時調(diào)用數(shù)據(jù)擦除模塊中的數(shù)據(jù)擦除接口 ;虛擬機自省模塊為控制模塊與數(shù)據(jù)擦除模塊提供讀寫客戶機某進程地址空間的接口,并提供訪問不同類型的客戶機操作系統(tǒng)的內(nèi)部對象的接口。
[0028]進程監(jiān)控模塊部署在VMM內(nèi)核中,監(jiān)視客戶機內(nèi)進程退出的事件并將該事件發(fā)生的消息傳遞給控制模塊。VMM內(nèi)核對客戶機在非根環(huán)境下進程退出行為的截獲是通過設(shè)置VMCS的控制位和客戶機的調(diào)試寄存器實現(xiàn)的,VMCS中保存著客戶機CPU的上下文信息以及控制客戶機執(zhí)行過程的控制位,通過對控制位的設(shè)置能夠?qū)崿F(xiàn)對客戶機內(nèi)特定事件的截獲,本發(fā)明主要用到的是VMCS內(nèi)虛擬機退出域中的調(diào)試寄存器以及控制區(qū)域的客戶機執(zhí)行控制位。為了簡明起見,下面只對針對Windows系統(tǒng)進程監(jiān)控模塊的實現(xiàn)做具體的闡述:
[0029]如圖2所示,本發(fā)明中進程監(jiān)控模塊的具體實現(xiàn)如下:[0030](I)進程監(jiān)控模塊接收到控制模塊發(fā)起的超級調(diào)用,需要截獲某客戶機的進程退出事件并進行數(shù)據(jù)擦除操作,從超級調(diào)用的參數(shù)中獲得需要監(jiān)視的客戶機id以及客戶機操作系統(tǒng)中負(fù)責(zé)處理進程退出的系統(tǒng)調(diào)用,Windows操作系統(tǒng)系統(tǒng)中負(fù)責(zé)處理進程退出工作的系統(tǒng)調(diào)用為NtTerminateProcess ;
[0031](2)將NtTerminateProcess地址設(shè)置為執(zhí)行斷點。x86體系結(jié)構(gòu)提供了 8個調(diào)試寄存器,DRO?DR7,通過為設(shè)置DRO?DR3中的一個過多個需要關(guān)注的地址以及為DR7的對應(yīng)控制位能實現(xiàn)在CPU存取或執(zhí)行到所關(guān)注地址的時產(chǎn)生調(diào)試中斷,Xen也提供了客戶機運行時產(chǎn)生這種調(diào)試中斷的支持,為客戶機維護DRO?DR7虛擬調(diào)試寄存器。為客戶機選擇某虛擬調(diào)試寄存器DRn(DRO?DR3)將其地址設(shè)為NtTerminateProcess系統(tǒng)調(diào)用的地址,同時設(shè)置虛擬調(diào)試控制器DR7中DRn對應(yīng)的調(diào)試寄存器的控制位,從而將NtTerminateProcess地址設(shè)置為執(zhí)行斷點,這樣當(dāng)客戶機程序執(zhí)行到NtTerminateProcess函數(shù)體的時候會產(chǎn)生調(diào)試中斷;
[0032](3)設(shè)置客戶機虛擬CPU結(jié)構(gòu)中VMCS控制截獲調(diào)試中斷的相應(yīng)控制位,在Xen中為異常位圖區(qū)域的Trap_debug控制位,從而VMM內(nèi)核能夠截獲到客戶機產(chǎn)生的調(diào)試中斷;
[0033](4)客戶機程序因為調(diào)試中斷發(fā)生VM_EXIT時,判斷導(dǎo)致該調(diào)試中斷發(fā)生的地址是否為NtTerminatePiOcess系統(tǒng)調(diào)用的地址,當(dāng)兩者相同時,說明該客戶機某進程發(fā)生了進程退出事件,將該客戶機id以及進程id寫入控制模塊創(chuàng)建的參數(shù)空間,并激活事件通道以通知控制模塊有進程退出事件發(fā)生。
[0034]如圖3所示,控制模塊滿足云服務(wù)提供商或者客戶機用戶的隱私需求,為外部提供用戶接口,控制進程監(jiān)控模塊的行為,并通過調(diào)用數(shù)據(jù)擦除模塊的擦除函數(shù)實現(xiàn)數(shù)據(jù)擦除的功能。具體實現(xiàn)如下:
[0035](I)用戶接口被調(diào)用欲實現(xiàn)針對客戶機的監(jiān)視和擦除操作;
[0036](2)控制模塊調(diào)用虛擬機自省模塊中提供的接口獲得客戶機操作系統(tǒng)的類型和版本,并調(diào)用該類型和版本的操作系統(tǒng)對應(yīng)的接口得到該操作系統(tǒng)系統(tǒng)負(fù)責(zé)處理進程退出的系統(tǒng)調(diào)用的地址;
[0037](3)控制模塊為了監(jiān)視指定客戶機完成一些準(zhǔn)備性的工作。包括創(chuàng)建管理域與VMM內(nèi)核間的事件通道、使用共享內(nèi)存維護的參數(shù)空間,并將需要監(jiān)視的客戶機id以及客戶機操作系統(tǒng)中處理進程退出的系統(tǒng)調(diào)用地址作為參數(shù)向VMM內(nèi)核發(fā)起超級調(diào)用;
[0038](4)控制模塊開始監(jiān)視(3)中創(chuàng)建的事件通道是否被激活;
[0039](5)當(dāng)事件通道被激活時,表明監(jiān)視的客戶機發(fā)生了進程退出事件,控制模塊讀取
(3)中創(chuàng)建的參數(shù)空間中的客戶機id以及退出進程的id ;
[0040](6)控制模塊將客戶機id和退出進程id作為參數(shù),調(diào)用數(shù)據(jù)擦除模塊提供的接口,進行針對客戶機該進程內(nèi)存地址空間數(shù)據(jù)區(qū)的數(shù)據(jù)擦除操作。
[0041]數(shù)據(jù)擦除模塊提供某進程數(shù)據(jù)區(qū)域的擦除功能??蛻魴C安裝了不同類型的操作系統(tǒng),內(nèi)存管理機制和用于內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)不盡相同,本模塊可以提供針對不同操作系統(tǒng)版本進程數(shù)據(jù)空間進行數(shù)據(jù)擦除接口,下面以Windows的數(shù)據(jù)擦除功能的實現(xiàn)為例闡明該模塊的實現(xiàn)思路。
[0042]Windows 系統(tǒng)中通過 EPROCESS、PEB、HEAP、HEAP_SEGMETN、HEAP_ENTRY 五個數(shù)據(jù)結(jié)構(gòu)實現(xiàn)對進程堆內(nèi)存的管理,其中,EPROCESS作為執(zhí)行體進程塊,負(fù)責(zé)在內(nèi)核地址空間中維護進程的各種信息以及相關(guān)結(jié)構(gòu)的指針,PEB作為進程環(huán)境塊,位于用戶地址空間,存放進程相關(guān)的信息,HEAP、HEAP_SEGMENT、HEAP_ENTRY均為用戶地址空間用來管理堆空間的數(shù)據(jù)結(jié)構(gòu)。下面以如圖4所示,進一步詳細(xì)說明本發(fā)明所述方法中對堆區(qū)數(shù)據(jù)擦除的過程:
[0043](I)根據(jù)虛擬機自省模塊提供的接口獲得進程id對應(yīng)的EPROCESS數(shù)據(jù)結(jié)構(gòu)地址,在_PEB元素的偏移處讀取到PEB結(jié)構(gòu)的地址;
[0044](2)在PEB結(jié)構(gòu)中讀取堆的個數(shù)NumOfHeaps和存放該數(shù)量堆結(jié)構(gòu)指針數(shù)組的頭地址 ProcessHeaps ;
[0045](3)依次取ProcessHeaps指向的HEAP結(jié)構(gòu)地址數(shù)組的地址,執(zhí)行⑷步驟;
[0046](4)得到HEAP結(jié)構(gòu)的地址,在該結(jié)構(gòu)內(nèi)保存著HEAP_SEGMENT結(jié)構(gòu)地址的數(shù)組,對每一個HEAP_SEGMENT結(jié)構(gòu)執(zhí)行步驟(5);
[0047](5) HEAP_SEGMENT負(fù)責(zé)管理一些在內(nèi)存中連續(xù)存放的HEAP_ENTRY和數(shù)據(jù),每一段數(shù)據(jù)前都會存在HEAP_ENTRY這個管理結(jié)構(gòu)。HEAP_SEGMENT保存著(HEAP_ENTRY,數(shù)據(jù))為元素的內(nèi)存連續(xù)區(qū)域的第一個和最后一個元素的地址:FirstEntry和LastEntryInSegment。讀取這兩個地址,對每一個HEAP_ENTRY及其數(shù)據(jù)執(zhí)行步驟(6);
[0048](6)在HEAP_ENTRY開頭讀取數(shù)據(jù)段大小字段Size,對該數(shù)據(jù)段進行置I或者清O操作;
[0049](7)當(dāng)程序動態(tài)申請的內(nèi)存大小超過一定闕值的時候,這時候申請的堆內(nèi)存會以鏈表的形式保存在HEAP結(jié)構(gòu)的VirtualAllocdBlocks結(jié)構(gòu)中,因此最后對該部分的數(shù)據(jù)區(qū)進行置I或請0,從而完成進程擦除工作。
[0050]虛擬機自省模塊提供在管理域訪問不同客戶機操作系統(tǒng)指定進程地址空間的接口,并提供獲取客戶機操作系統(tǒng)內(nèi)部重要的對象的功能。因為系統(tǒng)中的控制模塊、數(shù)據(jù)擦除模塊都部署在客戶機的外部,無法直接使用客戶機操作系統(tǒng)提供的接口,只能獲得客戶機內(nèi)存、寄存器中的一些低層次的信息,而本發(fā)明中的控制模塊以及數(shù)據(jù)擦除模塊都需要客戶機內(nèi)存管理結(jié)構(gòu)等高層次的語義信息,因此便出現(xiàn)了語義斷層問題,系統(tǒng)中的虛擬機自省模塊即為了應(yīng)對這一問題而開發(fā)。
[0051 ] 如圖5所示,虛擬機自省模塊主要對外提供三種類型的接口,三者存在依賴的關(guān)系:設(shè)置客戶機系統(tǒng)的管理結(jié)構(gòu)地址以及關(guān)鍵屬性偏移量的接口,該接口主要是出于程序擴展性的考慮,通過該接口將數(shù)據(jù)擦除的功能擴展到各種類型的客戶機系統(tǒng);讀寫客戶機進程地址空間的接口,該接口將客戶機內(nèi)部的虛擬地址轉(zhuǎn)化為VMM可以讀取的機器地址,對外提供寫入讀取的功能;獲得關(guān)鍵管理結(jié)構(gòu)的地址和數(shù)據(jù)的接口主要封裝了一些其它模塊經(jīng)常使用的內(nèi)存管理數(shù)據(jù)結(jié)構(gòu)的功能,通過該接口可以方便地訪問一些常用的數(shù)據(jù)結(jié)構(gòu)。
[0052]本發(fā)明未詳細(xì)闡述部分屬于本領(lǐng)域公知技術(shù)。
[0053]顯然,本發(fā)明的上述實施例僅是為清楚地說明本發(fā)明所作的舉例,而并非是對本發(fā)明的實施方式的限定。對于所屬領(lǐng)域的普通技術(shù)人員來說,在上述說明的基礎(chǔ)上還可以做出其它不同形式的變化或變動。這里無法對所有的實施方式予以窮舉。凡是屬于本發(fā)明的技術(shù)方案所引伸出的顯而易見的變化或變動仍處于本發(fā)明的保護范圍之列。
【權(quán)利要求】
1.一種虛擬化環(huán)境中的數(shù)據(jù)擦除系統(tǒng),其特征在于所述系統(tǒng)采用Xen虛擬機架構(gòu),包括控制模塊、進程監(jiān)控模塊、虛擬機自省模塊和數(shù)據(jù)擦除模塊;所述控制模塊、虛擬機自省模塊和數(shù)據(jù)擦除模塊部署在管理域中,進程監(jiān)控模塊部署在虛擬機管理器,即VMM內(nèi)核中; 控制模塊:滿足云服務(wù)提供商或者客戶機用戶的隱私需求,提供與進程監(jiān)控模塊通信的功能,并通過調(diào)用數(shù)據(jù)擦除模塊的數(shù)據(jù)擦除部分實現(xiàn)數(shù)據(jù)擦除的功能;該模塊包括用戶接口部分、監(jiān)控準(zhǔn)備部分、消息監(jiān)聽部分、消息分析與傳遞部分;其中,用戶接口部分提供本系統(tǒng)對外的功能接口;監(jiān)控準(zhǔn)備部分為進程退出事件的監(jiān)控創(chuàng)建參數(shù)存儲與傳遞的空間,并建立起用于事件發(fā)生通知的事件通道;消息監(jiān)聽部分通過事件通道監(jiān)聽并接收進程監(jiān)控模塊發(fā)送給控制模塊的事件通知;消息分析與傳遞部分分析接收到的事件通知消息,在監(jiān)控準(zhǔn)備部分創(chuàng)建的參數(shù)空間中讀取客戶機id以及進程id,將這些參數(shù)傳遞給數(shù)據(jù)擦除模塊; 進程監(jiān)控模塊:對客戶機中進程退出事件進行監(jiān)視和處理,并把發(fā)生進程退出事件的客戶機id以及進程id傳遞給管理域中的控制模塊;進程監(jiān)控模塊由控制邏輯設(shè)定和事件處理兩部分構(gòu)成,其中控制邏輯設(shè)定部分通過對客戶機虛擬機控制域(Virtual MachineControlStructure,簡稱為VMCS)中調(diào)試寄存器以及相關(guān)控制位的設(shè)置,實現(xiàn)當(dāng)客戶機內(nèi)發(fā)生進程退出事件時引發(fā)處理 器異常產(chǎn)生虛擬機退出事件(VM_EXIT),該事件被VMM內(nèi)核截獲后調(diào)用事件處理部分;事件處理部分實現(xiàn)對管理域和VMM內(nèi)核參數(shù)空間的寫入以及與控制模塊的交互的功能,當(dāng)有進程退出事件發(fā)生時,事件處理部分將發(fā)生進程退出事件的客戶機id以及進程id信息寫入控制模塊創(chuàng)建的管理域與VMM內(nèi)核的參數(shù)空間中,使用事件通道告知控制模塊有進程退出事件發(fā)生; 虛擬機自省模塊:該模塊作為控制模塊和數(shù)據(jù)擦除模塊的輔助模塊存在,提供在管理域讀寫不同客戶機操作系統(tǒng)指定進程地址空間的接口,并提供訪問客戶機操作系統(tǒng)內(nèi)部重要對象的接口 ;該模塊包括操作系統(tǒng)識別部分、參數(shù)配置部分和數(shù)據(jù)存取部分;操作系統(tǒng)識別部分負(fù)責(zé)根據(jù)不同的操作系統(tǒng)在內(nèi)存中數(shù)據(jù)結(jié)構(gòu)的特點識別操作系統(tǒng)的類型和版本,數(shù)據(jù)存取部分實現(xiàn)在客戶機進程地址空間某地址讀取或?qū)懭霐?shù)據(jù),并為其它模塊提供數(shù)據(jù)存取的接口 ;參數(shù)配置部分定義不同類型的客戶機操作系統(tǒng)用于內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)在地址空間中的相對地址以及內(nèi)部關(guān)鍵屬性的偏移量; 數(shù)據(jù)擦除模塊:接收控制模塊傳遞過來的客戶機id以及退出進程id的參數(shù)信息并實現(xiàn)對客戶機內(nèi)某進程數(shù)據(jù)區(qū)域的數(shù)據(jù)擦除功能;該模塊包括消息解析部分,內(nèi)存數(shù)據(jù)區(qū)遍歷部分及數(shù)據(jù)擦除部分;其中消息解析部分通過控制模塊傳遞的參數(shù)信息獲得客戶機id以及進程的id,識別客戶機操作系統(tǒng)的類型以及版本號信息,調(diào)用對應(yīng)的內(nèi)存數(shù)據(jù)區(qū)遍歷函數(shù);內(nèi)存數(shù)據(jù)區(qū)遍歷部分讀取虛擬機自省模塊設(shè)置的客戶機操作系統(tǒng)內(nèi)存管理數(shù)據(jù)結(jié)構(gòu)的相對地址以及關(guān)鍵屬性的偏移量,訪問用于進行內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu),實現(xiàn)內(nèi)存數(shù)據(jù)區(qū)域的遍歷;數(shù)據(jù)擦除部分實現(xiàn)對給定的進程地址空間內(nèi)容的擦除功能。
2.一種虛擬化環(huán)境中的數(shù)據(jù)擦除系統(tǒng)實現(xiàn)數(shù)據(jù)擦除的方法,其特征包括客戶機操作系統(tǒng)進程退出事件截獲和客戶機進程內(nèi)存數(shù)據(jù)區(qū)域擦除方案的執(zhí)行,具體步驟如下: (I)云服務(wù)提供商管理員或用戶調(diào)用控制模塊的用戶接口部分,需要對某一客戶機進行監(jiān)視并進行數(shù)據(jù)擦除操作,用戶接口部分接受該請求將這一請求傳遞給監(jiān)控準(zhǔn)備部分,監(jiān)控準(zhǔn)備部分建立管理域和VMM內(nèi)核間的參數(shù)空間以及事件通道,為參數(shù)傳遞和事件通知做準(zhǔn)備;獲得客戶機操作系統(tǒng)中負(fù)責(zé)處理進程退出系統(tǒng)調(diào)用的地址,將該系統(tǒng)調(diào)用地址以及客戶機id作為參數(shù),使用Xen提供的超級調(diào)用機制把該請求傳遞給進程監(jiān)控模塊;同時,消息監(jiān)聽部分開始監(jiān)聽事件通道,監(jiān)視是否有進程監(jiān)控模塊傳來的發(fā)生進程退出事件的通知; (2)進程監(jiān)控模塊接收到管理域發(fā)起的超級調(diào)用,解析超級調(diào)用的參數(shù),確定目標(biāo)客戶機id以及客戶機操作系統(tǒng)負(fù)責(zé)處理進程退出的系統(tǒng)調(diào)用的地址;通過對客戶機內(nèi)調(diào)試寄存器的設(shè)置將該系統(tǒng)調(diào)用地址設(shè)置為執(zhí)行斷點,這樣當(dāng)客戶機中發(fā)生進程退出事件時,會產(chǎn)生調(diào)試中斷;為了使VMM內(nèi)核感知并能夠處理客戶機內(nèi)部產(chǎn)生的調(diào)試中斷,接下來需要對VMCS中攔截調(diào)試中斷的控制位進行設(shè)置,當(dāng)客戶機內(nèi)有進程退出時,會產(chǎn)生處理器異常,客戶機產(chǎn)生VM_EXIT將處理器的控制權(quán)交給VMM內(nèi)核; (3)VMM內(nèi)核接收到客戶機產(chǎn)生的VM_EXIT,進程監(jiān)控模塊的事件處理部分在VMCS中的虛擬機退出信息區(qū)域讀取VM_EXIT發(fā)生的原因,當(dāng)VM_EXIT是由于客戶機內(nèi)部發(fā)生了調(diào)試中斷而導(dǎo)致時,對比客戶機發(fā)生調(diào)試中斷的地址以及客戶機操作系統(tǒng)內(nèi)負(fù)責(zé)進程退出的系統(tǒng)調(diào)用的地址,如果兩者相同,說明該客戶機內(nèi)發(fā)生了進程退出事件;事件處理部分將客戶機id以及進程的id作為參數(shù)寫入步驟(1)創(chuàng)建的參數(shù)空間中,然后通過事件通道通知控制模塊有進程退出的事件發(fā)生; (4)控制模塊通過消息監(jiān)聽部分收到進程退出事件的通知后,從參數(shù)空間中讀取發(fā)生進程退出事件的客戶機以及進程的id參數(shù),將這些參數(shù)傳給數(shù)據(jù)擦除模塊; (5)數(shù)據(jù)擦除模塊首先要判斷指定客戶機操作系統(tǒng)的類型和版本,為不同的操作系統(tǒng)類型及版本調(diào)用不同的數(shù)據(jù)擦除的接口,確定客戶機操作系統(tǒng)的類型和版本后,遍歷指定進程的數(shù)據(jù)區(qū),并進行擦除操作;Windows系統(tǒng)使用EPROCESS、HEAP、PEB、HEAP_SEGMETN、HEAP_ENTRY五種數(shù)據(jù)結(jié)構(gòu)完成堆內(nèi)存的數(shù)據(jù)管理,利用虛擬機自省模塊提供的偏移量和接口依次訪問五種管理結(jié)構(gòu),遍歷內(nèi)存管理最底層HEAP_ENTRY管理結(jié)構(gòu),對每個HEAP_ENTRY結(jié)構(gòu)管理下的數(shù)據(jù)塊進行置I操作,實現(xiàn)該部分的數(shù)據(jù)擦除;在Windows系統(tǒng)中,當(dāng)程序執(zhí)行過程中申請的內(nèi)存塊大小超過規(guī)定的闕值的時候,Windows的內(nèi)存管理機制將這種情況下申請的堆內(nèi)存以鏈表的形式存放到HEAP結(jié)構(gòu)的VirtualAllocdBlocks元素指向的鏈表中,因此數(shù)據(jù)擦除的最后一步需要將該鏈表控制下的內(nèi)存區(qū)塊進行擦除操作。
【文檔編號】G06F21/60GK103996003SQ201410213759
【公開日】2014年8月20日 申請日期:2014年5月20日 優(yōu)先權(quán)日:2014年5月20日
【發(fā)明者】王亮, 李文龍 申請人:金航數(shù)碼科技有限責(zé)任公司