999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種利用EPT機制的動態物理內存隔離方法

2021-12-08 07:05:06孔維亮滕俊章
小型微型計算機系統 2021年12期
關鍵詞:進程物理方法

孔維亮,滕俊章,薛 猛

1(32753部隊,武漢 430000) 2(78123部隊,成都 610000) E-mail:qrhappy@163.com

1 引 言

Linux操作系統以頁為基本單位對用戶的內存訪問操作進行控制,但這種內存訪問控制機制只能限制普通用戶,對超級用戶缺乏嚴格的約束.在Linux操作系統中,超級用戶擁有最高權限,能夠對系統中的所有資源進行管理,因此,當惡意進程獲取了系統最高權限,就可以控制系統資源并進行惡意操作.同時,可加載內核模塊(Loadable Kernel Module,LKM)機制的存在使Linux系統具有良好的擴展性,但其作為內核的一部分,擁有最高權限,可以通過對內存地址中的代碼和數據進行修改實現惡意功能.

針對上述兩種Linux系統的不安全因素,目前已經提出多種針對Linux內存的保護機制和方法.文獻[1]提出3種內存保護模型:客戶/服務器模型、進程/線程模型和服務體/執行流模型,這3種模型通過修改內存保護機制實現內存空間隔離,從而保護內存數據.文獻[2]針對保護內存中的敏感數據問題,通過修改操作系統內核,改變進程虛擬地址和物理地址的映射關系,使包含敏感數據的頁面只在處理器訪問時才出現在進程地址空間,減少敏感數據暴露時間,增加攻擊者窺視用戶敏感數據的困難.文獻[3]在解決利用動態隨機存取內存的Rowhammer攻擊方面,實現了一套在虛擬機監視器層面的Rowhammer感知的內存分配機制,能夠在虛擬機監視器層面以虛擬機的粒度進行Rowhammer攻擊的隔離防護,但該方法針對從虛擬機內部發出的攻擊,防御效果不是很好.文獻[4]利用硬件虛擬化技術保護應用程序,但都需要通過修改操作系統內核或應用程序實現保護功能,透明性不高.文獻[5]針對代碼復用攻擊,將目標進程的代碼頁設置可執行不可讀,使代碼可以被處理器正常執行,但在讀操作時根據被讀物理頁面的存儲內容對讀操作進行訪問控制,從而阻止攻擊者利用信息泄露漏洞惡意讀進程代碼頁的方法搜索gadgets,但該方法需要逐條分析被讀物理頁面的內容,效率較為低下.文獻[6]通過修改現有的CPU架構實現保護應用程序在物理內存中的隱私數據和功能代碼,但該方法對特殊的硬件架構依賴性高,通用性不高.文獻[7]依據協同認證的思想,在內存中加入一種具有計算功能的硬件部件,由處理器與該部件協同完成內存數據完整性校驗,實現一種附加硬件的內存完整性保護方法.文獻[8]針對內存泄漏攻擊,通過修改應用程序,將秘鑰等敏感數據從內存轉移到CPU的寄存器中,寄存器的數量和容量導致該方法不能適用于敏感數據量比較大的場景.

在隔離物理內存方面,文獻[9]提出內存隔離方案,能夠提供通過編譯器自動修改程序代碼,隔離敏感數據與普通數據,能夠達到細粒度(以內存區域為粒度)的保護,該方法增加的了程序運行前編譯器的負擔,針對大型程序,運行時間成本比較高.文獻[10]利用虛擬機監控器的NPT地址轉換機制,為被保護應用程序建立一個新的NPT頁表,并將新NPT頁表中的其他應用程序和操作系統內核頁表項設置為不存在,將原來NPT頁表中被保護應用程序頁表項設置為不存在,從而實現對保護應用程序的物理內存進行隔離的目的,但當應用程序占用的物理內存空間過于龐大時,遍歷被保護應用程序的物理內存會嚴重降低系統性能.

