專(zhuān)利名稱(chēng):一種基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)操作系統(tǒng)的驅(qū)動(dòng)加固技術(shù),特別是涉及一種基于虛擬機(jī)技術(shù)的驅(qū)動(dòng)加固方法。
背景技術(shù):
近年來(lái)商用操作系統(tǒng)逐漸應(yīng)用于關(guān)鍵業(yè)務(wù)應(yīng)用中,因此對(duì)于操作系統(tǒng)的高可用性要求也提高到了一個(gè)新的層次。雖然經(jīng)過(guò)多年的發(fā)展,操作系統(tǒng)已經(jīng)比較成熟和可靠,但仍然會(huì)造成大量的系統(tǒng)失效。研究表明驅(qū)動(dòng)程序是造成這些失效的主要原因。斯坦福大學(xué)的一項(xiàng)報(bào)告指出,Linux的驅(qū)動(dòng)程序要比其他操作系統(tǒng)的驅(qū)動(dòng)程序造成的失效高3-7倍,而Windows 2000的驅(qū)動(dòng)程序問(wèn)題占造成系統(tǒng)崩潰原因的27%,遠(yuǎn)高于2%由內(nèi)核所造成的系統(tǒng)崩潰。如何設(shè)計(jì)并實(shí)現(xiàn)對(duì)操作系統(tǒng)中的驅(qū)動(dòng)程序進(jìn)行加固,使驅(qū)動(dòng)的故障不會(huì)影響到內(nèi)核的正常運(yùn)行,進(jìn)而提高系統(tǒng)的可用性就顯得非常重要。
從實(shí)現(xiàn)方式的角度來(lái)分,可將目前主流的驅(qū)動(dòng)加固技術(shù)分為四類(lèi),硬件實(shí)現(xiàn)驅(qū)動(dòng)隔離方法,降低驅(qū)動(dòng)程序優(yōu)先級(jí)方法,軟件故障隔離方法,以及使用安全語(yǔ)言編寫(xiě)驅(qū)動(dòng)等。
通過(guò)硬件實(shí)現(xiàn)驅(qū)動(dòng)隔離方法提高操作系統(tǒng)可靠性主要是i386架構(gòu)中的段環(huán)架構(gòu)。此類(lèi)結(jié)構(gòu)的典型例子是Palladium。這些系統(tǒng)支持細(xì)粒度的保護(hù),并具有對(duì)特權(quán)子進(jìn)程進(jìn)行構(gòu)建和隔離的能力。通過(guò)添加新的特權(quán)子系統(tǒng)可以對(duì)操作系統(tǒng)進(jìn)行真實(shí)驅(qū)動(dòng),這些子系統(tǒng)運(yùn)行于新的域或段中。但是在這些架構(gòu)中,恢復(fù)都沒(méi)有得到重視。特別地,對(duì)于支持以細(xì)粒度方式共享數(shù)據(jù)的能力,如果一個(gè)處于共享狀態(tài)的模塊失效了,對(duì)其他正在共享相同資源的模塊進(jìn)行恢復(fù)非常困難。段架構(gòu)不但性能低下,而且編寫(xiě)困難。
降低驅(qū)動(dòng)特權(quán)級(jí)方法是讓驅(qū)動(dòng)程序運(yùn)行在非內(nèi)核態(tài)的優(yōu)先級(jí)下,這樣可以防止設(shè)備驅(qū)動(dòng)運(yùn)行特權(quán)指令,訪(fǎng)問(wèn)特權(quán)地址空間,由此破壞內(nèi)核。但是,這樣做會(huì)帶來(lái)性能上的比較大的損失,因?yàn)槊看握{(diào)用驅(qū)動(dòng)需要陷入內(nèi)核,在返回時(shí)又要更改特權(quán)級(jí)。L4,Exokernel以及Mach等微內(nèi)核系統(tǒng)采用了這用技術(shù)。
而采用軟件故障隔離方法的典型為VINO系統(tǒng),其通過(guò)軟件隔離方法對(duì)驅(qū)動(dòng)模塊的目標(biāo)代碼進(jìn)行封裝,使它只能跳轉(zhuǎn)到自己的代碼段,并且只能對(duì)自己的數(shù)據(jù)段進(jìn)行寫(xiě)操作。因此,驅(qū)動(dòng)程序中所有的跳轉(zhuǎn)目標(biāo)地址都有相同的高位結(jié)構(gòu)(段標(biāo)識(shí)符),同樣,驅(qū)動(dòng)程序中產(chǎn)生的所有合法數(shù)據(jù)地址都有相同的段標(biāo)識(shí)符。將代碼段和數(shù)據(jù)段分離可以防止驅(qū)動(dòng)修改自己的代碼段。這種隔離方式開(kāi)銷(xiāo)較小,但是需要對(duì)現(xiàn)有驅(qū)動(dòng)程序進(jìn)行修改,這對(duì)于擁有大量驅(qū)動(dòng)程序的商用操作系統(tǒng)來(lái)說(shuō)困難非常大。
使用安全語(yǔ)言如Java和Modula-3可以有效防止設(shè)備驅(qū)動(dòng)程序非控的訪(fǎng)問(wèn)內(nèi)核內(nèi)存。但是使用安全語(yǔ)言需要重寫(xiě)驅(qū)動(dòng),并且在向驅(qū)動(dòng)中安全復(fù)制數(shù)據(jù)時(shí)會(huì)引入額外的開(kāi)銷(xiāo)。到目前為止,操作系統(tǒng)供應(yīng)商也不希望用安全語(yǔ)言來(lái)實(shí)現(xiàn)系統(tǒng)代碼。而且,安全語(yǔ)言方法使得利用現(xiàn)有的巨大的代碼庫(kù)變得不可能。
所以目前的驅(qū)動(dòng)隔離是將驅(qū)動(dòng)代碼放在單獨(dú)的邏輯故障域中,本質(zhì)上是在驅(qū)動(dòng)和系統(tǒng)其他部分之間提供虛擬內(nèi)存保護(hù)。由于只能對(duì)內(nèi)存進(jìn)行保護(hù),這只能解決部分問(wèn)題,而對(duì)于調(diào)度和訪(fǎng)問(wèn)特權(quán)指令沒(méi)有進(jìn)行處理,而這些方面的故障很容易造成系統(tǒng)的崩潰。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種對(duì)系統(tǒng)性能影響很小的情況下實(shí)現(xiàn)對(duì)設(shè)備驅(qū)動(dòng)程序的隔離和加固,滿(mǎn)足關(guān)鍵業(yè)務(wù)應(yīng)用對(duì)高可靠和高可用性的要求,解決現(xiàn)有驅(qū)動(dòng)模型帶來(lái)的不安全的驅(qū)動(dòng)加固方法,特別是提供一種基于虛擬機(jī)技術(shù)的驅(qū)動(dòng)加固方法,從而提高系統(tǒng)的可靠性和可用性。
為了實(shí)現(xiàn)上述發(fā)明目的,采用的技術(shù)方案如下一種基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法,將驅(qū)動(dòng)程序分為真實(shí)驅(qū)動(dòng)程序、虛擬驅(qū)動(dòng)程序和守護(hù)驅(qū)動(dòng)程序;所述真實(shí)驅(qū)動(dòng)程序?yàn)轵?qū)動(dòng)硬件設(shè)備工作的真實(shí)代碼,其設(shè)置于特權(quán)操作系統(tǒng)中,且通過(guò)隔離機(jī)制與特權(quán)操作系統(tǒng)的內(nèi)核進(jìn)行隔離;所述虛擬驅(qū)動(dòng)程序包含驅(qū)動(dòng)硬件設(shè)備所需的參數(shù)調(diào)用的轉(zhuǎn)發(fā)代碼,其設(shè)置于非特權(quán)操作系統(tǒng)中,且通過(guò)數(shù)據(jù)通道與守護(hù)驅(qū)動(dòng)程序交互;所述守護(hù)驅(qū)動(dòng)程序作為虛擬驅(qū)動(dòng)程序和真實(shí)驅(qū)動(dòng)程序的溝通橋梁設(shè)置于特權(quán)操作系統(tǒng)中。
所述特權(quán)操作系統(tǒng)為運(yùn)行硬件設(shè)備真實(shí)驅(qū)動(dòng)程序的操作系統(tǒng),其可能被有故障的驅(qū)動(dòng)所破壞,進(jìn)而破壞整個(gè)虛擬機(jī)系統(tǒng),因此需要對(duì)真實(shí)驅(qū)動(dòng)進(jìn)行隔離,通過(guò)驅(qū)動(dòng)分離,將驅(qū)動(dòng)程序分為虛擬驅(qū)動(dòng),守護(hù)驅(qū)動(dòng)和真實(shí)驅(qū)動(dòng)。這樣做可以將客戶(hù)操作系統(tǒng)和真實(shí)驅(qū)動(dòng)分離,從而防止真實(shí)驅(qū)動(dòng)破壞非特權(quán)操作系統(tǒng),所述非特權(quán)操作系統(tǒng)為沒(méi)有真實(shí)驅(qū)動(dòng),只運(yùn)行虛擬驅(qū)動(dòng)的操作系統(tǒng),而運(yùn)行真實(shí)驅(qū)動(dòng)的特權(quán)操作系統(tǒng)則由于設(shè)置有隔離機(jī)制,避免了真實(shí)驅(qū)動(dòng)對(duì)內(nèi)核的損壞。
上述技術(shù)方案中,所述真實(shí)驅(qū)動(dòng)程序與特權(quán)操作系統(tǒng)的內(nèi)核的隔離機(jī)制采用頁(yè)表保護(hù)機(jī)制。
所述頁(yè)表保護(hù)機(jī)制為每一個(gè)真實(shí)驅(qū)動(dòng)程序設(shè)置單獨(dú)的隔離域,并賦予每個(gè)真實(shí)驅(qū)動(dòng)程序具有讀內(nèi)核以及只對(duì)自身隔離域才有寫(xiě)的權(quán)限。由于真實(shí)驅(qū)動(dòng)程序?qū)?nèi)核只具有寫(xiě)權(quán)限,所以避免了發(fā)生故障的驅(qū)動(dòng)程序?qū)?nèi)核進(jìn)行寫(xiě)入操作從而損害內(nèi)核的情況。
所述每個(gè)真實(shí)驅(qū)動(dòng)程序的隔離域設(shè)置有與內(nèi)核頁(yè)表同步的拷貝頁(yè)表,保證了真實(shí)驅(qū)動(dòng)程序具有讀內(nèi)核的權(quán)限。
所述虛擬驅(qū)動(dòng)程序和守護(hù)驅(qū)動(dòng)程序之間的數(shù)據(jù)通道為共享內(nèi)存和異步通信機(jī)制。這種共享內(nèi)存和異步通信機(jī)制將通信從數(shù)據(jù)傳輸中分離,可以進(jìn)行消息綁定,能夠提供更有效的設(shè)備訪(fǎng)問(wèn)。
真實(shí)驅(qū)動(dòng)程序之間,以及真實(shí)驅(qū)動(dòng)程序與特權(quán)操作系統(tǒng)內(nèi)核之間的通信也可以采用類(lèi)似共享內(nèi)存和異步通信機(jī)制。
所述特權(quán)操作系統(tǒng)設(shè)置有與每一個(gè)虛擬驅(qū)動(dòng)對(duì)應(yīng)的一個(gè)守護(hù)驅(qū)動(dòng)。
所述守護(hù)驅(qū)動(dòng)對(duì)從虛擬驅(qū)動(dòng)中傳來(lái)的請(qǐng)求,以及它返回給虛擬驅(qū)動(dòng)的響應(yīng)數(shù)據(jù)進(jìn)行檢查。其首先檢查所請(qǐng)求的設(shè)備是否是虛擬驅(qū)動(dòng)程序所在的非特權(quán)操作系統(tǒng)所擁有的,再檢查所請(qǐng)求的內(nèi)存空間是否存有沖突。
在驅(qū)動(dòng)程序出現(xiàn)故障時(shí),通過(guò)虛擬驅(qū)動(dòng)和驅(qū)動(dòng)管理器的協(xié)作,進(jìn)行資源的回收和驅(qū)動(dòng)的恢復(fù)。驅(qū)動(dòng)恢復(fù)在于如果虛擬驅(qū)動(dòng)程序發(fā)現(xiàn)與之對(duì)應(yīng)的守護(hù)驅(qū)動(dòng)程序長(zhǎng)時(shí)間沒(méi)有響應(yīng),或守護(hù)驅(qū)動(dòng)程序長(zhǎng)時(shí)間沒(méi)有取消共享內(nèi)存頁(yè)時(shí)被啟動(dòng),所述驅(qū)動(dòng)恢復(fù)具體通過(guò)驅(qū)動(dòng)管理器重新初始化一個(gè)新的驅(qū)動(dòng)實(shí)例,并加入到新的隔離域中,然后將新的真實(shí)驅(qū)動(dòng)已經(jīng)重啟的信息通知虛擬驅(qū)動(dòng)程序,并在虛擬驅(qū)動(dòng)程序與守護(hù)驅(qū)動(dòng)程序之間建立一個(gè)新的數(shù)據(jù)通道,重新發(fā)送請(qǐng)求數(shù)據(jù)。
本發(fā)明通過(guò)將驅(qū)動(dòng)程序分為真實(shí)驅(qū)動(dòng)程序、虛擬驅(qū)動(dòng)程序和守護(hù)驅(qū)動(dòng)程序,將客戶(hù)通常使用的操作系統(tǒng)和真實(shí)驅(qū)動(dòng)分離開(kāi),從根本上防止了驅(qū)動(dòng)故障對(duì)系統(tǒng)可能造成的影響。并對(duì)真實(shí)驅(qū)動(dòng)程序進(jìn)行隔離和加固,在出現(xiàn)故障時(shí)進(jìn)行及時(shí)有效的恢復(fù),可以將整個(gè)系統(tǒng)維持在一個(gè)較高的可靠性級(jí)別上。與現(xiàn)有的驅(qū)動(dòng)加固技術(shù)均是將驅(qū)動(dòng)代碼放在單獨(dú)的邏輯故障域中,本質(zhì)上是在驅(qū)動(dòng)和系統(tǒng)其他部分之間提供虛擬內(nèi)存保護(hù)相比較。本發(fā)明除了提供對(duì)驅(qū)動(dòng)程序和系統(tǒng)其他部分之間的內(nèi)存保護(hù)外,還提出一個(gè)邏輯隔離層來(lái)提供對(duì)調(diào)度和訪(fǎng)問(wèn)特權(quán)指令的隔離,進(jìn)一步提高系統(tǒng)的可靠性和可用性,滿(mǎn)足關(guān)鍵業(yè)務(wù)應(yīng)用對(duì)高可靠和高可用性的要求。
圖1為本發(fā)明的架構(gòu)示意圖;圖2為虛擬驅(qū)動(dòng)、守護(hù)驅(qū)動(dòng)和真實(shí)驅(qū)動(dòng)的關(guān)系圖;圖3為共享內(nèi)存數(shù)據(jù)傳輸流程圖;圖4為本發(fā)明的數(shù)據(jù)傳輸方式示意圖;圖5為真實(shí)驅(qū)動(dòng)隔離架構(gòu)圖;圖6為守護(hù)驅(qū)動(dòng)與真實(shí)驅(qū)動(dòng)交互數(shù)據(jù)流圖;圖7為驅(qū)動(dòng)恢復(fù)流程圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的說(shuō)明。
本發(fā)明的架構(gòu)示意圖如附圖1所示,主要由虛擬驅(qū)動(dòng)、守護(hù)驅(qū)動(dòng)、真實(shí)驅(qū)動(dòng)隔離域、虛擬驅(qū)動(dòng)和守護(hù)驅(qū)動(dòng)之間的數(shù)據(jù)通道、設(shè)備管理控制器以及虛擬機(jī)監(jiān)視器VMM組成。
主要有如下特點(diǎn)
利用VMM將驅(qū)動(dòng)程序分為虛擬驅(qū)動(dòng)和守護(hù)驅(qū)動(dòng)兩部分;將客戶(hù)操作系統(tǒng)的非特權(quán)操作系統(tǒng)與真實(shí)驅(qū)動(dòng)分離開(kāi),然后將真實(shí)驅(qū)動(dòng)運(yùn)行在獨(dú)立的隔離域中,從而防止由于真實(shí)驅(qū)動(dòng)的異常造成特權(quán)操作系統(tǒng)和后端驅(qū)動(dòng)的崩潰;在守護(hù)驅(qū)動(dòng)中加入對(duì)從虛擬驅(qū)動(dòng)中傳來(lái)數(shù)據(jù)進(jìn)行驗(yàn)證的保護(hù)機(jī)制;虛擬驅(qū)動(dòng)和守護(hù)驅(qū)動(dòng)之間,真實(shí)驅(qū)動(dòng)與內(nèi)核,真實(shí)驅(qū)動(dòng)與守護(hù)驅(qū)動(dòng)之間的通信采用共享內(nèi)存和異步通信機(jī)制,可以提供快速有效的數(shù)據(jù)交互;設(shè)備管理控制器在驅(qū)動(dòng)出現(xiàn)故障時(shí),與VMM共同進(jìn)行資源的回收和恢復(fù)操作。
本發(fā)明利用VMM將非特權(quán)操作系統(tǒng)與真實(shí)驅(qū)動(dòng)分離開(kāi),將非特權(quán)操作系統(tǒng)和真實(shí)驅(qū)動(dòng)分別運(yùn)行在不同的虛擬機(jī)中。在非特權(quán)操作系統(tǒng)中只運(yùn)行虛擬驅(qū)動(dòng),而真實(shí)驅(qū)動(dòng)和守護(hù)驅(qū)動(dòng)則運(yùn)行在特權(quán)操作系統(tǒng)中。這種將操作系統(tǒng)和驅(qū)動(dòng)程序分離開(kāi)的方法從根本上避免了驅(qū)動(dòng)程序的故障造成系統(tǒng)的破壞。
附圖2為虛擬驅(qū)動(dòng)、守護(hù)驅(qū)動(dòng)以及真實(shí)驅(qū)動(dòng)之間的關(guān)系圖,在非特權(quán)操作系統(tǒng)中,每類(lèi)設(shè)備只需要一個(gè)虛擬驅(qū)動(dòng),如圖中給出的是網(wǎng)卡虛擬驅(qū)動(dòng)。這個(gè)虛擬驅(qū)動(dòng)只進(jìn)行驅(qū)動(dòng)調(diào)用的參數(shù)轉(zhuǎn)發(fā),初始化與守護(hù)驅(qū)動(dòng)的數(shù)據(jù)通道等工作,因此,虛擬驅(qū)動(dòng)的代碼會(huì)非常精簡(jiǎn),每一個(gè)虛擬驅(qū)動(dòng)代碼只有一千行左右,大約相當(dāng)于一個(gè)真實(shí)驅(qū)動(dòng)的代碼量。由于代碼量的減少,也減少了虛擬驅(qū)動(dòng)出現(xiàn)故障的可能。通過(guò)對(duì)虛擬驅(qū)動(dòng)的代碼進(jìn)行嚴(yán)格的檢查以及對(duì)實(shí)現(xiàn)功能的嚴(yán)格限定,可以認(rèn)為虛擬驅(qū)動(dòng)與操作系統(tǒng)內(nèi)核一樣,是可以信任的。
每一個(gè)虛擬驅(qū)動(dòng)在特權(quán)操作系統(tǒng)中都有與之對(duì)應(yīng)的一個(gè)守護(hù)驅(qū)動(dòng)。守護(hù)驅(qū)動(dòng)主要對(duì)從虛擬驅(qū)動(dòng)中傳來(lái)的調(diào)用信息進(jìn)行驗(yàn)證和分類(lèi),并調(diào)用相應(yīng)的真實(shí)驅(qū)動(dòng)進(jìn)行實(shí)際的設(shè)備操作,如具體的網(wǎng)卡驅(qū)動(dòng)e1000、pcnet32、3c59x等,在設(shè)備操作完成后,再對(duì)返回的數(shù)據(jù)參數(shù)進(jìn)行地校驗(yàn),最后通過(guò)數(shù)據(jù)通道將這些信息返回給虛擬驅(qū)動(dòng)。
附圖3為共享內(nèi)存數(shù)據(jù)傳輸?shù)牧鞒虉D。首先虛擬驅(qū)動(dòng)調(diào)用非特權(quán)操作系統(tǒng)中的內(nèi)存管理系統(tǒng),申請(qǐng)一個(gè)內(nèi)存頁(yè)。然后通知VMM,說(shuō)明此頁(yè)可以被其它域所共享。接著通知守護(hù)驅(qū)動(dòng)關(guān)于這個(gè)頁(yè)的信息,守護(hù)驅(qū)動(dòng)收到相關(guān)信息后,向VMM申請(qǐng)對(duì)這個(gè)頁(yè)的映射,VMM對(duì)請(qǐng)求進(jìn)行驗(yàn)證,如果請(qǐng)求合法,則修改這個(gè)頁(yè)的映射,將這個(gè)頁(yè)映射到守護(hù)驅(qū)動(dòng)所在的域中。如果不合法,則進(jìn)行出錯(cuò)處理。最后守護(hù)驅(qū)動(dòng)通知相應(yīng)的真實(shí)驅(qū)動(dòng),進(jìn)行數(shù)據(jù)傳輸。
附圖4為共享內(nèi)存和異步通信相結(jié)合的數(shù)據(jù)傳輸方式示意圖,這種方式主要用于虛擬驅(qū)動(dòng)與守護(hù)驅(qū)動(dòng)以及守護(hù)驅(qū)動(dòng)與真實(shí)驅(qū)動(dòng)隔離域之間的數(shù)據(jù)傳輸。由圖中可以看到,數(shù)據(jù)傳輸方式使用兩對(duì)生產(chǎn)者-消費(fèi)者索引。虛擬驅(qū)動(dòng)將服務(wù)講求放在請(qǐng)求服務(wù)隊(duì)列中,增加請(qǐng)求生產(chǎn)索引,然后使用類(lèi)似于中斷機(jī)制的異步通信通知守護(hù)驅(qū)動(dòng),接著守護(hù)驅(qū)動(dòng)處理并消除這些請(qǐng)求,增加請(qǐng)求消費(fèi)索引。返回時(shí)的情況與之相似,在守護(hù)驅(qū)動(dòng)完成服務(wù)后,將響應(yīng)結(jié)果放在請(qǐng)求響應(yīng)隊(duì)列中,增加請(qǐng)求生產(chǎn)索引,使用異步通信通知虛擬驅(qū)動(dòng),虛擬驅(qū)動(dòng)處理這些響應(yīng),并增加請(qǐng)求消費(fèi)索引。由于請(qǐng)求隊(duì)列和響應(yīng)隊(duì)列是基于共享內(nèi)存方式,這種將異步通信和共享內(nèi)存結(jié)合的方式,可以對(duì)虛擬驅(qū)動(dòng)和守護(hù)驅(qū)動(dòng)之間的請(qǐng)求和響應(yīng)方式進(jìn)行優(yōu)化,提高數(shù)據(jù)傳輸?shù)男阅堋?br>
附圖5給出了在特權(quán)操作系統(tǒng)中真實(shí)驅(qū)動(dòng)的隔離架構(gòu)圖。本發(fā)明使用頁(yè)表保護(hù)機(jī)制將真實(shí)驅(qū)動(dòng)程序運(yùn)行在一個(gè)單獨(dú)的隔離域中。每一個(gè)隔離域都有自己私有的數(shù)據(jù)結(jié)構(gòu),包括本地域堆,真實(shí)驅(qū)動(dòng)使用的棧,內(nèi)存映射的I/O區(qū)域,以及內(nèi)核高速緩存。雖然驅(qū)動(dòng)程序和內(nèi)核都運(yùn)行在內(nèi)核地址空間中,但對(duì)于內(nèi)核數(shù)據(jù)結(jié)構(gòu)的訪(fǎng)問(wèn)有不同的權(quán)限,內(nèi)核可以訪(fǎng)問(wèn)所有的數(shù)據(jù)結(jié)構(gòu),包括驅(qū)動(dòng)隔離域中獨(dú)有的堆、棧等,但驅(qū)動(dòng)對(duì)于內(nèi)核地址空間只具有讀權(quán)限,對(duì)于域內(nèi)的數(shù)據(jù)對(duì)象才具有寫(xiě)的權(quán)限。
為了提供真實(shí)驅(qū)動(dòng)讀內(nèi)核的權(quán)限,本發(fā)明為每個(gè)域維持了一個(gè)和內(nèi)核頁(yè)表同步的內(nèi)核頁(yè)表的拷貝。
為了實(shí)現(xiàn)真實(shí)驅(qū)動(dòng)的隔離,需要對(duì)操作系統(tǒng)內(nèi)核作一些必要的修改。首先,在內(nèi)核修改頁(yè)表的地方插入更新真實(shí)驅(qū)動(dòng)隔離域中頁(yè)表內(nèi)容的代碼,以保證內(nèi)核頁(yè)表和真實(shí)驅(qū)動(dòng)頁(yè)表之間的同步。
由于真實(shí)驅(qū)動(dòng)運(yùn)行在一個(gè)與內(nèi)核不同的隔離域中,為了發(fā)現(xiàn)發(fā)生在真實(shí)驅(qū)動(dòng)隔離域中的異常,還需要對(duì)內(nèi)核的異常程序進(jìn)行修改。當(dāng)真實(shí)驅(qū)動(dòng)發(fā)生異常時(shí),新增加的代碼交換內(nèi)核的堆棧指針和頁(yè)目錄指針,而在異常返回時(shí),為擴(kuò)展恢復(fù)棧指針和頁(yè)表指針。最后,需要定位當(dāng)前任務(wù)結(jié)構(gòu),將當(dāng)前的保護(hù)域與任務(wù)結(jié)構(gòu)聯(lián)系在一起。
附圖6為真實(shí)驅(qū)動(dòng)與守護(hù)驅(qū)動(dòng)或內(nèi)核之間的交互過(guò)程。真實(shí)驅(qū)動(dòng)想要調(diào)用內(nèi)核函數(shù)時(shí),會(huì)直接通過(guò)一個(gè)對(duì)內(nèi)核函數(shù)進(jìn)行封裝的wrapper函數(shù),這個(gè)wrapper函數(shù)相當(dāng)于內(nèi)核函數(shù)提供給真實(shí)驅(qū)動(dòng)的一個(gè)stub,在wrapper中對(duì)驅(qū)動(dòng)調(diào)用的參數(shù),訪(fǎng)問(wèn)內(nèi)存地址,指令類(lèi)型等進(jìn)行校驗(yàn),如果沒(méi)有問(wèn)題,就將這個(gè)請(qǐng)求通過(guò)數(shù)據(jù)通道提交給內(nèi)核。如果發(fā)現(xiàn)有問(wèn)題,則通知VMM,由VMM調(diào)用驅(qū)動(dòng)管理器進(jìn)行一些處理。
在由數(shù)據(jù)通道提交給內(nèi)核調(diào)用信息時(shí),采用共享內(nèi)存還是采用異步通信方式,根據(jù)調(diào)用的類(lèi)型進(jìn)行決定。如果是用于大量數(shù)據(jù)傳輸?shù)恼{(diào)用,則采用共享內(nèi)存方式,由wrapper請(qǐng)求一個(gè)內(nèi)存頁(yè),然后通過(guò)VMM將這個(gè)內(nèi)存頁(yè)映射到內(nèi)核的地址空間中,以后的隨之來(lái)的數(shù)據(jù)通信都可以通過(guò)這個(gè)內(nèi)存頁(yè)進(jìn)行。如果是進(jìn)行事件通知,則采用異步通信方式。由wrapper將請(qǐng)求掛在請(qǐng)求服務(wù)隊(duì)列中,由內(nèi)核從隊(duì)列中取下,并進(jìn)行處理。
內(nèi)核對(duì)請(qǐng)求調(diào)用處理完成后,數(shù)據(jù)的返回過(guò)程與調(diào)用時(shí)相似。
守護(hù)驅(qū)動(dòng)對(duì)從虛擬驅(qū)動(dòng)中傳來(lái)的請(qǐng)求檢查主要集中于兩方面,首先檢查請(qǐng)求的設(shè)備是否是這個(gè)非特權(quán)操作系統(tǒng)所擁有的,然后檢查所請(qǐng)求的內(nèi)存空間是否與VMM所在的空間有沖突。
在守護(hù)驅(qū)動(dòng)中還可以加入一些策略,對(duì)驅(qū)動(dòng)請(qǐng)求進(jìn)行一些安全限制或者性能方面的優(yōu)化。
附圖7給出了驅(qū)動(dòng)出現(xiàn)故障時(shí),進(jìn)行恢復(fù)的流程圖。如果虛擬驅(qū)動(dòng)發(fā)現(xiàn)守護(hù)長(zhǎng)時(shí)間沒(méi)有返回響應(yīng),或者VMM發(fā)現(xiàn)守護(hù)驅(qū)動(dòng)長(zhǎng)時(shí)間沒(méi)有取消共享內(nèi)存頁(yè),VMM會(huì)認(rèn)為相應(yīng)的真實(shí)驅(qū)動(dòng)已經(jīng)出現(xiàn)故障。VMM將這個(gè)事件通知驅(qū)動(dòng)管理器,由驅(qū)動(dòng)管理器重新初始化一個(gè)新的驅(qū)動(dòng)實(shí)例,并加入到新的隔離域中。然后通知虛擬驅(qū)動(dòng),新的真實(shí)驅(qū)動(dòng)已經(jīng)重啟。虛擬驅(qū)動(dòng)與守護(hù)驅(qū)動(dòng)之間建立一個(gè)新的數(shù)據(jù)通道,重新發(fā)送請(qǐng)求數(shù)據(jù)。
權(quán)利要求
1.一種基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法,其特征在于將驅(qū)動(dòng)程序分為真實(shí)驅(qū)動(dòng)程序、虛擬驅(qū)動(dòng)程序和守護(hù)驅(qū)動(dòng)程序;所述真實(shí)驅(qū)動(dòng)程序?yàn)轵?qū)動(dòng)硬件設(shè)備工作的真實(shí)代碼,其設(shè)置于特權(quán)操作系統(tǒng)中,且通過(guò)隔離機(jī)制與特權(quán)操作系統(tǒng)的內(nèi)核進(jìn)行隔離;所述虛擬驅(qū)動(dòng)程序包含驅(qū)動(dòng)硬件設(shè)備所需的參數(shù)調(diào)用的轉(zhuǎn)發(fā)代碼,其設(shè)置于非特權(quán)操作系統(tǒng)中,且通過(guò)數(shù)據(jù)通道與守護(hù)驅(qū)動(dòng)程序交互;所述守護(hù)驅(qū)動(dòng)程序作為虛擬驅(qū)動(dòng)程序和真實(shí)驅(qū)動(dòng)程序的溝通橋梁設(shè)置于特權(quán)操作系統(tǒng)中。
2.根據(jù)權(quán)利要求1所述的基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法,其特征在于所述真實(shí)驅(qū)動(dòng)程序與特權(quán)操作系統(tǒng)的內(nèi)核的隔離機(jī)制采用頁(yè)表保護(hù)機(jī)制。
3.根據(jù)權(quán)利要求2所述的基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法,其特征在于所述頁(yè)表保護(hù)機(jī)制為每一個(gè)真實(shí)驅(qū)動(dòng)程序設(shè)置單獨(dú)的隔離域,并賦予每個(gè)真實(shí)驅(qū)動(dòng)程序具有讀內(nèi)核以及只對(duì)自身隔離域才有寫(xiě)的權(quán)限。
4.根據(jù)權(quán)利要求3所述的基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法,其特征在于所述每個(gè)真實(shí)驅(qū)動(dòng)程序的隔離域設(shè)置有與內(nèi)核頁(yè)表同步的拷貝頁(yè)表。
5.根據(jù)權(quán)利要求1所述的基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法,其特征在于所述虛擬驅(qū)動(dòng)程序和守護(hù)驅(qū)動(dòng)程序之間的數(shù)據(jù)通道為共享內(nèi)存和異步通信機(jī)制。
6.根據(jù)權(quán)利要求5所述的基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法,其特征在于所述特權(quán)操作系統(tǒng)設(shè)置有與每一個(gè)虛擬驅(qū)動(dòng)對(duì)應(yīng)的一個(gè)守護(hù)驅(qū)動(dòng)。
7.根據(jù)權(quán)利要求4或6所述的基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法,其特征在于所述守護(hù)驅(qū)動(dòng)程序還對(duì)虛擬驅(qū)動(dòng)程序的請(qǐng)求進(jìn)行檢查,其首先檢查所請(qǐng)求的設(shè)備是否是虛擬驅(qū)動(dòng)程序所在的非特權(quán)操作系統(tǒng)所擁有的,再檢查所請(qǐng)求的內(nèi)存空間是否存有沖突。
8.根據(jù)權(quán)利要求7所述的基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法,其特征在于還設(shè)置有驅(qū)動(dòng)恢復(fù),驅(qū)動(dòng)恢復(fù)在于如果虛擬驅(qū)動(dòng)程序發(fā)現(xiàn)與之對(duì)應(yīng)的守護(hù)驅(qū)動(dòng)程序長(zhǎng)時(shí)間沒(méi)有響應(yīng),或守護(hù)驅(qū)動(dòng)程序長(zhǎng)時(shí)間沒(méi)有取消共享內(nèi)存頁(yè)時(shí)被啟動(dòng),所述驅(qū)動(dòng)恢復(fù)具體通過(guò)驅(qū)動(dòng)管理器重新初始化一個(gè)新的驅(qū)動(dòng)實(shí)例,并加入到新的隔離域中,然后將新的真實(shí)驅(qū)動(dòng)已經(jīng)重啟的信息通知虛擬驅(qū)動(dòng)程序,并在虛擬驅(qū)動(dòng)程序與守護(hù)驅(qū)動(dòng)程序之間建立一個(gè)新的數(shù)據(jù)通道,重新發(fā)送請(qǐng)求數(shù)據(jù)。
全文摘要
本發(fā)明提供了一種基于虛擬機(jī)的驅(qū)動(dòng)程序加固方法,將驅(qū)動(dòng)程序分為真實(shí)驅(qū)動(dòng)程序、虛擬驅(qū)動(dòng)程序和守護(hù)驅(qū)動(dòng)程序;所述真實(shí)驅(qū)動(dòng)程序?yàn)轵?qū)動(dòng)硬件設(shè)備工作的真實(shí)代碼,其設(shè)置于特權(quán)操作系統(tǒng)中,且通過(guò)隔離機(jī)制與特權(quán)操作系統(tǒng)的內(nèi)核進(jìn)行隔離;所述虛擬驅(qū)動(dòng)程序包含驅(qū)動(dòng)硬件設(shè)備所需的參數(shù)調(diào)用的轉(zhuǎn)發(fā)代碼,其設(shè)置于非特權(quán)操作系統(tǒng)中,且通過(guò)數(shù)據(jù)通道與守護(hù)驅(qū)動(dòng)程序交互;所述守護(hù)驅(qū)動(dòng)程序作為虛擬驅(qū)動(dòng)程序和真實(shí)驅(qū)動(dòng)程序的溝通橋梁設(shè)置于特權(quán)操作系統(tǒng)中。
文檔編號(hào)G06F9/455GK101071387SQ200610037600
公開(kāi)日2007年11月14日 申請(qǐng)日期2006年9月8日 優(yōu)先權(quán)日2006年9月8日
發(fā)明者劉發(fā)貴, 張亞軍, 吳慶波 申請(qǐng)人:華南理工大學(xué), 廣東美泰科技有限公司