基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法
【專利摘要】本發(fā)明公開(kāi)了一種基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,包括步驟:在系統(tǒng)初始化時(shí)為虛擬內(nèi)存的內(nèi)核空間生成載入模塊用頁(yè)表和核心模塊用頁(yè)表;加載載入模塊時(shí),陷入虛擬機(jī)監(jiān)控器,為兩份頁(yè)表設(shè)置屬性后返回;載入模塊申請(qǐng)動(dòng)態(tài)內(nèi)存時(shí),陷入虛擬機(jī)監(jiān)控器,更新兩份頁(yè)表屬性后返回;當(dāng)載入模塊直接調(diào)用、跳轉(zhuǎn)到核心模塊的代碼頁(yè)時(shí)或者直接修改核心模塊的數(shù)據(jù)頁(yè)時(shí),陷入虛擬機(jī)監(jiān)控器,對(duì)兩份頁(yè)表進(jìn)行切換,檢查處理后返回。本發(fā)明方法借助虛擬機(jī)監(jiān)控器的監(jiān)控機(jī)制,使用頁(yè)目錄地址寄存器來(lái)標(biāo)示系統(tǒng)的執(zhí)行主體,實(shí)現(xiàn)對(duì)內(nèi)核權(quán)能隔離。避免在內(nèi)核態(tài)與用戶態(tài)之間轉(zhuǎn)換時(shí)頻繁地干預(yù),提高系統(tǒng)的整體性能。
【專利說(shuō)明】基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種操作系統(tǒng)的權(quán)能隔離方法,特別是涉及一種基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,屬于計(jì)算機(jī)安全【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]宏內(nèi)核操作系統(tǒng)提供了對(duì)載入模塊(包括第三方模塊和驅(qū)動(dòng)程序模塊)的支持,且允許載入模塊都運(yùn)行在內(nèi)核態(tài)特權(quán)級(jí)。由于運(yùn)行在最高特權(quán)級(jí),載入模塊對(duì)內(nèi)核的核心服務(wù)的關(guān)鍵對(duì)象的訪問(wèn)難以得到系統(tǒng)的有效控制,惡意的第三方模塊或者受到感染的驅(qū)動(dòng)程序模塊可以很容易地破壞系統(tǒng)調(diào)用表、頁(yè)表、中斷描述符表、系統(tǒng)寄存器,和網(wǎng)絡(luò)端口等系統(tǒng)關(guān)鍵對(duì)象,從而破壞整個(gè)系統(tǒng)的完整性。
[0003]隨著硬件虛擬化技術(shù)的發(fā)展,在宏內(nèi)核平臺(tái)上,采用虛擬機(jī)監(jiān)控器對(duì)客戶系統(tǒng)(guest system)進(jìn)行運(yùn)行時(shí)監(jiān)控的工作獲得了很好的支持。但是這種方法存在著兩個(gè)方面的主要問(wèn)題:1)監(jiān)控粒度:如何確定監(jiān)控的粒度是一個(gè)兩難的問(wèn)題,監(jiān)控粒度越大,對(duì)客戶系統(tǒng)的性能損失較小,但監(jiān)控的正確度不高,監(jiān)控粒度越小,監(jiān)控的正確度越大,但對(duì)客戶系統(tǒng)的損失較大;2)主體標(biāo)示:在監(jiān)控的過(guò)程中,首先需要對(duì)客戶系統(tǒng)中的各個(gè)執(zhí)行主體(對(duì)象)進(jìn)行標(biāo)示,但由于宏內(nèi)核和載入模塊都運(yùn)行在內(nèi)核態(tài)特權(quán)級(jí),并且位于同一內(nèi)存地址空間,因此對(duì)于監(jiān)控內(nèi)核的虛擬機(jī)監(jiān)控器而言,難以具體標(biāo)識(shí)當(dāng)前執(zhí)行主體為內(nèi)核還是載入模塊。
【發(fā)明內(nèi)容】
[0004]針對(duì)上述現(xiàn)有技術(shù)的不足,本發(fā)明的目的是提供一種基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,將內(nèi)核的核心模塊與載入模塊在權(quán)能上相互隔離,解決宏內(nèi)核操作系統(tǒng)在加載載入模塊后對(duì)核心模塊可能存在的安全性威脅問(wèn)題。
[0005]本發(fā)明的技術(shù)方案是這樣的:一種基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,包括以下步驟:
[0006]S1、在系統(tǒng)初始化階段,為處在虛擬內(nèi)存3GiB?(4GiB_l)的內(nèi)核空間生成載入模塊用頁(yè)表和核心模塊用頁(yè)表,兩份頁(yè)表中線性地址到物理地址的映射相同;
[0007]S2、加載載入模塊時(shí),執(zhí)行載入模塊初始化之前,操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,分別設(shè)置載入模塊用頁(yè)表和核心模塊用頁(yè)表屬性,操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回;
[0008]S3、載入模塊申請(qǐng)動(dòng)態(tài)內(nèi)存時(shí),操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器調(diào)用動(dòng)態(tài)內(nèi)存空間申請(qǐng)函數(shù),為載入模塊分配動(dòng)態(tài)內(nèi)存,與動(dòng)態(tài)內(nèi)存對(duì)應(yīng)的載入模塊用頁(yè)表中載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為可讀可寫(xiě),與動(dòng)態(tài)內(nèi)存對(duì)應(yīng)的核心模塊用頁(yè)表中載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為只讀,操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回;
[0009]S4、當(dāng)載入模塊直接調(diào)用、跳轉(zhuǎn)到核心模塊的代碼頁(yè)時(shí),操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器通過(guò)轉(zhuǎn)換頁(yè)目錄地址寄存器,從載入模塊用頁(yè)表切換到核心模塊用頁(yè)表;在通過(guò)監(jiān)控器檢查后,虛擬機(jī)監(jiān)控器為載入模塊調(diào)用核心模塊的接口程序,操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回;當(dāng)核心模塊的接口程序執(zhí)行完成并返回時(shí),操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器通過(guò)轉(zhuǎn)換頁(yè)目錄地址寄存器,從核心模塊用頁(yè)表切換到載入模塊用頁(yè)表,操作系統(tǒng)由虛擬機(jī)監(jiān)控器返回到載入模塊;
[0010]S5、當(dāng)載入模塊直接修改核心模塊的數(shù)據(jù)頁(yè)時(shí),操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器根據(jù)預(yù)定策略進(jìn)行處理,處理結(jié)束后操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回。
[0011]所述分別設(shè)置載入模塊用頁(yè)表和核心模塊用頁(yè)表屬性,所述載入模塊用頁(yè)表中用戶數(shù)據(jù)頁(yè)和載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為可讀可寫(xiě),用戶代碼頁(yè)、核心模塊數(shù)據(jù)頁(yè)和載入模塊代碼頁(yè)屬性設(shè)置為只讀,核心模塊代碼頁(yè)屬性設(shè)置為不映射;所述核心模塊用頁(yè)表中用戶代碼頁(yè)、用戶數(shù)據(jù)頁(yè)和核心模塊數(shù)據(jù)頁(yè)屬性設(shè)置為可讀可寫(xiě),核心模塊代碼頁(yè)和載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為只讀,載入模塊代碼頁(yè)屬性設(shè)置為不映射。
[0012]優(yōu)選的,所述步驟S2中分別設(shè)置載入模塊用頁(yè)表和核心模塊用頁(yè)表屬性前,虛擬機(jī)監(jiān)控器取得載入模塊代碼的首地址、載入模塊代碼的長(zhǎng)度、載入模塊數(shù)據(jù)的首地址、載入模塊數(shù)據(jù)的長(zhǎng)度、核心模塊代碼的首地址、核心模塊代碼的長(zhǎng)度、核心模塊數(shù)據(jù)的首地址和核心模塊數(shù)據(jù)的長(zhǎng)度,計(jì)算出載入模塊和核心模塊所在內(nèi)存頁(yè)。
[0013]優(yōu)選的,所述步驟S3中為載入模塊分配動(dòng)態(tài)內(nèi)存是向內(nèi)核申請(qǐng)一個(gè)整頁(yè),并在之后再次收到載入模塊的請(qǐng)求時(shí),直接在該頁(yè)中分配空間,直到不夠分配為止,再重新向內(nèi)核請(qǐng)求整頁(yè)的空間。
[0014]優(yōu)選的,所述步驟S4中虛擬機(jī)監(jiān)控器為載入模塊調(diào)用核心模塊的接口程序前,虛擬機(jī)監(jiān)控器取得引起陷入虛擬機(jī)監(jiān)控器的跳轉(zhuǎn)地址,檢查跳轉(zhuǎn)地址的合法性;保存當(dāng)前的棧頂指針寄存器ESP,切換ESP到核心模塊的內(nèi)核棧中,將載入模塊的內(nèi)核棧中之前壓入的輸入?yún)?shù)壓入到核心模塊的內(nèi)核棧中,恢復(fù)當(dāng)前的ESP ;修改虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,將其中的指令寄存器EIP指向目標(biāo)跳轉(zhuǎn)地址,ESP指向核心模塊的內(nèi)核棧的棧頂。
[0015]優(yōu)選的,所述步驟S4中操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回到載入模塊前,虛擬機(jī)監(jiān)控器取得引起陷入虛擬機(jī)監(jiān)控器的跳轉(zhuǎn)地址,檢查跳轉(zhuǎn)地址的合法性;保存當(dāng)前的棧頂指針寄存器ESP,切換ESP到載入模塊的內(nèi)核棧中,彈出載入模塊的內(nèi)核棧中壓入的輸入?yún)?shù),恢復(fù)當(dāng)前的ESP ;修改虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,將其中的指令寄存器EIP指向目標(biāo)返回地址,ESP指向載入模塊的內(nèi)核棧的棧頂。
[0016]本發(fā)明提出的是一種基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,將內(nèi)核的核心模塊與載入模塊在權(quán)能上相互隔離,雖然它們處在同一內(nèi)存空間中,但載入模塊只能修改自己定義的數(shù)據(jù)。借助虛擬機(jī)監(jiān)控器的監(jiān)控機(jī)制,使用頁(yè)目錄地址寄存器來(lái)標(biāo)示系統(tǒng)的執(zhí)行主體,實(shí)現(xiàn)對(duì)內(nèi)核權(quán)能隔離。
[0017]本發(fā)明提出的基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,通過(guò)強(qiáng)制性訪問(wèn)控制達(dá)到以下兩個(gè)完整性目標(biāo),實(shí)現(xiàn)內(nèi)核權(quán)能隔離:1)內(nèi)核代碼與數(shù)據(jù)、和安全相關(guān)數(shù)據(jù)的完整性:所有內(nèi)核代碼與數(shù)據(jù),以及安全相關(guān)數(shù)據(jù)都不允許被載入模塊通過(guò)直接內(nèi)存訪問(wèn)操作修改;2)體系相關(guān)寄存器的完整性:體系相關(guān)寄存器包括段寄存器、控制寄存器、以及部分標(biāo)志寄存器,它們共同標(biāo)志了操作系統(tǒng)內(nèi)核的運(yùn)行狀態(tài),它們不允許被載入模塊修改。
[0018]本發(fā)明提出的基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,通過(guò)對(duì)內(nèi)核的核心模塊和載入模塊設(shè)置不同的頁(yè)表,在其各自的頁(yè)表中設(shè)置對(duì)內(nèi)核關(guān)鍵數(shù)據(jù)對(duì)象的訪問(wèn)權(quán)限來(lái)起到標(biāo)示主體的作用,同時(shí)在對(duì)內(nèi)核關(guān)鍵數(shù)據(jù)對(duì)象的訪問(wèn)的監(jiān)控過(guò)程中,避免頻繁地干預(yù),提高系統(tǒng)的整體性能。
[0019]本發(fā)明提出的基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,在載入模塊的頁(yè)表中,核心模塊的代碼頁(yè)不映射,而核心模塊的數(shù)據(jù)頁(yè)為只讀。載入模塊直接修改核心模塊的數(shù)據(jù)會(huì)產(chǎn)生頁(yè)保護(hù)錯(cuò)誤,而直接調(diào)用、跳轉(zhuǎn)到核心模塊代碼則會(huì)產(chǎn)生缺頁(yè)異常,操作系統(tǒng)最終都會(huì)陷入到虛擬機(jī)監(jiān)控器中。另外,內(nèi)核態(tài)與用戶態(tài)之間的轉(zhuǎn)換不需要切換頁(yè)目錄地址寄存器,因?yàn)橄到y(tǒng)調(diào)用的入口和返回處理的代碼在核心模塊中,在內(nèi)核態(tài)與用戶態(tài)的切換前后使用的是核心模塊的頁(yè)表,所以無(wú)需切換頁(yè)表,這樣很好地避免頻繁地切換頁(yè)表,提高系統(tǒng)的整體性能。
【專利附圖】
【附圖說(shuō)明】
[0020]圖1為本發(fā)明方法流程示意圖;
[0021]圖2為載入模塊用頁(yè)表和核心模塊用頁(yè)表屬性設(shè)置圖;
[0022]圖3為進(jìn)程頁(yè)表示例圖;
【具體實(shí)施方式】
[0023]下面結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明,但不作為對(duì)本發(fā)明的限定。
[0024]本發(fā)明提出的基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,宏內(nèi)核受到攻擊的場(chǎng)景包括:1)攻擊者獲得了超級(jí)用戶權(quán)限,然后將惡意程序加載進(jìn)操作系統(tǒng)內(nèi)核空間;2)攻擊者利用已有的系統(tǒng)漏洞加載Rootkit之類的惡意軟件;3)粗心的用戶加載了未經(jīng)認(rèn)證的包含惡意代碼的載入模塊等。
[0025]在宏內(nèi)核操作系統(tǒng)中,載入模塊在運(yùn)行過(guò)程中,與內(nèi)核處于同一地址空間,可以看到彼此的全部?jī)?nèi)存視圖。本發(fā)明提出的基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,對(duì)照附圖1,實(shí)現(xiàn)對(duì)載入模塊的隔離,包括兩個(gè)方面:線性地址空間內(nèi)存隔離和物理地址空間內(nèi)存隔離,其具體表現(xiàn)為載入模塊有專屬的頁(yè)表,并且來(lái)自載入模塊的直接內(nèi)存訪問(wèn)操作不能破壞內(nèi)核所在的物理內(nèi)存。
[0026]為了標(biāo)識(shí)執(zhí)行主體,將系統(tǒng)狀態(tài)分成三類:用戶態(tài)、核心態(tài),和載入模塊運(yùn)行態(tài)。用戶態(tài)是指用戶程序的運(yùn)行狀態(tài);核心態(tài)是內(nèi)核的運(yùn)行狀態(tài),包括安全認(rèn)證過(guò)的可信的內(nèi)核擴(kuò)展模塊的運(yùn)行;載入模塊運(yùn)行態(tài)是指未經(jīng)過(guò)安全認(rèn)證的服務(wù)模塊和驅(qū)動(dòng)程序等的運(yùn)行狀態(tài)。劃分狀態(tài)的依據(jù)并不是側(cè)重于代碼或者數(shù)據(jù),而是注重權(quán)能,即當(dāng)前運(yùn)行主體所擁有的權(quán)限。
[0027]系統(tǒng)狀態(tài)之間的轉(zhuǎn)換過(guò)程包括:1)用戶程序在運(yùn)行過(guò)程中因?yàn)橹袛嗷蛘弋惓?、以及系統(tǒng)調(diào)用等原因而進(jìn)入核心態(tài),由內(nèi)核進(jìn)行處理;2)內(nèi)核從中斷或者異常、以及系統(tǒng)調(diào)用的處理過(guò)程中返回用戶態(tài);3)內(nèi)核調(diào)用載入模塊,或者載入模塊搶占內(nèi)核的運(yùn)行時(shí)間,從而進(jìn)入載入模塊運(yùn)行態(tài);4)載入模塊運(yùn)行完成返回核心態(tài),或者內(nèi)核搶占載入模塊的運(yùn)行時(shí)間。
[0028]具體實(shí)施步驟如圖1所示,包括如下步驟:
[0029]在系統(tǒng)初始化階段,為處在虛擬內(nèi)存3GiB?(4GiB_l)的內(nèi)核空間生成載入模塊用頁(yè)表和核心模塊用頁(yè)表,兩份頁(yè)表中線性地址到物理地址的映射相同,此時(shí)載入模塊用頁(yè)表和核心模塊用頁(yè)表均為空頁(yè)表。
[0030]通過(guò)配置虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,使得虛擬機(jī)監(jiān)控器監(jiān)控陷入指令CPWD的執(zhí)行。當(dāng)加載載入模塊時(shí),通過(guò)在載入模塊初始化系統(tǒng)調(diào)用的頭部加入陷入指令CPWD,使得在執(zhí)行模塊初始化之前,操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中。虛擬機(jī)監(jiān)控器根據(jù)當(dāng)前載入模塊的標(biāo)示取得載入模塊代碼的首地址、載入模塊代碼的長(zhǎng)度、載入模塊數(shù)據(jù)的首地址、載入模塊數(shù)據(jù)的長(zhǎng)度、核心模塊代碼的首地址、核心模塊代碼的長(zhǎng)度、核心模塊數(shù)據(jù)的首地址和核心模塊數(shù)據(jù)的長(zhǎng)度,計(jì)算出載入模塊和核心模塊所在的內(nèi)存頁(yè),從而根據(jù)附圖2對(duì)載入模塊用頁(yè)表和核心模塊用頁(yè)表進(jìn)行頁(yè)屬性的設(shè)置,即對(duì)于載入模塊而言,載入模塊用頁(yè)表中用戶數(shù)據(jù)頁(yè)和載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為可讀可寫(xiě),用戶代碼頁(yè)、核心模塊數(shù)據(jù)頁(yè)和載入模塊代碼頁(yè)屬性設(shè)置為只讀,核心模塊代碼頁(yè)屬性設(shè)置為不映射;對(duì)于核心模塊而言,核心模塊用頁(yè)表中用戶代碼頁(yè)、用戶數(shù)據(jù)頁(yè)和核心模塊數(shù)據(jù)頁(yè)屬性設(shè)置為可讀可寫(xiě),核心模塊代碼頁(yè)和載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為只讀,載入模塊代碼頁(yè)屬性設(shè)置為不映射。設(shè)置完成后,操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回。
[0031]當(dāng)操作系統(tǒng)創(chuàng)建新進(jìn)程時(shí),為進(jìn)程創(chuàng)建兩份頁(yè)表,其中O?(3GiB_l)的用戶空間的頁(yè)表相同,而3GiB?(4GiB-l)內(nèi)核空間的頁(yè)表則分別復(fù)制上述設(shè)置好的載入模塊用頁(yè)表和核心模塊用頁(yè)表,如附圖3所不。
[0032]一個(gè)程序的資源除了靜態(tài)的代碼、數(shù)據(jù)、堆棧、頁(yè)表等,還包括動(dòng)態(tài)申請(qǐng)的數(shù)據(jù)空間,如何對(duì)這些數(shù)據(jù)空間進(jìn)行隔離保護(hù)也是本發(fā)明需要考慮的問(wèn)題。通過(guò)配置虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,使得虛擬機(jī)監(jiān)控器監(jiān)控動(dòng)態(tài)內(nèi)存空間分配(kmalloc、vmalloc等)函數(shù)的調(diào)用,并且編寫(xiě)和設(shè)置單獨(dú)的動(dòng)態(tài)內(nèi)存空間申請(qǐng)函數(shù)(cmalloc),當(dāng)載入模塊調(diào)用動(dòng)態(tài)內(nèi)存空間分配函數(shù)申請(qǐng)動(dòng)態(tài)內(nèi)存時(shí),操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器調(diào)用cmalloc。cmalloc函數(shù)的執(zhí)行流程是向內(nèi)核申請(qǐng)一個(gè)整頁(yè),并在之后再次收到載入模塊的請(qǐng)求時(shí),直接在該頁(yè)中分配空間,直到不夠分配為止,再重新向內(nèi)核請(qǐng)求整頁(yè)的空間。每當(dāng)分配到一個(gè)新頁(yè),則根據(jù)附圖2所示的頁(yè)表策略設(shè)置載入模塊用頁(yè)表和核心模塊用頁(yè)表的頁(yè)屬性,與動(dòng)態(tài)內(nèi)存對(duì)應(yīng)的載入模塊用頁(yè)表中載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為可讀可寫(xiě),與動(dòng)態(tài)內(nèi)存對(duì)應(yīng)的核心模塊用頁(yè)表中載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為只讀。完成動(dòng)態(tài)內(nèi)存的分配之后,操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回。
[0033]通過(guò)配置虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,使得虛擬機(jī)監(jiān)控器監(jiān)控缺頁(yè)異常。當(dāng)載入模塊直接調(diào)用、跳轉(zhuǎn)到核心模塊的代碼頁(yè)時(shí),按照附圖2的頁(yè)表設(shè)置情況,由于核心模塊代碼頁(yè)在當(dāng)前載入模塊用頁(yè)表中未映射,則會(huì)觸發(fā)缺頁(yè)異常,操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器通過(guò)轉(zhuǎn)換頁(yè)目錄地址寄存器為其切換頁(yè)表,從載入模塊用頁(yè)表切換到核心模塊用頁(yè)表。在通過(guò)監(jiān)控器檢查后,虛擬機(jī)監(jiān)控器取得引起陷入虛擬機(jī)監(jiān)控器的跳轉(zhuǎn)地址,檢查跳轉(zhuǎn)地址的合法性;保存當(dāng)前的棧頂指針寄存器ESP,切換ESP到核心模塊的內(nèi)核棧中,將載入模塊的內(nèi)核棧中之前壓入的輸入?yún)?shù)壓入到核心模塊的內(nèi)核棧中,恢復(fù)當(dāng)前的ESP ;修改虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,將其中的指令寄存器EIP指向目標(biāo)跳轉(zhuǎn)地址,ESP指向核心模塊的內(nèi)核棧的棧頂。然后虛擬機(jī)監(jiān)控器為載入模塊調(diào)用核心模塊的接口程序,操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回,核心模塊的接口程序繼續(xù)執(zhí)行。通過(guò)配置虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,使得虛擬機(jī)監(jiān)控器監(jiān)控核心模塊的接口程序的返回動(dòng)作。當(dāng)核心模塊的接口程序執(zhí)行完成并返回時(shí),操作系統(tǒng)再次陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器通過(guò)轉(zhuǎn)換頁(yè)目錄地址寄存器,從核心模塊用頁(yè)表切換到載入模塊用頁(yè)表,虛擬機(jī)監(jiān)控器取得引起陷入虛擬機(jī)監(jiān)控器的跳轉(zhuǎn)地址,檢查跳轉(zhuǎn)地址的合法性;保存當(dāng)前的棧頂指針寄存器ESP,切換ESP到載入模塊的內(nèi)核棧中,彈出載入模塊的內(nèi)核棧中壓入的輸入?yún)?shù),恢復(fù)當(dāng)前的ESP ;修改虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,將其中的指令寄存器EIP指向目標(biāo)返回地址,ESP指向載入模塊的內(nèi)核棧的棧頂,然后操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回到載入模塊。
[0034]通過(guò)配置虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,使得虛擬機(jī)監(jiān)控器監(jiān)控頁(yè)保護(hù)錯(cuò)誤。當(dāng)載入模塊直接修改核心模塊的數(shù)據(jù)頁(yè)時(shí),按照附圖2的頁(yè)表設(shè)置情況,由于核心模塊的數(shù)據(jù)頁(yè)對(duì)載入模塊而言是只讀的,則會(huì)觸發(fā)頁(yè)保護(hù)錯(cuò)誤,操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器根據(jù)預(yù)定策略進(jìn)行處理,處理結(jié)束后操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回。
【權(quán)利要求】
1.一種基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,其特征在于,包括以下步驟: .51、在系統(tǒng)初始化階段,為處在虛擬內(nèi)存3GiB~(4GiB-l)的內(nèi)核空間生成載入模塊用頁(yè)表和核心模塊用頁(yè)表,兩份頁(yè)表中線性地址到物理地址的映射相同; . 52、加載載入模塊時(shí),執(zhí)行載入模塊初始化之前,操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,分別設(shè)置載入模塊用頁(yè)表和核心模塊用頁(yè)表屬性,操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回; . 53、載入模塊申請(qǐng)動(dòng)態(tài)內(nèi)存時(shí),操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器調(diào)用動(dòng)態(tài)內(nèi)存空間申請(qǐng)函數(shù),為載入模塊分配動(dòng)態(tài)內(nèi)存,與動(dòng)態(tài)內(nèi)存對(duì)應(yīng)的載入模塊用頁(yè)表中載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為可讀可寫(xiě),與動(dòng)態(tài)內(nèi)存對(duì)應(yīng)的核心模塊用頁(yè)表中載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為只讀,操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回; .54、當(dāng)載入模塊直接調(diào)用、跳轉(zhuǎn)到核心模塊的代碼頁(yè)時(shí),操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器通過(guò)轉(zhuǎn)換頁(yè)目錄地址寄存器,從載入模塊用頁(yè)表切換到核心模塊用頁(yè)表;在通過(guò)監(jiān)控器檢查后,虛擬機(jī)監(jiān)控器為載入模塊調(diào)用核心模塊的接口程序,操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回;當(dāng)核心模塊的接口程序執(zhí)行完成并返回時(shí),操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器通過(guò)轉(zhuǎn)換頁(yè)目錄地址寄存器,從核心模塊用頁(yè)表切換到載入模塊用頁(yè)表,操作系統(tǒng)由虛擬機(jī)監(jiān)控器返回到載入模塊; . 55、當(dāng)載入模塊直接修改核心模塊的數(shù)據(jù)頁(yè)時(shí),操作系統(tǒng)陷入虛擬機(jī)監(jiān)控器中,虛擬機(jī)監(jiān)控器根據(jù)預(yù)定策略進(jìn)行處理,處理結(jié)束后操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回。 所述分別設(shè)置載入模塊用頁(yè)表和核心模塊用頁(yè)表屬性,所述載入模塊用頁(yè)表中用戶數(shù)據(jù)頁(yè)和載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為可讀可寫(xiě),用戶代碼頁(yè)、核心模塊數(shù)據(jù)頁(yè)和載入模塊代碼頁(yè)屬性設(shè)置為只讀,核心模塊代碼頁(yè)屬性設(shè)置為不映射;所述核心模塊用頁(yè)表中用戶代碼頁(yè)、用戶數(shù)據(jù)頁(yè)和核心模塊數(shù)據(jù)頁(yè)屬性設(shè)置為可讀可寫(xiě),核心模塊代碼頁(yè)和載入模塊數(shù)據(jù)頁(yè)屬性設(shè)置為只讀,載入模塊代碼頁(yè)屬性設(shè)置為不映射。
2.根據(jù)權(quán)利要求1所述的基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,其特征在于,所述步驟S2中分別設(shè)置載入模塊用頁(yè)表和核心模塊用頁(yè)表屬性前,虛擬機(jī)監(jiān)控器取得載入模塊代碼的首地址、載入模塊代碼的長(zhǎng)度、載入模塊數(shù)據(jù)的首地址、載入模塊的數(shù)據(jù)長(zhǎng)度、核心模塊代碼的首地址、核心模塊代碼的長(zhǎng)度、核心模塊數(shù)據(jù)的首地址和核心模塊數(shù)據(jù)的長(zhǎng)度,計(jì)算出載入模塊和核心模塊所在內(nèi)存頁(yè)。
3.根據(jù)權(quán)利要求1所述的基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,其特征在于,所述步驟S3中為載入模塊分配動(dòng)態(tài)內(nèi)存是向內(nèi)核申請(qǐng)一個(gè)整頁(yè),并在之后再次收到載入模塊的請(qǐng)求時(shí),直接在該頁(yè)中分配空間,直到不夠分配為止,再重新向內(nèi)核請(qǐng)求整頁(yè)的空間。
4.根據(jù)權(quán)利要求1所述的基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,其特征在于,所述步驟S4中虛擬機(jī)監(jiān)控器為載入模塊調(diào)用核心模塊的接口程序前,虛擬機(jī)監(jiān)控器取得引起陷入虛擬機(jī)監(jiān)控器的跳轉(zhuǎn)地址,檢查跳轉(zhuǎn)地址的合法性;保存當(dāng)前的棧頂指針寄存器ESP,切換ESP到核心模塊的內(nèi)核棧中,將載入模塊的內(nèi)核棧中之前壓入的輸入?yún)?shù)壓入到核心模塊的內(nèi)核棧中,恢復(fù)當(dāng)前的ESP ;修改虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,將其中的指令寄存器EIP指向目標(biāo)跳轉(zhuǎn)地址,ESP指向核心模塊的內(nèi)核棧的棧頂。
5.根據(jù)權(quán)利要求1所述的基于虛擬化的宏內(nèi)核操作系統(tǒng)載入模塊權(quán)能隔離方法,其特征在于,所述步驟S4中操作系統(tǒng)從虛擬機(jī)監(jiān)控器返回到載入模塊前,虛擬機(jī)監(jiān)控器取得引起陷入虛擬機(jī)監(jiān)控器的跳轉(zhuǎn)地址,檢查跳轉(zhuǎn)地址的合法性;保存當(dāng)前的棧頂指針寄存器ESP,切換ES P到載入模塊的內(nèi)核棧中,彈出載入模塊的內(nèi)核棧中壓入的輸入?yún)?shù),恢復(fù)當(dāng)前的ESP ;修改虛擬機(jī)監(jiān)控器中的虛擬化控制結(jié)構(gòu)VMCS,將其中的指令寄存器EIP指向目標(biāo)返回地址,ESP指向載入模塊的內(nèi)核棧的棧頂。
【文檔編號(hào)】G06F21/53GK104036185SQ201410284500
【公開(kāi)日】2014年9月10日 申請(qǐng)日期:2014年6月23日 優(yōu)先權(quán)日:2014年6月23日
【發(fā)明者】錢(qián)振江, 劉永俊, 湯力, 姚宇峰, 張雪伍 申請(qǐng)人:常熟理工學(xué)院