針對上述利用虛擬化技術實現內存訪問控制方法和物理內存隔離方法中存在的缺點,本文提出一種利用Intel VT的EPT機制隱藏應用程序進程物理內存的方法,實現對內存數據和代碼的保護.該方法分3個階段:1)實時監控進程切換,進程級粒度跟蹤所有進程對內存的訪問操作;2)采用高效的Hash算法對被保護應用程序的物理內存實現動態隔離和訪問驗證;3)設置EPT頁表項訪問屬性實現物理內存訪問控制.根據上述3個實現過程,本文設計了物理內存隱藏原型PMM,并在Intel平臺上對原型系統進行了測試驗證,實驗結果表明,該方法能夠隱藏被保護的應用程序訪問的物理內存,并且引入較少的系統性能開銷.

2 EPT機制實現原理

2.1 EPT簡介

EPT(Extend Page Table,擴展頁表)是Intel在VT-x技術基礎上增加的一種硬件輔助內存虛擬化技術(1)https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html.在處理器端,VMX架構通過引入EPT機制來實現VM物理地址空間的隔離.當客戶機通過指令訪問內存時,首先,客戶機操作系統通過分頁機制將線性地址(linear address)轉換為客戶機物理地址GPA(Guest-Physical Address),然后,通過定義在VMM中EPT頁表將GPA轉換為主機物理地址HPA(Host-Physical Address),從而訪問真正的物理地址.

2.2 EPT地址轉換

客戶機應用程序通過線性地址訪問物理內存,當虛擬機監控器開啟EPT機制并建立相應的EPT頁表結構后,線性地址到HPA的轉換如圖1所示,以Linux操作系統二級頁表結構進行地址轉換為例,其中CR3中保存的是客戶頁目錄表的物理內存基地址,頁目錄中的頁目錄項保存的是客戶頁表的物理地址,頁表中的頁表項保存的是客戶物理地址GPA的高位部分.

圖1 線性地址到HPA的轉換Fig.1 Linear address translates to HPA

上述整個轉換過程需要進行3次EPT地址轉換,而一次EPT地址轉換需要經過4次頁表轉換.

3 物理內存動態隱藏方法

系統進程或內核模塊實現惡意功能的關鍵在于修改內存中的代碼或數據,本文結合惡意代碼的該種攻擊特點,并針對上述內存保護方法中存在的缺點,提出了一種利用EPT的動態物理內存隱藏方法.

3.1 原型概述

如圖2所示,基于EPT機制實現的物理內存隱藏原型系統框架涉及到計算機系統的應用層、虛擬層和硬件層.應用層的通信模塊負責與PMM進行交互,包括啟動PMM對被保護應用程序的物理內存進行隱藏,以及顯示PMM的監控信息和異常信息.本文通過執行VMCALL指令傳遞相應參數開啟PMM的物理內存隱藏功能.當執行VMCALL指令時,觸發VM exit,陷入PMM,在PMM中判斷VM exit事件類型,如果是VMCALL指令,當傳遞的參數與預先設置的參數匹配時,則啟動PMM的物理內存隱藏功能.PMM中的3個組件是該系統框架的核心,該部分在輕量級虛擬機監控器BitVisor1.4框架上實現,包括系統進程監控模塊,GPA地址隔離與訪問驗證模塊和EPT物理頁屬性設置模塊,其中系統進程監控模塊實現對系統進程切換的實時監控,并獲取進程信息.GPA地址隔離與訪問驗證模塊利用Hash算法對被保護應用程序的物理內存進行動態隔離,并在訪問過程中進行訪問驗證,該模塊是實現物理內存隱藏保護的關鍵.EPT物理頁屬性設置模塊通過對EPT頁表屬性的切換實現對物理頁的訪問控制.具體的設計及實現細節見下文.

圖2 物理內存隱藏原型系統框架Fig.2 Physical memory hiding prototype system

3.2 進程監控與信息獲取

進程是應用程序的執行實體,實現對進程切換的監控是獲取應用程序訪問的物理內存的前提.文獻[11]將寄存器CR3的更新操作作為系統進程切換的監控點,因為系統的每個進程在發生切換時都會將CR3更新為自己頁目錄表的物理內存基地址.但高版本的Linux為了提高進程切換的效率,在切換進程時,如果即將轉入執行狀態的進程的頁目錄表的物理內存基地址與上一個進程的不同,才會更新CR3,當兩個進程共用同一塊物理內存時,基地址相同,不需要更新CR3,所以監控CR3的更新操作不能獲取全部進程信息.

