專利名稱:高完整性固件的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及高完整性固件領(lǐng)域。
背景技術(shù):
操作系統(tǒng)提供了對資源的不同級別的訪問。所述的訪問級別可以與"環(huán)"關(guān)聯(lián)。例如,環(huán)O通常為具有最多權(quán)限的訪問則i其它環(huán)包括環(huán)l、環(huán)2 和環(huán)3。例如,在才斜乍中,以較高編號的環(huán)(例如環(huán)3)運^^禾辨請求 訪問網(wǎng)絡(luò),所述網(wǎng)絡(luò)對于較低編號的環(huán)(例如環(huán)0)通常為受限資源。利 用環(huán)是為了阻止以環(huán)1運4亍的镅誤或惡意的庫欠件(例如間諜軟件)扭軒 破壞4喿作(例如訪問計算機上的密碼),所述石皮壞^喿作可以由為i殳^^區(qū) 動程序保留的環(huán)0函數(shù)執(zhí)行。
可擴展固件接口 (EFI)系統(tǒng);^丈描述為一種系統(tǒng),該系統(tǒng)負責加電自 檢(POST)過程、啟動才剁乍系統(tǒng)、以絲l剁乍系統(tǒng)和物理硬件之間提供一 個接口。
圖1示出現(xiàn)有中,EFI運行時內(nèi)輛陷的情形。操作系統(tǒng)100 (例如;微軟的Whdows 操作系統(tǒng),包括Windows NT 3.1直至 Windows Vista 操作系統(tǒng))包括環(huán)0 110的訪問級別。 操作系統(tǒng)(OS)內(nèi) 核120,硬件抽象層122 (例如HAL.DLL)、以及服務(wù)調(diào)用124具有環(huán)0 110 的反問級別。此外,可執(zhí)行可擴展固件接口 (EFI)運行時驅(qū)動程序鏡像126 (例如EFI運行時代碼和數(shù)據(jù))同處于環(huán)0,所述環(huán)0是操怍系統(tǒng)100的最高權(quán)限的操作模式。
特別是,平臺固件150包括EFI運行時驅(qū)動程序1 160、 EFI運行時驅(qū)動程序2 162、以及EFI運行時驅(qū)動程序3 164。所述EFI運行時驅(qū)動禾踏 160、 162和164的鏡像同處于(即被復制到)可執(zhí)行EFI運行時驅(qū)動程序鏡像126中。而且,來自硬件設(shè)備170的數(shù)據(jù)180同處于(即被復制到)所述可IMt EFI運行時驅(qū)動禾踏鏡像126中。所述EFI運行時驅(qū)動程 序鏡像126包括EF1引導服務(wù)R行時組件,并且可以具有^it的只讀存 儲器(ROM)。只讀數(shù)據(jù)位于ROM中,所以ROM對于防止ROM中的代碼破壞是有用的。所述ROM對于4橫ROM中的代碼的長期完整性是有 用的,但是一旦將從所述ROM加載到內(nèi)存中,重新進行內(nèi)射p署的 鏡像的完墊性承械了 一個問題。
有了環(huán)0 110訪問IOij的EFI運行時驅(qū)動禾踏鏡像126,以及OS內(nèi)核 120,考慮JA^斤述OS內(nèi)核120對所述EFI運行時f^馬的有效調(diào)用,但是這 會將所述EFI運行時驅(qū)動程序鏡像126暴f^合OS內(nèi)核120中的銷i吳或惡 意組件。tU3兌,OS內(nèi)核120中的4綠或惡意的組件可能訪問和破壞所述 EFI運行時驅(qū)動禾辨鏡像126。這樣,圖1示出了^i可一個環(huán)(H鎮(zhèn)是:W可 破壞所述EFT運行時輛和數(shù)據(jù)的。
這是由新聞中所說的錄爆發(fā)的"rootkite"所引發(fā)的輛關(guān)注的焦點。 rootkit可以被描述為一種或多種能夠以管理員級別訪問計算機的程序。通 常,W更權(quán)的用戶(例如,"攻擊者")在首先獲得用戶級別的訪問權(quán)限之 后在計算機上安裝了 rootMt。 一旦安裝了 rootkit,所述rootkit使得攻擊者能 夠掩蓋入侵并JL^得訪問計算機的權(quán)限。例如,rootkit可以是一種能夠破 壞內(nèi)存中的f^馬和數(shù)據(jù)的內(nèi)核模式的病毒。
存在關(guān)于運行時'Yootkit"問題的實際數(shù)據(jù),并腿不只是安全/內(nèi)容保 護/數(shù)字版權(quán)管理(DRM)的問題。就是說,rootkits能夠影響4封可系統(tǒng), 而不僅^l^那些擔心^/內(nèi)容保護/數(shù)字版權(quán)管理(DRM)的系統(tǒng)。Rootkit 的數(shù)目有所增長,部分原因是存在支持廣告軟件和間諜軟件的商業(yè)動機, 所述廣告軟件和間i^l欠件可以被包含在所述rootkit中。Rootkits是當前社會 的一個技術(shù)挑戰(zhàn),尤其是因為rootkits擊敗了當前的反間"i斜欠件產(chǎn)品。通過 移除rootkit來1^1計染K消費者可^l^花費數(shù)個小時。例如,在^^模 式移除rootkit可能需要十二個以上的操作。itUf,出現(xiàn)遷移到啟動驅(qū)動程 序的新的惡意驅(qū)動程序。就是說,操怍系統(tǒng)啟動的最早階段被感染,然而 多數(shù)的防病毒和其它保護軟件的啟動在才喿怍系統(tǒng)的處理過程中要晚很多。
現(xiàn)令,運4亍時固件可以由系統(tǒng)管理才莫式(SMM)進行保護。SMM可以被描述為某些Inte跑微處理器的模式,其中,代碼(例如操作系統(tǒng)) 的正常執(zhí)行被掛起,并且特定的單獨軟件(例如固件)以高權(quán)限模式執(zhí) 行。
因此,該領(lǐng)域需要改進的高完整性固件。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的第一方面,提供了一種能夠存儲代碼和數(shù)據(jù)的方法,包括
確定標記內(nèi)存是否可用;
作為確定標記內(nèi)存可用的響應(yīng),確定可擴展固件接口系統(tǒng)是否被實現(xiàn) ;以及
作為確定所述可擴展固件接口系統(tǒng)被實現(xiàn)的響應(yīng),
為可擴展固件接口運行時代碼和數(shù)據(jù)分配對象描述符;并且
提供運行時使用的一個或多個從非標記內(nèi)存到標記內(nèi)存的調(diào)用點。
根據(jù)本發(fā)明的第二方面,提供了一種系統(tǒng),包括
標記內(nèi)存,包括耦合到系統(tǒng)板的對象描述符;以及
用于進行下列操作的邏輯
確定標記內(nèi)存可用;
確定可擴展固件接口系統(tǒng)是否被實現(xiàn);
以及 作為確定可擴展固件接口系統(tǒng)板實現(xiàn)的響應(yīng), 為可擴展固件接口運行時代碼和數(shù)據(jù)分配對象描述符;并且
提供運行時使用的一個或多個從非標記內(nèi)存到標記內(nèi)存的調(diào)用點。 根據(jù)本發(fā)明的第三方面,提供了一種存儲指令的機器可讀介質(zhì),當所 述指令被執(zhí)行時,使機器執(zhí)行操作以
確定標記內(nèi)存是否可用;
作為確定標記內(nèi)存可用的響應(yīng),確定可擴展固件接口系統(tǒng)是否被實現(xiàn) ;以及
作為確定所述可擴展固件接口系統(tǒng)被實現(xiàn)的響應(yīng),
為可擴展固件接口運行時^^馬和數(shù)據(jù)分酉M于勤葛述符;并且 提供運行時使用的一個或多個從非才封己內(nèi)存到標記內(nèi)存的調(diào)用點。
現(xiàn)在參照附圖,其中,相同的附圖標記始終代表相應(yīng)的部分
圖1示出現(xiàn)有技術(shù)中,EFT運行時內(nèi)存缺陷的情形。
圖2示出##某些實施例的計算設(shè)備200的細節(jié)。
圖3示出根椐某些實施例EF1運行時驅(qū)動和鏡像是如何被保護的。
圖4示出根據(jù)某些實施例的標記內(nèi)存的使用的示例。
圖5示出根據(jù)某些實施例的對勤葛述符和標記內(nèi)存。
圖6示出根據(jù)某些實施例的存儲在內(nèi)存中的EF1鏡像。
圖7示出根據(jù)某些實施例的才朽己內(nèi)存使用的另一個示例。
圖8示出根據(jù)某些實施例所述EFT運行時組件為了保護EFT運行時代
碼和數(shù)據(jù)所齡的邏輯。
圖9示出根據(jù)某些實施例EFI組件如何可凈皮保護的示例。
圖10示出才財居某些實施例的預先EFI初始化(PEI 、驅(qū)動程序執(zhí)行環(huán)境
(DXE)以及EFI執(zhí)行階段。
圖11示出根據(jù)某些實施例用于預引導的標記內(nèi)存的使用。
圖12示出才財居某些實施例用于預引導處理的邏輯。
具體實施例方式
在下面的描述中,將參照構(gòu)成本文的一部分并示出幾個實施例的附圖。 要理解,可以采用其它的實施例,而且可以緣行結(jié)構(gòu)和操作上的改變。
圖2示出##某些實施例的計算設(shè)備200的細節(jié)。所述計算設(shè)備200(例 如,主機)包括一個或多個中處理器204 (CPU)(例如,處理器)、易 失性內(nèi)存206、非易失性存儲器208 (例如,磁盤驅(qū)動器、光盤驅(qū)動器、磁 帶驅(qū)動器等等)以及一個或多個網(wǎng)絡(luò)適配器240。所述一個或多個網(wǎng)絡(luò)適配 器240可以說成被耦合到通信路徑270中(例如,網(wǎng)絡(luò))。
內(nèi)存206賴了包括OS內(nèi)核212的#^乍系統(tǒng)210。內(nèi)存206 "^fi者了 EFI運行時組件230。在某些實施例中,所述EF1運行時組件230作為固件 來實現(xiàn)。在某些其它的實施例中,所述EFI運行時組件230可以作為硬件、 軟件、固件或它們的某些結(jié)合來實現(xiàn)。內(nèi)存206的"p分是標記內(nèi)存232。 所述標記內(nèi)存232可以被描述為絲OS之前的固件的內(nèi)存,并且包含具 有EFI運行時驅(qū)動禾I^類型的驅(qū)動牙辨鏡像。所述標記內(nèi)存232包括對象
描述符233。所述對勤苗述符233可以被描述為能夠才;Wtl喿怍(例如,阻止 非固件^J里訪問標記內(nèi)存)的"智能"內(nèi)存。內(nèi)存206的-"^分是非標記內(nèi) 存(例如,#^乍系統(tǒng)210和OS內(nèi)核212位于非標記內(nèi)存中)。內(nèi)存206 還包括作為RAM的高速緩存234。 一個或多個驅(qū)動程序220 (例如 器驅(qū)動程序或網(wǎng)絡(luò)驅(qū)動程序)以"、一個或多個應(yīng)用程序224可被-fH諸在內(nèi) 存206中,并且能夠通過網(wǎng)絡(luò)270從遠程計算設(shè)備(例如主才/L^UH諸器 系統(tǒng))傳送和檢索信息包。
所述計算設(shè)備200可包括^f^f可合適的計^^設(shè)備,例如大型機、月良務(wù) 器、個人計算機、工作站、^Ji型電腦、手持式計算機、電i封殳備、網(wǎng)絡(luò) 設(shè)備、虛擬化設(shè)備、員器控制器等等??梢証^Hi^v^適的CPU 204或 才剁乍系統(tǒng)210。作為內(nèi)存管理才剁乍的一^分,內(nèi)存206中的禾踏和數(shù)據(jù)可被 交換到^H者器208中。
網(wǎng)絡(luò)270可以是^^可類型的網(wǎng)絡(luò),例如務(wù)賭區(qū)域網(wǎng)絡(luò)(SAN)、局 域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、因特網(wǎng)、企業(yè)內(nèi)部網(wǎng)等等。
各個網(wǎng)絡(luò)適配器240能夠通過網(wǎng)絡(luò)270傳送和接收數(shù)據(jù)包。
補驅(qū)動禾誘220在內(nèi)存206中才似亍,并且包括與Vh網(wǎng)絡(luò)適配器240 進行通信的網(wǎng)絡(luò)適配器240的特定命令,以及操怍系統(tǒng)210和M網(wǎng)絡(luò)適 配器240之間的接口。各個網(wǎng)絡(luò)適配器240,.或驅(qū)動考踏220 #^亍處理信息 包的邏輯,例如傳iT針辦議層處理以傳輸層協(xié)議封裝的信息包中包括的消息 內(nèi)容,所述傳輸層協(xié)議例如傳送控制協(xié)議(TCP)和/或因特網(wǎng)協(xié)議(IP)、 因特網(wǎng)小型計算機系Mi妻口 (iSCSI)(正TF RFC 2347 , 2003年2月)、
9
光纖通道(美國國家標準委員會(ANSI) X3,269-199X, 修訂本012,2995 年12月4日),或任何其它合適的傳輸層協(xié)議。
存儲器208可包括內(nèi)部存儲設(shè)備或者附屬的或網(wǎng)絡(luò)可訪問的存儲器。 存儲器208中的考踏可加載到內(nèi)存206中并由CPU 204 執(zhí)行。輸入設(shè)備 250用于將用戶輸入提供給CPU 204,并且可以包括鍵盤、鼠標、手寫筆 (pen-stylus)、擴音器、觸控式顯示屏或者任何其它合適的激活或輸入機構(gòu)。輸出設(shè)備252能夠呈現(xiàn)從CPU 204或其它組件,例如顯示監(jiān)視器、打印機、存儲器等傳遞的信息。
在某些實施例中,不同構(gòu)造和/或緩沖器(未示出)可以駐留在內(nèi)存206 中或者可以位于與內(nèi)存206分離的存儲器單元中。
在某些實施例中,所述EFI運行時組件230和具有對描述符233的 標記內(nèi)存232可以被實現(xiàn)在計算設(shè)備200的系統(tǒng)板上的集成電路組件中。 因此,所述EFI運行時組件230和具有對象描述符233的標記內(nèi)存232可以說成為被耦合給到系統(tǒng)板。在備選實施例中,在擴展卡上的集成電路組件中,可以實現(xiàn)所述EFT運行時組件230和是有對象描述符233的標記內(nèi)存 232,所述擴展卡可插入到計算設(shè)備200的系統(tǒng)板上的擴展卡插槽中。因此, 所述EFI運行時組件230和具有對象描述符 233的標記內(nèi)存232可以說成被耦合到擴展板上。
圖3示出根據(jù)某些實施例運行時驅(qū)動程序鏡像是如何被保護的。在圖3 中,操作系統(tǒng)210包括環(huán)0 310訪問級別。操作系統(tǒng)(OS)內(nèi)核320、硬件抽象層322 (即HAL.DLL)以及服務(wù)調(diào)用324具有環(huán)0 31(H訪問級別,此外,標記內(nèi)存326 (包括EFI運行時代碼和數(shù)據(jù))中的可執(zhí)行可擴展固件接口 (EFT)運行時驅(qū)動程序鏡像同處于環(huán)0中,環(huán)0是操作系統(tǒng)300的最高權(quán)限的操作模式。
特別是,平臺固件350包括EF1運行時驅(qū)動程序3 360、 EFT運行時驅(qū)動程序2 362以及EFI運行時驅(qū)動程序3 364。 EFI運行時驅(qū)動程序360、 362 和364的鏡像同處于(即:被復制到)標記內(nèi)存326中的可執(zhí)行EFI運行時驅(qū)動程序鏡像中。而且,來自硬件設(shè)備370的數(shù)據(jù)380同處于(即被復制到)才射己內(nèi)存326中的可執(zhí)行EFI運行時驅(qū)動程序鏡像中。
在圖3中,因為EFT運行時驅(qū)動程序鏡像標記內(nèi)存326位于環(huán)0 310訪 問級別,所以O(shè)S內(nèi)核320中的錯誤或惡意的組件(例如操作系統(tǒng)中的 缺陷)不能被破壞所述EFI運行時驅(qū)動程序360、 362、 364,或標記內(nèi)存326 中的可執(zhí)行EFI運行時驅(qū)動程序鏡像中的其它代碼和數(shù)據(jù)。然而,從OS 內(nèi)核320可以進行EFI運行時代碼的有效調(diào)用。因此,圖3示出了實施例 是如何保護EFI運行時代碼和數(shù)據(jù)微破壞的。
圖4-7示出根據(jù)某些實施例的了緊急CPU性能。
圖4示出根據(jù)某些實施例的標記內(nèi)存使用的示例。圖例490標明了樣本標記和它們的含義。雖然只示出了四種標記,但是其它的標記也應(yīng)在實 施例的范圍之內(nèi)。中央處理器(CPU) 400包括控制單元410和算術(shù)邏輯單元(ALU) 412。專用寄存器420包括具有指示對象描述符的標記423的棧 描述符寄存器422、棧指針(SP)寄存器424,具有指示其為對象描述符的 標記427的數(shù)據(jù)描述符寄存器426,具有指示其為對象描述符的標記429的 代碼描述符寄存器428,以及指令指針430。通用目的寄存器440包括具有 指示其為對象描述符的標記443的對象描述符442、具有標記445的未初始化元素444,該標記445是一個未初始化的寄存器或內(nèi)存字的標記,以及具 有才標記447的數(shù)據(jù)446,該標記447是指示已初始化的寄存器或內(nèi)存字的標 記。內(nèi)存470包括棧472、數(shù)據(jù)474以及代碼476。內(nèi)存470還包括標記480。 所述標記480對應(yīng)于與專用寄存器420和通用目的寄存器440相關(guān)的標記。
圖5示出據(jù)某些實施例的對象描述符500和標記內(nèi)存570。對象描述符 500可被放置在標記內(nèi)存570中的任何地方、任何CPU的寄存器上、以及 虛擬內(nèi)存(VM)中。對象描述符500包括標記510 (例如,標記位),并且通過提供訪問權(quán)限512、對象大小514和指向內(nèi)存570的指針516,封裝 了內(nèi)存中的一個對象的描述。所述標記510指示這是一個對象描述符。所述 對象描述符500為讀("R")、寫("W")和執(zhí)行("X")提供了精細的 訪問控制,所述訪問控制接近于高級語言的語義(當與沒有任何大小檢查 的VM每頁控制進行比較時)。在某些實施例中,只有受信任的計算基體(tcb)(同時具有硬件和軟件組件)可以初始化和修改所述對象描述符500 的內(nèi)容。受信任的計算基體可被描述為被信任的最少數(shù)量的代碼(例如, 在建立這些早期的對勤葛述符時,所述TCB將包括初始化引導固件)。
應(yīng)用程序可以通過應(yīng)用程序可利用的(例如用于加載、務(wù)賭、跳轉(zhuǎn)、 調(diào)用等)對勤結(jié)述符來訪問內(nèi)存570 (直接;脈間接地)。在某些實施例中, 硬件控制各個方問,并且在訪問權(quán)限或?qū)ο蟠笮∵`法時產(chǎn)生一個中斷。
圖6示出根據(jù)某些實施例的存儲在內(nèi)存570中的EFI鏡像600。在某些 實施例中,所述EFI鏡像是便攜式可執(zhí)行的和公共對象文件格式(pe/coff) 可執(zhí)行的??梢詾樗鰁ft鏡像的不同部分分配不同的對象描述符。例如, 所述efi鏡像600可以是運行時服務(wù)efi可執(zhí)行的,其在os之前、efi 的引導服務(wù)階段期間被啟動,并且繼續(xù)和os內(nèi)核212聯(lián)合等同地存在。
圖7示出根悟某些實施例的標記內(nèi)存使用的另一個示例。在圖7中, 中央處理器(cpu) 700包括控制單元710和算術(shù)邏輯單元(alu) 712。 通用目的寄存器740包括具有指示其為對象描述符的標記743的對象描述 符742、具有指示該元素是未初始化寄存器或內(nèi)存字的標記745的未初始化 元素744以及具有指示其為已初始化寄存器或內(nèi)存字的標記747的數(shù)據(jù) 746。內(nèi)存770包括代碼、數(shù)據(jù)、對象描述符以及未初始化的部分。內(nèi)存770 還包括標記780。
圖8示出才財居某些實施例,為了保護EFI運行時代碼和數(shù)據(jù),由所述 efi運行時組件230執(zhí)行的邏輯。隨著系統(tǒng)的重新啟動(例如,由于開啟電 源開關(guān)),控制始于步驟800。"系統(tǒng)"是指一個計算平臺。在步驟802,系統(tǒng)被初始化。在步驟804,所述eft運行時組件230確定才封己內(nèi)存232是否 為可利用的。如果是,則處理繼續(xù)前進到步驟806,否則,處理前進到步驟 812。
在步驟806中,所述efi運行時組件230確定eft系統(tǒng)是否被實現(xiàn)。 如果是,則處理前進到步驟808,否則,處理前進到步驟812。在步驟808 中,所述efi運行時組件230為efi運行時代碼和數(shù)據(jù)分配對象描述符。 各個對象描述符包括指示這是一個對象描述符的標記。步驟808的處理包括EFI運行時組件230初始化各個寄存器以包括指示所述寄存器是否已被 初始化、未初始化或存儲了對勤苗述符的標記。在步驟810中,所述EFI 運行時組件230提供了一個或多個從非標記內(nèi)存到標記內(nèi)存的調(diào)用點,以 在運行時使用。例如,在圖3中,所述硬件抽象層322位于非標記內(nèi)存中, 而可執(zhí)行的EFI運行時驅(qū)動禾辨鏡像326位于標記內(nèi)存中,所以服務(wù)調(diào)用324 可被描述為從非標記內(nèi)存到標記內(nèi)存的調(diào)用點。調(diào)用點可被描述為被公開 描述的函數(shù)調(diào)用,例如EF1運行時服務(wù)調(diào)用。
在步驟812中,所述EFI運行時組件230完成操怍系統(tǒng)之前的處理或 引導系統(tǒng)的處理。因此,步驟800-812代表引導階段,而步驟814-822代表 運行時階段。
在步驟814中, 一個或多個對象描述符233確定非固件代理是否正嘗 試訪問標記內(nèi)存232。非固件代理可以被描述為不是從平臺固件/平臺ROM 加載的代碼。非固件代理可以包括但不局限于OS執(zhí)行組件或內(nèi)核模式驅(qū) 動程序/服務(wù)。如果非固件代理正嘗試訪問標記內(nèi)存,則處理前進到步驟 816,否則,處理前進到步驟822。在步驟816中, 一個或多個對象描述符 233確定非固件代理是否可基于與將被訪問的標記內(nèi)存232相關(guān)聯(lián)的對象描述符中的訪問權(quán)限來訪問標記內(nèi)存232 (即確定這是否為EFI運行時驅(qū)動 程序鏡像的合法內(nèi)存位置)。如果是,則處理前進到步驟818,否則,處理前進到步驟820。在步驟818中,所述EF1運行時組件230處從非固件代 理到標記內(nèi)存232的訪問操作,并接受和返回一個結(jié)果。在某些實施例中,這是通過剩余部分(stub)(即存在EFI運行時代碼的某個非標記步驟(它 是EFI運行時組件230的一部分來進行的,所述剩余部分充當EFI運 行時組件230和非標記OS內(nèi)核212之間的中介。在步驟820中, 一個或 多個對象描述符233 阻止非固件代理標記內(nèi)存232的訪問,所述非固件代理可能是錯誤的或惡意的調(diào)用者。在步驟822中,處理繼續(xù)進行,并且 當非固件嘗試訪問EFI運行時標記內(nèi)存232時,處理返回到步驟814。
圖9示出根據(jù)某些實施例EFI組件如何被保護的示例。在該示例中, 包含惡意驅(qū)動程序3的小型計算機系接口 (SCSI)卡900可能被插入到計算機系統(tǒng)中。就圖9的示例來說,實現(xiàn)EFI的框架包括兩個主要階段EFI 之前的初始化(PEI)和驅(qū)動程序執(zhí)行環(huán)境(DXE) 。 EFT之前的初始化階 段由多個PEI模塊A、 B和C完成。驅(qū)動程序執(zhí)行環(huán)境階段由多個驅(qū)動程 序DXE驅(qū)動程序1和DXE驅(qū)動程序2完成。內(nèi)存910的平臺初始化部 分包括存儲在標記內(nèi)存中的、與PEI模塊和DXE驅(qū)動禾辨中分離的EFI核 心框架。所述EFI核心框架包括EFI框架、DXE框架和PEI框架。
圖10示出才艮據(jù)某些實施例的PEI、 DXE和EF1 執(zhí)行階段1000。 些實施例來說,所述PEI框架、DXE框架和EFT框架位于標記內(nèi)存中,而 PEI模塊、DXE驅(qū)動程序和EFI應(yīng)用程序以及庫位于未標記的("正常的”) 內(nèi)存中。在某些實施例中,來自"受信任的"和作為TCB的一部分的平臺固 件的代碼被置入 EFI運行時標記內(nèi)存中。這允許來自系統(tǒng)廠商的代碼與 加載自第三方適配器卡等的驅(qū)動程序隔離。在運行時存在同樣的隔離,使 得所述EFI運行時代碼被與系統(tǒng)板隔離,并且能夠與隨后啟動的任何識別 EFI的才辦系統(tǒng)隔離。因此,這些實施例使得交付系統(tǒng)的團體,例如原始 設(shè)備制造商(OEM),能夠確信他們在板上的ROM中出廠的代碼不會被 OS之前的其它代Z馬或OS破壞/感染。
因此,圖9和10示出實施例可如何應(yīng)用到在操怍系統(tǒng)啟動之前的固件 組件的流程中。圖9具有ROM中的核心框架,其隨后被加載到EFI運行 時標記內(nèi)存中。在圖10中,流程圖的下神分指定了標記的被保護的OS 之前的框架代碼。
圖11示出根據(jù)某些實施例的用于預引導的標記內(nèi)存的使用。 隨著系統(tǒng) 被重置,控制始于步驟1100;操作模式被設(shè)置為固定模式(即具有用于 0-4GB映射的數(shù)據(jù)/代碼集的受保護模式),并且傳遞控制以啟動PEI框架。 在步驟1102中,執(zhí)行機器碼以啟用作為RAM的高速緩存234。在步驟1104 中,在作為RAM的高速緩存中創(chuàng)建臨時頁表。在步驟1106中,PEI核心 和任何可幫助任何執(zhí)行認證的PEI模塊檢查各個PEI模塊,并通過數(shù)字簽名認證各個PEI模塊,所述PEI模塊是PEI TCB的一部分并位于標記內(nèi)存('PEI 組件")中。在步驟1108中,PEI組件確定這是否是一個有效的數(shù)字簽名。如果是,則處理前超)J步驟lllO,否則,處理前進到步驟1112。在步驟1110 中,PEI組件為各個PEI模塊分配標記內(nèi)存232。在步驟1112中,PEI組件將各個PEI模塊鏡像處理程序標記為不安全的。在步驟1114中,執(zhí)行各個PEI模步驟以初始化主存。
圖12示出根椐某些實施例的用于預引導處理的邏輯。在某些實施例中, 一個或多個DXE驅(qū)動程序可作為EFI運行時驅(qū)動程序被加載。因此,DXE中的認證/標記導致了OS當前的實施例。在步驟1200中,DXE核心/勤出 以及任何DXE認證驅(qū)動程序來檢查各個DXE驅(qū)動程序以及通過數(shù)字簽名來認證各個DXE驅(qū)動程序,所述DXE認證驅(qū)動程序是DXE TCB的一部分并且位于標記內(nèi)存('DXE 組件")中。在步驟1202中,DXE組件確定這是否是一個有效的數(shù)字簽名。如果是,則處理前進到步驟1204,否則, 處理前跟進到步驟1206。在步驟1204中,DXE組件為MDXE驅(qū)動程序分配標記內(nèi)存。在步驟1206中,DXE組件將* DXE驅(qū)動牙聘鏡像處理程序標記為不安全的。在步驟1208中,##系統(tǒng)引導處理繼續(xù)進行。
這些實施例提供了預引導和運行時的高完整性固件。實施例使用"容量"或"標記內(nèi)存"將代碼和數(shù)據(jù)與其它在同樣權(quán)限級別上進行操作的代碼隔離。
這些實施例幫助保持從ROM中加載的在內(nèi)存中的鏡像的完整性。
這些實施例使得能夠保證原始設(shè)備制造商(OEM)引導服務(wù)代碼不被錯誤的OS之前的引用程序和OS加載程序破壞。完全不同的元素共處一處導致信任的可靠性問題的產(chǎn)生。在某些實施例中,為了建立對象描述符,圖8的步驟800-810的邏輯在引導流程中執(zhí)行的很早,優(yōu)選地是在度量可信根的核心(CRTM)中執(zhí)行,例如在SEX或PEI階段中執(zhí)行。對于受信任的計算平臺,CRTM可被描述為一種代碼,所述代碼啟動受新人平臺模塊(TPM)并且是受信任建立步驟(TBB)的一部分。SEC可以被描述為(即在系統(tǒng)重啟后執(zhí)行的且進行"受保護模式"/作為RAM的告訴緩存的初始化的初始代碼)。
閃塊鎖定(Flash block locking)可以^U^于保iiE^ EF1預引導核心
15和運行時得對象描述符避免可疑代碼干擾。就是說,用NOR閃存的硬件特 征來鎖定閃存,以保證當TCB將控制傳遞給其它代理時,閃存將成為只讀 的(即沒有人能夠篡改閃存的內(nèi)容)。作為備選的方案,可以使用固件 保留內(nèi)存或由早期引導固件提供的其它只讀資源。在前面提到的^f可一種 情況下,EFI固件在高細己置和電源接口 (ACPI)內(nèi)存,(在基本輸入、輸出系統(tǒng)(BIOS)中具有一個中斷為15hE820的調(diào)用,用于向操作系統(tǒng)報告內(nèi)存映射(高細己置和電源接口規(guī)范,修訂版3.0, 2004年9月2日)) 以及EFI內(nèi)存映射(具有一個GetMemoiyMap調(diào)用)中,將用于對象描述符存儲器得固件所使用的內(nèi)存標記為"固件保留的",以避免操作系統(tǒng)無意地或惡意地破壞存儲。
這些實施例在平臺漸進(evolution)的引導服務(wù)、預引導階段期間是可 用的。特別是,可能存在不受信任的和可能4射吳的可選ROM以及預引導 應(yīng)用程序,所述平臺固件將針對它們進行防護。可選的ROM可被描述為 BIOS擴Mi^L總線適配器(HBA)(即插入到系統(tǒng)中的卡)上的EFI 驅(qū)動程序,使得獨立的硬々M肖售商可以用HBA運載代碼,所述代碼能夠 被用于幫助引導系統(tǒng)。平臺固件/EFI加載驅(qū)動程序并且令所述驅(qū)動程序安 裝驅(qū)動程序服務(wù)。因為HBA上的驅(qū)動程序來自可能不值得信賴的第三方, 所以用才科己內(nèi)存隔離來防止較低完整驅(qū)動程序的驅(qū)動考聘干擾OS之前的TCB是 重要的。
這些實施例為可擴展性固件接口 ("框架")或4^f可其它依照框架標準 建立的固件防護Intel平臺革新框架的引導服務(wù)PEI和DXE的基礎(chǔ)。
而且,實施例可以和固件部署中的其它實踐一起使用,所述實踐包括但不局限于已簽名的閃存更新、在運行來自未知源的代碼之前鎖定SMRAM 和閃存、保證在調(diào)用之前受信任的代碼是由平臺負責人/所有者所熟知的來 源簽名的、使用可信平臺模塊(TPM)進行組件的測量/可信引導,以及在任何配置更新或改變之前認證才剎乍者。標記內(nèi)存的使用可以被單獨使用 , 或者是對健壯的、高完整性的平臺固件構(gòu)造的這些其它方面中的一個或多 個方面進行補充。
這些實施例提供了為OS數(shù)據(jù)結(jié)構(gòu)保護而設(shè)計的標記內(nèi)存。此外,這些實施例處理OS之前和運行時固件/os的運行時隔離。這些實施例在操作系統(tǒng)組件之間提供了保護和隔離,例如操作系統(tǒng)中的"安全文件系統(tǒng)或安全信息節(jié)點"。這些實施例考慮了對平臺固件進行性能的拓展。
這些實施例對于保護讀寫數(shù)據(jù)和內(nèi)存中的代碼是有用的。
這些實施例使得性能以一種后向兼容的方式增加。同樣地,工業(yè)標準 的引導服務(wù)和運行時的固件可以被重新編譯,使得通過^^]標記內(nèi)存,工業(yè)標準的固件是有益的。實施例提供了一個"安全類型"的CPU,因為它適 用于受控的運行時環(huán)境(MRTE,s),在該環(huán)境中,代碼的類型安全用于隔 離,并且軟件要素不需要環(huán)保護。對于軟件和用于隔離的高度程式化的軟 件接口,"缺少環(huán)保護"疑用于統(tǒng)一 EFI論壇下的技術(shù),包括EFI和基于 框架的規(guī)范。就是說,現(xiàn)今的UEF1在驅(qū)動程序和核心平臺固件之間不具有 隔離。這是一個完整性問題,因為系統(tǒng)板的平臺固件應(yīng)該比從HBA或磁 盤中加載的固件更受信任/具有更高的完整性。完整性的保證需要硬件隔離。 在OS運行時,頁表和其它保護硬件由OS內(nèi)核所有,因此,為由平臺固件 運行時間使用所所保留的新的標記硬件被用于確保較高完整性EFI運行時代 碼不被惡意的或錯誤的OS運行時代碼破壞。
這些實施例考慮繼續(xù)進行環(huán)0的協(xié)同定位,不過適當?shù)貙?nèi)存進行了 標記。根據(jù)實施例,甚至連環(huán)0的OS加載器都不能破環(huán)壞EFI核心。
在運行時,EFI固件將固件運行時代碼和數(shù)據(jù)的保護委派給OS的內(nèi)核。 根據(jù)實施例,EFI固件運行時間能夠通錄OS 之前的處理中委派的適當 的對象描述符來保護。
實施例考慮了 EFI運行時的才斜己內(nèi)存變量與OS的共存,并且為OEM完成許多情形(scenario),所述情形當前是在SMM w/o中實現(xiàn)的,這損害了代碼的完塾性。
實施例保護了 EFI運行時不受rookits/OS內(nèi)核才莫式惡意程序(maleware)的侵害。
信任可以說成包括可靠性、處性、機密性、完整性和可利用性。安全可以說成包括機奮性、完整性和可利用性。實施例是處理完整性的,并 且因此,同時處理信任和安全性。實施例適用于企業(yè)。因為信任和安全的"可靠性"方面,企業(yè)可以被描述為一個市場環(huán)節(jié)(例如購買和<錢計算機的 交易),以此區(qū)別于家庭用戶。
實施例可以被用于保證許多核和多核的基于處理器的平臺擁有一種配 置來自平臺固件的高完整性代碼流的方法。
實施例利用了預期用于OS組件隔離的硬件性能,來提供一個壞的任選R0M、 rootkit、內(nèi)核保護,而無需打亂當前軟件的環(huán)境系統(tǒng)。就是說, 平臺固件可以使用這些標記,但是OS內(nèi)核不必被重新編譯/更新就能按照 實施例進行工作。新的系統(tǒng)板和固件能夠和老的OS內(nèi)核(例如 Windows XP或Windows Server 2003才剩乍系統(tǒng))4工作。實施例為較 老的和較新的操作系統(tǒng)提供了固件隔離。這對OEM來說是有益的,因為 各個系統(tǒng)板都通常支持大范圍的新舊*1乍系統(tǒng)負載。
Intel是Intel公司在美國和/或其它國家的注冊商標或通用法律標志。 Windows和Vista是微軟公司在美國和/或其它國家的注冊商標或通用法律標志.
Windows 和Vista是微軟公司在美國和/或其他國家的注冊商標或通用法律標志.
附加的實施例細節(jié)
所描述的操作可作為方法、設(shè)備或利用標準禾辨和/或x^呈技術(shù)制造的 產(chǎn)品來實現(xiàn),以生產(chǎn)軟件、固件、硬件或它們的伶阿結(jié)合。所描述的,
可作為保持在"計算機可讀介質(zhì)"中的代碼來實現(xiàn),其中,處理器可從所述計算機可讀介質(zhì)中讀W4M亍代碼。計算機可讀介質(zhì)可包括例如磁性介質(zhì)(例如硬盤驅(qū)動器、軟盤、磁帶等)、光學務(wù)賭器(CD-ROM、 DVD、 光盤等)、易失'f沐非易失性內(nèi)存設(shè)備(例如,EEPROM、 ROM、 PROM、 RAM、 DRAM、 SRAM、閃存、固件、可編程邏輯等)等介質(zhì)。實現(xiàn)所描 迷的操怍的代碼可進一步以硬件邏輯(例如M電路芯片、可編程門陣 列(PGA)、特定用途集成電路(ASIC)等)來實現(xiàn)。更進一步地,實 現(xiàn)所描述##的^5馬可通過"傳送信號"來實現(xiàn),其中,傳送信號可通過空 間或通過傳輸介質(zhì)(例如光纖、銅線等)進行傳播。傳送信號還可包括無
線信號、衛(wèi)星傳輸、無線電波、紅外線信號、藍牙等,其中,在所述傳送
信號中對代碼或邏輯進行編碼。在其中進行代碼或邏輯編碼的傳送信號能
夠由發(fā)射站發(fā)射,并由接^^W妄收,其中,在傳送信號中進行編碼的^5馬 或邏輯可以在接收和發(fā)射站或設(shè)^b^^碼并被^^者在硬件或計算機可讀
介質(zhì)中。"機器可讀介質(zhì)"包才封十算機可讀介質(zhì)、硬件邏輯和/或^/馬可在其 中被實現(xiàn)的傳送信號。在其中實玉 (乍的所辨述實施例的^5馬被編碼的設(shè) 備可包4封十算機可讀介質(zhì)或硬件邏輯。當然,本領(lǐng)域的技權(quán)員^i人識到, 在不背離本發(fā)明范圍的前提下,可對該配置進行多種修改,并且所制造的 產(chǎn)品可包括本領(lǐng)域熟知的適當信息M介質(zhì)。
圖8、 11和12所示的4辨表明,某些辨以某種順序勝。在可替換
的實施例中,某些標作可按不同的順序來執(zhí)行、修改或刪除。而且,可在 上面描述的邏輯中增加操作且仍然符合所描述的實施例。此外,本文描述 的操作可順序地發(fā)生或者某些操作可被并行處理。更進一步地,操怍可由 單個處理器或分布式處理lm行。
為了說明和描述,已經(jīng)在前面對不同的實施例進行了描述。這不是為 了窮舉或限制。根據(jù)上面的教導,可以進行多種修改和變化。
權(quán)利要求
1.一種能夠存儲代碼和數(shù)據(jù)的方法,包括確定標記內(nèi)存是否可用;作為確定標記內(nèi)存可用的響應(yīng),確定可擴展固件接口系統(tǒng)是否被實現(xiàn);以及作為確定所述可擴展固件接口系統(tǒng)被實現(xiàn)的響應(yīng),為可擴展固件接口運行時代碼和數(shù)據(jù)分配對象描述符;并且提供運行時使用的一個或多個從非標記內(nèi)存到標記內(nèi)存的調(diào)用點。
2. 才財居權(quán)矛虔求1所述的方法,還包拾 確定非固件^^iE嘗試訪問所述標記內(nèi)存; 確定非固件^^是否可以訪問所述標記內(nèi)存;以及作為確定非固件代理可以訪問所述標記內(nèi)存的響應(yīng),處理來自非固件 代理的訪問操作。
3. 才財居權(quán)利要求2所述的方法,其中,確定所述非固件4 是否可以 訪問才射己內(nèi)存還包括利用與將被訪問的標記內(nèi)存相關(guān)聯(lián)的對勤笛述符來確定訪問權(quán)限,以確定 所述非固件^J里是否可以訪問所述才科己內(nèi)存。
4. 才財居權(quán)利要求2所述的方法,還包括作為確定所述非固件代理不可以訪問標記內(nèi)存的響應(yīng),阻止非固件代 ]"標記內(nèi)存的訪問。
5. 才M居權(quán)利要求4所述的方法,其中,所述非固件^^包括4射吳的調(diào) 用者和惡意的調(diào)用者這兩者中的一個。
6. 才財居權(quán)利要求1所述的方法,其中,M對勤笛述符包括才科己、訪 問權(quán)限、對象大小和指針。
7. 根據(jù)權(quán)利要求1所述的方法,其中,M寄存器包括一個指示所述 寄存器是否已被初始化、未被初始化的標記,或者^^者一個對勤葛述符。
8. —種系統(tǒng),包括 標記內(nèi)存,包括;^^到系纟^反的對^4笛述符;以及用于進行下列#^乍的邏輯確定標記內(nèi)存可用;確定可擴展固件接口系統(tǒng)是否被實現(xiàn);以及 作為確定可擴展固件接口系統(tǒng)帔實現(xiàn)的響應(yīng), 為可擴展固件接口運行時^/馬和數(shù)據(jù)分酉樹勤葛述符;并且 提供運行時^J ]的一個或多個從非標記內(nèi)存到^i己內(nèi)存的調(diào)用點。
9. 才財居權(quán)矛決求8所述的系統(tǒng),還包括用于進行下列才剁乍的邏輯 確定非固件^3gjt嘗試訪問才射己內(nèi)存; 確定非固件ft^是否可以訪問標記內(nèi)存;以及 作為確定非固件代理可以訪問標記內(nèi)存的響應(yīng),處理來自非固件代理的^方問#^乍。
10. 根據(jù)權(quán)利要求9所述的系統(tǒng),其中,確定所述非固件f^是否可 以訪問標記內(nèi)存還包括用于進行下列才^ft的邏幹利用與將被訪問的標記內(nèi)存相關(guān)聯(lián)的對象描述符來確定訪問權(quán)限,以確定 所述非固件^J里是否可以訪問標記內(nèi)存。
11. 才財居權(quán)利要求9所述的系統(tǒng),還包括用于進行下列操作的邏掩 作為確定所述非固件代理不可以訪問標記內(nèi)存的響應(yīng),阻止所述非固件^S^t標記內(nèi)存的訪問。
12. 才財居權(quán)利要求11所述的系統(tǒng),其中,所述非固件^^包括4射吳的 調(diào)用者和惡意的調(diào)用者這兩者中的一個。
13. 根據(jù)權(quán)利要求8所述的系統(tǒng),其中,樸對勤苗述符包括標記、 訪問權(quán)P艮、對象大小和指針。
14. 根據(jù)權(quán)利要求8所述的系統(tǒng),其中,^寄存器包括一個指示所 述寄存器是否W皮初始化、未被初始化的才朽己,或者#^諸一個對|4笛述符。
15. —種##指令的機器可讀介質(zhì),當所述指令被才;M亍時,使機器執(zhí) 賴剩乍以確定標記內(nèi)存;l否可用; 作為確定標記內(nèi)存可用的響應(yīng),確定可擴展固件接口系統(tǒng)是否被實現(xiàn);以及作為確定所述可擴展固件接口系統(tǒng)被實現(xiàn)的響應(yīng), 為可擴展固件接口運行時^/馬和數(shù)據(jù)分酉Wf勤葛述符;并且 提供運行時^^J的一個或多個從非標記內(nèi)存到標記內(nèi)存的調(diào)用點。
16. 根據(jù)權(quán)利要求14所述的^f諸指令的機器可讀介質(zhì),當所述指令被才A/f亍時,使機niAet剁乍以進一步確定非固件f^SiE嘗試訪問才朽己內(nèi)存; 確定非固件^J里是否可以訪問標記內(nèi)存;以及 作為確定非固件代理可以訪問標記內(nèi)存的響應(yīng),處理來自非固件代理 的"i方問才^f乍。
17. 才財居權(quán)利要求16所述的^t指令的機器可讀介質(zhì),當所述指令被 才似亍時,使機H^/ff^i乍以進一步利用與將被訪問的標記內(nèi)存相關(guān)聯(lián)的對勤苗述符來確定訪問權(quán)限,以確定 所述非固件^3S是否可以訪問標記內(nèi)存。
18. 才財居權(quán)利要求16所述的^j諸指令的機器可讀介質(zhì),當所述指令被 4似亍時,使機H^^^f乍以進一步作為確定所述非固件代理不可以訪問標記內(nèi)存的響應(yīng),阻止非固件代 ^^"標記內(nèi)存的訪問。
19. 根據(jù)權(quán)利要求18所述的機器可讀介質(zhì),其中,所述非固件^f嫂包 括4晉i吳的調(diào)用者和惡意的調(diào)用者這兩者中的一個。
20. 才財居權(quán)利要求15所述的機器可讀介質(zhì),其中,樸對勤葛述符包 括標記、訪問權(quán)P艮、對象大小和指針。
21. 才財居權(quán)利要求15所述的機器可讀介質(zhì),其中,樸寄存器包括一 個指示所述寄存器是否已被初始化、未被初始化的標記,或者^f^一個對 勤葛述符。
全文摘要
本發(fā)明的名稱是“高完整性固件”。本發(fā)明提供了一種用于確定標記的內(nèi)存是否可用的技術(shù)。作為確定所述被標記的內(nèi)存可用的響應(yīng),確定可擴展固件接口(EFI)系統(tǒng)是否可被實現(xiàn)。作為確定所述EFI系統(tǒng)為可實現(xiàn)的響應(yīng),分配EFI運行時代碼和數(shù)據(jù)的對象描述符,并且提供一個或多個從非標記內(nèi)存到標記內(nèi)存的調(diào)用點以在運行時使用。本文還描述和要求了其它實施例。
文檔編號G06F9/445GK101201749SQ20071017016
公開日2008年6月18日 申請日期2007年9月21日 優(yōu)先權(quán)日2006年9月21日
發(fā)明者G·科克斯, V·齊默 申請人:英特爾公司