用于基于容器的虛擬化系統(tǒng)的操作捕獲方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請涉及計算機技術(shù)領(lǐng)域,具體涉及計算機安全技術(shù)領(lǐng)域,尤其涉及用于基于容器的虛擬化系統(tǒng)的操作捕獲方法、安全控制方法和裝置。
【背景技術(shù)】
[0002]虛擬化,是指通過虛擬化技術(shù)將一臺計算機(物理機)虛擬為多臺邏輯計算機(虛擬機)。在一臺計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統(tǒng),并且應(yīng)用程序都可以在相互獨立的空間內(nèi)運行而互不影響,從而顯著提高計算機的工作效率。目前,基于容器(Container-Based)的虛擬化技術(shù)是應(yīng)用最多的虛擬化技術(shù)之一,其可以提供輕量級的虛擬化,以便隔離進程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他復(fù)雜處理?;谌萜鞯奶摂M化系統(tǒng)即為通過基于容器的虛擬化技術(shù)創(chuàng)建的包括容器和宿主機的虛擬化環(huán)境。容器(Container)有效地將由單個操作系統(tǒng)管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求。與傳統(tǒng)虛擬化技術(shù)相比,基于容器的虛擬化技術(shù)的優(yōu)勢在于:與宿主機使用同一個內(nèi)核,性能損耗小,并且不需要指令級模擬。
[0003]然而,在基于容器的虛擬化系統(tǒng)中,由于容器可以直接訪問宿主的內(nèi)核,容器中的進程可以很容易攻破宿主機內(nèi)核并拿到宿主機控制權(quán),從而威脅到整個宿主機以及其他容器的安全。為了保證基于容器的虛擬化系統(tǒng)的安全,需要對容器中的進程訪問宿主機內(nèi)核的操作進行捕獲,并對捕獲到的操作進行相應(yīng)的處理,而目前還沒有方法實現(xiàn)對容器中的進程訪問宿主機內(nèi)核的操作的捕獲。
【發(fā)明內(nèi)容】
[0004]本申請的目的在于提出一種用于基于容器的虛擬化系統(tǒng)的操作捕獲方法、安全控制方法和裝置,來解決以上【背景技術(shù)】部分提到的技術(shù)問題。
[0005]第一方面,本申請?zhí)峁┝艘环N用于基于容器的虛擬化系統(tǒng)的操作捕獲方法,所述方法包括:在用戶態(tài)監(jiān)測基于容器的虛擬化系統(tǒng)中的容器中的進程啟動的操作;如果監(jiān)測到所述進程啟動的操作,則在內(nèi)核態(tài)執(zhí)行對信號處理操作進行捕獲的步驟,所述對信號處理操作進行捕獲的步驟包括:確定所述進程中是否存在未處理的信號;如果存在所述信號,則將所述信號所指示的執(zhí)行指令跳轉(zhuǎn)到自定義的第一函數(shù)的入口地址,并將所述信號的信號編號傳給所述第一函數(shù);如果所述第一函數(shù)被調(diào)用,則捕獲到調(diào)用時傳入的信號編號對應(yīng)的信號處理操作。
[0006]第二方面,本申請?zhí)峁┝艘环N用于基于容器的虛擬化系統(tǒng)的安全控制方法,所述方法包括:通過第一方面所述的方法,捕獲基于容器的虛擬化系統(tǒng)中的容器中的進程的訪問內(nèi)核的操作,所述訪問內(nèi)核的操作為信號處理操作或系統(tǒng)調(diào)用操作;如果捕獲到的所述操作是信號處理操作,則獲取所述信號處理操作對應(yīng)的信號編號;將所述信號編號對應(yīng)的信號所指示的執(zhí)行指令切換到中央處理器的特權(quán)級別Ring3下運行。
[0007]第三方面,本申請?zhí)峁┝艘环N用于基于容器的虛擬化系統(tǒng)的操作捕獲裝置,所述裝置包括:進程啟動監(jiān)測單元,用于在用戶態(tài)監(jiān)測基于容器的虛擬化系統(tǒng)中的容器中的進程啟動的操作;信號處理捕獲單元,用于在進程啟動監(jiān)測單元監(jiān)測到所述進程啟動的操作時,在內(nèi)核態(tài)執(zhí)行對信號處理操作進行捕獲的步驟,所述信號處理捕獲單元包括:信號檢測子單元,用于確定所述進程中是否存在未處理的信號;執(zhí)行指令跳轉(zhuǎn)子單元,用于在存在所述信號時,將所述信號所指示的執(zhí)行指令跳轉(zhuǎn)到自定義的第一函數(shù)的入口地址,并將所述信號的信號編號傳給所述第一函數(shù);信號處理捕獲子單元,用于在所述第一函數(shù)被調(diào)用時,捕獲到調(diào)用時傳入的信號編號對應(yīng)的信號處理操作。
[0008]第四方面,本申請?zhí)峁┝擞糜诨谌萜鞯奶摂M化系統(tǒng)的安全控制裝置,所述裝置包括:操作捕獲單元,用于通過第一方面所述的方法,捕獲基于容器的虛擬化系統(tǒng)中的容器中的進程的訪問內(nèi)核的操作,所述訪問內(nèi)核的操作為信號處理操作或系統(tǒng)調(diào)用操作;信號編號獲取單元,用于在捕獲到的所述操作是信號處理操作時,獲取所述信號處理操作對應(yīng)的信號編號;特權(quán)級別切換單元,用于將所述信號編號對應(yīng)的信號所指示的執(zhí)行指令切換到中央處理器的特權(quán)級別Ring3下運行。
[0009]本申請?zhí)峁┑挠糜诨谌萜鞯奶摂M化系統(tǒng)的操作捕獲方法、安全控制方法和裝置,通過將進程中的未處理的信號所指示的執(zhí)行指令跳轉(zhuǎn)到自定義的第一函數(shù)的入口地址,從而捕獲到了可能訪問內(nèi)核的信號處理操作,實現(xiàn)了對容器中的進程訪問宿主機內(nèi)核的操作的捕獲,以便后續(xù)對捕獲到的操作進行安全控制,以保障系統(tǒng)安全。
【附圖說明】
[0010]通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細(xì)描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:
[0011]圖1是根據(jù)本申請的用于基于容器的虛擬化系統(tǒng)的操作捕獲方法的一個實施例的流程圖;
[0012]圖2是根據(jù)本申請的用于基于容器的虛擬化系統(tǒng)的操作捕獲方法的另一個實施例的流程圖;
[0013]圖3是根據(jù)本申請的用于基于容器的虛擬化系統(tǒng)的安全控制方法的一個實施例的流程圖;
[0014]圖4是根據(jù)本申請的用于基于容器的虛擬化系統(tǒng)的操作捕獲裝置的一個實施例的結(jié)構(gòu)示意圖;
[0015]圖5是根據(jù)本申請的用于基于容器的虛擬化系統(tǒng)的安全控制裝置的一個實施例的結(jié)構(gòu)示意圖;
[0016]圖6是適于用來實現(xiàn)本申請實施例的基于容器的虛擬化系統(tǒng)所在的物理機的計算機系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實施方式】
[0017]下面結(jié)合附圖和實施例對本申請作進一步的詳細(xì)說明??梢岳斫獾氖牵颂幩枋龅木唧w實施例僅僅用于解釋相關(guān)發(fā)明,而非對該發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與有關(guān)發(fā)明相關(guān)的部分。
[0018]需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結(jié)合實施例來詳細(xì)說明本申請。
[0019]圖1示出了根據(jù)本申請的用于基于容器的虛擬化系統(tǒng)的操作捕獲方法的一個實施例的流程100。
[0020]如圖1所示,本實施例的用于基于容器的虛擬化系統(tǒng)的操作捕獲方法包括以下步驟:
[0021]步驟101,在用戶態(tài)監(jiān)測基于容器的虛擬化系統(tǒng)中的容器中的進程啟動的操作。
[0022]在本實施例中,步驟101可以包括:監(jiān)測與上述進程被調(diào)到虛擬化系統(tǒng)的宿主機的中央處理器處執(zhí)行對應(yīng)的操作。根據(jù)CPU(中央處理器)虛擬化技術(shù),進程在運行時會先占用內(nèi)核中的一個虛擬CPU,因此在本步驟中,可以通過在對虛擬CPU的處理中增加監(jiān)測處理,以實現(xiàn)對上述進程啟動的操作的監(jiān)測。
[0023]步驟102,如果監(jiān)測到上述進程啟動的操作,則在內(nèi)核態(tài)確定上述進程中是否存在未處理的信號。
[0024]在本實施例中,監(jiān)測到上述進程啟動的操作后,在內(nèi)核態(tài)可以得到上述進程的task_struct結(jié)構(gòu)(用于Linux操作系統(tǒng)的進程描述符),通過該task_struct結(jié)構(gòu)就能確定上述進程中是否存在未處理的信號。
[0025]步驟103,如果存在上述信號,則將上述信號所指示的執(zhí)行指令跳轉(zhuǎn)到自定義的第一函數(shù)的入口地址,并將上述信號的信號編號傳給上述第一函數(shù)。
[0026]在本實施例中,在步驟102之前,可以在用戶態(tài)將上述第一函數(shù)的入口地址傳入上述虛擬化系統(tǒng)中的宿主機的內(nèi)核,并在內(nèi)核態(tài)將上述第一函數(shù)的入口地址保存于內(nèi)核空間中。相應(yīng)地,上述將上述信號所指示的執(zhí)行指令跳轉(zhuǎn)到自定義的第一函數(shù)的入口地址可以包括:獲取上述內(nèi)核空間中存儲的上述第一函數(shù)的入口地址;將上述信號所指示的執(zhí)行指令跳轉(zhuǎn)到上述第一函數(shù)的入口地址。
[0027]步驟104,如果上述第一函數(shù)被調(diào)用,則捕獲到調(diào)用時傳入的信號編號對應(yīng)的信號處理操作。
[0028]每個信號都對應(yīng)一個正整數(shù)常量,稱為信號編號,定義在系統(tǒng)頭文件中。在本實施例中,由于在步驟103中將上述信號所指示的執(zhí)行指令跳轉(zhuǎn)到自定義的第一函數(shù)的入口地址,并將上述信號的信號編號傳給了上述第一函數(shù),因此在第一函數(shù)被調(diào)用并執(zhí)行時,在第一函數(shù)中就能獲得傳入的信號編號,于是就捕獲到了該信號編號對應(yīng)的信號處理操作。
[0029]本實施例提供的用于基于容器的虛擬化系統(tǒng)的操作捕獲方法,通過將進程中