一種實現(xiàn)虛擬機與管理域進程間通信的方法
【技術領域】
[0001]本發(fā)明涉及虛擬機技術領域,尤其涉及一種實現(xiàn)虛擬機與管理域進程間通信的方法。
【背景技術】
[0002]在虛擬化技術中,虛擬化引擎在物理機上創(chuàng)建并運行多個虛擬機。根據(jù)虛擬化引擎架構的不同,通常將虛擬化引擎分為兩類:類型一(Type One)和類型二(Type Two)。其中類型一虛擬化引擎直接運行在硬件上,虛擬化引擎會創(chuàng)建一個特權虛擬機,該虛擬機對外提供整個虛擬化環(huán)境的操作接口并向虛擬化引擎發(fā)出相關指令;類型二虛擬化引擎需要運行在已有的操作系統(tǒng)上,不能直接運行在硬件上,這類虛擬化引擎在所依賴操作系統(tǒng)中以內核模塊或進程的方式存在,對這類虛擬化引擎的相關操作在其所依賴的操作系統(tǒng)中實現(xiàn)。本發(fā)明中的“管理域”是指類型一虛擬化中的特權虛擬機或類型二中虛擬化引擎依賴的操作系統(tǒng)。
[0003]隨著虛擬化和云計算技術的發(fā)展,虛擬機在IT系統(tǒng)中發(fā)揮著越來越重要的作用。同時,為了方便系統(tǒng)的管理等相關操作,需要在管理域和控制虛擬機之間建立進程間通信信道。
[0004]現(xiàn)有的虛擬化環(huán)境中,實現(xiàn)虛擬機和管理域進程間通信的方式主要有以下兩種:
1.網絡通信,既虛擬機與管理域進程間建立直接的網絡連接。這種通信方式與非虛擬化環(huán)境下的通信方式一致。該類通信方式要求管理域和虛擬機間有聯(lián)通網絡。但是在虛擬化環(huán)境下,考慮到安全等因素,在很多場景下管理域和虛擬機間的網絡是隔離的。同時,由于該通信方式需要使用網絡資源,會被現(xiàn)有的防火墻等設備攔截,同時很容易被運行在虛擬機或管理域上的程序發(fā)現(xiàn)。
[0005]2.設備通信,既利用加載在虛擬機中的虛擬設備實現(xiàn)通信。這類技術通常由虛擬化引擎給虛擬機添加一個虛擬設備。管理域直接操控該設備內部數(shù)據(jù),同時虛擬機中的進程與該設備進行通信,從而建立一個由管理域到虛擬機的間接的進程間通信機制。這種通信方式相比上一種方法不需要依賴網絡資源。但是由于這類通信方式需要在虛擬機中添加一個設備,這種操作也可以被其它安全軟件或是惡意軟件感知并攔截。同時,一些虛擬化引擎沒有對外提供虛擬機設備增添以及虛擬設備數(shù)據(jù)修改的接口,這使得該方法使用范圍受到很大限制。
【發(fā)明內容】
本發(fā)明針對現(xiàn)有技術的不足,提出一種實現(xiàn)虛擬機與管理域進程間通信的方法,該方法可以在沒有聯(lián)通網絡的情況下,實現(xiàn)安全軟件與惡意軟件無法感知或管控的虛擬機和管理域的進程間通信。
[0006]一種實現(xiàn)虛擬機與管理域進程間通信的方法,包括如下步驟:
a.獲取需要分析程序的符號信息; b.約定待通信進程名稱、通信使用協(xié)議、魔數(shù)以及標記位置;
C.為虛擬機中需要通信的進程開辟一段獨立內存空間,作為通信緩存區(qū);在所述獨立內存空間的標記位置寫入b步驟約定的魔數(shù),之后虛擬機輪詢通信緩存區(qū),根據(jù)約定通信協(xié)議讀寫所述通信緩存區(qū);
d.管理域進程利用虛擬化引擎或操作系統(tǒng)提供的程序接口獲取虛擬機內存和寄存器原始數(shù)據(jù);
e.管理域進程利用符號信息分析獲取的虛擬機內存和寄存器信息,從原始數(shù)據(jù)中提取出虛擬機操作系統(tǒng)或應用程序中變量的數(shù)值、結構體內容以及函數(shù)地址;
f.管理域進程在虛擬機語義信息中找到需要通信進程的信息的數(shù)據(jù)結構,保存所述數(shù)據(jù)結構,搜索所述數(shù)據(jù)結構,找到用于描述所述進程獨立內存空間信息的數(shù)據(jù)結構;
g.管理域進程根據(jù)f步驟中獲取的數(shù)據(jù)結構,搜索所述進程中每個獨立內存空間,檢查每個獨立內存空間內標記位置是否有魔數(shù);如果標記位置有魔數(shù),則判定所述獨立內存空間為通信緩存區(qū),利用所述通信緩存區(qū)和約定的通信協(xié)議讀寫數(shù)據(jù)。
[0007]進一步地,所述的步驟a中,所述符號信息是指可執(zhí)行文件中變量、結構體或函數(shù)與內存地址或可執(zhí)行文件偏移地址的對應關系。
[0008]進一步地,所述的步驟b中,所述通信使用協(xié)議為任意公開或私有的通信協(xié)議;所述魔數(shù)是指一個或多個事先定義好的數(shù)值,所述標記位置是指用于寫入和讀取魔數(shù)的位置,用于標記某一獨立內存空間是否為通信用緩存區(qū)。
[0009]進一步地,所述的步驟c中,在Windows操作系統(tǒng)中,所述每個獨立內存空間用一個VAD結構體標識,在Linux操作系統(tǒng)中,所述每個獨立內存空間用一個VMA結構體標識。所述結構體名稱隨著系統(tǒng)版本更迭發(fā)生變化。
[0010]進一步地,所述的步驟f中,在Windows操作系統(tǒng)中,所述數(shù)據(jù)結構為eprocess結構體中vadroot字段指向的結構體,在Linux操作系統(tǒng)中,所述數(shù)據(jù)結構為task_struct結構體中mm字段指向結構體;所述f步驟中獲取的進程信息數(shù)據(jù)結構是某個或某幾個進程的結構體,也可以是當前所有進程的結構體;如果是當前所有進程的結構體,則無需約定進程名稱。所述結構體名稱隨著系統(tǒng)版本更迭發(fā)生變化。
[0011 ] 進一步地,所述步驟a、所述步驟b、所述步驟c及所述步驟d四個步驟的順序在步驟e之前進行任意更換步驟順序。
[0012]本發(fā)明的有益效果在于:該發(fā)明是在管理域中直接獲取虛擬機中的內存和相關寄存器的數(shù)據(jù)并對這些數(shù)據(jù)進行分析,不要與虛擬機建立網絡連接,也不需要在虛擬機中進行任何操作;這使得本發(fā)明可以在沒有聯(lián)通網絡的情況下,實現(xiàn)安全軟件與惡意軟件無法感知或管控的虛擬機和管理域的進程間通信。
【附圖說明】
[0013]圖1是本發(fā)明實施例一的方法流程圖。
[0014]圖2是本發(fā)明的實施例二的方法流程圖。
【具體實施方式】
[0015]下面結合說明書附圖來說明本發(fā)明的【具體實施方式】。
[0016]實施例一
參照圖1,示出了根據(jù)本申請實施例一的一種實現(xiàn)虛擬機與管理域進程間通信的方法,管理域是指類型一虛擬化中的特權虛擬機,
包括如下步驟:
a.獲取需要分析程序的符號信息;
b.約定待通信進程名稱、通信使用協(xié)議、魔數(shù)以及標記位置;
c.為虛擬機中需要通信的進程開辟一段獨立內存空間,作為通信緩存區(qū);在所述獨立內存空間的標記位置寫入b步驟約定的魔數(shù),之后虛擬機輪詢通信緩存區(qū),根據(jù)約定通信協(xié)議讀寫該緩存區(qū);
d.管理域進程利用類型一虛擬化中的特權虛擬機獲取虛擬機內存和寄存器原始數(shù)據(jù);
e.管理域進程利用符號信息分析獲取的虛擬機內存和寄存器信息,從原始數(shù)據(jù)中提取出虛擬機操作系統(tǒng)或應用程序中變量的數(shù)值、結構體內容以及函數(shù)地址;
f.管理域進程在虛擬機語義信息中找到保存需要通信進程信息的數(shù)據(jù)結構,搜索所述數(shù)據(jù)結構,找到用于描述所述進程獨立內存空間信息的數(shù)據(jù)結構;
g.管理域進程根據(jù)f步驟中獲取的數(shù)據(jù)結構,搜索所述進程中每個獨立內存空間,檢查每個獨立內存空間內標記位置是否有魔數(shù);如果標記位置有魔數(shù),則判定所述獨立內存空間為通信緩存區(qū),利用該緩存區(qū)和約定的通信協(xié)議讀寫數(shù)據(jù)。
[0017]進一步地,所述的步驟a中,所述符號信息是指可執(zhí)行文件中變量、結構體或函數(shù)與內存地址或可執(zhí)行文件偏移地址的對應關系。
[0018]進一步地,所述的步驟b中,所述通信使用協(xié)議為任意公開或私有的通信協(xié)議;所述魔數(shù)是指一個或多個事先定義好的數(shù)值,所述標記位置是指用于寫入和讀取魔數(shù)的位置,用于標記某一獨立內存空間是否為通信用緩存區(qū)。
[0019]進一步地,所述的步驟c中,在Windows操作系統(tǒng)中,所述每個獨立內存空間用一個VAD結構體標識,在Linux操作系統(tǒng)中,所述每個獨立內存空間用一個VMA結構體標識。所述結構體名稱隨著系統(tǒng)版本更迭發(fā)生變