本文通過分析與進程上下文切換相關的內核函數_switch_to發現,當該函數實現的上下文切換過程完成對thread_info的更新操作后,會執行一個CLTS指令清除CR0進程切換標志位—TS,而此時獲得的進程就是即將轉入執行狀態的進程,而且每個進程切換都會執行該操作,同時CLTS指令的執行能夠被PMM監控到,因此本文將CLTS指令的執行作為進程切換的監控點.而thread_info與內核堆棧stack以及進程描述符task_struct的結構關系如圖3所示,thread_info與內核堆棧stack共用一塊大小為THREAD_SIZE內存,因此可以通過內核堆棧棧頂指針esp的值和THREAD_SIZE的值確定thread_info的位置,由thread_info定義可知,thread_info的起始地址即為當前執行進程的進程描述符task_struct的首地址,然后根據task_struct變量的偏移值可以獲取當前執行進程的詳細信息.

圖3 thread_info與task_struct關系Fig.3 Relation of thread_info and task_struct

3.3 物理內存動態隔離與訪問驗證算法

通過上述對系統進程監控的實現,能夠獲取被保護進程的詳細信息,包括進程名(comm),進程號(pid)以及進程描述符task_struct的物理地址(task_struct),由該信息可以唯一定位一個系統進程,從而能夠準確獲取該進程物理內存信息.

本文實現的方法基于Intel VT的EPT機制,沒有修改系統的內存管理結構以及增加新的頁表映射機制,而是在GPA轉換為HPA之前增加了對被保護應用程序的GPA地址進行隔離和訪問驗證.通過動態Hash映射機制,實現對被保護應用程序物理內存的動態隔離,并通過檢測系統進程訪問的GPA是否被Hash實現對物理內存的訪問驗證.

當客戶機應用程序首次訪問物理內存空間時,由于EPT對應的頁表項不存在,會引起EPT violation,產生VM exit,陷入虛擬機監控器,EPT機制會為GPA分配物理內存HPA,并根據頁屬性建立相應的EPT頁表項.本文通過系統進程監控模塊獲取的進程信息判斷GPA的所屬進程,將被保護應用程序的GPA與其他GPA進行分離.在Linux系統中,一個應用程序的正常執行通常需要大量的物理內存空間,因此采用一種可以動態匹配、快速查找的方式對物理內存地址進行組織是降低系統負載的關鍵,這種要求正好符合Hash算法的特點.而實現Hash算法的關鍵在于設計一個能夠避免沖突、均勻分配關鍵字、計算簡單的散列函數.本文設計了一種動態擴展Hash算法,能夠實現動態擴展Hash表上限,為此,我們以ReHash()的方式對HashTableSize按素數長度進行擴展,然后,針對一個GPA采用3次Hash映射,降低Hash沖突.該算法包括初始化Hash表,動態擴展Hash表,Hash一個GPA,檢測一個GPA是否被Hash等功能函數,算法如下.

算法1.將當前進程訪問的GPA映射到Hash表

輸入:Hash表HashTable[],當前進程訪問的GPA

輸出:當前進程訪問的GPA是否被Hash,被hash返回1,否則返回0;

1. InitHashTable();

2. if(GPA)

3. {

4. If(TableUsed >=HashTableSize)

5. Rehash();

6. If(Hashed(GPA)==0)

7. return Hash(GPA);

8. else

9. return 1;

10.}

由于該算法能夠實現動態擴展Hash表,所以實驗中被Hash的GPA個數小于或者等于Hash數組的上限.結合實際情況,我們證明通過3次Hash,產生Hash沖突的概率在可接受的范圍之內.可設應用程序被Hash的GPA個數為n,GPA的集合為G,任何一個GPA為g,且滿足g∈G,Hash表的上限為m,Hash數組集合為M,M可對應一個1行m列的矩陣A=[1,2,3,…,m],且總是滿足n≤m,Hash次數為q.我們證明當q=3時,通過該算法能夠將Hash沖突降到可接受的范圍內.

可得推導結果,由于m≤m2≤m3,因此,當q=3,對每一個GPA執行3次Hash,所有GPA產生沖突的概率最小,并且,在實際情況下當q=3時,沒有產生沖突的情況,能夠滿足實際需求.

