李揚(yáng),周安民,張磊,陳航
(1.四川大學(xué)電子信息學(xué)院,成都 610065;2.四川無聲信息技術(shù)有限公司,成都 610041)
一種基于硬件虛擬化的Rootkit技術(shù)
李揚(yáng)1,周安民1,張磊2,陳航2
(1.四川大學(xué)電子信息學(xué)院,成都 610065;2.四川無聲信息技術(shù)有限公司,成都 610041)
針對當(dāng)前Windows x64版本的內(nèi)核保護(hù)技術(shù),提出一種基于硬件虛擬化的內(nèi)核Rootkit技術(shù),該技術(shù)利用Intel VT-x硬件虛擬化技術(shù)將客戶系統(tǒng)(Guest OS)遷移到VMM之上運(yùn)行實(shí)現(xiàn)Rootkit。借鑒Shadow Walker內(nèi)存隱藏思想,基于擴(kuò)展頁表技術(shù)對客戶系統(tǒng)的不同內(nèi)存操作映射不同的物理內(nèi)存,實(shí)現(xiàn)隱藏Rootkit代碼,對內(nèi)核保護(hù)研究有一定的啟發(fā)意義。實(shí)驗(yàn)證明該技術(shù)穩(wěn)定性強(qiáng),能夠繞過內(nèi)核保護(hù)機(jī)制實(shí)現(xiàn)內(nèi)核Rootkit。
內(nèi)核保護(hù);硬件虛擬化;內(nèi)核Rootkit;擴(kuò)展頁表
無論是對于黑客攻擊研究者還是安全研究人員,內(nèi)核Rootkit一直是二進(jìn)制安全研究的熱點(diǎn)。黑客攻擊者利用內(nèi)核Rootkit技術(shù)來隱藏攻擊行為不被操作系統(tǒng)或者反病毒軟件發(fā)現(xiàn)(包括文件、網(wǎng)絡(luò)端口、注冊表、進(jìn)程線程等),安全研究人員研究內(nèi)核Rootkit技術(shù)提升反病毒軟件查殺能力和增加內(nèi)核主動(dòng)防御軟件的隱蔽性[1-2]。在黑客攻擊者與安全研究人員不斷攻防博弈下,Rootkit技術(shù)不斷發(fā)展,從用戶態(tài)到內(nèi)核態(tài),從函數(shù)內(nèi)聯(lián)掛鉤到直接操縱內(nèi)核對象(Direct Kernel Object Manipulation)[3]。
由于Windows平臺使用的廣泛性,Windows內(nèi)核Rootkit一直是攻防雙方研究的重點(diǎn)對象。早期由于微軟對Widnwos內(nèi)核層面管控不完善,黑客攻擊者通過加載特定功能的驅(qū)動(dòng)模塊就能實(shí)現(xiàn)Rootkit功能。在這種背景下,針對Windows系統(tǒng)的內(nèi)核Rootkit攻擊方法不斷出現(xiàn),這些Rootkit攻擊方法主要分為兩種,直接修改內(nèi)核指令流程和直接操縱內(nèi)核對象,前者通過在正常內(nèi)核指令中添加鉤子指令(Hook)使指令執(zhí)行流程發(fā)生改變從而過濾特定信息,后者通過直接修改內(nèi)核內(nèi)存中指令查詢的內(nèi)核對象來實(shí)現(xiàn)特定功能的Rootkit[4]。為應(yīng)對這些內(nèi)核Rootkit對系統(tǒng)內(nèi)核修改造成的危害,微軟在x64版本的Windows系統(tǒng)中新增了一個(gè)內(nèi)核完整性保護(hù)措施:內(nèi)核補(bǔ)丁保護(hù)(Kernel Patch Protection),又稱為PatchGuard,通過循環(huán)地對內(nèi)核中重要內(nèi)核函數(shù)及一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)進(jìn)行檢查判斷內(nèi)核是否被修改,如果被修改則直接引發(fā)0x109藍(lán)屏[5]。
本文提出一種利用硬件虛擬化技術(shù)在x64版本W(wǎng)indows上實(shí)現(xiàn)內(nèi)核Rootkit的技術(shù),通過內(nèi)存欺騙的方式對抗PatchGuard,以實(shí)現(xiàn)內(nèi)核Rootkit,利用擴(kuò)展頁表EPT(Extented Page Table)對Guest OS不同的內(nèi)存操作映射不同的物理內(nèi)存,從而保證攻擊代碼對內(nèi)核保護(hù)PatchGuard的透明性。
硬件虛擬化是一種對計(jì)算機(jī)或則操作系統(tǒng)的虛擬,表現(xiàn)為一個(gè)抽象的計(jì)算平臺,提升了處理器的使用效率,特別是各種云服務(wù)發(fā)展的今天,硬件虛擬化被應(yīng)用到各個(gè)領(lǐng)域,但其實(shí)在1999年,硬件虛擬化就被IBM實(shí)現(xiàn),運(yùn)用到Power 5 CPU實(shí)現(xiàn)邏輯分區(qū)。在Windows平臺下應(yīng)用硬件虛擬化技術(shù)主要包括Intel-VT及AMD-V兩種,本文基于Intel VT-x硬件虛擬化技術(shù)實(shí)現(xiàn)。
1.1 VMM及其運(yùn)行模式切換
Intel VT-x硬件虛擬化技術(shù)稱為虛擬機(jī)擴(kuò)展(Virtual Machine Extension,VMX),主要包含兩個(gè)角色:虛擬機(jī)監(jiān)視器(Virtual Machine Monitor,VMM)和客戶操作系統(tǒng)(Guest OS)。VMM位于VMX root模式,運(yùn)行在Guest OS下一層比Ring 0權(quán)限更大,能夠完全控制硬件資源包括CPU資源、物理內(nèi)存、中斷管理及I/O控制等,Guest OS位于VMX non-root模式[6],VMM運(yùn)行模式及權(quán)限級別如圖1所示。
圖1 VMM運(yùn)行模式及權(quán)限級別
圖2 VMM與Guest OS的交互
VMM root模式與VMM non-root模式的切換如圖2所示,從特權(quán)模式到非特權(quán)模式的切換被稱為VM遷入(VM Entry),相反的切換稱為VM遷出(VM Exit),這兩種模式的狀態(tài)遷移由虛擬機(jī)控制結(jié)構(gòu)(Virtual–Machine Control Structure,VMCS)控制。在VMM啟動(dòng)Guest OS后,當(dāng)Guest OS在運(yùn)行過程中,在執(zhí)行某些指令或則發(fā)生某些異常時(shí)會(huì)觸發(fā)#VMEXIT事件而陷入VMM中,此時(shí)VMM獲得Guest OS控制權(quán),在VMM對陷入的事件處理后(可以通過對VMCS結(jié)構(gòu)進(jìn)行配置選擇處理特定的事件),VMM使用VMRESUME指令恢復(fù)Guest OS執(zhí)行。
利用硬件虛擬化實(shí)現(xiàn)的VMM與Guest OS模型中,VMM是一個(gè)輕量級的虛擬機(jī)監(jiān)視器,VMM將原本在物理處理器中運(yùn)行操作系統(tǒng)變成客戶操作系統(tǒng)Guest OS,VMM位于Guest OS特權(quán)等級Ring 0之下,能夠完全控制Guest OS對各種資源的訪問。但與普通虛擬機(jī)客戶機(jī)模型不同的是,硬件虛擬化實(shí)現(xiàn)的VMM不需要對系統(tǒng)進(jìn)行完全的抽象,只是當(dāng)發(fā)生特定的事件與異常后VMM才獲得完全控制權(quán),允許Guest OS與本地I/O進(jìn)行訪問,大大提高了運(yùn)行的效率。
1.2 虛擬內(nèi)存及擴(kuò)展頁表EPT
在硬件虛擬化提供的虛擬模型中,VMM管理物理硬件控制Guest OS對各種資源的訪問,為Guest OS提供運(yùn)行環(huán)境。虛擬內(nèi)存是計(jì)算機(jī)系統(tǒng)管理的一種技術(shù),為操作系統(tǒng)提供連續(xù)可用的內(nèi)存,提供虛擬內(nèi)存到真實(shí)物理內(nèi)存的映射關(guān)系,CPU必須通過內(nèi)存管理單元將虛擬地址(Virtual Address,VA)轉(zhuǎn)換為物理地址(Physical Address)。在虛擬環(huán)境中,VMM管理真實(shí)的物理內(nèi)存即主機(jī)物理內(nèi)存(Host Physical Address, HPA),直接控制著Guset OS對物理內(nèi)存的訪問,在這種情況下原有的物理地址變成主機(jī)物理地址,客戶物理地址與物理內(nèi)存不再一一對應(yīng),客戶物理地址需要通過VMM的虛擬內(nèi)存管理單元(MMU Virtualization)轉(zhuǎn)換成HPA,具體轉(zhuǎn)換關(guān)系如圖3所示。
圖3 VMM內(nèi)存虛擬化
在硬件輔助內(nèi)存虛擬化技術(shù)EPT(Extent Physical Table)出現(xiàn)之前,內(nèi)存的虛擬化通常采用影子頁表解決,影子頁表是通過軟件方式實(shí)現(xiàn),在多個(gè)CPU之間同步頁面數(shù)據(jù)時(shí)存在嚴(yán)重的性能問題[6]。從Intel VT-x開始,通過在虛擬地址到物理地址的翻譯機(jī)制上增加一層新的翻譯機(jī)制即EPT擴(kuò)展頁表技術(shù),大大提升了虛擬化下的虛擬內(nèi)存管理的效率。EPT工作在VMMno-root模式下,借助EPT頁表完成GVA到HPA的轉(zhuǎn)換,EPT的頂級頁表保存在VMCS中,圖4是在EPT擴(kuò)展頁表開啟下Guest OS線性地址到主機(jī)物理地址轉(zhuǎn)換的過程圖,兩次地址轉(zhuǎn)換過程都由CPU硬件(CR3和EPT頁表)完成。
圖4 開啟EPT下地址轉(zhuǎn)換
2.1 主要方法和技術(shù)
微軟在2005年推出的x64版本的Windows XP及Windows Server 2003第一次引入了PatchGuard內(nèi)核保護(hù)機(jī)制,并且在之后的x64 Windows版本中不斷更新完善,PatchGuard通過定期檢查來確保系統(tǒng)內(nèi)核函數(shù)及關(guān)鍵結(jié)構(gòu)體不被更改。如果修改被檢測到,Patch-Guard就會(huì)開啟錯(cuò)誤檢查導(dǎo)致系統(tǒng)藍(lán)屏關(guān)機(jī),但是內(nèi)核Rootkit不可避免地要修改Windows內(nèi)核數(shù)據(jù)。為實(shí)現(xiàn)對PatchGuard的內(nèi)核Rootkit,本文利用基于Intel VT-x的硬件虛擬化技術(shù)在Windows系統(tǒng)下層實(shí)現(xiàn)一個(gè)輕量級虛擬機(jī)監(jiān)控器VMM,借鑒Shadow Walker[8]內(nèi)核Rootkit內(nèi)存隱藏方法,對需要修改的內(nèi)核內(nèi)存設(shè)置EPT頁表,對不同的內(nèi)存操作定向到不同的物理內(nèi)存,實(shí)現(xiàn)對PatchGuard的透明。
當(dāng)Rootkit程序初始化時(shí),對需要修改的原始內(nèi)核內(nèi)存O設(shè)置2個(gè)內(nèi)存拷貝A、B。A拷貝用于讀寫,B拷貝用于執(zhí)行,對B拷貝中設(shè)置INT 3斷點(diǎn)且B拷貝不允許讀寫操作,初始設(shè)置對O重定向到B拷貝。當(dāng)對B拷貝進(jìn)行讀寫操作時(shí)會(huì)觸發(fā)EPT Violation異常,執(zhí)行VM-exit控制邏輯使VMM獲得控制權(quán),將操作再次重定向到未修改拷貝A,實(shí)現(xiàn)修改內(nèi)存對PatchGuard的透明。當(dāng)執(zhí)行時(shí),直接進(jìn)入B拷貝,觸發(fā)BP異常,VMM獲得控制權(quán)然后修改函數(shù)邏輯執(zhí)行Rootkit函數(shù)代碼[9]。
2.2 系統(tǒng)框架及實(shí)現(xiàn)
根據(jù)主要方法和技術(shù),設(shè)計(jì)的內(nèi)核Rootkit系統(tǒng)框架執(zhí)行邏輯如圖5所示。
圖5 內(nèi)核RootKit總體流程設(shè)計(jì)
Rootkit程序以Windows內(nèi)核驅(qū)動(dòng)的形式存在,當(dāng)Rootkit被加載后執(zhí)行初始化操作,執(zhí)行VMM初始化遷移原系統(tǒng)使之成為Guest OS系統(tǒng)運(yùn)行在VMX nonroot模式,Rootkit程序作為VMM運(yùn)行在VMM-root模式,然后分配EPT頁面設(shè)置頁面拷貝及重定向等,完成初始化操作后執(zhí)行VMMRESUME指令Guest OS恢復(fù)執(zhí)行,VMM等待VM-exit事件發(fā)生后Guest OS陷入VMM。
當(dāng)Guest OS對需要修改的內(nèi)存區(qū)域執(zhí)行讀寫操作時(shí),由于已經(jīng)設(shè)置了EPT entry到拷貝B且拷貝B被設(shè)置為不可讀寫,導(dǎo)致EPT vilolation異常觸發(fā)VM Exit 使Guest OS陷入VMM,VMM將EPT entry設(shè)置為拷貝A并設(shè)置MTF位(通過設(shè)置MTF位可以使讀寫執(zhí)行完后Guest OS重新觸發(fā)VM Exit),在Guest OS執(zhí)行完讀寫操作后會(huì)再次觸發(fā)MTF VM Exit,VMM重新設(shè)置EPT Entry為拷貝B回到初始狀態(tài)。
當(dāng)Guest OS在執(zhí)行需要修改的內(nèi)存區(qū)域時(shí),直接進(jìn)入拷貝B執(zhí)行,由于已經(jīng)在拷貝B中設(shè)置了INT 3斷點(diǎn),導(dǎo)致BP異常觸發(fā)VM Exit使Guest OS陷入VMM,VMM通過檢查Guest OS寄存器RIP的值是否為需要修改的函數(shù)地址進(jìn)行處理,如果是需要修改的函數(shù)地址則直接修改RIP地址為RootKit函數(shù)地址,過濾相應(yīng)的信息,否則正常執(zhí)行后返回。
實(shí)驗(yàn)環(huán)境如表1所示。
表1
實(shí)驗(yàn)以進(jìn)程隱藏為驗(yàn)證,通過內(nèi)核Hook內(nèi)核函數(shù)NtQuerySystemInformation隱藏進(jìn)程InstDrv.exe[10]。當(dāng)執(zhí)行到原始NtQuerySystemInformation內(nèi)存區(qū)域時(shí),觸發(fā)VM Exit使VMM獲得控制權(quán),VMM修改當(dāng)前RIP值為HookNtQuerySystemInformation,使得代碼執(zhí)行流程進(jìn)入Rootkit函數(shù)。在HookNtQuerySystemInformation函數(shù)中執(zhí)行原始函數(shù)后在SYSTEM_PROCESS_INFORMATION鏈表信息中摘除關(guān)于InstDrv.exe的進(jìn)程信息,達(dá)到內(nèi)核進(jìn)程信息隱藏,實(shí)驗(yàn)效果如圖6所示。
在實(shí)驗(yàn)中未觸發(fā)PatchGurad而導(dǎo)致藍(lán)屏,可以得出本方案能夠較好地在基于x64架構(gòu)的Windows系統(tǒng)下實(shí)現(xiàn)內(nèi)核Rootkit,在內(nèi)核進(jìn)程鏈表中摘除了需要隱藏的“InstrDrv.exe”進(jìn)程信息,達(dá)到了內(nèi)核進(jìn)程隱藏的目的且實(shí)現(xiàn)了Rootkit代碼對內(nèi)核保護(hù)PatchGuard的透明性。
圖6 虛擬化RootKit隱藏進(jìn)程效果
通過引入硬件虛擬化技術(shù),本文提出并實(shí)現(xiàn)了基于硬件虛擬化的Rootkit技術(shù)方法,利用EPT擴(kuò)展頁面技術(shù)對需要修改的內(nèi)存不同操作重定位到不同主機(jī)物理內(nèi)存,實(shí)現(xiàn)Rootkit代碼對內(nèi)核保護(hù)機(jī)制PatchGuard的透明性。該方法充分利用底層硬件虛擬化技術(shù)實(shí)現(xiàn)內(nèi)存,對于Rootkit和系統(tǒng)保護(hù)技術(shù)研究具有一定的啟發(fā)意義。
[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]易再堯,黃本雄,孫建華.一種基于虛擬化哈佛體系結(jié)構(gòu)的Rootkit技術(shù)[J].微電子學(xué)與計(jì)算機(jī),2010,27(4):129-132.
[4]張瑜,劉慶中,李濤,等.Rootkit研究綜述[J].電子科技大學(xué)學(xué)報(bào),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]凌沖,孫樂昌,劉京菊,等.一種硬件虛擬化技術(shù)的Rootkit及其檢測[J].西安科技大學(xué)學(xué)報(bào),2010,30(1):86-91.
[7]李勇,郭玉東,王曉睿,等.基于EPT的內(nèi)存虛擬化研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(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ìn)程隱藏與檢測技術(shù)[J].計(jì)算機(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
李揚(yáng)(1992-),男,四川綿陽人,碩士研究生,研究方向?yàn)樾畔踩?/p>
2016-12-01
2017-02-06
周安民(1963-),男,四川成都人,碩士導(dǎo)師,研究員,研究方向?yàn)樾畔踩Wo(hù)技術(shù)