本發(fā)明涉及虛擬機(jī)安全監(jiān)控技術(shù)領(lǐng)域,具體涉及一種虛擬機(jī)進(jìn)程代碼的無代理分頁(yè)式度量系統(tǒng)和方法。
背景技術(shù):
虛擬化技術(shù)是云計(jì)算平臺(tái)的核心技術(shù)之一,隨著云計(jì)算服務(wù)的大量應(yīng)用,云計(jì)算平臺(tái)中的安全成為關(guān)注焦點(diǎn)。一般情況下,部署在云上的關(guān)鍵業(yè)務(wù)需要長(zhǎng)時(shí)間運(yùn)行,為用戶提供服務(wù),而業(yè)務(wù)的安全性、穩(wěn)定性和可用性則是保證服務(wù)質(zhì)量的關(guān)鍵需求。一方面,虛擬機(jī)操作系統(tǒng)作為關(guān)鍵業(yè)務(wù)的載體,存在不同程度的安全缺陷,如系統(tǒng)配置、代碼漏洞等;另一方面,關(guān)鍵業(yè)務(wù)自身代碼也存在漏洞等。惡意軟件可以利用操作系統(tǒng)和業(yè)務(wù)系統(tǒng)的漏洞修改關(guān)鍵業(yè)務(wù)代碼,以偽裝自身存在、竊取敏感數(shù)據(jù)等,嚴(yán)重威脅關(guān)鍵業(yè)務(wù)的穩(wěn)定運(yùn)行。因此,盡早發(fā)現(xiàn)針對(duì)關(guān)鍵業(yè)務(wù)的篡改,有必要對(duì)虛擬機(jī)進(jìn)程代碼完整性進(jìn)度量。
現(xiàn)代操作系統(tǒng)一般采用分頁(yè)機(jī)制實(shí)現(xiàn)內(nèi)存管理,為用戶態(tài)進(jìn)程分配連續(xù)的邏輯地址空間,但以物理頁(yè)為單位,采用按需分配的方式動(dòng)態(tài)分配物理內(nèi)存,只加載需要立即訪問的代碼或數(shù)據(jù)。完整性驗(yàn)證流程一般包括度量和驗(yàn)證兩個(gè)部分:度量部分負(fù)責(zé)收集系統(tǒng)內(nèi)部信息并發(fā)送到驗(yàn)證部分;驗(yàn)證部分負(fù)責(zé)保存原始基值,并與接收的度量信息進(jìn)行比較以驗(yàn)證完整性。在云環(huán)境下針對(duì)虛擬機(jī)系統(tǒng)進(jìn)行度量的方法中,根據(jù)度量部分的部署位置,可以分為兩類:一類是將度量部分部署在虛擬機(jī)中;另一類是將度量部分部署在Hypervisor中。
第一類方法可以獲取豐富的虛擬機(jī)系統(tǒng)信息,但存在缺陷:1)依賴目標(biāo)虛擬機(jī)版本,通用性不強(qiáng);2)易受虛擬機(jī)內(nèi)部惡意軟件的攻擊,需要Hypervisor提供額外的防護(hù)措施,增加了系統(tǒng)的復(fù)雜性。第二類方法利用Hypervisor具有的高特權(quán)級(jí)和隔離性,避免度量部分受到來自虛擬機(jī)的惡意攻擊,但同時(shí)也面臨挑戰(zhàn):虛擬機(jī)為內(nèi)部進(jìn)程動(dòng)態(tài)分配物理內(nèi)存并加載代碼或數(shù)據(jù),處于Hypervisor的度量部分難以完整地獲取虛擬機(jī)進(jìn)程代碼或數(shù)據(jù)并對(duì)其進(jìn)行完整性驗(yàn)證。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述問題,本發(fā)明的目的在于提供一種能夠?qū)μ摂M機(jī)進(jìn)程完整性進(jìn)行度量的虛擬機(jī)進(jìn)程代碼的無代理分頁(yè)式度量系統(tǒng)和方法,以解決虛擬機(jī)動(dòng)態(tài)分配內(nèi)存方式導(dǎo)致Hypervisor無法度量完整虛擬機(jī)進(jìn)程代碼段的問題。技術(shù)方案如下:
一種虛擬機(jī)進(jìn)程代碼的無代理分頁(yè)式度量系統(tǒng),包括捕獲模塊、度量模塊、基值庫(kù)、對(duì)比模塊和日志;
捕獲模塊在Hypervisor層設(shè)置度量點(diǎn),捕獲虛擬機(jī)中發(fā)生的系統(tǒng)事件;捕獲到系統(tǒng)事件后,采用VMI(Virtual Machine Introspection虛擬機(jī)內(nèi)?。┘夹g(shù)進(jìn)行語義重構(gòu),獲取虛擬機(jī)當(dāng)前執(zhí)行進(jìn)程的進(jìn)程信息,并將進(jìn)程信息傳遞到度量模塊;
度量模塊接收捕獲模塊傳遞的虛擬機(jī)進(jìn)程信息,以虛擬機(jī)物理頁(yè)大小為單位,將虛擬機(jī)進(jìn)程代碼段劃分為多個(gè)代碼頁(yè),生成每個(gè)代碼頁(yè)的頁(yè)信息;根據(jù)頁(yè)信息,判斷代碼頁(yè)是否被加載進(jìn)入虛擬機(jī)物理內(nèi)存中:若被加載入虛擬機(jī)物理內(nèi)存中,則度量此代碼頁(yè),生成代碼頁(yè)度量信息;若未被加載入虛擬機(jī)物理內(nèi)存中,則忽略此代碼頁(yè)的度量;并將生成代碼頁(yè)度量信息傳遞到對(duì)比模塊;
基值庫(kù)為存儲(chǔ)所有的虛擬機(jī)進(jìn)程代碼頁(yè)的度量基值信息的列表;
對(duì)比模塊接收度量模塊傳遞的度量信息,讀取基值庫(kù)中的基值信息;將度量信息與基值信息進(jìn)行對(duì)比,并將對(duì)比信息寫入日志中;
日志用于接收并記錄度量對(duì)比傳送的對(duì)比信息。
進(jìn)一步的,所述度量點(diǎn)為觸發(fā)Hypervisor層度量過程的虛擬機(jī)系統(tǒng)事件。
更進(jìn)一步的,所述系統(tǒng)事件為虛擬機(jī)系統(tǒng)中引發(fā)虛擬機(jī)退出事件的系統(tǒng)行為,包括但不限于進(jìn)程系統(tǒng)調(diào)用、進(jìn)程切換、缺頁(yè)異常。
更進(jìn)一步的,所述進(jìn)程信息為Hypervisor度量虛擬機(jī)進(jìn)程代碼所需的基本信息,包括但不限于虛擬機(jī)進(jìn)程名稱、虛擬機(jī)進(jìn)程代碼起始地址、虛擬機(jī)進(jìn)程代碼長(zhǎng)度;所述虛擬機(jī)進(jìn)程代碼起始地址是被度量虛擬機(jī)進(jìn)程代碼的虛擬地址。
更進(jìn)一步的,所述頁(yè)信息為Hypervisor度量虛擬機(jī)進(jìn)程代碼頁(yè)所需的基本信息,包括但不限于虛擬機(jī)進(jìn)程名稱、頁(yè)編號(hào)、頁(yè)起始地址和頁(yè)長(zhǎng)度;所述頁(yè)起始地址是虛擬機(jī)進(jìn)程代碼頁(yè)的虛擬地址。
更進(jìn)一步的,所述度量信息為對(duì)比模塊執(zhí)行對(duì)比過程所需的基本信息,包括但不限于虛擬機(jī)進(jìn)程名稱、代碼頁(yè)編號(hào)、代碼頁(yè)度量值和代碼頁(yè)長(zhǎng)度。
更進(jìn)一步的,所述基值信息為代碼頁(yè)在正常狀態(tài)下的可信度量信息,可信度量信息包括但不限于進(jìn)程名、代碼頁(yè)編號(hào)和代碼頁(yè)度量值。
更進(jìn)一步的,所述對(duì)比信息為虛擬機(jī)進(jìn)程代碼頁(yè)度量值與虛擬機(jī)進(jìn)程代碼頁(yè)基值信息的對(duì)比結(jié)果,包括但不限于進(jìn)程名、代碼頁(yè)編號(hào)、度量值、基值、對(duì)比結(jié)果、對(duì)比時(shí)間。
一種虛擬機(jī)進(jìn)程代碼的無代理分頁(yè)式度量方法,包括以下步驟:
A:在虛擬機(jī)運(yùn)行過程中,進(jìn)程通過系統(tǒng)調(diào)用陷入指令訪問內(nèi)核系統(tǒng)調(diào)用處理程序;
B:虛擬機(jī)在調(diào)用系統(tǒng)調(diào)用陷入指令訪問內(nèi)核系統(tǒng)調(diào)用處理程序時(shí),產(chǎn)生虛擬機(jī)退出事件;
C:捕獲模塊捕獲虛擬機(jī)中產(chǎn)生的虛擬機(jī)退出事件,并通過VMI技術(shù)重構(gòu)虛擬機(jī)進(jìn)程語義信息,再傳遞到度量模塊;
D:度量模塊接收到虛擬機(jī)進(jìn)程信息后,根據(jù)虛擬機(jī)進(jìn)程代碼起始地址和虛擬機(jī)進(jìn)程代碼長(zhǎng)度,以虛擬機(jī)物理頁(yè)大小劃分多個(gè)代碼頁(yè),并生成頁(yè)信息;再根據(jù)頁(yè)信息中的虛擬機(jī)進(jìn)程代碼頁(yè)編號(hào)和虛擬機(jī)進(jìn)程代碼頁(yè)起始地址,訪問虛擬機(jī)物理內(nèi)存判斷代碼頁(yè)是否被加載;若被加載,則對(duì)代碼頁(yè)進(jìn)行度量,生成度量信息傳遞到對(duì)比模塊;若未被加載,則忽略此代碼頁(yè)的度量過程;
E:對(duì)比模塊對(duì)比接收到的度量信息和從基值庫(kù)中讀取的基值信息,并將對(duì)比信息傳遞到日志中;恢復(fù)虛擬機(jī)系統(tǒng)調(diào)用處理程序的執(zhí)行;
F:系統(tǒng)調(diào)用處理程序在虛擬機(jī)內(nèi)核中按照正常流程繼續(xù)執(zhí)行,執(zhí)行完畢后調(diào)用系統(tǒng)調(diào)用退出指令恢復(fù)進(jìn)程的正常運(yùn)行。
本發(fā)明的有益效果是:
(1)本發(fā)明將虛擬機(jī)進(jìn)程代碼劃分為多個(gè)頁(yè),并對(duì)被加載進(jìn)入虛擬機(jī)內(nèi)存的代碼頁(yè)進(jìn)行度量,解決了虛擬機(jī)動(dòng)態(tài)分配內(nèi)存方式導(dǎo)致Hypervisor無法度量完整虛擬機(jī)進(jìn)程代碼的問題;
(2)本發(fā)明將度量流程部署在Hypervisor層,采用無代理的方式透明、動(dòng)態(tài)地度量虛擬機(jī)進(jìn)程代碼,無需修改虛擬機(jī)內(nèi)核;同時(shí),度量流程位于虛擬機(jī)之外,避免了虛擬機(jī)內(nèi)部惡意軟件的攻擊,提升了安全性;
(3)本發(fā)明采用的度量方式,可以用于度量虛擬機(jī)其他信息,包括但不限于虛擬機(jī)內(nèi)核靜態(tài)數(shù)據(jù)、虛擬機(jī)進(jìn)程靜態(tài)數(shù)據(jù)等。
附圖說明
圖1為本發(fā)明非代理虛擬機(jī)進(jìn)程系統(tǒng)調(diào)用行為監(jiān)控方法框圖。
圖2為本發(fā)明透明捕獲虛擬機(jī)系統(tǒng)調(diào)用流程圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步地詳細(xì)描述。本系統(tǒng)的實(shí)現(xiàn)原理如下:
在Hypervisor層設(shè)置度量點(diǎn),攔截虛擬機(jī)進(jìn)程引發(fā)的系統(tǒng)事件,利用VMI技術(shù)讀取虛擬機(jī)進(jìn)程信息。根據(jù)讀取的虛擬機(jī)進(jìn)程信息,以虛擬機(jī)物理頁(yè)為單位,將虛擬機(jī)進(jìn)程代碼劃分為多個(gè)代碼頁(yè),確定每個(gè)代碼頁(yè)的編號(hào)和起始地址。在Hypervisor層根據(jù)每個(gè)代碼頁(yè)的起始地址,判斷每個(gè)代碼頁(yè)是否被加載進(jìn)入虛擬機(jī)物理內(nèi)存中;若代碼頁(yè)被加載進(jìn)入虛擬機(jī)物理內(nèi)存中,則在Hypervisor層度量此代碼頁(yè);若未被加載進(jìn)入虛擬機(jī)物理內(nèi)存中,則忽略對(duì)此代碼頁(yè)的度量。根據(jù)進(jìn)程信息、代碼頁(yè)編號(hào)和度量值,讀取基值庫(kù)中相應(yīng)的基值并進(jìn)行對(duì)比,驗(yàn)證每個(gè)代碼頁(yè)的完整性,并記錄到日志中。
如圖1所示,本實(shí)施例的虛擬機(jī)進(jìn)程代碼的無代理分頁(yè)式度量系統(tǒng)包括捕獲模塊、度量模塊、基值庫(kù)、對(duì)比模塊和日志。
1)捕獲模塊在Hypervisor層設(shè)置度量點(diǎn),捕獲虛擬機(jī)中發(fā)生的系統(tǒng)事件;捕獲到系統(tǒng)事件后,采用VMI技術(shù)進(jìn)行語義重構(gòu),獲取虛擬機(jī)當(dāng)前執(zhí)行進(jìn)程的進(jìn)程信息,并將進(jìn)程信息傳遞到度量模塊。
本實(shí)施例中,度量點(diǎn)為觸發(fā)Hypervisor層度量過程的虛擬機(jī)系統(tǒng)事件。系統(tǒng)事件為虛擬機(jī)系統(tǒng)中引發(fā)虛擬機(jī)退出事件的進(jìn)程行為,包括但不限于進(jìn)程系統(tǒng)調(diào)用、進(jìn)程切換、缺頁(yè)異常等。
所述進(jìn)程信息是Hypervisor度量虛擬機(jī)進(jìn)程代碼所需的基本信息,包括但不限于虛擬機(jī)進(jìn)程名稱、虛擬機(jī)進(jìn)程代碼起始地址、虛擬機(jī)進(jìn)程代碼長(zhǎng)度等。其中,虛擬機(jī)進(jìn)程代碼起始地址是被度量虛擬機(jī)進(jìn)程代碼的虛擬地址。
可采用如下方式定義進(jìn)程信息:
name address size
該信息表明,虛擬機(jī)進(jìn)程名稱為name,虛擬機(jī)進(jìn)程代碼段的起始地址為address,虛擬機(jī)代碼段的長(zhǎng)度為size。
2)度量模塊接收捕獲模塊傳遞的虛擬機(jī)進(jìn)程信息,以虛擬機(jī)物理頁(yè)大小為單位,將虛擬機(jī)進(jìn)程代碼劃分為多個(gè)代碼頁(yè),生成每個(gè)代碼頁(yè)的頁(yè)信息;根據(jù)頁(yè)信息,判斷代碼頁(yè)是否被加載進(jìn)入虛擬機(jī)物理內(nèi)存中:若被加載入虛擬機(jī)物理內(nèi)存中,則度量此代碼頁(yè),生成代碼頁(yè)度量信息;若未被加載入虛擬機(jī)物理內(nèi)存中,則忽略此代碼頁(yè)的度量;并將生成代碼頁(yè)度量信息傳遞到對(duì)比模塊。
所述頁(yè)信息是Hypervisor度量虛擬機(jī)進(jìn)程代碼頁(yè)所需的基本信息集合,包括但不限于虛擬機(jī)進(jìn)程名稱、頁(yè)編號(hào)、頁(yè)起始地址和頁(yè)長(zhǎng)度等。其中,頁(yè)起始地址是虛擬機(jī)進(jìn)程代碼頁(yè)的虛擬地址。
可采用如下方式定義頁(yè)信息:
name number page_address page_size
該信息表明,虛擬機(jī)進(jìn)程名稱為name,虛擬機(jī)進(jìn)程代碼頁(yè)的編號(hào)為number,虛擬機(jī)進(jìn)程代碼頁(yè)的起始地址為page_address,虛擬機(jī)進(jìn)程代碼頁(yè)的長(zhǎng)度為page_size。
所述度量信息是對(duì)比模塊執(zhí)行對(duì)比過程所需的基本信息集合,包括但不限于虛擬機(jī)進(jìn)程名稱、代碼頁(yè)編號(hào)、代碼頁(yè)度量值和代碼頁(yè)度量長(zhǎng)度等。
可采用如下方式定義度量信息:
name number hash(value) page_size
該信息表明,虛擬機(jī)進(jìn)程名稱為name,虛擬機(jī)進(jìn)程代碼頁(yè)的編號(hào)為number,虛擬機(jī)進(jìn)程代碼頁(yè)的度量值為hash(value),虛擬機(jī)進(jìn)程代碼頁(yè)的長(zhǎng)度為page_size。
3)基值庫(kù)為存儲(chǔ)所有的虛擬機(jī)進(jìn)程代碼頁(yè)的度量基值信息的列表。基值庫(kù)包括但不限于文件、數(shù)據(jù)庫(kù)等形式存在,基值信息的獲取方式包括在純凈操作系統(tǒng)中,對(duì)正常狀態(tài)下的進(jìn)程代碼段進(jìn)行分頁(yè)式度量。
所述基值信息為代碼頁(yè)在正常狀態(tài)下的可信度量信息,可信度量信息包括但不限于進(jìn)程名、代碼頁(yè)編號(hào)和代碼頁(yè)度量值等。
4)對(duì)比模塊接收度量模塊傳遞的度量信息,讀取基值庫(kù)中的基值信息;將度量信息與基值信息進(jìn)行對(duì)比,并將對(duì)比信息寫入日志中。
5)日志用于接收并記錄對(duì)比模塊傳送的對(duì)比信息。
所述對(duì)比信息是虛擬機(jī)進(jìn)程代碼頁(yè)度量值與虛擬機(jī)進(jìn)程代碼頁(yè)基值信息的對(duì)比結(jié)果,包括但不限于進(jìn)程名、代碼頁(yè)編號(hào)、度量值、基值、對(duì)比結(jié)果、對(duì)比時(shí)間等。
可采用如下方式定義對(duì)比信息:
name number hash(value) baseline result time
該信息表明,虛擬機(jī)進(jìn)程名稱為name,虛擬機(jī)進(jìn)程代碼頁(yè)的編號(hào)為number,虛擬機(jī)進(jìn)程代碼頁(yè)的度量值為hash(value),虛擬機(jī)進(jìn)程代碼頁(yè)的基值為baseline,對(duì)比結(jié)果為result,對(duì)比時(shí)間為time。
各模塊間的數(shù)據(jù)流轉(zhuǎn)如下:
1)在虛擬機(jī)啟動(dòng)前,捕獲模塊在Hypervisor設(shè)置度量點(diǎn);在虛擬機(jī)運(yùn)行過程中,攔截設(shè)置模塊捕獲虛擬機(jī)中發(fā)生的系統(tǒng)事件,利用VMI讀取虛擬機(jī)當(dāng)前執(zhí)行進(jìn)程的進(jìn)程信息,并傳遞到度量模塊中。
2)度量模塊接收捕獲模塊傳遞的進(jìn)程信息;根據(jù)進(jìn)程信息中的虛擬機(jī)進(jìn)程名稱、虛擬機(jī)代碼段起始地址和虛擬機(jī)代碼段長(zhǎng)度信息,按虛擬機(jī)物理頁(yè)大小進(jìn)行分頁(yè)操作,并生成頁(yè)信息;根據(jù)頁(yè)信息中的虛擬機(jī)代碼頁(yè)編號(hào)和虛擬機(jī)代碼頁(yè)起始地址,分別判定代碼頁(yè)是否被加載進(jìn)入虛擬機(jī)物理內(nèi)存中:若被加載,則讀取代碼頁(yè)并進(jìn)行度量,生成代碼頁(yè)度量信息;若未被加載,則忽略此頁(yè)的度量過程;將生成的代碼頁(yè)度量信息傳遞到對(duì)比模塊。
3)基值庫(kù)為對(duì)比模塊提供虛擬機(jī)進(jìn)程代碼頁(yè)的基值信息。
4)對(duì)比模塊接收度量模塊傳遞的度量信息;根據(jù)度量信息中的虛擬機(jī)進(jìn)程名稱和虛擬機(jī)進(jìn)程代碼頁(yè)編號(hào),基值庫(kù)中索引對(duì)應(yīng)的基值信息;根據(jù)度量信息中的虛擬機(jī)進(jìn)程代碼頁(yè)度量值與基值進(jìn)行對(duì)比;將對(duì)比信息結(jié)果寫入日志。
5)日志接收對(duì)比模塊傳遞的對(duì)比信息。
基于上述度量系統(tǒng),本實(shí)施例公開的虛擬機(jī)進(jìn)程代碼的分頁(yè)式度量方法如圖2的流程圖所示,步驟如下:
A:在虛擬機(jī)運(yùn)行過程中,進(jìn)程通過系統(tǒng)調(diào)用陷入指令訪問內(nèi)核系統(tǒng)調(diào)用處理程序;
B:虛擬機(jī)在調(diào)用系統(tǒng)調(diào)用陷入指令訪問內(nèi)核系統(tǒng)調(diào)用處理程序時(shí),產(chǎn)生虛擬機(jī)退出事件;
C:捕獲模塊捕獲虛擬機(jī)中產(chǎn)生的虛擬機(jī)退出事件,并通過VMI技術(shù)重構(gòu)虛擬機(jī)進(jìn)程語義信息,再傳遞到度量模塊;
D:度量模塊接收到虛擬機(jī)進(jìn)程信息后,根據(jù)虛擬機(jī)進(jìn)程代碼起始地址和虛擬機(jī)進(jìn)程代碼長(zhǎng)度,以虛擬機(jī)物理頁(yè)大小劃分多個(gè)代碼頁(yè),并生成頁(yè)信息;再根據(jù)頁(yè)信息中的虛擬機(jī)進(jìn)程代碼頁(yè)編號(hào)和虛擬機(jī)進(jìn)程代碼頁(yè)起始地址,訪問虛擬機(jī)物理內(nèi)存判斷代碼頁(yè)是否被加載;若被加載,則對(duì)代碼頁(yè)進(jìn)行度量,生成度量信息傳遞到對(duì)比模塊;若未被加載,則忽略此代碼頁(yè)的度量過程;
E:對(duì)比模塊對(duì)比接收到的度量信息和從基值庫(kù)中讀取的基值信息,并將對(duì)比信息傳遞到日志中;恢復(fù)虛擬機(jī)系統(tǒng)調(diào)用處理程序的執(zhí)行;
F:系統(tǒng)調(diào)用處理程序在虛擬機(jī)內(nèi)核中按照正常流程繼續(xù)執(zhí)行,執(zhí)行完畢后調(diào)用系統(tǒng)調(diào)用退出指令恢復(fù)進(jìn)程的正常運(yùn)行。