李揚,周安民,張磊,陳航
(1.四川大學電子信息學院,成都 610065;2.四川無聲信息技術有限公司,成都 610041)
一種基于硬件虛擬化的Rootkit技術
李揚1,周安民1,張磊2,陳航2
(1.四川大學電子信息學院,成都 610065;2.四川無聲信息技術有限公司,成都 610041)
針對當前Windows x64版本的內核保護技術,提出一種基于硬件虛擬化的內核Rootkit技術,該技術利用Intel VT-x硬件虛擬化技術將客戶系統(Guest OS)遷移到VMM之上運行實現Rootkit。借鑒Shadow Walker內存隱藏思想,基于擴展頁表技術對客戶系統的不同內存操作映射不同的物理內存,實現隱藏Rootkit代碼,對內核保護研究有一定的啟發意義。實驗證明該技術穩定性強,能夠繞過內核保護機制實現內核Rootkit。
內核保護;硬件虛擬化;內核Rootkit;擴展頁表
無論是對于黑客攻擊研究者還是安全研究人員,內核Rootkit一直是二進制安全研究的熱點。黑客攻擊者利用內核Rootkit技術來隱藏攻擊行為不被操作系統或者反病毒軟件發現(包括文件、網絡端口、注冊表、進程線程等),安全研究人員研究內核Rootkit技術提升反病毒軟件查殺能力和增加內核主動防御軟件的隱蔽性[1-2]。在黑客攻擊者與安全研究人員不斷攻防博弈下,Rootkit技術不斷發展,從用戶態到內核態,從函數內聯掛鉤到直接操縱內核對象(Direct Kernel Object Manipulation)[3]。
由于Windows平臺使用的廣泛性,Windows內核Rootkit一直是攻防雙方研究的重點對象。早期由于微軟對Widnwos內核層面管控不完善,黑客攻擊者通過加載特定功能的驅動模塊就能實現Rootkit功能。在這種背景下,針對Windows系統的內核Rootkit攻擊方法不斷出現,這些Rootkit攻擊方法主要分為兩種,直接修改內核指令流程和直接操縱內核對象,前者通過在正常內核指令中添加鉤子指令(Hook)使指令執行流程發生改變從而過濾特定信息,后者通過直接修改內核內存中指令查詢的內核對象來實現特定功能的Rootkit[4]。為應對這些內核Rootkit對系統內核修改造成的危害,微軟在x64版本的Windows系統中新增了一個內核完整性保護措施:內核補丁保護(Kernel Patch Protection),又稱為PatchGuard,通過循環地對內核中重要內核函數及一些關鍵數據結構進行檢查判斷內核是否被修改,如果被修改則直接引發0x109藍屏[5]。
本文提出一種利用硬件虛擬化技術在x64版本Windows上實現內核Rootkit的技術,通過內存欺騙的方式對抗PatchGuard,以實現內核Rootkit,利用擴展頁表EPT(Extented Page Table)對Guest OS不同的內存操作映射不同的物理內存,從而保證攻擊代碼對內核保護PatchGuard的透明性。
硬件虛擬化是一種對計算機或則操作系統的虛擬,表現為一個抽象的計算平臺,提升了處理器的使用效率,特別是各種云服務發展的今天,硬件虛擬化被應用到各個領域,但其實在1999年,硬件虛擬化就被IBM實現,運用到Power 5 CPU實現邏輯分區。在Windows平臺下應用硬件虛擬化技術主要包括Intel-VT及AMD-V兩種,本文基于Intel VT-x硬件虛擬化技術實現。
1.1 VMM及其運行模式切換
Intel VT-x硬件虛擬化技術稱為虛擬機擴展(Virtual Machine Extension,VMX),主要包含兩個角色:虛擬機監視器(Virtual Machine Monitor,VMM)和客戶操作系統(Guest OS)。VMM位于VMX root模式,運行在Guest OS下一層比Ring 0權限更大,能夠完全控制硬件資源包括CPU資源、物理內存、中斷管理及I/O控制等,Guest OS位于VMX non-root模式[6],VMM運行模式及權限級別如圖1所示。

圖1 VMM運行模式及權限級別