3.4 物理內存訪問控制方法

當應用程序訪問主機物理內存HPA時,如果EPT頁表項的訪問屬性位bit2:0全為0、readable位為0、writeable位為0或executable位為0,能夠引起EPT violation,并產生VM exit.因此,可以通過設置對應的EPT 頁表項的屬性位,實現對物理內存的訪問控制.

實現流程如圖4所示,當PMM監控到被保護應用程序的執行進程發生切換時,當應用程序第一次訪問物理內存時,對應的EPT頁表項不存在,會引起EPT violation,并且發生VM exit陷入PMM.此時,首先由GPA地址隔離與訪問驗證模塊對當前的GPA進行Hash,并建立對應的EPT頁表項,同時設置EPT頁表項屬性為readable,使任何進程對被Hash過的GPA對應的HPA進行訪問都會產生一個EPT violation,并由PMM處理這次訪問事件.

圖4 物理內存訪問控制實現流程Fig.4 Realization of physical memory access control

再次出現進程訪問主機物理內存時,首先判斷該進程是否為被保護應用程序的執行進程,若是,則判斷當前訪問的GPA是否被Hash,若沒有被Hash,則進行Hash,并建立對應的EPT頁表項,同時設置EPT頁表項屬性為readable,若已經被Hash映射,則修改當前的對應的EPT頁表屬性為可讀、可寫、可執行,允許被保護應用程序的執行進程訪問主機物理內存.此時,我們通過程序指令級監控實現這個訪存過程.指令級監控是利用EFLAGS寄存器的TF(Trap Flag)標志位實現,TF標志位是進程的跟蹤標志位,用來控制CPU在單步調試模式下執行一條指令,當TF標志位被設置為1時,當前指令執行后會產生一個中斷,當TF標志位被設置為0時,當前指令執行后不會產生中斷.因此當被保護應用程序的執行進程訪問已經被Hash過的GPA時,在PMM中將該進程EFLAGS標志寄存器的TF標志位設置為1,然后執行VMRESUME返回客戶機執行內存訪問操作,保證在客戶機應用程序執行完訪問物理內存的指令后再次產生VM exit,陷入PMM,然后將剛被訪問過的物理內存對應的EPT頁表項屬性設置為readable,保證下次對該物理內存進行訪問時仍能夠產生EPT violation;若當前的訪問進程不是被保護應用程序的執行進程,也要先判斷當前被訪問的GPA是否被Hash,若是,則表示當前進程正在訪問被保護應用程序的GPA,為了阻止該訪問,本文的解決方法是通過執行add_ip()函數跳過該訪存指令;若不是,則允許訪問.

4 實驗與分析

本文對原型系統PMM功能和性能兩個方面進行了測試.功能測試主要根據物理內存隱藏方法實現原理檢測該方法能否對被保護應用程序的物理內存實現隱藏功能,即利用本文方法實現對被保護應用GPA的動態隔離和訪問驗證.性能測試用于測試在利用該方法隱藏被保護應用程序的物理內存時,PMM引入的監控開銷,實驗環境如下:客戶機為Intel(R)Core(TM)i7-3770 @3.4GHz處理器,16GB內存,Ubuntu-12.04LTS64位操作系統,內核版本號為Linux 3.2.0-29-generic,虛擬機監控器為BitVisor1.4.

4.1 功能測試分析

功能測試主要包括3個功能模塊測試:1)監控系統進程切換,獲取被保護應用程序的執行進程信息,在這里假設被保護的應用程序是一個腳本程序start.sh,執行進程對應一個守護進程;2)利用本文設計的Hash算法動態隔離被保護應用程序的GPA,并進行訪問驗證;3)阻止非法進程非法訪問被保護應用程序的物理內存地址.

4.1.1 監控系統進程

監控系統進程,主要用來獲取被保護應用程序start.sh的執行進程信息,通過與在應用層執行“ps-e |grep start.sh”獲取到的進程信息進行對比,測試在PMM中監控到的目標進程的準確性,實驗結果如圖5所示.

圖5 目標進程的關鍵信息Fig.5 Key information of target process

