欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種kvm虛擬機(jī)的物理內(nèi)存取證方法

文檔序號(hào):6623218閱讀:1959來(lái)源:國(guó)知局
一種kvm虛擬機(jī)的物理內(nèi)存取證方法【專(zhuān)利摘要】本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法,包括a)宿主機(jī)物理內(nèi)存的獲??;d)虛擬機(jī)的VMCS版本號(hào)檢測(cè);e)VMX退出原因指示器的檢測(cè);f)宿主機(jī)CR3寄存器的檢測(cè)和獲取;g)虛擬機(jī)CR3寄存器的檢測(cè)和獲?。籬)兩個(gè)連續(xù)0xffffffff的判斷;i)擴(kuò)展頁(yè)的檢測(cè)和獲取;j)判斷Host_CR3寄存器的正確性;k)判斷Guest_CR3寄存器的正確性;l)判斷是否檢測(cè)完畢;m)虛擬機(jī)物理內(nèi)存的獲取;n)虛擬機(jī)物理內(nèi)存的分析。本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法,首先初步判斷頁(yè)中是否存在潛在的VMCS結(jié)構(gòu)體,然后再判斷VMCS結(jié)構(gòu)體的正確性,以便獲取虛擬機(jī)的物理內(nèi)存,這種獲取方法不會(huì)對(duì)虛擬機(jī)的狀態(tài)產(chǎn)生任何影響,適于信息安全事件和各類(lèi)計(jì)算機(jī)犯罪案件的調(diào)查取證?!緦?zhuān)利說(shuō)明】—種KVM虛擬機(jī)的物理內(nèi)存取證方法【
技術(shù)領(lǐng)域
】[0001]本發(fā)明涉及一種KVM虛擬機(jī)的物理內(nèi)存取證方法,更具體的說(shuō),尤其涉及一種適于現(xiàn)有主流操作系統(tǒng)和CUP型號(hào)的KVM虛擬機(jī)的物理內(nèi)存取證方法?!?br>背景技術(shù)
】[0002]涉及的概念和專(zhuān)業(yè)術(shù)語(yǔ)主要包括虛擬機(jī)、KVM、VMCS和EPT。[0003]虛擬機(jī)(VirtualMachine,VM)是指在一個(gè)硬件平臺(tái)上模擬多個(gè)獨(dú)立的、ISA架構(gòu)和實(shí)際硬件相同的虛擬硬件系統(tǒng),在每個(gè)虛擬硬件系統(tǒng)上都可以運(yùn)行不同的操作系統(tǒng),即客戶操作系統(tǒng)(GuestOS)。這些客戶操作系統(tǒng)通過(guò)虛擬機(jī)監(jiān)視器(VirtualMachineMonitor,VMM)訪問(wèn)實(shí)際的物理資源。[0004]在本文中,為了方便描述,物理主機(jī)稱(chēng)之為宿主機(jī),宿主機(jī)的物理地址簡(jiǎn)稱(chēng)為HPA(HostPhysicalAddress),宿主機(jī)的虛擬地址簡(jiǎn)稱(chēng)為HVA(HostVirtualAddress),虛擬機(jī)的物理地址簡(jiǎn)稱(chēng)為GPA(GuestPhysicalAddress),虛擬機(jī)的虛擬地址簡(jiǎn)稱(chēng)為GVA(GuestVirtualAddress)。虛擬機(jī)的物理地址仍然是一個(gè)虛擬地址,宿主機(jī)的物理地址才是真實(shí)的機(jī)器地址。[0005]KVM(Kernel-basedVirtualMachine),是x86架構(gòu)且硬件支持虛擬化技術(shù)(如intelVT或AMD-V)的Linux全虛擬化解決方案,目前已經(jīng)成為主流VMM之一。[0006]為了更好的支持虛擬化,VT-X擴(kuò)展了傳統(tǒng)的x86處理器架構(gòu),引入了兩種操作模式:VMXrootoperat1n(根虛擬化操作)和VMXnon-rootoperat1n(非虛擬化操作),統(tǒng)稱(chēng)為VMX操作模式。為了建立這種兩個(gè)操作模式的架構(gòu),VT-x設(shè)計(jì)了VMCS(Virtual-MachineControlStructure)虛擬機(jī)控制數(shù)據(jù)結(jié)構(gòu),每個(gè)VMCS對(duì)應(yīng)一個(gè)虛擬CPU(VCPU)。VMCS包括三個(gè)組成部分,VMCS版本標(biāo)志(Revis1nIdentifier)、VMX退出原因指示器(VMX-abortindicator)以及VMCS數(shù)據(jù)區(qū)。在VMCS數(shù)據(jù)區(qū)中,包括了Guest-StateArea(客戶機(jī)狀態(tài)區(qū))和Host-StateArea(宿主機(jī)狀態(tài)區(qū))等六個(gè)邏輯區(qū)域(如圖1所示),用以保存虛擬機(jī)以及主機(jī)的各種狀態(tài)參數(shù),當(dāng)VMEntry(處理器控制從vMX根狀態(tài)進(jìn)入vMX非根狀態(tài)),處理器狀態(tài)被保存在VMCS中(Host狀態(tài)),同時(shí)客戶機(jī)狀態(tài)從VMCS中裝入。相反當(dāng)VMExit時(shí)(從VMX非根狀態(tài)進(jìn)入VMX根狀態(tài)),處理器狀態(tài)被保存在VMCS的中(客戶機(jī)狀態(tài)),而Host狀態(tài)則從VMCS中裝入。VMM可以對(duì)不同虛擬處理器的VMCS分別設(shè)置不同虛擬機(jī)退出條件,從而實(shí)現(xiàn)對(duì)不同客戶機(jī)的不同虛擬化策略。[0007]EPT(ExtendedPageTable)是Intel在VT_x技術(shù)基礎(chǔ)上增加的一種硬件輔助內(nèi)存虛擬化技術(shù)。和影子頁(yè)表技術(shù)相比,影子頁(yè)表技術(shù)為虛擬機(jī)的每個(gè)頁(yè)表維護(hù)一個(gè)“影子頁(yè)表”,并將合成后的映射關(guān)系寫(xiě)入到“影子”中,虛擬機(jī)的頁(yè)表內(nèi)容保持不變,宿主機(jī)將影子頁(yè)表交給內(nèi)存管理模塊進(jìn)行地址轉(zhuǎn)換。而EPT機(jī)制通過(guò)硬件支持內(nèi)存虛擬化技術(shù),使其能在原有的頁(yè)表上增加一個(gè)EPT頁(yè)表,通過(guò)這個(gè)頁(yè)表能過(guò)將虛擬機(jī)的物理地址直接翻譯為宿主機(jī)的物理地址,從而減少整個(gè)內(nèi)存虛擬化所需要的代價(jià)。EPT頁(yè)表的基地址是由VMCS結(jié)構(gòu)體中“VM-Execut1n”控制域的Extendedpagetablepointer字段指定。[0008]為推進(jìn)物理內(nèi)存分析技術(shù)的發(fā)展,DFRWS(DigitalForensicResearchWorkshop)于2005年推出了名為“ForensicsChallenge”的活動(dòng),活動(dòng)的主題就是物理內(nèi)存分析。從此,對(duì)于物理內(nèi)存的分析和獲取成為計(jì)算機(jī)取證的研究熱點(diǎn)。[0009]在計(jì)算機(jī)物理內(nèi)存獲取方面,目前主要有兩類(lèi)方法,一類(lèi)是軟件方法,另一類(lèi)是硬件方法。軟件方法主要有微軟提供的CrashDump方法、DD(datadumper)工具、虛擬機(jī)(Virtualizat1n)、BradleySchatz構(gòu)建的BodySnatcher工具。硬件方法主要有BrianCarrier提出的基于PCI擴(kuò)展卡的方法和Becher、B0ILEAUA等人提出的基于FireWire的方法,都是基于直接存儲(chǔ)存取方式(DMA)的,到目前還沒(méi)有成熟的硬件產(chǎn)品推出。這些軟硬件方法在適用范圍上有各自的局限性,最主要的問(wèn)題還在于它們都不可避免地改變了目標(biāo)系統(tǒng)內(nèi)存的內(nèi)容。[0010]在物理內(nèi)存分析方面,代表性的成果包括:I)A.Schuster(DFRffS)于2006年提出了Windows內(nèi)存鏡像文件中進(jìn)程和線程的查找方法;2)A.Walters開(kāi)發(fā)了Volatility工具,可以分析出當(dāng)前運(yùn)行的進(jìn)程、打開(kāi)的網(wǎng)絡(luò)接口等信息;3)2007年,SeokheeLee等人研究了虛擬內(nèi)存文件Pagefile.sys的獲取和分析問(wèn)題;4)王連海在2008年提出了基于KPCR定位進(jìn)程控制塊的方法,適用于windows2000以后的所有版本。5)2010年MatthieuSuiche深入研究了MACOS的物理內(nèi)存分析問(wèn)題。[0011]可以看到,對(duì)宿主機(jī)的物理內(nèi)存獲取和分析方面,已經(jīng)有較多的研究,也取得了一定的成果,通過(guò)獲取和分析宿主機(jī)的物理內(nèi)存,可以獲得宿主機(jī)大量的在線數(shù)據(jù)。[0012]目前,虛擬化技術(shù)已經(jīng)廣泛地融入了我們的生活,并具有巨大的市場(chǎng)前景。虛擬化技術(shù)改變了系統(tǒng)軟件與底層軟件緊耦合的方式,可以更加靈活地配置與管理計(jì)算系統(tǒng),降低硬件成本。但是,也給取證人員帶來(lái)了一些機(jī)遇和挑戰(zhàn):一方面,虛擬化技術(shù)作為一種新技術(shù)可以給計(jì)算機(jī)取證帶來(lái)新的變革,推動(dòng)和促進(jìn)計(jì)算機(jī)取證技術(shù)自身的發(fā)展;另一方面,相關(guān)的虛擬機(jī)產(chǎn)品可能變成犯罪分子利用的工具或者攻擊的受害者,犯罪嫌疑人可以利用虛擬機(jī)來(lái)執(zhí)行他們的活動(dòng)。如何對(duì)虛擬機(jī)進(jìn)行取證是一個(gè)全新而且重要的問(wèn)題。[0013]目前,以虛擬機(jī)為取證對(duì)象的計(jì)算機(jī)取證技術(shù)多以對(duì)宿主機(jī)文件系統(tǒng)中的相關(guān)虛擬機(jī)文件(主要指配置文件和存儲(chǔ)文件)進(jìn)行深入分析。以VMwareWorkstat1n下的虛擬機(jī)為例,虛擬機(jī)的“虛擬磁盤(pán)”上的文件存儲(chǔ)在一個(gè)或多個(gè)以“vmdk”為后綴名的文件中,以“vmem”為后綴名的文件則保存了虛擬機(jī)物理內(nèi)存中的所有數(shù)據(jù),配置信息則保存在以“vmx”為后綴的文件中。如鐘琳、許榕生提出了對(duì)虛擬機(jī)文件進(jìn)行取證的方法。MarianoGraziano于2013年首次提出了一種在虛擬機(jī)在宿主機(jī)物理內(nèi)存中檢測(cè)虛擬機(jī)的方法,該方法通過(guò)在宿主機(jī)物理內(nèi)存中搜索VMCS結(jié)構(gòu)體,然后結(jié)合volatility工具對(duì)虛擬機(jī)進(jìn)行物理內(nèi)存分析,具體過(guò)程如下:O內(nèi)存掃描VMCS結(jié)構(gòu)體包含了140多個(gè)鍵值,大小約4k,結(jié)構(gòu)體及其取值受CPU型號(hào)、虛擬化工具等因素影響,其中前四個(gè)字節(jié)為VMCS版本標(biāo)志,不同的處理器型號(hào)對(duì)應(yīng)的版本號(hào)不同,接下來(lái)是VMX退出原因指示器,一般值為O。在VMCS數(shù)據(jù)區(qū)中包含了一個(gè)變量為VmcsLinkPointerCheck,此變量的值一般設(shè)置為兩個(gè)連續(xù)的Oxffffffff,但是此變量位置不固定。在宿主機(jī)狀態(tài)域中存儲(chǔ)了宿主機(jī)的CR4控制寄存器的值,其中第十三位表明是否開(kāi)啟了虛擬擴(kuò)展?;谝陨咸卣髟谒拗鳈C(jī)物理內(nèi)存中進(jìn)行搜索VMCS結(jié)構(gòu)體。[0014]2)VMCS結(jié)構(gòu)體確認(rèn)從掃描到的VMCS結(jié)構(gòu)體中解析出H0ST_CR3的值,即宿主機(jī)的CR3寄存器的值,CR3寄存器保存了系統(tǒng)進(jìn)程的頁(yè)目錄信息,當(dāng)禁用物理地址拓展,保存的是系統(tǒng)進(jìn)程頁(yè)目錄的基地址。根據(jù)CR3的值找到頁(yè)目錄的地址,然后依次找下去,如圖2所示,根據(jù)頁(yè)目錄找到頁(yè)表,以此找到物理地址。[0015]根據(jù)此思想,掃描到的VMCS結(jié)構(gòu)體地址為VMCS的物理地址,那么CR3指向的頁(yè)中應(yīng)該包含了VMCS物理地址。依照此方法來(lái)驗(yàn)證這個(gè)VMCS結(jié)構(gòu)體是否有效。[0016]3)虛擬機(jī)自省從VMCS結(jié)構(gòu)體中獲取到EPT頁(yè)表的基地址,EPT頁(yè)表結(jié)構(gòu)由PML4table(pagemaplevel4table),PDPT(page-directory-pointertable),PD(page-directory)和PT(pagetable)共4級(jí)頁(yè)表構(gòu)成。每張頁(yè)表大小4KB,共有512個(gè)頁(yè)表項(xiàng),每個(gè)頁(yè)表項(xiàng)占用8個(gè)字節(jié)。通過(guò)模擬EPT地址轉(zhuǎn)換,遍歷所有地址轉(zhuǎn)換中需要的PML4、PDPT,PD和PT表。[0017]4)結(jié)合volatility工具進(jìn)行虛擬機(jī)物理內(nèi)存分析將上述技術(shù)實(shí)現(xiàn)為一個(gè)volatility插件,分析時(shí),按照volatility提供的命令行,指定虛擬機(jī)操作系統(tǒng)版本后實(shí)現(xiàn)volatility能夠提供的分析功能。[0018]在實(shí)際的對(duì)虛擬機(jī)的物理內(nèi)存分析過(guò)程中,我們發(fā)現(xiàn),以上這種分析方法存在一定的局限性,主要表現(xiàn)在以下幾個(gè)方面:(I)適應(yīng)于CPU為一定型號(hào)且所安裝的操作系統(tǒng)為32位的宿主機(jī)。經(jīng)過(guò)測(cè)試,此方法可以檢測(cè)到CPU為Intel(R)Core(TM)i5_2500、操作系統(tǒng)為32位fedora18的宿主機(jī)中安裝的虛擬機(jī),但是對(duì)于CPU為Intel(R)Xeon(R)CPUE5-2620、操作系統(tǒng)為64位fedora16的宿主機(jī)無(wú)法檢測(cè)其中安裝的虛擬機(jī);(2)檢測(cè)到虛擬機(jī)后,結(jié)合volatility只能分析操作系統(tǒng)為32位Windows系統(tǒng)的虛擬機(jī)物理內(nèi)存;(3)在分析時(shí),操作比較復(fù)雜,需要附加虛擬機(jī)操作系統(tǒng)版本信息方能夠進(jìn)行?!?br/>發(fā)明內(nèi)容】[0019]本發(fā)明為了克服上述技術(shù)問(wèn)題的缺點(diǎn),提供了一種適于現(xiàn)有主流操作系統(tǒng)和CUP型號(hào)的KVM虛擬機(jī)的物理內(nèi)存取證方法。[0020]本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法,其特征在于,通過(guò)以下步驟來(lái)實(shí)現(xiàn):a).宿主機(jī)物理內(nèi)存的獲取,借助內(nèi)存獲取工具獲取宿主機(jī)從O開(kāi)始的全部物理內(nèi)存信息;b).在編譯內(nèi)核時(shí)產(chǎn)生的存放內(nèi)核符號(hào)表的文件中,查找出內(nèi)核符號(hào)init_task、結(jié)構(gòu)體vmcsconfig的值,init_task的值為swapper進(jìn)程結(jié)構(gòu)體的虛擬地址,vmcsconfig的值指向vmcsconfig結(jié)構(gòu)體的虛擬地址,vmcsconfig結(jié)構(gòu)體中定義了VMCS結(jié)構(gòu)體的大小和版本號(hào);c).操作系統(tǒng)版本和位數(shù)的獲取,獲取宿主機(jī)的操作系統(tǒng)版本和操作系統(tǒng)位數(shù);對(duì)于32位系統(tǒng),在編譯內(nèi)核時(shí)產(chǎn)生的存放內(nèi)核符號(hào)表的文件中,獲取頁(yè)目錄指針swapper_pg_dir的值,swapper_pg_dir的值即為宿主機(jī)寄存器CR3的虛擬地址,減去OxcOOOOOOO即為宿主機(jī)寄存器CR3的物理地址;對(duì)于64位系統(tǒng),貝U獲取目錄指針init_level4_pgt的值,init_level4_pgt為64位系統(tǒng)下宿主機(jī)寄存器CR3的值,減去0xffffffff80000000即為宿主機(jī)寄存器CR3的物理地址;結(jié)合vmCS_Config結(jié)構(gòu)體虛擬地址和宿主機(jī)寄存器CR3的值進(jìn)行地址轉(zhuǎn)換獲取vmcs_config結(jié)構(gòu)體的物理地址,從而獲取到VMCS結(jié)構(gòu)體大小和版本號(hào)信息;d).虛擬機(jī)的VMCS版本號(hào)檢測(cè),VMCS結(jié)構(gòu)體大小和版本號(hào)信息定義在vmcs_config結(jié)構(gòu)體中,大小不大于4096個(gè)字節(jié),從某一頁(yè)的開(kāi)始位置進(jìn)行存儲(chǔ),前四個(gè)字節(jié)為與CPU類(lèi)型有關(guān)的VMCS版本號(hào);對(duì)于獲取的宿主機(jī)物理內(nèi)存,判斷每頁(yè)的前四個(gè)字節(jié)是否為VMCS版本號(hào),如果判斷結(jié)果為是,則表明該頁(yè)可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟e);如果判斷結(jié)果為否,則表明該頁(yè)不可能為VMCS結(jié)構(gòu)體,執(zhí)行步驟1),以進(jìn)行下一個(gè)頁(yè)的判斷;e).VMX退出原因指示器的檢測(cè),判斷頁(yè)從第四個(gè)字節(jié)開(kāi)始的4個(gè)字節(jié)的值是否為零,如果為零,則表明該頁(yè)可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟f);如果不為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);f).宿主機(jī)CR3寄存器的檢測(cè)和獲取,判斷在該頁(yè)偏移量為0x340處的8個(gè)字節(jié)是否為零,如果不為零,則這8個(gè)字節(jié)構(gòu)成的64位數(shù)據(jù)可能為宿主機(jī)CR3寄存器的值,將其取出,記為Host_CR3,執(zhí)行步驟g);如果為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);g).虛擬機(jī)CR3寄存器的檢測(cè)和獲取,判斷在頁(yè)偏移量為0x2e0處的8個(gè)字節(jié)是否為零,如果不為零,則這8個(gè)字節(jié)構(gòu)成的64位數(shù)據(jù)可能為虛擬機(jī)CR3寄存器的值,將其取出,記為Guest_CR3,執(zhí)行步驟h);如果為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);h).兩個(gè)連續(xù)Oxffffffff的判斷,通過(guò)遍歷整個(gè)結(jié)構(gòu)體,判斷是否存在兩個(gè)連續(xù)的Oxffffffff,如果存在,則表明該頁(yè)可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟i);如果不存在,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);i).擴(kuò)展頁(yè)的檢測(cè)和獲取,判斷在該頁(yè)偏移量為0Xe8位置處的8個(gè)字節(jié)是否為零,如果不為零,則表明偏移量0Xe8位置處的8個(gè)字節(jié)可能為擴(kuò)展頁(yè)指針的數(shù)值,將其取出,記為EPTP,執(zhí)行步驟j);如果為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);j).判斷Host_CR3寄存器的正確性,內(nèi)核符號(hào)init_task的值指向swapper進(jìn)程結(jié)構(gòu)體,swapper進(jìn)程以一個(gè)task_struck結(jié)構(gòu)體的形式存在,進(jìn)程名稱(chēng)“swapper”存在于task_struck結(jié)構(gòu)體中與操作系統(tǒng)版本有關(guān)的偏移量處,設(shè)偏移量為?;通過(guò)以下步驟來(lái)判斷根據(jù)操作系統(tǒng)位數(shù)是64位操作系統(tǒng)小頁(yè)模式、64位操作系統(tǒng)大頁(yè)模式、32位操作系統(tǒng)開(kāi)啟PAE小頁(yè)模式、32位操作系統(tǒng)開(kāi)啟PAE大頁(yè)模式、32位操作系統(tǒng)不開(kāi)啟PAE小頁(yè)模式還是32位操作系統(tǒng)不開(kāi)啟PAE大頁(yè)模式,將swapper進(jìn)程結(jié)構(gòu)體的虛擬地址init_task轉(zhuǎn)化為物理地址,執(zhí)行步驟j-2);j-2).將init_task轉(zhuǎn)化后的物理地址加上偏移量G,判斷所獲取的進(jìn)程名稱(chēng)是否為swapper,如果為swapper,則證明所獲取的Host_CR3為正確的宿主機(jī)CR3寄存器,執(zhí)行步驟k);如果不為swapper,則表明所獲取的Host_CR3不是宿主機(jī)CR3寄存器,判斷出的VMCS結(jié)構(gòu)體不正確,執(zhí)行步驟I);k).判斷Guest_CR3寄存器的正確性,借助EPT頁(yè)結(jié)構(gòu),將步驟g)中獲取的Guest_CR3寄存器的值轉(zhuǎn)化為宿主機(jī)物理地址,判斷轉(zhuǎn)化后的宿主機(jī)物理地址是否為零,如果不為零,則表明獲取的Guest_CR3寄存器為正確的虛擬機(jī)CR3寄存器,該頁(yè)中所檢測(cè)出結(jié)構(gòu)體為正確的VMCS結(jié)構(gòu)體;如果為零,則表明Guest_CR3寄存器不是正確的虛擬機(jī)CR3寄存器,所判斷出的VMCS結(jié)構(gòu)體不正確;執(zhí)行步驟I);1).判斷是否檢測(cè)完畢,判斷所有頁(yè)是否均已判斷完畢,如果判斷完畢則執(zhí)行步驟m);如果沒(méi)有判斷完畢,則對(duì)下一頁(yè)進(jìn)行判斷,跳轉(zhuǎn)執(zhí)行步驟d);m).虛擬機(jī)物理內(nèi)存的獲取,對(duì)于給定的虛擬機(jī)物理地址和虛擬地址,首先將其轉(zhuǎn)化為宿主機(jī)的物理地址,即可進(jìn)行虛擬機(jī)內(nèi)存信息的獲?。籲).虛擬機(jī)物理內(nèi)存的分析,通過(guò)對(duì)步驟m)中獲取的虛擬機(jī)內(nèi)存信息的分析,即可對(duì)虛擬機(jī)的行為作出判斷。[0021]本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法,步驟a)中宿主機(jī)物理內(nèi)存的獲取方法為:采用開(kāi)源軟件LiME加載內(nèi)核模塊獲得Linux和Linux設(shè)備中的完整內(nèi)存信息,以padded格式來(lái)獲取從O開(kāi)始的宿主機(jī)的全部?jī)?nèi)存信息;步驟b)和步驟c)中:通過(guò)獲取/proc/kallsyms文件來(lái)獲取內(nèi)核符號(hào)表,并從中獲取內(nèi)核符號(hào)init_task、結(jié)構(gòu)體vmcs_config、swapper_pg_dir或者init_level4_pgt的值;步驟c)中操作系統(tǒng)版本和位數(shù)的獲取方法為:通過(guò)在宿主機(jī)終端執(zhí)行“uname-r”來(lái)獲取。[0022]本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法,步驟j-Ι)中所述的宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址的方法為:待轉(zhuǎn)化的宿主機(jī)虛擬地址的21至29位記為Directory、30至31位記為DirectoryPointer、30至38位記為DirectoryPtr、39至47位記為PML4、48至63位記為SingExtended,小頁(yè)模式下O至11位記為Offset、12至20位記為T(mén)able,大頁(yè)模式下O至20位記為Offset;如果操作系統(tǒng)位數(shù)是64位操作系統(tǒng)小頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的12位至51位、低11位均取為0,將其與PML4乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為Λ;取21的12位至51位、低12位均取為0,將其與DirectoryPtr乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為32;取4的12位至51位、低12位均取為0,將其與Directory乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為-MA3的12位至51位、低12位均取為0,將其與Table乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為24;取J4的12位至51位、低12位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值;如果操作系統(tǒng)位數(shù)是64位操作系統(tǒng)大頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的12位至51位、低11位均取為0,將其與PML4乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為」取I的12位至51位、低12位均取為0,將其與DirectoryPtr乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為52;取“的12位至51位、低12位均取為0,將其與Directory乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為m;取53的21位至51位、低21位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值;如果操作系統(tǒng)位數(shù)是32位操作系統(tǒng)開(kāi)啟PAE小頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的12位至44位、低5位均取為0,將其與DirectoryPointer乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為Cl;取<:1的12位至51位、低12位均取為0,將其與Directory乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為C2;取02的12位至51位、低12位均取為0,將其與Table乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為C3;取。3的12位至35位、低12位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值;如果操作系統(tǒng)位數(shù)是32位操作系統(tǒng)開(kāi)啟PAE大頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的12位至44位、低5位均取為0,將其與DirectoryPointer乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為Dl;取£)1的12位至51位、低12位均取為0,將其與Directory乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為Ul;取£)2的21位至35位、低21位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值;在32位操作系統(tǒng)不開(kāi)啟PAE模式下:待轉(zhuǎn)化的宿主機(jī)虛擬地址小頁(yè)模式下的O至11位記為Offset、12至21位記為T(mén)able、22至31位記為Directory;大頁(yè)模式下:0至21位記為Offset、22至31位記為Directory;如果操作系統(tǒng)位數(shù)是32位操作系統(tǒng)不開(kāi)啟PAE小頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的O位至31位、低13位均取為0,將其與Directory乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為SI;取£1的12位至51位、低12位均取為0,將其與Table乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為52;取52的12位至31位、低12位均取為0,將其與Offset相力口,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值;如果操作系統(tǒng)位數(shù)是32位操作系統(tǒng)不開(kāi)啟PAE大頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的O位至31位、低13位均取為0,將其與Directory乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為列;取們的21位至30位、低22位均取為0,將其與Offset相力口,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值。[0023]本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法,步驟m)中所述的虛擬機(jī)的物理地址到宿主機(jī)的物理地址通過(guò)以下方法來(lái)實(shí)現(xiàn):待轉(zhuǎn)化的虛擬機(jī)的物理地址的O至11位記為Offset、12至20位記為T(mén)able,21至29位記為Directory、30至38位記為DirectoryPtr>39至47位記為PML4、48至63位記為SingExtended;m_l).取擴(kuò)展頁(yè)表指針EPTP的12位至51位、低11位均取為0,將其與PML4乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為Gl;取0〗的12位至51位、低12位均取為0,將其與DirectoryPtr乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為G2-MG2的12位至51位、低12位均取為0,將其與Directory乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為;取03的12位至51位、低12位均取為0,將其與Table乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為G4-MGA的12位至51位、低12位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為虛擬機(jī)的物理地址轉(zhuǎn)化為宿主機(jī)的物理地址之后的數(shù)值;在操作系統(tǒng)位數(shù)是64位操作系統(tǒng)小頁(yè)模式下,虛擬機(jī)的虛擬地址到宿主機(jī)的物理地址通過(guò)以下方法來(lái)實(shí)現(xiàn):待轉(zhuǎn)化的虛擬機(jī)的虛擬地址的O至11位記為Offset、12至20位記為T(mén)able,21至29位記為Directory、30至38位記為DirectoryPtr、39至47位記為PML4、48至63位記為SingExtended;m-2).將虛擬機(jī)的CR3寄存器的值按照步驟m-Ι)轉(zhuǎn)化為宿主機(jī)的物理地址,記為/Z1,取巧的12位至51位、低11位均取為0,將其與PML4乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為/Z2;將"2的值按照步驟m-Ι)轉(zhuǎn)化為宿主機(jī)的物理地址,記為H3,取H3的12位至51位、低11位均取為0,將其與DirectoryPtr乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為H,;將/£4的值按照步驟m-Ι)轉(zhuǎn)化為宿主機(jī)的物理地址,記為,取的12位至51位、低11位均取為0,將其與Directory乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為戌5;將#6的值按照步驟m-Ι)轉(zhuǎn)化為宿主機(jī)的物理地址,記為H7,取H7的12位至51位、低11位均取為0,將其與Table乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為Afs;將Ai8的值按照步驟m-Ι)轉(zhuǎn)化為宿主機(jī)的物理地址,記為At9,取Zf9的12位至51位、低12位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為虛擬機(jī)的虛擬地址轉(zhuǎn)化為宿主機(jī)的物理地址之后的數(shù)值。[0024]本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法,將步驟m)中所獲取的內(nèi)存信息依照不同系統(tǒng)的物理內(nèi)存分析方法獲取虛擬機(jī)動(dòng)態(tài)信息,包括虛擬機(jī)的進(jìn)程信息、驅(qū)動(dòng)信息、網(wǎng)絡(luò)信息、注冊(cè)表信息、日志信息。[0025]本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法,步驟j)中所述的偏移量力Λ具有以下取值關(guān)系:64位fcl5的偏移量為0x460,32位fcl6的偏移量為0x2e4,64位fcl6的偏移量為0x460,32位fcl8的偏移量為0x2e4,Ubuntull.04的偏移量為0x2DC。[0026]本發(fā)明的有益效果是:本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法,獲取宿主機(jī)的全部物理內(nèi)存信息,首先根據(jù)頁(yè)中是否具備含有VMCS版本號(hào)、VMX推出原因指示器是否不為零、宿主機(jī)和虛擬機(jī)的CR3寄存器不為零、兩個(gè)連續(xù)的Oxffffffff、擴(kuò)展頁(yè)表指針不為零,初步判斷頁(yè)中是否存在潛在的VMCS結(jié)構(gòu)體;然后將內(nèi)核符號(hào)init_task轉(zhuǎn)化為宿主機(jī)的物理地址并加上偏移量,判斷是否存在swapper的進(jìn)程名稱(chēng),來(lái)初步判斷所獲取的潛在VMCS結(jié)構(gòu)體的正確性,再判斷將Guest_CR3寄存器的值轉(zhuǎn)化為宿主機(jī)物理地址是否不為零,最終確定出所獲取的潛在VMCS結(jié)構(gòu)體為正確的VMCS結(jié)構(gòu)體。發(fā)明的的VMCS結(jié)構(gòu)體的查找和驗(yàn)證過(guò)程,最終可在宿主機(jī)的內(nèi)存信息中查找出所有的VMCS結(jié)構(gòu)體。[0027]本發(fā)明的KVM下虛擬機(jī)物理內(nèi)存取證方法,通過(guò)對(duì)安裝有KVM的物理主機(jī)進(jìn)行物理內(nèi)存鏡像,對(duì)物理主機(jī)的物理內(nèi)存鏡像文件進(jìn)行分析,從中獲取虛擬機(jī)的物理內(nèi)存,這種獲取方法不會(huì)對(duì)虛擬機(jī)的狀態(tài)產(chǎn)生任何影響;獲取到虛擬機(jī)物理內(nèi)存后進(jìn)行分析,從中找到虛擬機(jī)運(yùn)行的進(jìn)程、驅(qū)動(dòng)、網(wǎng)絡(luò)信息、注冊(cè)表信息以及日志信息等大量系統(tǒng)信息,從而獲得利用虛擬機(jī)進(jìn)行犯罪的證據(jù)。本技術(shù)將應(yīng)用于計(jì)算機(jī)取證領(lǐng)域,主要用于信息安全事件和各類(lèi)計(jì)算機(jī)犯罪案件的調(diào)查取證。[0028]本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法的有點(diǎn)體現(xiàn)在:1、本發(fā)明通過(guò)獲取和分析虛擬機(jī)的物理內(nèi)存,和目前大多以獲取和分析虛擬機(jī)文件系統(tǒng)相比,將提取大量的在線證據(jù),如進(jìn)程信息、驅(qū)動(dòng)信息、網(wǎng)絡(luò)信息、注冊(cè)表信息等系統(tǒng)信息以及文本數(shù)據(jù)、郵箱賬戶信息等用戶數(shù)據(jù),這些信息在進(jìn)行惡意代碼分析及了解用戶行為時(shí)更加具有現(xiàn)實(shí)意義。[0029]2、本發(fā)明描述的物理內(nèi)存獲取方法是通過(guò)分析宿主機(jī)物理內(nèi)存并從中抽取出的,這種獲取方式不會(huì)在虛擬機(jī)中加載任何軟硬件,不運(yùn)行任何程序,不影響虛擬機(jī)運(yùn)行狀態(tài),獲取到的內(nèi)存信息更加真實(shí),不會(huì)被惡意代碼所修改。[0030]3、本發(fā)明所描述的虛擬機(jī)檢測(cè)和驗(yàn)證方法更加可靠和高效,在檢測(cè)時(shí)借助于對(duì)關(guān)鍵值(包括Revis1nIdentifier^VMX-abortindicator、HostCR3>GuestCR3>VMCSlinkpointer>EPT)的判斷來(lái)進(jìn)行,在驗(yàn)證時(shí)借助于對(duì)swapper結(jié)構(gòu)體進(jìn)行判斷,無(wú)需遍歷所有的PML4table、PDPT、PD和PT4級(jí)頁(yè)表。[0031]4、適用范圍廣,適用于IntelCore、Xeon等主流CPU型號(hào)的宿主機(jī)中的虛擬機(jī)內(nèi)存取證,支持的虛擬機(jī)操作系統(tǒng)版本也更加的廣泛,對(duì)于32位及64位的WindowsXP、WindowsVista、Windows7以及Windows8系統(tǒng)均可以進(jìn)行內(nèi)存獲取和分析。[0032]5、據(jù)此開(kāi)發(fā)的系統(tǒng)操作簡(jiǎn)單,無(wú)需指定操作系統(tǒng)版本以及相關(guān)的系統(tǒng)配置即可進(jìn)行?!緦?zhuān)利附圖】【附圖說(shuō)明】[0033]圖1為虛擬機(jī)控制結(jié)構(gòu)的數(shù)據(jù)區(qū)分布圖;圖2為現(xiàn)有根據(jù)宿主機(jī)的CR3寄存器的值查找物理地址的示意圖;圖3為本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法的流程圖;圖4為64位操作系統(tǒng)小頁(yè)模式下宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址的示意圖;圖5為64位操作系統(tǒng)大頁(yè)模式下宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址的示意圖;圖6為32位操作系統(tǒng)開(kāi)啟PAE小頁(yè)模式下宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址的示意圖;圖7為32位操作系統(tǒng)開(kāi)啟PAE大頁(yè)模式下宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址的示意圖;圖8為32位操作系統(tǒng)不開(kāi)啟PAE小頁(yè)模式下宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址的示意圖;圖9為32位操作系統(tǒng)不開(kāi)啟PAE大頁(yè)模式下宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址的示意圖;圖10為虛擬機(jī)的物理地址轉(zhuǎn)化為宿主機(jī)的物理地址的示意圖;圖11為64位操作系統(tǒng)小頁(yè)模式下虛擬機(jī)的虛擬地址轉(zhuǎn)換為宿主機(jī)的物理地址的示意圖?!揪唧w實(shí)施方式】[0034]下面結(jié)合附圖與實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。[0035]如圖3所示,給出了本發(fā)明的KVM虛擬機(jī)的物理內(nèi)存取證方法的流程圖,其通過(guò)一下步驟來(lái)實(shí)現(xiàn):a).宿主機(jī)物理內(nèi)存的獲取,借助內(nèi)存獲取工具獲取宿主機(jī)從O開(kāi)始的全部物理內(nèi)存信息;該步驟中宿主機(jī)物理內(nèi)存的獲取方法為:采用開(kāi)源軟件LiME加載內(nèi)核模塊獲得Linux和Linux設(shè)備中的完整內(nèi)存信息,以padded格式來(lái)獲取從O開(kāi)始的宿主機(jī)的全部?jī)?nèi)存信肩、O[0036]b).在編譯內(nèi)核時(shí)產(chǎn)生的存放內(nèi)核符號(hào)表的文件中,查找出內(nèi)核符號(hào)init_task、結(jié)構(gòu)體vmcsconfig的值,init_task的值為swapper進(jìn)程結(jié)構(gòu)體的虛擬地址,vmcsconfig的值指向vmcsconfig結(jié)構(gòu)體的虛擬地址,vmcsconfig結(jié)構(gòu)體中定義了VMCS結(jié)構(gòu)體的大小和版本號(hào);該步驟中內(nèi)核符號(hào)表的獲取方法為:通過(guò)獲取/boot/System.map文件來(lái)獲取內(nèi)核符號(hào)表,并從中獲取內(nèi)核符號(hào)init_task的值;步驟c)中操作系統(tǒng)版本和位數(shù)的獲取方法為:通過(guò)在宿主機(jī)終端執(zhí)行“uname-r”來(lái)獲取。[0037]c).操作系統(tǒng)版本和位數(shù)的獲取,獲取宿主機(jī)的操作系統(tǒng)版本和操作系統(tǒng)位數(shù);對(duì)于32位系統(tǒng),在編譯內(nèi)核時(shí)產(chǎn)生的存放內(nèi)核符號(hào)表的文件中,獲取頁(yè)目錄指針swapper_pg_dir的值,swapper_pg_dir的值即為宿主機(jī)寄存器CR3的虛擬地址,減去OxcOOOOOOO即為宿主機(jī)寄存器CR3的物理地址;對(duì)于64位系統(tǒng),則獲取目錄指針init_leVel4_pgt的值,init_level4_pgt為64位系統(tǒng)下宿主機(jī)寄存器CR3的值,減去0xffffffff80000000即為宿主機(jī)寄存器CR3的物理地址;結(jié)合vmCS_Config結(jié)構(gòu)體虛擬地址和宿主機(jī)寄存器CR3的值進(jìn)行地址轉(zhuǎn)換獲取vmcs_config結(jié)構(gòu)體的物理地址,從而獲取到VMCS結(jié)構(gòu)體大小和版本號(hào)信息;d).虛擬機(jī)的VMCS版本號(hào)檢測(cè),VMCS結(jié)構(gòu)體大小和版本號(hào)信息定義在vmcs_config結(jié)構(gòu)體中,大小不大于4096個(gè)字節(jié),從某一頁(yè)的開(kāi)始位置進(jìn)行存儲(chǔ),前四個(gè)字節(jié)為與CPU類(lèi)型有關(guān)的VMCS版本號(hào);對(duì)于獲取的宿主機(jī)物理內(nèi)存,判斷每頁(yè)的前四個(gè)字節(jié)是否為VMCS版本號(hào),如果判斷結(jié)果為是,則表明該頁(yè)可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟e);如果判斷結(jié)果為否,則表明該頁(yè)不可能為VMCS結(jié)構(gòu)體,執(zhí)行步驟1),以進(jìn)行下一個(gè)頁(yè)的判斷;e).VMX退出原因指示器的檢測(cè),判斷頁(yè)從第四個(gè)字節(jié)開(kāi)始的4個(gè)字節(jié)的值是否為零,如果為零,則表明該頁(yè)可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟f);如果不為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);f).宿主機(jī)CR3寄存器的檢測(cè)和獲取,判斷在該頁(yè)偏移量為0x340處的8個(gè)字節(jié)是否為零,如果不為零,則這8個(gè)字節(jié)構(gòu)成的64位數(shù)據(jù)可能為宿主機(jī)CR3寄存器的值,將其取出,記為Host_CR3,執(zhí)行步驟g);如果為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);g).虛擬機(jī)CR3寄存器的檢測(cè)和獲取,判斷在頁(yè)偏移量為0x2e0處的8個(gè)字節(jié)是否為零,如果不為零,則這8個(gè)字節(jié)構(gòu)成的64位數(shù)據(jù)可能為虛擬機(jī)CR3寄存器的值,將其取出,記為Guest_CR3,執(zhí)行步驟h);如果為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);h).兩個(gè)連續(xù)Oxffffffff的判斷,通過(guò)遍歷整個(gè)結(jié)構(gòu)體,判斷是否存在兩個(gè)連續(xù)的Oxffffffff,如果存在,則表明該頁(yè)可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟i);如果不存在,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);i).擴(kuò)展頁(yè)的檢測(cè)和獲取,判斷在該頁(yè)偏移量為OXeS位置處的8個(gè)字節(jié)是否為零,如果不為零,則表明偏移量OXeS位置處的8個(gè)字節(jié)可能為擴(kuò)展頁(yè)指針的數(shù)值,將其取出,記為EPTP,執(zhí)行步驟j);如果為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);j).判斷Host_CR3寄存器的正確性,內(nèi)核符號(hào)init_task的值指向swapper進(jìn)程結(jié)構(gòu)體,swapper進(jìn)程以一個(gè)task_struck結(jié)構(gòu)體的形式存在,進(jìn)程名稱(chēng)“swapper”存在于task_struck結(jié)構(gòu)體中與操作系統(tǒng)版本有關(guān)的偏移量處,設(shè)偏移量為δ;通過(guò)以下步驟來(lái)判斷:init_task的值指向swapper進(jìn)程結(jié)構(gòu)體,在Linux系統(tǒng)中,進(jìn)程以一個(gè)task_struct結(jié)構(gòu)體的形式存在,進(jìn)程結(jié)構(gòu)體為:structtask_struct{volatilelongstate;unsignedlongflags;intsigpending;mm—segment—taddr_limit;structexec_domain*exec_domain;volatilelongneed—resched;unsignedlongptrace;intlock—depth;longcounter;longnice;unsignedlongpolicy;【權(quán)利要求】1.一種KVM虛擬機(jī)的物理內(nèi)存取證方法,其特征在于,通過(guò)以下步驟來(lái)實(shí)現(xiàn):a).宿主機(jī)物理內(nèi)存的獲取,借助內(nèi)存獲取工具獲取宿主機(jī)從O開(kāi)始的全部物理內(nèi)存信息;b).在編譯內(nèi)核時(shí)產(chǎn)生的存放內(nèi)核符號(hào)表的文件中,查找出內(nèi)核符號(hào)init_task、結(jié)構(gòu)體vmcsconfig的值,init_task的值為swapper進(jìn)程結(jié)構(gòu)體的虛擬地址,vmcsconfig的值指向vmcsconfig結(jié)構(gòu)體的虛擬地址,vmcsconfig結(jié)構(gòu)體中定義了VMCS結(jié)構(gòu)體的大小和版本號(hào);c).操作系統(tǒng)版本和位數(shù)的獲取,獲取宿主機(jī)的操作系統(tǒng)版本和操作系統(tǒng)位數(shù);對(duì)于32位系統(tǒng),在編譯內(nèi)核時(shí)產(chǎn)生的存放內(nèi)核符號(hào)表的文件中,獲取頁(yè)目錄指針swapper_pg_dir的值,swapper_pg_dir的值即為宿主機(jī)寄存器CR3的虛擬地址,減去OxcOOOOOOO即為宿主機(jī)寄存器CR3的物理地址;對(duì)于64位系統(tǒng),則獲取目錄指針init_leVel4_pgt的值,init_level4_pgt為64位系統(tǒng)下宿主機(jī)寄存器CR3的值,減去0xffffffff80000000即為宿主機(jī)寄存器CR3的物理地址;結(jié)合vmCS_Config結(jié)構(gòu)體虛擬地址和宿主機(jī)寄存器CR3的值進(jìn)行地址轉(zhuǎn)換獲取vmcs_config結(jié)構(gòu)體的物理地址,從而獲取到VMCS結(jié)構(gòu)體大小和版本號(hào)信息;d).虛擬機(jī)的VMCS版本號(hào)檢測(cè),VMCS結(jié)構(gòu)體大小和版本號(hào)信息定義在vmcs_config結(jié)構(gòu)體中,大小不大于4096個(gè)字節(jié),從某一頁(yè)的開(kāi)始位置進(jìn)行存儲(chǔ),前四個(gè)字節(jié)為與CPU類(lèi)型有關(guān)的VMCS版本號(hào);對(duì)于獲取的宿主機(jī)物理內(nèi)存,判斷每頁(yè)的前四個(gè)字節(jié)是否為VMCS版本號(hào),如果判斷結(jié)果為是,則表明該頁(yè)可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟e);如果判斷結(jié)果為否,則表明該頁(yè)不可能為VMCS結(jié)構(gòu)體,執(zhí)行步驟1),以進(jìn)行下一個(gè)頁(yè)的判斷;e).VMX退出原因指示器的檢測(cè),判斷頁(yè)從第四個(gè)字節(jié)開(kāi)始的4個(gè)字節(jié)的值是否為零,如果為零,則表明該頁(yè)可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟f);如果不為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);f).宿主機(jī)CR3寄存器的檢測(cè)和獲取,判斷在該頁(yè)偏移量為0x340處的8個(gè)字節(jié)是否為零,如果不為零,則這8個(gè)字節(jié)構(gòu)成的64位數(shù)據(jù)可能為宿主機(jī)CR3寄存器的值,將其取出,記為Host_CR3,執(zhí)行步驟g);如果為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);g).虛擬機(jī)CR3寄存器的檢測(cè)和獲取,判斷在頁(yè)偏移量為0x2e0處的8個(gè)字節(jié)是否為零,如果不為零,則這8個(gè)字節(jié)構(gòu)成的64位數(shù)據(jù)可能為虛擬機(jī)CR3寄存器的值,將其取出,記為Guest_CR3,執(zhí)行步驟h);如果為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);h).兩個(gè)連續(xù)Oxffffffff的判斷,通過(guò)遍歷整個(gè)結(jié)構(gòu)體,判斷是否存在兩個(gè)連續(xù)的Oxffffffff,如果存在,則表明該頁(yè)可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟i);如果不存在,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);i).擴(kuò)展頁(yè)的檢測(cè)和獲取,判斷在該頁(yè)偏移量為OXeS位置處的8個(gè)字節(jié)是否為零,如果不為零,則表明偏移量OXeS位置處的8個(gè)字節(jié)可能為擴(kuò)展頁(yè)指針的數(shù)值,將其取出,記為EPTP,執(zhí)行步驟j);如果為零,則表明該頁(yè)不可能是VMCS結(jié)構(gòu)體,執(zhí)行步驟I);j).判斷Host_CR3寄存器的正確性,內(nèi)核符號(hào)init_task的值指向swapper進(jìn)程結(jié)構(gòu)體,swapper進(jìn)程以一個(gè)task_struck結(jié)構(gòu)體的形式存在,進(jìn)程名稱(chēng)“swapper”存在于task_struck結(jié)構(gòu)體中與操作系統(tǒng)版本有關(guān)的偏移量處,設(shè)偏移量為?;通過(guò)以下步驟來(lái)判斷:j-ι).根據(jù)操作系統(tǒng)位數(shù)是64位操作系統(tǒng)小頁(yè)模式、64位操作系統(tǒng)大頁(yè)模式、32位操作系統(tǒng)開(kāi)啟PAE小頁(yè)模式、32位操作系統(tǒng)開(kāi)啟PAE大頁(yè)模式、32位操作系統(tǒng)不開(kāi)啟PAE小頁(yè)模式還是32位操作系統(tǒng)不開(kāi)啟PAE大頁(yè)模式,將swapper進(jìn)程結(jié)構(gòu)體的虛擬地址init_task轉(zhuǎn)化為物理地址,執(zhí)行步驟j_2);j-2).將init_task轉(zhuǎn)化后的物理地址加上偏移量《,判斷所獲取的進(jìn)程名稱(chēng)是否為swapper,如果為swapper,則證明所獲取的Host_CR3為正確的宿主機(jī)CR3寄存器,執(zhí)行步驟k);如果不為swapper,則表明所獲取的Host_CR3不是宿主機(jī)CR3寄存器,判斷出的VMCS結(jié)構(gòu)體不正確,執(zhí)行步驟I);k).判斷Guest_CR3寄存器的正確性,借助EPT頁(yè)結(jié)構(gòu),將步驟g)中獲取的Guest_CR3寄存器的值轉(zhuǎn)化為宿主機(jī)物理地址,判斷轉(zhuǎn)化后的宿主機(jī)物理地址是否為零,如果不為零,則表明獲取的Guest_CR3寄存器為正確的虛擬機(jī)CR3寄存器,該頁(yè)中所檢測(cè)出結(jié)構(gòu)體為正確的VMCS結(jié)構(gòu)體;如果為零,則表明Guest_CR3寄存器不是正確的虛擬機(jī)CR3寄存器,所判斷出的VMCS結(jié)構(gòu)體不正確;執(zhí)行步驟I);I).判斷是否檢測(cè)完畢,判斷所有頁(yè)是否均已判斷完畢,如果判斷完畢則執(zhí)行步驟m);如果沒(méi)有判斷完畢,則對(duì)下一頁(yè)進(jìn)行判斷,跳轉(zhuǎn)執(zhí)行步驟d);m).虛擬機(jī)物理內(nèi)存的獲取,對(duì)于給定的虛擬機(jī)物理地址和虛擬地址,首先將其轉(zhuǎn)化為宿主機(jī)的物理地址,即可進(jìn)行虛擬機(jī)內(nèi)存信息的獲?。沪?.虛擬機(jī)物理內(nèi)存的分析,通過(guò)對(duì)步驟m)中獲取的虛擬機(jī)內(nèi)存信息的分析,即可對(duì)虛擬機(jī)的行為作出判斷。2.根據(jù)權(quán)利要求1所述的KVM虛擬機(jī)的物理內(nèi)存取證方法,其特征在于:步驟a)中宿主機(jī)物理內(nèi)存的獲取方法為:采用開(kāi)源軟件LiME加載內(nèi)核模塊獲得Linux和Linux設(shè)備中的完整內(nèi)存信息,以padded格式來(lái)獲取從O開(kāi)始的宿主機(jī)的全部?jī)?nèi)存信息;步驟b)和步驟c)中:通過(guò)獲取/proc/kallsyms文件來(lái)獲取內(nèi)核符號(hào)表,并從中獲取內(nèi)核符號(hào)init_task、結(jié)構(gòu)體vmcs_config、swapper_pg_dir或者init_level4_pgt的值;步驟c)中操作系統(tǒng)版本和位數(shù)的獲取方法為:通過(guò)在宿主機(jī)終端執(zhí)行“uname-r”來(lái)獲取。3.根據(jù)權(quán)利要求1或2所述的KVM虛擬機(jī)的物理內(nèi)存取證方法,其特征在于:步驟j-1)中所述的宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址的方法為:待轉(zhuǎn)化的宿主機(jī)虛擬地址的21至29位記為Directory、30至31位記為DirectoryPointer、30至38位記為DirectoryPtr、39至47位記為PML4、48至63位記為SingExtended,小頁(yè)模式下O至11位記為Offset、12至20位記為T(mén)able,大頁(yè)模式下O至20位記為Offset;如果操作系統(tǒng)位數(shù)是64位操作系統(tǒng)小頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的12位至51位、低11位均取為0,將其與PML4乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為Λ;取31的12位至51位、低12位均取為0,將其與DirectoryPtr乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為^42;取J2的12位至51位、低12位均取為0,將其與Directory乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為-43;取」5的12位至51位、低12位均取為0,將其與Table乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為《取.44的12位至51位、低12位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值;如果操作系統(tǒng)位數(shù)是64位操作系統(tǒng)大頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的12位至51位、低11位均取為O,將其與PML4乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為f.l;取51的12位至51位、低12位均取為O,將其與DirectoryPtr乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為B2;取52的12位至51位、低12位均取為0,將其與Directory乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為53;取53的21位至51位、低21位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值;如果操作系統(tǒng)位數(shù)是32位操作系統(tǒng)開(kāi)啟PAE小頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的12位至44位、低5位均取為O,將其與DirectoryPointer乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為Cl;取(71的12位至51位、低12位均取為0,將其與Directory乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為C2;取02的12位至51位、低12位均取為0,將其與Table乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為C3;取(73的12位至35位、低12位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值;如果操作系統(tǒng)位數(shù)是32位操作系統(tǒng)開(kāi)啟PAE大頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的12位至44位、低5位均取為O,將其與DirectoryPointer乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為Γ>1;取£31的12位至51位、低12位均取為0,將其與Directory乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為D2;取£?2的21位至35位、低21位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值;在32位操作系統(tǒng)不開(kāi)啟PAE模式下:待轉(zhuǎn)化的宿主機(jī)虛擬地址小頁(yè)模式下的O至11位記為Offset、12至21位記為T(mén)able、22至31位記為Directory;大頁(yè)模式下:0至21位記為Offset>22至31位記為Directory;如果操作系統(tǒng)位數(shù)是32位操作系統(tǒng)不開(kāi)啟PAE小頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的O位至31位、低13位均取為0,將其與Directory乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為規(guī);取5〗的12位至51位、低12位均取為0,將其與Table乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為52;取52的12位至31位、低12位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值;如果操作系統(tǒng)位數(shù)是32位操作系統(tǒng)不開(kāi)啟PAE大頁(yè)模式,則通過(guò)以下方法進(jìn)行地址轉(zhuǎn)換:取Host_CR3寄存器的O位至31位、低13位均取為0,將其與Directory乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為;取聲〗的21位至30位、低22位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為宿主機(jī)的虛擬地址轉(zhuǎn)化為物理地址之后的數(shù)值。4.根據(jù)權(quán)利要求1或2所述的KVM虛擬機(jī)的物理內(nèi)存取證方法,其特征在于:步驟m)中所述的虛擬機(jī)的物理地址到宿主機(jī)的物理地址通過(guò)以下方法來(lái)實(shí)現(xiàn):待轉(zhuǎn)化的虛擬機(jī)的物理地址的O至11位記為Offset、12至20位記為T(mén)able,21至29位記為Directory、30至38位記為DirectoryPtr、39至47位記為PML4、48至63位記為SingExtended;m-1).取擴(kuò)展頁(yè)表指針EPTP的12位至51位、低11位均取為0,將其與PML4乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為Gl;取01的12位至51位、低12位均取為0,將其與DirectoryPtr乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為G2;取(72的12位至51位、低12位均取為0,將其與Directory乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為G3-MG3的12位至51位、低12位均取為0,將其與Table乘以8之后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為G4;取《的12位至51位、低12位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為虛擬機(jī)的物理地址轉(zhuǎn)化為宿主機(jī)的物理地址之后的數(shù)值;在操作系統(tǒng)位數(shù)是64位操作系統(tǒng)小頁(yè)模式下,虛擬機(jī)的虛擬地址到宿主機(jī)的物理地址通過(guò)以下方法來(lái)實(shí)現(xiàn):待轉(zhuǎn)化的虛擬機(jī)的虛擬地址的O至11位記為Offset、12至20位記為T(mén)able,21至29位記為Directory、30至38位記為DirectoryPtr、39至47位記為PML4、48至63位記為SingExtended;m-2).將虛擬機(jī)的CR3寄存器的值按照步驟m-1)轉(zhuǎn)化為宿主機(jī)的物理地址,記為I1,取吊的12位至51位、低11位均取為0,將其與PML4乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為H2;將H2的值按照步驟m-Ι)轉(zhuǎn)化為宿主機(jī)的物理地址,記為丑3,取Zi3的12位至51位、低11位均取為0,將其與DirectoryPtr乘以8后的數(shù)值相力口,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為#4;將H4的值按照步驟m-Ι)轉(zhuǎn)化為宿主機(jī)的物理地址,記為Hs,取丑5的12位至51位、低11位均取為0,將其與Directory乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為At6;將/^的值按照步驟m-1)轉(zhuǎn)化為宿主機(jī)的物理地址,記為丑7,取At7的12位至51位、低11位均取為0,將其與Table乘以8后的數(shù)值相加,獲取此地址在物理內(nèi)存鏡像對(duì)應(yīng)的內(nèi)容記為H8;將馬的值按照步驟m-Ι)轉(zhuǎn)化為宿主機(jī)的物理地址,記為hH9的12位至51位、低12位均取為0,將其與Offset相加,得到的數(shù)據(jù)即為虛擬機(jī)的虛擬地址轉(zhuǎn)化為宿主機(jī)的物理地址之后的數(shù)值。5.根據(jù)權(quán)利要求1或2所述的KVM虛擬機(jī)的物理內(nèi)存取證方法,其特征在于:將步驟m)中所獲取的內(nèi)存信息依照不同系統(tǒng)的物理內(nèi)存分析方法獲取虛擬機(jī)動(dòng)態(tài)信息,包括虛擬機(jī)的進(jìn)程信息、驅(qū)動(dòng)信息、網(wǎng)絡(luò)信息、注冊(cè)表信息、日志信息。6.根據(jù)權(quán)利要求1或2所述的KVM虛擬機(jī)的物理內(nèi)存取證方法,其特征在于:步驟j)中所述的偏移量力'具有以下取值關(guān)系:64位fcl5的偏移量為0x460,32位fcl6的偏移量為0x2e4,64位fcl6的偏移量為0x460,32位fcl8的偏移量為0x2e4,Ubuntul1.04的偏移量為0x2DC?!疚臋n編號(hào)】G06F12/06GK104182269SQ201410394479【公開(kāi)日】2014年12月3日申請(qǐng)日期:2014年8月12日優(yōu)先權(quán)日:2014年8月12日【發(fā)明者】王連海,張淑慧申請(qǐng)人:山東省計(jì)算中心(國(guó)家超級(jí)計(jì)算濟(jì)南中心)
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
赫章县| 和龙市| 南雄市| 陇川县| 莒南县| 景德镇市| 江门市| 中卫市| 外汇| 韶关市| 邹平县| 兴文县| 北流市| 阜阳市| 内丘县| 安仁县| 禹州市| 济南市| 忻州市| 册亨县| 日喀则市| 鹤壁市| 沅陵县| 泰和县| 惠来县| 亚东县| 伊金霍洛旗| 罗田县| 芜湖县| 霸州市| 肥乡县| 哈巴河县| 元江| 买车| 英山县| 疏附县| 北票市| 开阳县| 略阳县| 蓬溪县| 涟源市|