圖2 VMM與Guest OS的交互
VMM root模式與VMM non-root模式的切換如圖2所示,從特權模式到非特權模式的切換被稱為VM遷入(VM Entry),相反的切換稱為VM遷出(VM Exit),這兩種模式的狀態遷移由虛擬機控制結構(Virtual–Machine Control Structure,VMCS)控制。在VMM啟動Guest OS后,當Guest OS在運行過程中,在執行某些指令或則發生某些異常時會觸發#VMEXIT事件而陷入VMM中,此時VMM獲得Guest OS控制權,在VMM對陷入的事件處理后(可以通過對VMCS結構進行配置選擇處理特定的事件),VMM使用VMRESUME指令恢復Guest OS執行。
利用硬件虛擬化實現的VMM與Guest OS模型中,VMM是一個輕量級的虛擬機監視器,VMM將原本在物理處理器中運行操作系統變成客戶操作系統Guest OS,VMM位于Guest OS特權等級Ring 0之下,能夠完全控制Guest OS對各種資源的訪問。但與普通虛擬機客戶機模型不同的是,硬件虛擬化實現的VMM不需要對系統進行完全的抽象,只是當發生特定的事件與異常后VMM才獲得完全控制權,允許Guest OS與本地I/O進行訪問,大大提高了運行的效率。
1.2 虛擬內存及擴展頁表EPT
在硬件虛擬化提供的虛擬模型中,VMM管理物理硬件控制Guest OS對各種資源的訪問,為Guest OS提供運行環境。虛擬內存是計算機系統管理的一種技術,為操作系統提供連續可用的內存,提供虛擬內存到真實物理內存的映射關系,CPU必須通過內存管理單元將虛擬地址(Virtual Address,VA)轉換為物理地址(Physical Address)。在虛擬環境中,VMM管理真實的物理內存即主機物理內存(Host Physical Address, HPA),直接控制著Guset OS對物理內存的訪問,在這種情況下原有的物理地址變成主機物理地址,客戶物理地址與物理內存不再一一對應,客戶物理地址需要通過VMM的虛擬內存管理單元(MMU Virtualization)轉換成HPA,具體轉換關系如圖3所示。

圖3 VMM內存虛擬化
在硬件輔助內存虛擬化技術EPT(Extent Physical Table)出現之前,內存的虛擬化通常采用影子頁表解決,影子頁表是通過軟件方式實現,在多個CPU之間同步頁面數據時存在嚴重的性能問題[6]。從Intel VT-x開始,通過在虛擬地址到物理地址的翻譯機制上增加一層新的翻譯機制即EPT擴展頁表技術,大大提升了虛擬化下的虛擬內存管理的效率。EPT工作在VMMno-root模式下,借助EPT頁表完成GVA到HPA的轉換,EPT的頂級頁表保存在VMCS中,圖4是在EPT擴展頁表開啟下Guest OS線性地址到主機物理地址轉換的過程圖,兩次地址轉換過程都由CPU硬件(CR3和EPT頁表)完成。

圖4 開啟EPT下地址轉換
2.1 主要方法和技術
微軟在2005年推出的x64版本的Windows XP及Windows Server 2003第一次引入了PatchGuard內核保護機制,并且在之后的x64 Windows版本中不斷更新完善,PatchGuard通過定期檢查來確保系統內核函數及關鍵結構體不被更改。如果修改被檢測到,Patch-Guard就會開啟錯誤檢查導致系統藍屏關機,但是內核Rootkit不可避免地要修改Windows內核數據。為實現對PatchGuard的內核Rootkit,本文利用基于Intel VT-x的硬件虛擬化技術在Windows系統下層實現一個輕量級虛擬機監控器VMM,借鑒Shadow Walker[8]內核Rootkit內存隱藏方法,對需要修改的內核內存設置EPT頁表,對不同的內存操作定向到不同的物理內存,實現對PatchGuard的透明。
當Rootkit程序初始化時,對需要修改的原始內核內存O設置2個內存拷貝A、B。A拷貝用于讀寫,B拷貝用于執行,對B拷貝中設置INT 3斷點且B拷貝不允許讀寫操作,初始設置對O重定向到B拷貝。當對B拷貝進行讀寫操作時會觸發EPT Violation異常,執行VM-exit控制邏輯使VMM獲得控制權,將操作再次重定向到未修改拷貝A,實現修改內存對PatchGuard的透明。當執行時,直接進入B拷貝,觸發BP異常,VMM獲得控制權然后修改函數邏輯執行Rootkit函數代碼[9]。
2.2 系統框架及實現
根據主要方法和技術,設計的內核Rootkit系統框架執行邏輯如圖5所示。

圖5 內核RootKit總體流程設計
Rootkit程序以Windows內核驅動的形式存在,當Rootkit被加載后執行初始化操作,執行VMM初始化遷移原系統使之成為Guest OS系統運行在VMX nonroot模式,Rootkit程序作為VMM運行在VMM-root模式,然后分配EPT頁面設置頁面拷貝及重定向等,完成初始化操作后執行VMMRESUME指令Guest OS恢復執行,VMM等待VM-exit事件發生后Guest OS陷入VMM。
當Guest OS對需要修改的內存區域執行讀寫操作時,由于已經設置了EPT entry到拷貝B且拷貝B被設置為不可讀寫,導致EPT vilolation異常觸發VM Exit 使Guest OS陷入VMM,VMM將EPT entry設置為拷貝A并設置MTF位(通過設置MTF位可以使讀寫執行完后Guest OS重新觸發VM Exit),在Guest OS執行完讀寫操作后會再次觸發MTF VM Exit,VMM重新設置EPT Entry為拷貝B回到初始狀態。
當Guest OS在執行需要修改的內存區域時,直接進入拷貝B執行,由于已經在拷貝B中設置了INT 3斷點,導致BP異常觸發VM Exit使Guest OS陷入VMM,VMM通過檢查Guest OS寄存器RIP的值是否為需要修改的函數地址進行處理,如果是需要修改的函數地址則直接修改RIP地址為RootKit函數地址,過濾相應的信息,否則正常執行后返回。
實驗環境如表1所示。