4.1.2 動態隔離與訪問驗證

應用程序執行后首次訪問物理內存時,由于EPT頁表中沒有對應的EPT頁表項,會引發EPT violation,同時產生VM exit陷入PMM.此時,PMM中的GPA動態隔離與訪問驗證模塊對被保護應用程序的GPA利用Hash算法進行動態隔離,并設置對應的EPT頁表項屬性為readable,實驗結果如圖6所示.

圖6 利用Hash算法對GPA進行動態隔離Fig.6 Hash algorithm dynamic isolate GPA

當被保護應用程序訪問已經被Hash的物理內存時,由于被Hash的物理內存對應的EPT頁表項已經被設置為readable,因此,同樣會引發EPT violation,陷入PMM.此時,首先設置EFLAGS的TF位,并通過執行VMRESUME命令實現單步訪存操作,訪存結束后再次陷入PMM,重新設置剛被訪問過的GPA對應的EPT頁表項屬性為readable.而其他進程能夠通過兩種方式對被保護應用程序的物理內存進行非法訪問:第1種是獲取root權限,以特權進程的方式直接訪問被保護應用程序的物理內存,第2種是通過操作系統漏洞,將被保護應用程序的物理內存映射到其他進程的物理地址空間,從而以任意權限訪問被保護應用程序的物理內存,針對這兩種方式,本文提出的方法首先判斷當前的訪問進程,然后判斷當前進程訪問的GPA,如果該GPA已經被Hash過,但是當前進程不是被保護應用程序的執行進程,則跳過該訪存操作.因此,本文提出的方法能夠有效隱藏被保護應用程序的物理內存,防止其他應用程序的非法訪問.

4.2 性能測試分析

本文方法主要在兩個方面會產生額外的系統開銷:首先是利用該方法對每個系統進程訪問的物理內存地址都需要進行Hash判斷.當系統進程是被保護應用程序的執行進程時,還需要對未被Hash的GPA進行Hash,其次,如果當前系統進程是被保護應用程序的執行進程或者是其他進程時,當被訪問的物理內存地址已經被Hash,還需要對GPA對應的EPT頁表項屬性進行相應設置,保證物理內存被安全訪問,同時這兩個方面會引起VM exit和VM enrty的發生.測試中使用lmbench3.0分別測試了原操作系統(Phys)和加載PMM后的操作系統(PMM)的在系統調用(null call)、I/O操作(null I/O)、信號處理(sig inst和sig hndl)、進程相關處理(fork、execve、ctxsw)、物理頁處理(Prot Fault和Page Fault)、物理內存訪問(Mem read,Mem write和Rand mem)以及文件操作(File create和File delete)等方面的性能,測試結果如圖7所示,圖中所有測試結果單位均為us,柱狀條越高,說明帶來的性能開銷越大.

根據測試結果可知,由于PMM未對系統調用(NULL Call)、I/O操作(NULL I/O)及信號處理(Sig Inst和Sig Hndl)進行陷入和監控,均直接交由處理器執行,因此開啟PMM后上述幾點均未引入額外開銷.由于PMM開啟了對系統進程的實時監控,因此與進程切換相關的開銷,如fork進程后再退出(Fork Porc)、執行execve后再退出(Exec Proc)和進程上下文切換過程(Ctxsw)等開銷有所增加.由于本文利用EPT機制實現對被保護應用程序訪問的物理內存進行訪問控制,會涉及到頁表屬性設置以及缺頁情況的處理,因此在頁保護屬性設置(Prot Fault)和缺頁處理(Page Fault)等開銷會有所增加.

圖7性能測試結果Fig.7 Performance test result

除此之外,為了更加清楚的說明利用EPT機制實現對物理內存的訪問控制所帶來的性能開銷,該實驗增加了讀、寫1k物理內存時的性能測試以及物理內存隨機訪問性能測試,測試結果表明,開啟EPT機制后執行以上3種操作會帶來額外的性能開銷.同時,當進程創建和刪除大小為1k的文件時,同樣會增加系統性能開銷.

綜上對性能測試結果的分析,與原物理機相比,利用EPT機制實現對被保護應用程序訪問的物理內存進行訪問控制會增加系統性能開銷,但增加幅度均在10%以內.

