1 概述
隨著虛擬化技術(shù)研究的深入,系統(tǒng)虛擬化技術(shù)已在X86體系架構(gòu)上獲得了很好的發(fā)展,在企業(yè)計算、災(zāi)難恢復(fù)、分布式計算、桌面虛擬化領(lǐng)域均得到了廣泛應(yīng)用。在信息安全領(lǐng)域,因系統(tǒng)虛擬化層介于硬件平臺與用戶操作系統(tǒng)之間,其特有的客戶機操作系統(tǒng)監(jiān)控和隔離作用,使得系統(tǒng)虛擬化技術(shù)不僅可以用于服務(wù)器端實現(xiàn)資源整合與管理功能,也可以增強以操作系統(tǒng)安全為核心的用戶終端系統(tǒng)的安全性,因此,虛擬化技術(shù)在信息安全領(lǐng)域也備受關(guān)注。在國內(nèi),系統(tǒng)虛擬技術(shù)在信息安全領(lǐng)域的技術(shù)研究開展得比較多,目前在硬件資源訪問控制、操作系統(tǒng)惡意行為監(jiān)控、隱藏進程檢測等方面已有相關(guān)的研究。主要的思路是在虛擬機監(jiān)控器(Virtual Machine Monitor,VMM)中構(gòu)筑一系列的安全防護措施,強化對客戶機操作系統(tǒng)的安全監(jiān)控與管理,但此類技術(shù)的應(yīng)用研究目前還處于起步階段,尚無完整的應(yīng)用實現(xiàn)方案。
本文借鑒國內(nèi)外當前相關(guān)技術(shù)的研究成果,結(jié)合個人終端操作系統(tǒng)安全防護實際需求,提出了一種適用于個人終端計算機、基于虛擬技術(shù)的操作系統(tǒng)安全增強模型。根據(jù)該模型在終端安全領(lǐng)域應(yīng)用推廣中將會面臨的顯卡性能問題,提出一種提高虛擬機顯示性能的顯卡透傳技術(shù),并基于KVM虛擬機研究了顯卡透傳技術(shù)的具體實現(xiàn)。
2 操作系統(tǒng)安全增強模型
在個人終端操作系統(tǒng)安全增強方面,需要做到既能維護系統(tǒng)的安全性,又需要保證系統(tǒng)的易用性和高效性。根據(jù)這個需求特點,通過改造現(xiàn)有虛擬機體系結(jié)構(gòu),提出個人終端操作系統(tǒng)安全增強模型。傳統(tǒng)系統(tǒng)虛擬化體系模型如圖1所示,改造后的操作系統(tǒng)安全增強模型體系結(jié)構(gòu)如圖2所示。
圖1 傳統(tǒng)系統(tǒng)虛擬化體系模型
圖2 基于虛擬化技術(shù)的操作系統(tǒng)安全增強模型
在基于虛擬技術(shù)的個人終端操作系統(tǒng)安全增強模型上,一臺PC機只運行一個獨立的虛擬客戶機操作系統(tǒng),該系統(tǒng)對于用戶來說就是普通的用戶操作系統(tǒng)。虛擬機監(jiān)控器則成為安全監(jiān)控器,負責(zé)根據(jù)訪問策略隔離與控制客戶機操作系統(tǒng)對硬件資源的訪問權(quán)限,可以根據(jù)安全性需要將不存在安全隱患的硬件(顯卡、聲卡、鍵盤、鼠標等)透傳給客戶機操作系統(tǒng)直接控制,對存在安全隱患的硬件資源(如網(wǎng)卡、USB端口)進行虛擬,在虛擬層實施訪問過濾等檢測措施確保訪問安全;同時通過在虛擬化層實現(xiàn)進一步的惡意行為檢測、隱藏進程檢測等安全模塊,對客戶機操作系統(tǒng)各種惡意行為進行監(jiān)控。
相比于通用虛擬機體系結(jié)構(gòu),這種安全模型中虛擬機監(jiān)控器的主要職能不再是多虛擬環(huán)境的調(diào)度與切換,而轉(zhuǎn)變?yōu)閷我惶摂M機的安全監(jiān)視功能,簡化了傳統(tǒng)系統(tǒng)虛擬化體系結(jié)構(gòu)的復(fù)雜性,增強了操作系統(tǒng)安全性控制功能。
這種安全模型的推廣應(yīng)用,要求虛擬機下的客戶機操作系統(tǒng)應(yīng)具備與運行于真實主機上的操作系統(tǒng)相同或相近的性能與通用性,否則終端用戶無法接受因安全增強而帶來的性能或易用性方面的損失。自2005年Intel和AMD公司分別發(fā)布了支持虛擬化技術(shù)(Virtualization Technology,VT)的CPU以來,基于支持VT技術(shù)的CPU虛擬化技術(shù)已經(jīng)讓虛擬機處理性能產(chǎn)生了質(zhì)的提升,能夠達到真實主機性能的95%以上,CPU處理性能已經(jīng)不再是虛擬化技術(shù)在終端安全領(lǐng)域發(fā)展的絆腳石。而顯卡顯示性能問題則成為當前虛擬化技術(shù)在終端安全領(lǐng)域發(fā)展的關(guān)鍵問題,當前國外主流的虛擬機軟件都沒能很好地解決顯卡虛擬化問題,虛擬機的圖形顯示處理能力只相當于當年的386時代的水平,這使得虛擬機中的客戶機操作系統(tǒng)不能運行一些對圖形處理能力要求高的應(yīng)用,這種安全模型的進一步發(fā)展存在著較大障礙。將基于KVM虛擬機研究實現(xiàn)提升客戶機操作系統(tǒng)顯示性能的具體實現(xiàn)方法,本文的研究主要是基于KVM虛擬機進行的,但相關(guān)技術(shù)原理具有普適性,也可在其他開源虛擬機上得到實現(xiàn)。
3 KVM虛擬機
當前,主流的商業(yè)虛擬機有VMware和VirutalPC,開源虛擬機有Xen、Qemu、Bochs、KVM等。KVM(Kernel-basedVirtual Machine)是一個基于Linux內(nèi)核、依賴CPU硬件虛擬化技術(shù)(如Intel或AMDVT技術(shù))的開源系統(tǒng)虛擬化模塊。KVM虛擬機的體系架構(gòu)如圖3所示,VMM虛擬機監(jiān)控器借助于Linux操作系統(tǒng)的內(nèi)核實現(xiàn)。
圖3 KVM虛擬機原理
KVM虛擬機支持PCI透傳技術(shù),可以實現(xiàn)將PCI硬件資源直接映射到虛擬機的客戶操作系統(tǒng)中,客戶操作系統(tǒng)可以直接驅(qū)動真實的標準PCI物理設(shè)備以獲得高速物理資源訪問。但KVM虛擬機支持PCI透傳技術(shù)還必須依賴于硬件平臺支持Intel或AMD的VT-d/IOMMU技術(shù)。VT-d/IOMMU技術(shù)在服務(wù)器虛擬化中對I/O虛擬化具有重要作用,但在終端用戶的操作系統(tǒng)安全增強模型中卻并不重要。此外,VT-d/IOMMU技術(shù)主要面向服務(wù)器設(shè)計,普通PC機上支持不多。因此,在基于KVM虛擬機的操作系統(tǒng)安全加固模型中實現(xiàn)顯卡透傳主要有2個方面的研究工作:(1)研究在不支持VT-d/IOMMU技術(shù)的硬件平臺上實現(xiàn)PCI透傳的方法;(2)實現(xiàn)對顯卡這種特殊的PCI設(shè)備在虛擬機中的直接分配。
4 直接地址映射技術(shù)
4.1 基本原理
在虛擬機中實現(xiàn)PCI透傳,需要處理好4個方面的問題:(1)PCI配置空間映射;(2)PCI內(nèi)存及I/O資源映射;(3)PCIIRQ中斷映射;(4)DMA(直接內(nèi)存訪問)處理。
在通常情況下,對于標準PCI設(shè)備,前3個方面的處理均可以通過虛擬機相應(yīng)的軟件映射機制實現(xiàn),而對客戶機操作系統(tǒng)的物理硬件DMA的處理則是現(xiàn)有的虛擬方式下難以用軟件實現(xiàn)的,這與DMA本身的技術(shù)機制有關(guān)。
DMA是外設(shè)與系統(tǒng)進行高速數(shù)據(jù)傳輸?shù)募夹g(shù),外設(shè)可以不經(jīng)過CPU直接進行內(nèi)存讀寫訪問,傳輸數(shù)據(jù)高效。在DMA傳輸時驅(qū)動需要申請一個可被DMA訪問的地址空間,然后告訴外設(shè)可進行DMA傳輸?shù)膬?nèi)存物理地址。這種方式在物理主機上沒有任何問題,操作系統(tǒng)會保證分配給驅(qū)動的地址空間獨立性。但在虛擬機上,因采用影子頁表機制實現(xiàn)多個客戶機物理地址到主機物理地址的映射,驅(qū)動從系統(tǒng)中獲取的物理地址實際上是經(jīng)過虛擬機轉(zhuǎn)換后的客戶機物理地址(GPA),并非對應(yīng)真實的主機物理地址(HPA)。如果外設(shè)直接存取該地址的數(shù)據(jù)必然導(dǎo)致系統(tǒng)崩潰或造成安全隱患。Intel的VT-d和AMD的IOMMU技術(shù)則是從硬件層面解決DMA處理問題的有效辦法。
與CPU上的Intel VT-x 技術(shù)一樣,VT-d(VirtualizationTechnology for Directed I/O)技術(shù)是一種基于北橋芯片的硬件輔助虛擬化技術(shù),通過在北橋中內(nèi)置提供DMA虛擬化和IRQ虛擬化硬件,實現(xiàn)了新型的I/O虛擬化方式。運用VT-d技術(shù),虛擬機得以使用直接I/O設(shè)備分配方式或者I/O設(shè)備共享方式實現(xiàn)PCI設(shè)備透傳,從而大幅提升了虛擬化的I/O性能。AMD與之類似的技術(shù)稱為SVMIOMMU。
Intel的VT-d和AMD的IOMMU技術(shù)支持DMA虛擬化的主要原理是由硬件維護一張DMA重映射表,當外設(shè)對某個物理地址進行DMA操作時,自動查找映射表,將操作地址映射為虛擬機內(nèi)GPA對應(yīng)的真實HPA,以避免錯誤的內(nèi)存地址操作。該技術(shù)具有通用性,可以支持多個虛擬機同時進行物理設(shè)備透傳,且互相不影響,但需要有主板芯片組支持才能使用,對硬件依賴性較高,KVM虛擬機已支持基于VT-d技術(shù)的PCI設(shè)備透傳。但在終端操作系統(tǒng)安全加固模型中,不需要對多虛擬機同時進行物理設(shè)備透傳,因此,并不需要維護一張一對多的DMA重映射表,只需要處理好GPA等于HPA的問題,即可有效確保硬件對DMA地址處理的合法性,使得虛擬機對物理硬件具有與真實主機一致的效果。本文針對DMA處理問題,提出了虛擬機與物理主機直接地址映射技術(shù)的解決方案。
4.2 實現(xiàn)方式
直接地址映射是通過將真實系統(tǒng)中低地址內(nèi)存直接分配給虛擬機使用,直接讓虛擬機的GPA對應(yīng)主機HPA的技術(shù)。直接地址映射技術(shù)可以不需要任何硬件輔助,做到DMA訪問的物理地址內(nèi)存與主機一致。但該技術(shù)的缺點是,一個主機系統(tǒng)中只能同時運行一個進行物理設(shè)備透傳的虛擬機,多個虛擬機同時進行物理設(shè)備透傳則會造成地址沖突。
KVM是基于Linux操作系統(tǒng)運行的。實現(xiàn)直接地址映射的先決條件是需要Linux操作系統(tǒng)在啟動時將低地址內(nèi)存空間預(yù)留出來。為保證體系兼容,X86架構(gòu)下的低1MB內(nèi)存空間在操作系統(tǒng)初始化前就已預(yù)留給實模式中斷向量表、BIOS數(shù)據(jù)、顯存等使用,不能在Linux上預(yù)留這部分空間,只能從1MB以上的空間開始預(yù)留。對于2.6內(nèi)核,有一個PHYSICAL_START變量設(shè)置系統(tǒng)啟動時內(nèi)核加載地址,缺省指向地址0x100000(1MB)處,可以修改為更大的值讓系統(tǒng)在啟動時空出1MB到PHYSICAL_START地址之間的內(nèi)存空間,然后將這部分空間標記為預(yù)留,以避免操作系統(tǒng)啟動后占用這部分空間。
從操作系統(tǒng)層面預(yù)留的這部分空間是無法直接在應(yīng)用層直接使用的,目前通過Linux下/dev/mem設(shè)備文件直接將預(yù)留內(nèi)存映射到應(yīng)用層QEMU為虛擬機分配的內(nèi)存空間中,映射時需注意確保HPA與GPA的對應(yīng)。而對于虛擬機的其他內(nèi)存空間,無需與物理地址對應(yīng),依然采用影子頁表機制將虛擬機內(nèi)存地址映射為Linux分配給QEMU的內(nèi)存空間中。具體映射關(guān)系如圖4所示。從圖中可以看出,在成功實現(xiàn)內(nèi)存映射后,客戶機操作系統(tǒng)所使用的內(nèi)存實際對應(yīng)到了主機的真實內(nèi)存部分,映射時確保了地址的一一對應(yīng)。而虛擬機前640KB內(nèi)存空間均由QEMU進行虛擬,占用的是Linux操作系統(tǒng)的內(nèi)存空間?紤]到運行態(tài)主機的VGABIOS內(nèi)存空間存儲的是被修改過的BIOS代碼,因此,虛擬機中VGABIOS內(nèi)存空間均由QEMU進行虛擬,也占用的是Linux操作系統(tǒng)的內(nèi)存空間。
圖4 直接地址映射下虛擬機內(nèi)存與物理內(nèi)存的對應(yīng)關(guān)系
5 顯卡直接分配
從KVM虛擬機結(jié)構(gòu)中可以看出,如果虛擬機需要訪問QEMU模擬出的外設(shè),則需要通過多次處理,才能夠?qū)?shù)據(jù)真正傳遞給真實硬件設(shè)備處理。這對于普通低速接口的硬件外設(shè)訪問來說虛擬化處理開銷還容易接受,但對于顯卡虛擬化來說性能問題將顯得尤其突出。因此,采用顯卡直接分配技術(shù)將物理顯卡單獨分配給一個虛擬機獨占訪問,使虛擬機上的客戶端操作系統(tǒng)直接驅(qū)動物理顯卡,進行MMIO訪問和DMA操作,是一個在虛擬環(huán)境中獲得高質(zhì)量圖形顯示效果的有效解決方案。圖5是顯卡直接分配技術(shù)與QEMU直接虛擬外設(shè)的處理對比。從圖中可以看出,顯卡直接分配給虛擬機的客戶操作系統(tǒng)還可以使得客戶機操作系統(tǒng)充分利用物理顯卡原始驅(qū)動實現(xiàn)顯卡效能的最大化發(fā)揮。
開源的KVM虛擬機目前已經(jīng)支持對標準PCI設(shè)備的直接透傳(需要硬件具備I/O虛擬化能力,即需要硬件對VT-d或IOMMU技術(shù)的支持),但還沒能夠支持顯卡的直接透傳。主要有2個方面原因:(1)因歷史遺留問題,X86體系架構(gòu)下的顯卡設(shè)備為實現(xiàn)兼容,留下了一些不同于標準PCI設(shè)備的內(nèi)存和I/O端口;(2)因顯卡自身高速處理需要,各顯卡廠商可能會有一些特別的設(shè)計(如獨立顯存和共享顯存的設(shè)計、特殊訪問接口等),針對顯卡不能完全像標準PCI設(shè)備一樣簡單地實現(xiàn)設(shè)備直接透傳。
圖5 顯卡直接分配與QEMU虛擬外設(shè)技術(shù)對比
借鑒XEN虛擬機下基于VT-d技術(shù)的顯卡直接分配技術(shù),解決了KVM基于直接地址映射技術(shù)的顯卡設(shè)備直接分配難題。在KVM中實現(xiàn)顯卡直接分配,需要解決好顯卡在虛擬機總線中的注冊、PCI配置空間虛擬、顯卡資源(顯存及I/O地址)映射、VGABIOS調(diào)用、DMA映射等一系列問題。
5.1顯卡在KVM虛擬機中的注冊
KVM使用QEMU用戶態(tài)進程虛擬外設(shè),顯卡如果在虛擬機中使用必須首先在QEMU中注冊為一個稱為pci-assign的特殊qdev虛擬設(shè)備。pci-assign虛擬設(shè)備是QEMU中專門為PCI透傳定義的虛擬設(shè)備類型,每一個被透傳到虛擬機中的PCI設(shè)備都會被注冊為一個pci-assign虛擬設(shè)備,客戶機操作系統(tǒng)對該虛擬設(shè)備進行的MMIO訪問等操作都被直接轉(zhuǎn)發(fā)到對應(yīng)的真實物理設(shè)備上。該功能的實現(xiàn)已經(jīng)在QEMU-KVM源代碼中包含,只需要在啟動KVM時通過命令行指定要映射的PCI設(shè)備BDF號(總線號、設(shè)備號、功能號)即可實現(xiàn)將該設(shè)備注冊到虛擬機中。
但是作為顯卡設(shè)備,僅注冊為pci-assign虛擬設(shè)備并不能完全將顯卡啟用,虛擬機中能夠從PCI資源中看到該顯卡,但是顯卡依然無法工作,還需要進一步完成后續(xù)的工作。
5.2 顯卡專用總線的注冊
因為性能需要,X86架構(gòu)下大部分平臺都將物理顯卡掛接在獨立的一根PCI總線(總線1或總線2)上,有些廠商的顯卡驅(qū)動會對顯卡BDF號進行檢測,如果顯卡在物理主機上的BDF號與虛擬機中注冊的BDF號不一致,將無法正確驅(qū)動顯卡(筆者實驗用的NVIDIA Geforce G205M顯卡就存在這個問題)。因此,為確保顯卡直接分配技術(shù)在各類顯卡中能夠通用,需要在注冊顯卡到虛擬機中時確保顯卡在虛擬機中的BDF號與真實機器的BDF號保持一致。
QEMU中缺省只虛擬了一條PCI總線(總線0),虛擬的磁盤控制器、CD-ROM驅(qū)動器、網(wǎng)卡、顯卡、聲卡等設(shè)備都注冊在這條總線上。為滿足顯卡直接分配的需要,要修改QEMU源碼多注冊2條PCI總線。利用QEMU中已實現(xiàn)的虛擬PCI橋設(shè)備,在虛擬機系統(tǒng)總線初始化時注冊2個QEMUDEC21154虛擬PCI橋設(shè)備,創(chuàng)建了總線1和總線2。然后修改QEMU注冊PCI設(shè)備的實現(xiàn)方式,指定將透傳顯卡設(shè)備按照其真實主機上BDF相同的總線號、設(shè)備號、功能號進行一一對應(yīng)的注冊。這樣就實現(xiàn)了顯卡在虛擬機中與在真實主機上具有相同的BDF,以使得顯卡驅(qū)動能夠直接驅(qū)動顯卡。
5.3顯卡資源直接映射
自第1臺IBMPC問世以后,顯卡經(jīng)歷了MDA、MonoHercults、CGA、EGA、VGA、XGA、SVGA等標準,總線也由ISA、EISA、VESA、PCI、AGP直到現(xiàn)在的PCIE,前后共約30年的進程。雖然很多硬件都漸漸湮沒在歷史的洪流中,但是由于兼容性需要,一些內(nèi)存或I/O端口還是作為歷史遺留資源在X86硬件體系中保留了下來。
在Intel制定PCI總線標準時,在PCI空間保留了從0開始連續(xù)1MB的Memory空間,和從0開始連續(xù)64KB的I/O空間,其中給顯卡預(yù)留的空間如表1所示。
表1 PCI顯卡歷史遺留資源
在PC機啟動時,BIOS程序會掃描整個PCI空間,發(fā)現(xiàn)有PCI顯卡時,會使能它的Mem訪問和I/O訪問,同時配置它的內(nèi)存空間和I/O空間。但是上文提到的那2塊保留的內(nèi)存空間和I/O空間是不需要作專門配置的,PCI顯卡可以直接響應(yīng)落在這2段空間上的PCI訪問請求。
進行顯卡透傳時必須將物理主機特殊的預(yù)留內(nèi)存和I/O地址空間直接映射到虛擬機對應(yīng)的地址空間中,以保證顯卡初始顯示。對于0xA0000~0xBFFFF內(nèi)存空間向虛擬機的映射,借助Linux下特有的/dev/mem設(shè)備實現(xiàn),通過/dev/mem設(shè)備可以訪問到整個PC的全部物理內(nèi)存。修改QEMU源代碼,在分配了虛擬機的內(nèi)存后(得到一個應(yīng)用層地址空間的虛地址),直接打開/dev/mem設(shè)備,將地址0xA0000到0xBFFFF內(nèi)存使用mmap方式直接映射到QEMU虛擬機的內(nèi)存空間對應(yīng)偏移地址處。
對于I/O端口0x3B0~0x3DF的映射,可直接向QEMU中注冊I/O讀寫函數(shù),該函數(shù)從應(yīng)用層空間上轉(zhuǎn)發(fā)對應(yīng)的讀寫操作到真實主機的I/O端口上。
除歷史遺留資源外,各種顯卡還有其特有的內(nèi)存和I/O資源,需要將這些資源都映射進虛擬機中。
Linux下的SYSFS系統(tǒng)提供了一種從應(yīng)用層訪問內(nèi)核資源的簡單途徑。所有的PCI設(shè)備資源在系統(tǒng)初始化時都自動映射成/sys/bus/pci目錄下的文件,應(yīng)用層如果訪問這些資源可直接打開文件將其mmap到內(nèi)存中,對映射內(nèi)存的讀寫操作都會傳送到PCI設(shè)備的內(nèi)存空間中。在注冊物理顯卡到虛擬機時,需要將對應(yīng)的顯卡資源也映射到虛擬機的地址空間中去。
5.4 顯卡的PCI配置空間
在實現(xiàn)顯卡直接分配時,最重要的是顯卡的PCI配置空間虛擬化。PCI配置空間是用來動態(tài)配置PCI設(shè)備資源占用的一組寄存器,每個PCI設(shè)備都有自己獨立的配置空間,在系統(tǒng)初始化時,由BIOS(也可在操作系統(tǒng)中配置)根據(jù)一定的算法分配PCI設(shè)備所占有的資源,并將資源信息寫入PCI設(shè)備配置空間。
PCI總線規(guī)范定義的配置空間總長度為256Byte,配置信息按一定的順序和大小依次存放。前64Byte的配置空間稱為配置頭,對于所有的設(shè)備都一樣。配置頭的主要功能是用來識別設(shè)備、定義主機訪問PCI卡的方式(I/O訪問或者存儲器訪問,還有中斷信息)。其余的192Byte稱為本地配置空間,主要定義卡上中斷、I/O端口資源、內(nèi)存基地址及范圍等信息。PCI配置空間中基地址寄存器(Base Address Registers,BAR)就是用于配置PCI設(shè)備在系統(tǒng)中占用的I/O及內(nèi)存地址及范圍的寄存器。
對于普通PCI設(shè)備,可以直接虛擬PCI配置空間,由KVM虛擬機的BIOS在啟動時重新配置該空間中的BAR和中斷號等信息。但有些廠商的顯卡則必須實現(xiàn)虛擬機里基地址寄存器值等于物理設(shè)備上基地址寄存器的值(VBAR=PBAR),原廠驅(qū)動才能夠正確驅(qū)動顯卡。因此,為保證顯卡透傳功能的通用性,針對顯卡都采用VBAR=PBAR的映射方式。這需要為顯卡透傳專門修改虛擬機BIOS,使得其在開機初始化時針對顯卡保留其與PBAR一致的虛擬機I/O及內(nèi)存資源。
針對顯卡的透傳修改QEMU代碼,在注冊pci-assign虛擬設(shè)備時將設(shè)備真實PCI配置空間內(nèi)容完整復(fù)制到虛擬配置空間。然后修改SeaBIOS(KVM虛擬機使用的BIOS)中PCI設(shè)備探測與資源分配部分的代碼,在虛擬機SeaBIOS設(shè)置顯卡各配置寄存器時,首先讀取虛擬配置空間中的真實設(shè)備配置信息,優(yōu)先為顯卡分配虛擬機硬件資源,確保被透傳的顯卡與真實顯卡保持一致的基地址寄存器配置信息。對于顯卡中斷等配置則可以根據(jù)需要由虛擬機進行映射轉(zhuǎn)換,中斷號的虛擬不影響顯卡透傳。
5.5 VGA BIOS系統(tǒng)
顯卡也具有與主板上一樣的基本輸入輸出系統(tǒng)(BIOS),稱為VGABIOS。當系統(tǒng)加電啟動時,主板BIOS會尋找到顯卡,復(fù)制顯卡中的VGABIOS到系統(tǒng)預(yù)留VGA BIOS專用內(nèi)存空間中(地址0xC0000~0xCFFFF),并調(diào)用VGA BIOS初始化顯卡。
每種顯卡都有自己專用的VGA BIOS,存儲在顯卡ROM存儲區(qū)或主板BIOS中。如果需要在虛擬機中初始化顯卡,則必須在虛擬機BIOS中重新調(diào)用VGA BIOS。因此,需要提取VGA BIOS文件給虛擬機,由虛擬機啟動時將該VGABIOS代碼復(fù)制到VGA BIOS專用內(nèi)存空間中執(zhí)行顯卡的初始化。
顯卡VGA BIOS的提取有很多種方式,具體如何提取需要視主板或顯卡情況而定。大部分顯卡的VGA BIOS可以用工具從內(nèi)存中提取(如AFLASH、GPU-Z等)。但有些顯卡,如NVIDIA顯卡,在VGA BIOS執(zhí)行時會自動修改自己在內(nèi)存中的部分代碼,直接提取到的VGA BIOS無法用來初始化顯卡。筆記本電腦集成的顯卡通常都會將顯卡BIOS集成到主板BIOS中,可以通過提取主板BIOS,分析出顯卡BIOS存儲位置,提取對應(yīng)的VGA BIOS。
5.6 DMA映射
顯卡的DMA映射問題,采用直接地址映射技術(shù)解決,通過修改Linux操作系統(tǒng)內(nèi)核,預(yù)留從0x0x100000(1MB)地址開始的物理內(nèi)存空間,直接映射給客戶機操作系統(tǒng)使用,解決了客戶機操作系統(tǒng)下直接對顯卡DMA的處理。
6 結(jié)束語
虛擬機顯卡透傳技術(shù)解決了虛擬客戶機操作系統(tǒng)圖形顯示效果差的難題。在終端安全領(lǐng)域,顯卡透傳技術(shù)通過客戶機操作系統(tǒng)直接驅(qū)動物理顯卡獲得高質(zhì)量顯示效果,使得虛擬機中的客戶操作系統(tǒng)具有更普遍的適應(yīng)性,能夠滿足普通用戶的使用需求,為基于全系統(tǒng)虛擬化技術(shù)的操作系統(tǒng)安全增強、進程控制、病毒防護等技術(shù)的研究成果更進一步地拓展了實用空間。
由于時間和能力所限,本文研究成果主要適用于當前主流的獨立顯存的顯卡,對于一些特殊顯卡或共享顯存的集成顯卡還會有些特殊處理,這里不再詳述。通過在華碩K40IP筆記本電腦(支持VT-x,不支持VT-d)上驗證,主機向客戶機操作系統(tǒng)直接分配NVIDIA G205M顯卡,并安裝原廠驅(qū)動進行測試,測試證明虛擬機操作系統(tǒng)的顯示效果得到質(zhì)的提升,獲得了和主機顯示完全接近的效果。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標題:基于虛擬化的系統(tǒng)安全增強及顯卡透傳研究
本文網(wǎng)址:http://www.ezxoed.cn/html/support/1112158585.html