表1
實驗以進程隱藏為驗證,通過內核Hook內核函數NtQuerySystemInformation隱藏進程InstDrv.exe[10]。當執行到原始NtQuerySystemInformation內存區域時,觸發VM Exit使VMM獲得控制權,VMM修改當前RIP值為HookNtQuerySystemInformation,使得代碼執行流程進入Rootkit函數。在HookNtQuerySystemInformation函數中執行原始函數后在SYSTEM_PROCESS_INFORMATION鏈表信息中摘除關于InstDrv.exe的進程信息,達到內核進程信息隱藏,實驗效果如圖6所示。
在實驗中未觸發PatchGurad而導致藍屏,可以得出本方案能夠較好地在基于x64架構的Windows系統下實現內核Rootkit,在內核進程鏈表中摘除了需要隱藏的“InstrDrv.exe”進程信息,達到了內核進程隱藏的目的且實現了Rootkit代碼對內核保護PatchGuard的透明性。

圖6 虛擬化RootKit隱藏進程效果
通過引入硬件虛擬化技術,本文提出并實現了基于硬件虛擬化的Rootkit技術方法,利用EPT擴展頁面技術對需要修改的內存不同操作重定位到不同主機物理內存,實現Rootkit代碼對內核保護機制PatchGuard的透明性。該方法充分利用底層硬件虛擬化技術實現內存,對于Rootkit和系統保護技術研究具有一定的啟發意義。
[1]Symantec Corporation.Windows rootkit overview[EB/OL].[2014-12-10].http://www.symantec.com/avcenter/reference/windows.rootkit. overview.pdf
[2]Hoglund G,Butler J.Rootkits:Subverting the Windows Kernel[M].USA:Addison-Wesley Professional,2007.
[3]易再堯,黃本雄,孫建華.一種基于虛擬化哈佛體系結構的Rootkit技術[J].微電子學與計算機,2010,27(4):129-132.
[4]張瑜,劉慶中,李濤,等.Rootkit研究綜述[J].電子科技大學學報,2015(4):563-578.
[5]Ahmed I,Iii G G R,Zoranic A,et al.Integrity Checking of Function Pointers in Kernel Pools via Virtual Machine Introspection[M]. Information Security.Springer International Publishing,2015.
[6]凌沖,孫樂昌,劉京菊,等.一種硬件虛擬化技術的Rootkit及其檢測[J].西安科技大學學報,2010,30(1):86-91.
[7]李勇,郭玉東,王曉睿,等.基于EPT的內存虛擬化研究與實現[J].計算機工程與設計,2010,31(18):4101-4104.
[8]Sparks S,Butler J,Sparks S,et al.Shadow Walker:Raising The Bar For Windows Rootkit Detection[J].Phrack,2005.
[9]Satoshi,Tanda.Monitoring&Controlling Kernel-mode Events by HyperPlatform[EB/OL].https://recon.cx/2016/resources/slides/RECON-0xA-HyperPlatform-Satoshi.pdf.
[10]王雷,凌翔.Windows Rootkit進程隱藏與檢測技術[J].計算機工程,2010,36(5):140-142.
A Rootkit Based on Hardware Virtualization
LI Yang1,ZHOU An-min1,ZHANG Lei2,CHEN Hang2
(1.College of Electronics and Information Engineering,Sichuan University,Chengdu 610065; 2.Sichuan Silence Information Technology Co.,Ltd.Chengdu 610041)
To bypass the Kernel Patch Protection of Windows x64,puts forward a kernel Rootkit technology based on hardware virtualization,which migrates the Guest OS to VMM to achieve kernel Rootkit by Intel VT-x hardware virtualization technology.Inspired by the Shadow Walker,uses the EPT technology to hide rootkit code by mapping different physical memory to different Guest OS memory operations,it has some enlightening significance to the study of kernel protection.Experiments show that the method is robust and can bypass the Kernel Patch Protection and achieve kernel Rootkit.
Kernel Patch Protection;Hardware Virtualization;Kernel Rootkit;EPT
1007-1423(2017)05-0021-05
10.3969/j.issn.1007-1423.2017.05.006
李揚(1992-),男,四川綿陽人,碩士研究生,研究方向為信息安全
2016-12-01
2017-02-06
周安民(1963-),男,四川成都人,碩士導師,研究員,研究方向為信息安全保護技術