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