4.3 測試結果分析

根據功能測試和性能測試結果可知,本文提出的基于EPT的物理內存隱藏方法能夠有效的保護應用程序訪問的物理內存空間,并且阻止其他應用對被隱藏物理內存空間的非法訪問,同時該方法不影響客戶機系統的正常運行,引入的系統開銷在可接受的范圍內.

5 總 結

本文首先分析了EPT內存虛擬化機制實現原理,應用程序訪問的GPA需要經過EPT轉換為HPA才能訪問真正的物理內存,利用這種特點,能夠在更底層實現對物理內存的訪問控制.然后,利用本文設計的Hash算法實現了對被保護應用程序物理內存的動態隔離,同時對訪問被保護應用程序物理內存的進程實現了訪問驗證.最后,通過設置EPT頁表的只讀屬性位,實現對物理內存的訪問控制,保證了對被保護應用程序物理內存的訪問能夠被PMM捕獲和阻止.實驗結果表明,該方法能夠實現上述中的各項功能,并且引入較小的系統性能開銷.

猜你喜歡
進程物理方法
只因是物理
井岡教育(2022年2期)2022-10-14 03:11:44
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
處處留心皆物理
三腳插頭上的物理知識
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
我不是教物理的
中學生(2015年2期)2015-03-01 03:43:33
社會進程中的新聞學探尋
民主與科學(2014年3期)2014-02-28 11:23:03
我國高等教育改革進程與反思
教育與職業(2014年7期)2014-01-21 02:35:04
主站蜘蛛池模板: 99久久精品国产自免费| 福利姬国产精品一区在线| 不卡国产视频第一页| 亚洲无限乱码| 欧美第九页| 国产91高清视频| 亚洲看片网| 狠狠躁天天躁夜夜躁婷婷| 精品亚洲欧美中文字幕在线看| 亚洲无码免费黄色网址| 久久男人视频| 国产在线91在线电影| 国产a网站| 一本大道无码日韩精品影视| 毛片a级毛片免费观看免下载| 国产成人91精品| 国产在线无码av完整版在线观看| 亚洲欧洲自拍拍偷午夜色| 国产在线观看精品| 国产综合在线观看视频| 日韩成人在线一区二区| 国产精品手机视频一区二区| 日韩美一区二区| 成人毛片免费观看| 亚洲va视频| 日韩在线欧美在线| 国产亚洲精久久久久久久91| 九九热精品视频在线| 欧美日韩国产精品va| 欧美日韩国产综合视频在线观看| 亚洲中文在线看视频一区| 99精品伊人久久久大香线蕉| 久久黄色免费电影| 亚洲精品片911| 在线观看亚洲精品福利片| 国产精品福利尤物youwu| 亚洲性网站| 国产成人久视频免费| 99国产在线视频| 亚洲香蕉在线| 久久久久人妻精品一区三寸蜜桃| 国产欧美日韩专区发布| 久久精品国产一区二区小说| 国产欧美专区在线观看| 高清色本在线www| 亚洲视频色图| 女同久久精品国产99国| 性做久久久久久久免费看| 日韩高清中文字幕| 亚洲不卡影院| 91精品在线视频观看| 久久99精品久久久久久不卡| 99精品热视频这里只有精品7| 国模极品一区二区三区| 免费国产黄线在线观看| 美女无遮挡拍拍拍免费视频| 国产免费久久精品99re丫丫一| 国产精品自拍合集| 国产极品美女在线播放| 亚洲无线一二三四区男男| 波多野结衣爽到高潮漏水大喷| 久久国产乱子| 欧洲亚洲一区| 亚洲国产av无码综合原创国产| 日本午夜精品一本在线观看 | 亚洲国产日韩一区| 国产杨幂丝袜av在线播放| 久久熟女AV| 色噜噜在线观看| 欧美福利在线| 日本三级精品| 国产亚洲精品va在线| 婷婷午夜天| 亚洲成人一区二区| 久久久国产精品免费视频| 亚洲中文无码av永久伊人| 超碰免费91| 国产三区二区| 婷婷色狠狠干| jizz国产在线| 国产va欧美va在线观看| 国产91透明丝袜美腿在线|