本公開涉及存儲器訪問事務(wù),以及更特別地涉及促進操作系統(tǒng)和設(shè)備中的存儲器的安全區(qū)域之間的交互。
背景技術(shù):
電子技術(shù)的發(fā)展已經(jīng)導致在現(xiàn)代社會中各種電子設(shè)備的激增和集成。典型地由固定計算設(shè)備提供的功能現(xiàn)在在移動設(shè)備以及甚至手持設(shè)備中可用。該演進已經(jīng)導致用戶變得對其用于個人和/或商業(yè)相關(guān)交易的電子設(shè)備依賴。例如,用戶可以與家庭、朋友、商業(yè)伙伴、客戶、顧客等交互、訪問財務(wù)記錄、進行財務(wù)交易(諸如轉(zhuǎn)讓、購買等)、傳輸可包含敏感和/或機密性質(zhì)的信息(例如,諸如個人標識信息、家庭或工作聯(lián)系人信息、賬號等)的數(shù)據(jù)等。執(zhí)行上述活動所需的信息中的一些可以被存儲在用戶的設(shè)備上,且因此可能將引人注意的目標呈現(xiàn)給可能意圖用這樣的信息做壞事的那些人。例如,未知的各方可能嘗試訪問設(shè)備以獲得關(guān)于用戶的敏感或機密信息以供偷竊和/或濫用該用戶的資產(chǎn)、身份盜用、使用戶失信、獲悉用戶的定期安排和/或當前行蹤等中使用。
已經(jīng)設(shè)計了各種軟件解決方案來防止對設(shè)備的未授權(quán)訪問。這些軟件解決方案典型地在與設(shè)備的操作系統(tǒng)相同的特權(quán)級別處實施,且因此可能易受到來自該設(shè)備上的在更高特權(quán)級別處操作的惡意軟件(流氓軟件)的攻擊。隨著軟件開發(fā)者嘗試加強其抵抗被損害的防御,攻擊者繼續(xù)設(shè)計通過在設(shè)備的操作層級內(nèi)的更低級別處引入惡意代碼來損害這些防御的手段。例如,惡意軟件(諸如后門程序(rootkit))可以在比現(xiàn)有惡意軟件檢測和/或保護措施可適應(yīng)的特權(quán)級別更高的特權(quán)級別處攻擊設(shè)備。為了對抗該威脅,裝備制造商正在開始開發(fā)在設(shè)備的最低操作級別/最高特權(quán)級別處實施的基于硬件的保護方案。這些保護措施可以被設(shè)計成在設(shè)備操作發(fā)起時通過部署來在設(shè)備中提供安全操作環(huán)境。然而,這樣的低級別保護措施與現(xiàn)有/新興操作系統(tǒng)的集成在沒有特殊規(guī)定的情況下可能證明是有問題的。
附圖說明
隨著下面的具體實施方式繼續(xù)進行且在參考附圖的情況下,所要求保護的主題的各種實施例的特征和優(yōu)點將變得顯而易見,在附圖中相似附圖標記指定相似部分,以及在附圖中:
圖1圖示了根據(jù)本公開至少一個實施例可使用的設(shè)備的示例性配置;
圖2圖示了根據(jù)本公開至少一個實施例的采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)的示例性存儲器模塊;
圖3圖示了根據(jù)本公開至少一個實施例的應(yīng)用和安全存儲器之間的存儲器映射的示例;
圖4圖示了根據(jù)本公開至少一個實施例的當從安全頁面高速緩存中的槽驅(qū)逐安全頁面時的定時問題的示例;
圖5圖示了根據(jù)本公開至少一個實施例的用以避免定時可能問題的中間結(jié)構(gòu)的示例;
圖6圖示了根據(jù)本公開至少一個實施例的示例性操作,其中使用中間結(jié)構(gòu)來從安全高速緩存中的槽驅(qū)逐安全頁面;
圖7圖示了根據(jù)本公開至少一個實施例的虛擬異常處理的示例;以及
圖8圖示了根據(jù)本公開至少一個實施例的用于采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)的示例性操作。
盡管下面的具體實施方式將在參考所圖示的實施例的情況下繼續(xù)進行,但其許多可替代方式、修改和變形將對本領(lǐng)域技術(shù)人員來說顯而易見。
具體實施方式
本申請涉及采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)。在一個實施例中,設(shè)備中的硬件(例如固件)可以將安全驅(qū)動器(SD)加載到設(shè)備中(例如在激活時)。該SD可以預留設(shè)備的存儲器模塊中的存儲器的至少部分作為安全頁面高速緩存(SPC)。該SPC可能能夠保護對應(yīng)于在設(shè)備中執(zhí)行的應(yīng)用的數(shù)據(jù)以免被其他活動應(yīng)用(例如,在設(shè)備的操作系統(tǒng)(OS)中執(zhí)行)訪問。例如,當應(yīng)用正在執(zhí)行時,應(yīng)用頁面表(PT)中的線性地址(LA)可以典型地指向在程序執(zhí)行期間可能需要的SPC中安全數(shù)據(jù)頁面的位置。然而,與本公開一致的是,線性地址實際上可以被映射到線性地址管理器(LAM)中的偽頁面地址,其可以進而被映射到SPC中的頁面槽。該LAM可能被插入到應(yīng)用的PT和SPC之間來模擬SPC。以這種方式,競爭條件可能被避免,這可能對設(shè)備性能有負面影響。此外,SD可以通過重新配置原本將被OS忽略的虛擬異常(#VE)來促進設(shè)備中的差錯處理。例如,#VE的出現(xiàn)可能引起SD寫入地址到OS將對其反應(yīng)的控制寄存器,而關(guān)于#VE的實際原因的信息被儲存在安全地址空間內(nèi)的別處以用于稍后檢索(例如,當對#VE的原因?qū)ぶ窌r)。
在一個實施例中,被配置成采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)的設(shè)備可以包括例如至少存儲器模塊和固件模塊。該固件模塊可以導致至少一個安全驅(qū)動器被加載到存儲器模塊中。該至少一個安全驅(qū)動器可以:導致存儲器模塊中的存儲器的至少一個部分被預留作為包括至少一個安全頁面槽的安全頁面高速緩存;以及生成線性地址管理器,該線性地址管理器將該線性地址管理器中的至少一個偽頁面地址映射到該至少一個安全頁面槽。
在一個實施例中,存儲器模塊可以進一步包括例如應(yīng)用在其中執(zhí)行的操作系統(tǒng),在該操作系統(tǒng)中至少一個應(yīng)用的執(zhí)行導致數(shù)據(jù)從存儲器模塊中的別處加載到安全頁面高速緩存中。該應(yīng)用可以包括例如至少一個頁面表,該至少一個頁面表包括由安全驅(qū)動器預留以用于映射到線性地址管理器中的至少一個偽頁面地址的至少一個線性地址。與上文的示例性應(yīng)用一致,該安全驅(qū)動器可以進一步放開由安全驅(qū)動器預留的線性地址以用于重新指派、將該線性地址映射到線性地址管理器中的偽頁面地址,以及從應(yīng)用加載應(yīng)用頁面到被映射到偽頁面地址的安全頁面槽中,該應(yīng)用頁面在加載時變成安全頁面。隨著該應(yīng)用執(zhí)行,安全驅(qū)動器可以進一步至少基于接收到頁面錯誤來確定被加載在安全頁面槽中的安全頁面要從安全頁面高速緩存中驅(qū)逐,引起對應(yīng)于安全頁面的偽頁面地址從該安全頁面被加載在其中的安全頁面槽取消映射,并引起從該安全頁面槽卸載該安全頁面。此外,該安全驅(qū)動器可以進一步引起新應(yīng)用頁面被加載到安全頁面槽中,引起新偽頁面地址被映射到安全頁面槽并引起新線性地址被映射到新偽頁面地址。
在相同或不同的實施例中,該安全驅(qū)動器可以進一步接收由于發(fā)生在安全頁面高速緩存中的頁面錯誤而引起的虛擬異常,將虛擬異常重新配置為被操作系統(tǒng)處理,并將重新配置的虛擬異常提供給操作系統(tǒng)內(nèi)核。安全驅(qū)動器重新配置虛擬異??梢园ǎ喊踩?qū)動器推送差錯代碼到操作系統(tǒng)調(diào)用棧上,并將指示虛擬異常已經(jīng)發(fā)生的線性地址寫入到處理模塊的控制寄存器,以引起操作系統(tǒng)差錯處理程序?qū)υ撎摂M異常作出反應(yīng),該線性地址指示虛擬異常在引起了該異常的應(yīng)用的地址空間內(nèi)且在存儲器模塊內(nèi)的安全地址空間外。此外,安全驅(qū)動器可以進一步將引起了該虛擬異常的線性地址寫入到存儲器模塊中的安全地址空間中的寄存器。與本公開一致的示例性方法可以包括:引起存儲器的至少一個部分被預留作為包括至少一個安全頁面槽的安全頁面高速緩存;以及生成線性地址管理器,該線性地址管理器將該線性地址管理器中的至少一個偽頁面地址映射到該至少一個安全頁面槽。
圖1圖示了根據(jù)本公開至少一個實施例可使用的設(shè)備100的示例性配置。本文公開的各種系統(tǒng)、組件、方法等可以適用于范圍廣泛的電子設(shè)備。設(shè)備100可以是例如:移動通信設(shè)備,諸如基于來自Google公司的Android? OS、來自Apple公司的iOS?、來自Microsoft公司的Windows? OS、來自Apple公司的Mac OS、來自Linux基金會的Tizen OS、來自Mozilla項目的Firefox OS、來自Blackberry公司的Blackberry? OS、來自Hewlett-Packard公司的Palm? OS、來自Symbian基金會的Symbian? OS等的蜂窩手機或智能電話;移動計算設(shè)備,諸如平板計算機(像來自Apple公司的iPad?、來自Microsoft公司的Surface?、來自Samsung公司的Galaxy Tab?、來自Amazon公司的Kindle Fire?等)、 包括由Intel公司制造的低功率芯片集的Ultrabook?、上網(wǎng)本、筆記本、膝上型電腦、掌上電腦等;典型固定計算設(shè)備,諸如臺式計算機、服務(wù)器、智能電視、小形狀因子計算解決方案(例如用于空間受限應(yīng)用、TV機頂盒等),像來自Intel公司的Next Unit of Computing (NUC)平臺等。無論如何,已經(jīng)僅作為可在其上配置與本公開一致的實施例的裝置的一般的示例而提供設(shè)備100,并且設(shè)備100不意在將這些各種實施例限于任何特定實現(xiàn)方式。
設(shè)備100可以包括例如系統(tǒng)模塊102,系統(tǒng)模塊102被配置成管理設(shè)備操作。系統(tǒng)模塊102可以包括例如處理模塊104、存儲器模塊106、電源模塊108、用戶接口模塊110和通信接口模塊112。設(shè)備100也可以包括通信模塊114。雖然通信模塊114已經(jīng)被示出為與系統(tǒng)模塊200分離,但已經(jīng)僅為了解釋而提供在圖1中公開的示例性實施方式。與通信模塊114相關(guān)聯(lián)的功能中的一些或全部可以被結(jié)合到系統(tǒng)模塊102中。
在設(shè)備100中,處理模塊104可以包括位于分離的組件中的一個或多個處理器或者可替代地包括在單個組件中(例如在片上系統(tǒng)(SoC)配置中)體現(xiàn)的一個或多個處理核和任何處理器相關(guān)支持電路(例如橋接接口等)。示例性處理器可以包括但不限于可從Intel公司得到的各種基于x86的微處理器,其包括Pentium、Xeon、Itanium、Celeron、Atom、Core i-系列產(chǎn)品族、高級RISC(例如精簡指令集計算)機器或“ARM”處理器等中的那些。支持電路的示例可以包括芯片集(例如可從Intel公司得到的北橋、南橋等)以提供接口,通過該接口,處理模塊104可以與設(shè)備100中的可以以不同速度、在不同總線上等等進行操作的其他系統(tǒng)組件交互。通常與支持電路相關(guān)聯(lián)的功能中的一些或全部也可以被包括在與處理器相同的物理封裝中(例如,諸如在可從Intel公司得到的Sandy Bridge處理器族中)。
處理模塊104可以被配置成在設(shè)備100中執(zhí)行各種指令。指令可以包括:程序代碼,被配置成引起處理模塊104執(zhí)行與讀取數(shù)據(jù)、寫入數(shù)據(jù)、處理數(shù)據(jù)、公式化數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)、變換數(shù)據(jù)等有關(guān)的活動。信息(例如指令、數(shù)據(jù)等)可以被儲存在存儲器模塊106中。存儲器模塊106可以包括具有固定或可移除格式的隨機存取存儲器(RAM)或只讀存儲器(ROM)。RAM可以包括被配置成在設(shè)備100(諸如例如靜態(tài)RAM(SRAM)或動態(tài)RAM(DRAM))的操作期間保持信息的易失性存儲器。ROM可以包括:非易失性(NV)存儲器模塊,基于BIOS、UEFI等而配置成在設(shè)備100被激活時提供指令;可編程存儲器,諸如電子可編程ROM(EPROM);閃存等。其他固定/可移除存儲器可以包括但不限于磁存儲器(諸如例如軟盤、硬盤驅(qū)動器等)、電子存儲器(諸如固態(tài)閃速存儲器(例如嵌入式多媒體卡(eMMC)等)、可移除存儲器卡或棒(例如微存儲設(shè)備(uSD)、USB等)、光學存儲器(諸如基于致密盤的ROM(CD-ROM)、數(shù)字視頻盤(DVD)、藍光盤等)。
電源模塊108可以包括內(nèi)部電源(例如電池、燃料電池等)和/或外部電源(例如機電或太陽能發(fā)電機、電力網(wǎng)、燃料電池等)、以及被配置成向設(shè)備100供給操作所需的電力的相關(guān)電路。用戶接口模塊110可以包括允許用戶與設(shè)備100交互的硬件和/或軟件,諸如例如各種輸入機構(gòu)(例如麥克風、開關(guān)、按鈕、旋鈕、鍵盤、揚聲器、觸敏表面、被配置成捕捉圖像和/或感測接近度、距離、運動、手勢、取向等的一個或多個傳感器)和各種輸出機構(gòu)(例如揚聲器、顯示器、發(fā)光/閃光指示器、用于振動、運動等的機電組件)。用戶接口模塊110中的硬件可以被結(jié)合在設(shè)備100內(nèi)和/或可以經(jīng)由有線或無線通信介質(zhì)耦合到設(shè)備100。
通信接口模塊112可以被配置成管理分組路由和用于通信模塊114的其他控制功能,其可以包括被配置成支持有線和/或無線通信的資源。在一些實例中,設(shè)備100可以包括均由集中式通信接口模塊112管理的多于一個通信模塊114(例如包括用于有線協(xié)議和/或無線無線電的分離的物理接口模塊)。有線通信可以包括串行和并行有線介質(zhì),諸如例如以太網(wǎng)、通用串行總線(USB)、火線、數(shù)字視頻接口(DVI)、高清多媒體接口(HDMI)等。無線通信可以包括例如緊密接近無線介質(zhì)(例如射頻(RF),諸如基于近場通信(NFC)標準、紅外(IR)等)、短距離無線介質(zhì)(例如藍牙、WLAN、Wi-Fi等)、長距離無線介質(zhì)(例如蜂窩廣域無線電通信技術(shù)、基于衛(wèi)星的通信等)或經(jīng)由聲波的電子通信。在一個實施例中,通信接口模塊112可以被配置成防止在通信模塊114中活動的無線通信彼此干擾。在執(zhí)行此功能時,通信接口模塊112可以基于例如消息等待傳輸?shù)南鄬?yōu)先級來調(diào)度通信模塊114的活動。雖然圖1中公開的實施例圖示了通信接口模塊112與通信模塊114分離,但通信接口模塊112和通信模塊114的功能被結(jié)合在相同模塊內(nèi)也可以是可能的。
圖2圖示了根據(jù)本公開至少一個實施例的采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)的示例性存儲器模塊106'。最初,將使用可通常與某些設(shè)備制造商(例如Intel公司)和/或軟件提供商(例如Microsoft公司)相關(guān)聯(lián)的術(shù)語來描述本文所公開的各種實施例。該術(shù)語的使用僅為了在可容易理解的上下文中傳達重要概念,且不意圖將與本公開一致的任何實施方式限于特定裝備和/或軟件。
一般地,與本公開一致的各種實施例可以允許設(shè)備中的基于硬件的存儲器保護方案的實施,該設(shè)備可以包括不直接與該保護方案兼容的OS。更具體地,該保護方案可能要求可能不是被所有類型和/或版本的OS都支持的與OS的某些接口和/或交互。與本公開一致的實施例可能能夠計及在實施存儲器保護時對來自O(shè)S的直接支持的缺乏。
存儲器模塊106'的示例性實施方式可以包括例如至少OS 200、應(yīng)用202和安全資源204。安全資源204可以包括至少SPC 206和LAM 208。從通信觀點來看,SD 210可以促進安全資源204中的SPC 206、LAM 208和應(yīng)用202之間的交互。為了對#VE作出反應(yīng),SD 210可以重新配置#VE以使得其可以被OS 200識別,OS 200將#VE移交給應(yīng)用202,應(yīng)用202將#VE路由給SD 210以用于處理異常的原因。
OS 200可以包括例如至少一個軟件程序,其被配置成管理包括計算功能的裝備的操作。上文已經(jīng)闡述了OS 200的示例。在許多實例中,本文中將僅為了解釋而參考與Windows OS相關(guān)聯(lián)的特征。安全資源204可以包括基于硬件的保護方案,諸如由Intel公司設(shè)計的Software Guard Extensions (SGX)。SGX包括嵌入在某些Intel?處理器和芯片集的架構(gòu)中的一組新指令和存儲器訪問改變。這些擴展允許應(yīng)用202對受保護的容器或“飛地”進行實例化,“飛地”可以是提供機密性、完整性等的應(yīng)用202的地址空間內(nèi)的區(qū)域,甚至在存在非常有特權(quán)的惡意軟件的情況下。防止從未駐留于飛地中的軟件(甚至從有特權(quán)的軟件,諸如虛擬機監(jiān)視器、BIOS、OS 200的組件等)對該飛地的所嘗試的訪問。
SGX架構(gòu)包括新指令、新處理器結(jié)構(gòu)和新執(zhí)行模式。這些包括例如將飛地加載到受保護的存儲器中、經(jīng)由PT映射而對資源的訪問、以及調(diào)度飛地使能應(yīng)用202的執(zhí)行。因此,OS 200仍然維持關(guān)于飛地可訪問什么資源的控制。SGX操作可以被分類成下面的功能:飛地構(gòu)建/拆除、飛地進入/退出、飛地安全操作、分頁指令和調(diào)試指令。可用來針對飛地分配受保護的存儲器、將值加載到受保護的存儲器中、測量(例如,針對已知好版本的程序的散列值驗證程序的代碼的散列值)被加載到飛地的受保護的存儲器中的軟件以及在應(yīng)用202已經(jīng)完成之后拆除飛地的指令如下:“ECREATE”可以聲明基礎(chǔ)和范圍且可以發(fā)起構(gòu)建,“EADD”可以添加4K頁面到飛地,“EEXTEND”可以測量256個字節(jié),“EINIT”可以聲明飛地構(gòu)建,以及“EREMOVE”可以從飛地移除頁面。這些指令可以由SD 210(例如,ring-0軟件,典型地被稱為SGX驅(qū)動器)來執(zhí)行。SD 210可以通過例如存儲器模塊106內(nèi)的固件而被加載到設(shè)備100中。在一個實施例中,當(例如從冷啟動、重新啟動等)激活設(shè)備100時,固件可以加載SD 210。在一個實施例中,SD 210可以由先前加載/測量的程序來測量,由所測量的程序?qū)﹄S后加載的程序的測量也被稱作建立設(shè)備200中的“信任鏈”。
可以使用其他指令來進入和退出飛地。明確地,可以使用“EENTER”來進入飛地,以及可以使用“EEXIT”來退出飛地。由于中斷或異常也可以使用“AEX”來異步退出飛地。在AEX的實例中,硬件可以將所有秘密保存在飛地內(nèi)部,從寄存器擦洗秘密,以及返回到外部程序流。應(yīng)用202然后可以在其停止執(zhí)行的地方恢復??稍试SOS 200安全地將飛地頁面移動到未受保護的存儲器以及從未受保護的存儲器移動飛地頁面的指令可以包括例如:“EPA”,創(chuàng)建版本陣列頁面;“ELDB/U”,將被驅(qū)逐的頁面加載到受保護的存儲器中;“EWB”,驅(qū)逐受保護的頁面;以及“EBLOCK”和“ETRACK”,準備驅(qū)逐。
一般地,安全資源204可以包括SD 210可執(zhí)行以實施被加載到SPC 206中的安全頁面的分頁的指令。雖然由安全資源204提供的保護可能使應(yīng)用202能夠在有機密性、完整性等的情況下執(zhí)行,但對被加載到SPC 206中的安全頁面進行分頁可以具有某些要求。使用SGX作為示例,要求OS 200提供特定的存儲器管理應(yīng)用程序接口(API)且能夠特殊處理SPC存儲器訪問錯誤。大多數(shù)現(xiàn)代操作系統(tǒng)以某種類型的結(jié)構(gòu)化異常處理(SEH)機制為特征。SEH使應(yīng)用能夠處理硬件和軟件異常。存儲器訪問異常典型地導致頁面錯誤(#PF),該頁面錯誤(#PF)首先由OS 200處理。然而,如果OS 200不能應(yīng)對特定#PF,則其可以首先通過SEH機制將其交給引起了#PF的應(yīng)用202。對SPC分頁的第二要求可以是存儲器管理API,其允許當前未被加載在SPC 206中的安全頁面的LA的預留。這樣的API將允許將安全LA(SLA)從SPC 206的頁面(SP)的物理地址取消映射,而同時,預留那些地址直到被驅(qū)逐的飛地頁面再次被加載到SPC 206中。不幸的是,上面的差錯處理和API特征在大多數(shù)(如果不是所有)通??捎玫牟僮飨到y(tǒng)中不可用。
圖3圖示了根據(jù)本公開至少一個實施例的應(yīng)用和安全存儲器之間的存儲器映射的示例。假定SD 210被加載且是操作的,那么應(yīng)用202可以引起SPC 206通過執(zhí)行一系列輸入和輸出控制(IOCTL)調(diào)用而被加載到SD 210。使用SGX作為示例,除了ECREATE和EADD IOCTL之外,在SPC 206被加載的同時,應(yīng)用202也可以執(zhí)行EEXTEND和EINIT IOCTL??梢葬槍γ總€所加載的安全頁面多次執(zhí)行EEXTEND IOCTL以在加載期間測量SPC 206,并且,可以在結(jié)尾處執(zhí)行EINIT IOCTL一次以將最終測量結(jié)果傳遞到硬件以用于驗證。為了清楚起見,可在SPC 206的加載期間出現(xiàn)的各種測量和驗證操作已經(jīng)從圖2中省略。雖然它們可能出現(xiàn)在適當?shù)臅r候,但它們的操作與本文公開的實施例不相關(guān)。第一IOCTL(例如ECREATE_IOCTL)發(fā)信號通知SPC 206即將被加載。基于應(yīng)用202可作為ECREATE_IOCTL調(diào)用的一部分而傳遞的實參,SD 210可以預留應(yīng)用虛擬存儲器的稍后要被映射到SPC 206將被加載到的物理地址(例如也稱為SPC槽)的區(qū)域。
圖3圖示了八個應(yīng)用頁面AP1、AP2、AP3、AP4、AP5、AP6、AP7和AP8(例如統(tǒng)稱為“SP 1-8”),其屬于駐留在標準存儲器302(例如,存儲器模塊106中的其他存儲器空間)中的應(yīng)用202。然后可以進行IOCTL調(diào)用,從而將AP 1-8加載到空SPC 206'中,其中八個可用槽包括槽1、槽2、槽3、槽4、槽5、槽6、槽7和槽8(統(tǒng)稱為“槽1-8”)。在加載到槽1-8中之后,AP 1-8可以變成安全頁面SP1、SP2、SP3、SP4、SP5、SP6、SP7和SP8(統(tǒng)稱為“SP 1-8”)。在OS 200準許針對正在加載的SPC 206'預留虛擬地址空間區(qū)域的請求之后,屬于應(yīng)用202的過程的至少一個頁面表(例如APT 300)可以包括八個頁面幀SLA1、SLA2、SLA3、SLA4、SLA5、SLA6、SLA7和SLA8(例如統(tǒng)稱為SLA 1-8)。在此時,一些內(nèi)部數(shù)據(jù)結(jié)構(gòu)已經(jīng)被分配,并且應(yīng)用202一發(fā)出EADD_IOCTL指令,SD 210就可以準備好將AP 1-8加載到可用的SPC槽中。在應(yīng)用202執(zhí)行第一EADD_IOCTL請求之后,SD 210可以執(zhí)行兩部分存儲器重新映射請求。第一部分可以釋放LA(例如SLA 1),因此其可以被映射到下一部分中的對應(yīng)物理地址空間(例如槽1)。在將SLA映射到物理地址空間之后,對應(yīng)應(yīng)用頁面(例如AP1)然后可以被加載到物理地址空間(例如槽1)中,該應(yīng)用頁面然后變成安全頁面(例如SP1)。該過程可以被重復,直到SLA 1-8被映射到槽1-8,SP 1-8被分別加載到槽1-8中。上述兩部分存儲器重新映射請求可以受到競爭條件的影響。在當應(yīng)用202請求另一個線程上的存儲器分配時的場景中,OS 200可以準許分配請求并在由SD 210完成第二部分之前使用新釋放的LA。如果那種情況發(fā)生,則SD 210將不得不中止并且整個構(gòu)建過程將不得不重新開始。
圖4圖示了根據(jù)本公開至少一個實施例的當從安全頁面高速緩存中的槽驅(qū)逐安全頁面時的定時問題的示例。雖然上文所公開的競爭條件可能是不太可能的,但復雜得多的情況可能出現(xiàn)在當SP 1-8不得不被從SPC 206'驅(qū)逐時的情形中。SD 210必須能夠處理當各個飛地的尺寸或所有所加載的飛地的總尺寸超過SPC 206的尺寸時的情形。例如,當采用SGX時,SD 210可以采用SGX分頁指令以從SPC 210驅(qū)逐至少一個SP 1-8(例如也被稱作“受害者頁面”),使得新應(yīng)用頁面(例如也被稱作“目標頁面”)可以被加載到SPC 210中。
假定例如正在利用SGX并且OS 200是Windows,那么SD 210必須利用Windows存儲器地址空間管理API以加載應(yīng)用頁面并實施飛地頁面高速緩存(EPC)分頁方案。例如,在設(shè)備100中啟用SGX之前(例如在系統(tǒng)啟動的早期階段中),被稱為處理器預留存儲器范圍寄存器(PRMRR)的特殊范圍寄存器可以被禁用。EPC可以是PRM的一部分,并且出于本公開的目的,可以假定PRM事實上是EPC。就OS 200而言,應(yīng)用PT中的物理地址和LA之間的映射完全相同,無論它們指的是常規(guī)物理存儲器還是EPC存儲器。CPU可以強制:被映射到EPC內(nèi)的物理地址的LA僅可以在特殊SGX模式中被訪問(例如,正如SMRAM可能僅在SMI模式中被訪問)。如果未在SGX模式中訪問,則它們與所謂的中止頁面訪問具有相同的行為;寫入被靜默地丟棄,并且讀取返回“-1”。
存在可能重要的兩類API。第一類分配和釋放應(yīng)用虛擬地址空間。例如,“ZwAllocateVirtualMemory”例程可以預留和/或提交指定過程的用戶模式虛擬地址空間內(nèi)的頁面區(qū)域,而“ZwFreeVirtualMemory”例程可以放開和/或回收指定過程的虛擬地址空間內(nèi)的頁面區(qū)域。包括例程“ZwMapViewOfSection”和“ZwUnmapViewOfSection”的第二類API可以將物理地址(例如,所調(diào)用的部分視圖)映射到LA空間中并可以從LA取消映射這樣的部分視圖。當SD 210需要將另一個飛地頁面(例如SP9)加載到已經(jīng)滿的EPC(例如通過EADD或者通過ELD指令之一)時,其可以首先使用EBLOCK、ETRACK和EWB指令(例如下文稱“EWB”)的序列來識別/驅(qū)逐受害者頁面(例如SP4)。在SD 210經(jīng)由EWB驅(qū)逐受害者頁面(例如,留下SPC 206'中的槽4對于新SP 9而言可用)之后,被驅(qū)逐的頁面的LA(例如SLA4)然后可以使用ZwUnmapViewOfSection例程而被取消映射,并可以在被驅(qū)逐的頁面需要稍后被重新加載的實例中預留該虛擬地址(例如,使用ZwAllocateVirtualMemory例程)。該兩部分過程可以被稱為“??俊盠A。然而,由于競爭條件,虛擬存儲器重新映射過程可能失敗,由此來自應(yīng)用202的另一個線程400可以請求分配一些虛擬存儲器,這可能導致OS 200重用新釋放的LA SLA4以滿足該請求。在此時,SD 210不能恢復線性地址。其向應(yīng)用202返回差錯代碼并毀壞飛地。
圖5圖示了根據(jù)本公開至少一個實施例的避免定時可能問題的中間結(jié)構(gòu)的示例。在至少一個示例性實施方式中,Intel架構(gòu)可以允許OS 200維持將LA轉(zhuǎn)化成物理地址的PT,并且,可以通過中斷描述符表(IDT)來將#PF遞送到合適的OS處理程序。當虛擬化開啟擴展頁面表(EPT)時,由被稱為管理程序的VMX-root模式(例如主機模式)中操作的軟件引入地址轉(zhuǎn)化的附加層。包含OS 200的虛擬機(VM)作為客戶機而被“托管”,因此OS維持的線性地址和物理地址現(xiàn)在分別被稱為客戶機線性地址(GLA)和客戶機物理地址(GPA)。EPT可以從GPA轉(zhuǎn)化到主機物理地址(HPA),并且,被稱為EPT違反的訪問錯誤可以經(jīng)由VM-exit而被遞送到管理程序。管理程序可以將EPT違反轉(zhuǎn)換到客戶機頁面錯誤。
在Windows存儲器地址空間管理API中明顯的限制可以通過永久地映射創(chuàng)建永不改變的GLA→GPA映射的飛地線性地址空間而補救。這樣的映射將在SD 210執(zhí)行ECREATE指令之前被創(chuàng)建,且可以直到從SPC 206'移除了最后飛地頁面才被放開。換言之,飛地線性地址空間將被永久地???。同時,為了啟用針對被驅(qū)逐的飛地頁面的訪問錯誤,可以使用EPT來添加附加級別的地址轉(zhuǎn)化。EPT可以將這樣的??靠臻g(例如LAM 208')的GPA映射到實際EPC的HPA。針對從SPC 206'驅(qū)逐的安全頁面的GPA→HPA映射將被標記為不存在于EPT中。同樣,針對LAM 208'中的可用槽的映射將被標記為不存在。對這樣的頁面的訪問將產(chǎn)生下述EPT違反:管理程序會將將該EPT違反轉(zhuǎn)換到#PF。LAM 208'的設(shè)立可能要求僅非常簡約的VT管理程序,其不必是充分發(fā)展的(full-blown)VMM??梢约俣▋H存在一個客戶機并且沒有硬件資源必須被虛擬化。管理程序必須創(chuàng)建將LAM 208'映射到GPA空間中的EPT??蛻魴C(例如OS 200)可以例如通過新的CPUID 0x12葉來發(fā)現(xiàn)該附加“存儲器”。重要的是要注意,該設(shè)計將限制可在任何給定時間處被“加載”到LAM 208'中的飛地的總尺寸。該尺寸可以取決于被映射到GPA空間中的LAM 208'的尺寸。然而,即使在SGX中(例如,在具有針對EPC分頁的所要求的OS支持的情況下),該尺寸仍然可能受OS 200愿意分頁到盤的物理存儲器的量限制,因此目前,這一點可以被忽略。
例如,SD 210可以執(zhí)行CPUID 0x12的新葉來發(fā)現(xiàn)LAM 208'位于GPA空間中的何處以及其有多大。隨著SPC 206'被加載,SD 210然后可以使用應(yīng)用PT將飛地頁面的LA(例如SLA 1-8)映射到LAM 208'的偽頁面地址PP1、PP2、PP3、PP4、PP5、PP6、PP7、PP8和PP9(例如統(tǒng)稱為PP 1-9)。對于被加載到SPC 206'中的SP 1-8,SD 210可以改變EPT中的映射,因此PP 1-9被映射到槽1-8。對于從SPC 206'驅(qū)逐的任何SP1-8,該映射可以指示(例如被標記為):被驅(qū)逐的SP 1-8不存在。當從SPC 206'驅(qū)逐的任何SP 1-8被訪問時,可以由處理模塊104生成EPT違反。EPT違反可以經(jīng)由VM出口而僅被遞送到管理程序。由于EPC管理中不涉及管理程序,因此其可以通過例如操縱客戶機的虛擬機控制結(jié)構(gòu)(VMCS)將EPT違反轉(zhuǎn)換到#PF。#PF通過結(jié)構(gòu)化異常處理而被遞送到SGX驅(qū)動器。驅(qū)動器找到受害者頁面并將它們從EPC驅(qū)逐并將丟失的頁面加載到EPC中。當受害者頁面被驅(qū)逐時,驅(qū)動器將EPT中的對應(yīng)映射標記為不存在并使它們無效。當丟失的頁面被加載到EPC中時,驅(qū)動器用新的EPC HPA更新對應(yīng)的EPT映射并將它們標記為存在。針對在該過程中涉及的任何飛地頁面的應(yīng)用PT中的映射不改變。
圖6圖示了根據(jù)本公開至少一個實施例的示例性操作,其中使用中間結(jié)構(gòu)從安全高速緩存中的槽驅(qū)逐安全頁面。圖6圖示了如何使用APT 300和EPT通過FEPC將SLA 1-8映射到EPC。同樣示出的是:SLA 1-8從不被重新映射,而飛地頁面被從EPC驅(qū)逐且被加載回到EPC中。在圖6中所描繪的示例中,將SP4從SPC 206'驅(qū)逐以讓出地方給SP9。新LA SLA9然后可以被映射到PP9,PP9可以被映射到包含SP9的槽4。然而,SLA4保持被預留(例如,被映射到PP4),因此當應(yīng)用202中的另一個線程針對新分配的存儲器而請求LA時,SLA4不能被OS 200重用。當嘗試通過SLA4對SP4訪問時,訪問錯誤可能產(chǎn)生,因為LAM 208'和SPC 206'之間的EPT映射不存在。SD 210然后可以接收該錯誤作為#PF,并可以驅(qū)逐另一個SP以釋放出空間來重新加載SP4。如果其他線程400(例如來自圖5)會碰巧向堆請求一些存儲器,則OS 200然后可能被迫使用駐留在SPC 206'外的SLA。
諸如上文所公開的實施系統(tǒng)并不是沒有要克服的挑戰(zhàn)。概念驗證(PoC)測試(例如利用Intel裝備和Microsoft Windows OS)已經(jīng)證明:在發(fā)出ECREATE指令之前預留SLA可能是非常浪費的,因為SPC 206'可能是非常稀疏的。此外,通過映射EPT中的LAM 208'預留所聲明的LA空間可能不必要地浪費用于LAM 208'的EPT條目,并且,在最后EADD之后重新要求那些浪費的條目的任何嘗試可以將性能代償(penalty)和不必要的代碼復雜度添加到SD 210。為了計及這些問題,在每個EADD之前,在LAM 208'中將PoC從SLA映射到GPA。該變通方法被認為是可接受的,只要其他線程未嘗試分配可能導致上文所描述的競爭條件的存儲器。更重要地,基于實際出錯GLA而轉(zhuǎn)換到#PF的EPT違反可以被OS 200忽略為偽造的,因為就OS 200而言它們所參考的GLA→GPA映射可以被認為是“有效的”。添加這樣的轉(zhuǎn)換所需的VM退出的性能代償,必須使用更好的解決方案。最后,隨著LAM 208'中的GPA在SP被加載到SPC 206'中的槽中時被映射到SPC 106'中的HPA,或在SP被驅(qū)逐時無效,GPA→HPA這些映射必須被更新。通常,這在管理程序中完成,因為用于使高速緩存的EPT映射無效的INVEPT指令僅可以在VMX-root模式中執(zhí)行。由于僅SD 210知道哪些映射要改變以及如何改變,需要VMCALL指令來將該知識傳送到管理程序。VMCALL引起VM退出到管理程序中,至少從數(shù)據(jù)處理性能觀點來看這可能是昂貴的提議。
可以在連同Windows OS一起操作的一些Intel處理器和芯片集中找到針對上述性能擔憂的補救。例如,(例如在來自Intel公司的某些產(chǎn)品中可得到的)虛擬技術(shù)(VT)架構(gòu)可以包括促進針對視圖管理的性能改進且在VMX-root操作中時利用EPT而啟用的特殊擴展。至少一個特殊擴展可以包括被稱為EPT指針(EPTP)切換的特征,其允許客戶機軟件在被稱為視圖的不同EPT層級之間切換。EPTP引入了下述能力:EPT違反突變成新異常類型(被稱為虛擬化異常(#VE,向量20)),OS 200可以處理該新異常類型,由于其具有與#PF相同的語義。這給OS 200提供了以異常處理的等待時間檢測EPT違反和/或?qū)PT違反作出響應(yīng)的能力,這與在到達視圖管理邏輯之前累積VM退出等待時間形成對照。EPTP切換可以基于EPT結(jié)構(gòu)層級,其中每個EPT結(jié)構(gòu)層級描述獨有的存儲器區(qū)域。EPTP列表是指向第一級別(PML4)EPT頁面的具有多達512個EPTP的頁面尺寸數(shù)據(jù)結(jié)構(gòu),第一級別(PML4)EPT頁面進而指向不同EPT層級。EPT層級可以定義存儲器視圖,其共享它們之間的GPA空間的一些部分。PML4.0視圖常常被稱為默認視圖。通過在EAX寄存器中傳遞的第一實參被設(shè)置為0并且ECX寄存器中傳遞的第二實參被設(shè)置為視圖號的情況下執(zhí)行VMFUNC指令,客戶機軟件可以在EPT視圖之間切換。為了在不招致VM退出的情況下從一個存儲器視圖移動到另一個存儲器視圖,活動源存儲器視圖中的VMFUNC調(diào)用頁面必須與目的地存儲器視圖共享該頁面。
在Windows的x64版本中,Microsoft選擇了開始強制驅(qū)動器可以和不可以修改什么系統(tǒng)結(jié)構(gòu)。內(nèi)核補丁保護(KPP)或“PatchGuard”(如其非正式地所知)是強制限制的技術(shù)。PatchGuard可以周期性地驗證內(nèi)核中的受保護的系統(tǒng)結(jié)構(gòu)尚未被修改。如果檢測到修改,則Windows可以發(fā)起漏洞檢查并用藍屏和/或重啟來關(guān)掉系統(tǒng)。對應(yīng)的漏洞檢查號碼是0x109,并且漏洞檢查碼是CRITICAL_STRUCTURE_CORRUPTION。被禁止的修改可以包括:修改系統(tǒng)服務(wù)表,修改中斷描述符表,修改全局描述符表,使用未被內(nèi)核分配的內(nèi)核棧,修改或修補包含在內(nèi)核本身或HAL或NDIS內(nèi)核庫內(nèi)的代碼,等等。
通過采用BP擴展,可以顯著改進LAM 208'的設(shè)計。然而,可以要求對管理程序的附加改變。管理程序可以啟用EPTP切換,以及通過下述操作來使EPT違反突變成#VE:操縱各種客戶機控制以允許SD 210直接地且安全地改變針對LAM 208'的EPT映射。管理程序可以將包含LAM 208'和SPC 206'之間的GPA→HPA映射的最后級別EPT映射到GPA空間中。為了保護那些映射免受攻擊,管理程序可以創(chuàng)建特殊EPT視圖,其與默認的EPT視圖相同,除了所有頁面僅以讀寫訪問許可而映射。這防止默認視圖中的任何代碼默認地訪問針對LAM 208'的EPT頁面。該視圖包含以讀寫訪問許可而映射到GPA空間中的LAM 208'的EPT頁面。管理程序也可以添加VMCALL,其允許SD 210以讀寫執(zhí)行訪問許可將更多頁面添加到該視圖。SD 210可以使用VMCALL來添加在默認視圖和包含LAM 208'的EPT的視圖之間切換的代碼頁面并操縱這些EPT映射。
例如,針對LAM 208'的EPT視圖(例如PML4.511)可以由包括來自#PF處理程序的兩個代碼頁面的管理程序來生成,SD 210可以使用該#PF處理程序以切換到PML4.511視圖,快速訪問并編輯針對LAM 208'的EPT映射,以及切換回到默認視圖。SD 210可能仍然需要執(zhí)行VMCALL,如果其想要使針對從EPC驅(qū)逐的飛地頁面的高速緩存FEPC EPT映射無效的話,這是因為VMX-root模式中僅軟件可以執(zhí)行INVEPT指令。然而,可以采用“特別技巧”以通過執(zhí)行VM函數(shù)0來使EPT映射無效。
EPT映射可以被標記有地址空間標識符(ASID),其連同實際GPA→HPA映射一起使其跨所有視圖而唯一。對于任何處理器來說EPT視圖的最大數(shù)目是512(例如,存儲器頁面是4096個字節(jié)并且一個EPTP記錄是八個字節(jié),因此存在4096/8個記錄)。每CPU核僅存在一個EPTP列表頁面。因此,可能生成完全相同的多達511個EPTP視圖,加上第512個視圖,該第512個視圖允許驅(qū)動器編輯將LAM 208'映射到SPC 206'的葉EPT(例如假定ASID的數(shù)目絕不會超過512)。例如,管理程序可以生成默認PML4 EPT頁面的拷貝并用指向拷貝的EPTP填充EPTP列表。每當要使針對LAM 208'的陳舊EPT映射無效時,SD 210可以執(zhí)行VMFUNC (0, 索引),其中該索引可以從0增加到511且然后回到0。在操作的示例中,CPU可以使用四個ASID,因此管理程序可以創(chuàng)建五個默認視圖。SD 210然后可以旋轉(zhuǎn)通過視圖PML4.0到PML4.4且回到PML4.0。PML4.511視圖仍然可以被預留以用于LAM 208'中的EPT和操縱它們的代碼。
圖7圖示了根據(jù)本公開至少一個實施例的虛擬異常處理的示例。為了處理通過對被標記為不存在的LAM 208'中的EPT映射的訪問而生成的#VE,SGX驅(qū)動器必須在所有硬件線程上鉤住OS 200的IDT中的#VE向量。這通常通過用新地址替換IDT中的#VE處理程序的地址而完成。然而,IDT是Windows PatchGuard所保護的系統(tǒng)數(shù)據(jù)結(jié)構(gòu)。SD 210'不可以修改原始IDT,因此取而代之,其必須創(chuàng)建新的IDT。SD 210'可以在所有硬件線程上執(zhí)行SIDT指令來從IDT寄存器(IDTR)檢索包括IDT所位于的地址的值。SD 210'然后可以對原始IDT作出拷貝,從而用驅(qū)動器自身的#VE處理程序的地址替換原始#VE處理程序的地址。SD 210'然后可以在所有硬件核上用新IDT的地址執(zhí)行LIDT。IDTR中的值也由PatchGuard實用工具周期性地檢查,并且如果它們被改變,則PatchGuard將發(fā)起漏洞檢查過程。這可以通過在管理程序中虛擬化IDTR而補救。每當執(zhí)行LGDT、LIDT、LLDT、LTR、SGDT、SIDT、SLDT和STR時,管理程序可以在對任何描述符表寄存器的訪問時啟用VM退出。管理程序然后可以返回表寄存器的原始值而不是其當前內(nèi)容。管理程序然后可以啟用另一個VMCALL,SD 210'可以利用該另一個VMCALL來傳遞原始描述符表寄存器的值,每當執(zhí)行SGDT或SIDT時,管理程序供給這些值。以該方式鉤住IDT有時被稱為生成虛擬IDT或VIDT 702。VIDT 702一般對與本公開一致的任何實施例來說不是必要的,且因此可以取決于例如OS 200(例如具有啟用的PatchGuard的Windows OS)而在需要的基礎(chǔ)上采用。
當#VE由處理模塊104生成時,其將與異常相關(guān)聯(lián)的信息寫入到被稱為虛擬化異常信息區(qū)域(#VE Info)的特殊數(shù)據(jù)結(jié)構(gòu)。該信息可以包括四個64位值:當前EPTP、差錯代碼、GLA和GPA??梢酝ㄟ^將#VE信息的地址寫入到客戶機VMCS中的字段來啟用#VE。由于僅管理程序可以編輯客戶機VMCS,因此SD 210'可以使用VMCALL來傳遞針對處理器模塊104中的每個處理器核的#VE Info的地址。SD 210'和管理程序然后可以使用被稱為VE控制結(jié)構(gòu)或VECS 708的特殊結(jié)構(gòu)來經(jīng)由VMCALL指令進行通信。管理程序為VECS 708分配一個頁面,SD 210'使用CPUID 0x12中的新葉來發(fā)現(xiàn)該一個頁面。VECS 708可以在所有的硬件核之間劃分,并且其可以存儲針對每個核的#VE Info和描述符表寄存器。管理程序?qū)?VE Info地址寫入到客戶機VMCS以啟用#VE。每當SGDT或SIDT被執(zhí)行時,除了讀取描述符表寄存器區(qū)域中的值以外,在OS 200通過執(zhí)行LGDT或LIDT來改變它們的情況下,管理程序也可以寫入到該區(qū)域。由于VECS 708包含處理#VE所需的信息,因此其可以駐留在未被內(nèi)核分頁的存儲器中。錯誤處理程序內(nèi)部的錯誤將導致雙重錯誤,其通常由內(nèi)核處理。
異常和中斷通常由OS 200以專有且常常未被記入文檔的方式來處理。因此,SD 210'中的#VE處理程序不可以依賴于任何內(nèi)核API。例如,SD 210'可在其#VE處理程序中做的唯一事情可以被限于以某種方式將信息從#VE Info傳遞到內(nèi)核本身以用于適當處理。由于#VE具有與#PF相同的語義,因此將#VE轉(zhuǎn)換到#PF并將它們傳遞給內(nèi)核是可能的解決方案。#VE和#PF之間的一個差別是:當生成#VE時,處理模塊104中的處理器不像在#PF的情況下所做的那樣將差錯代碼推送到棧上。同樣,由于由四個值而不是在#PF的情況下由兩個值來描述#VE,因此不使用控制寄存器CR2來寫入GLA。如上文所描述的,在管理程序中將EPT違反轉(zhuǎn)換到#PF被證明不是有效的解決方案。就OS 200而言,CR2寄存器和#PF差錯代碼(PFEC)中提供的信息所標識的GLA→GPA映射是有效的,以及因此,這樣的#PF被OS 200忽略為偽造的。因此,使用與在#VE Info中報告的GLA相同的GLA將#VE轉(zhuǎn)換成對應(yīng)的#PF也可能失敗。
為了解決此問題,SD 210'可以采用其在ECREATE被執(zhí)行之前針對每個飛地預留的特殊FAULT_LA。其可能是例如應(yīng)用202'的地址空間內(nèi)但處于安全資源204的安全地址空間外的LA。由于該LA未被映射到任何VA或SP,因此通過它的訪問將通常導致#PF。然而,OS 200不會知道如何處理#PF,且會經(jīng)由SEH 700將其傳遞到應(yīng)用202'。由于CR2控制寄存器被用于寫入FAULT_LA,因此需要儲存實際GLA的地方。查看SGX作為示例,結(jié)果是,EDX寄存器可能不可用于使用,這是由于其典型地用于將實參傳遞到一些SGX指令。因此,SD 210'可以將對應(yīng)于導致了#VE的GPA的實際GLA寫入到EDX寄存器。最后部分然后可以將以這樣的方式構(gòu)造的#PF遞送到內(nèi)核中的#PF處理程序。SD 210'然后可以檢查VECS 706中的IDTR的當前值,因為其可能已經(jīng)在某個時間被OS 200改變,并通過從由IDTR指向的IDT檢索#PF處理程序的當前地址來讀取它。SD 210'然后跳到該地址。
圖7圖示了可以如何將#VE轉(zhuǎn)換到#PF并傳遞到OS內(nèi)核710、然后到應(yīng)用202'且然后回到SD 210'(例如從SEH 700到頁面錯誤處理程序704)以用于對異常進行尋址的示例。最初,可以由設(shè)備裝備712(例如處理模塊106和/或SPC 206)導致#VE。VIDT 702的向量20中的基礎(chǔ)地址指向SD 210'中的#VE處理程序。描述符表訪問VM退出處理程序和EPT視圖可以被設(shè)立在管理程序710中。當通過嘗試訪問具有在LAM 208'中被標記為不存在的映射的PP來生成#VE時,可以通過VIDT 702來執(zhí)行SD 210'中的#VE處理程序706。#VE處理程序706可以檢索#VE Info VECS 708,將差錯代碼推送到棧上,將GLA寫入到EDX中,以及將針對出錯頁面所屬的飛地的特殊FAULT_LA寫入到EDX中。SD 210'然后針對IDTR的最新值檢查VECS 708并從IDT檢索內(nèi)核710中#PF處理程序712的地址并將該控制轉(zhuǎn)移到#PF內(nèi)核712。#PF處理程序712并不忽略#PF,這是由于FAULT_LA未被映射到任何物理存儲器。然而,其也不可以處理它,因為該地址從未被映射到可能已被分頁出去的任何物理存儲器。內(nèi)核710然后可以通過SEH 700將錯誤轉(zhuǎn)發(fā)到應(yīng)用202'。應(yīng)用202'中的現(xiàn)有SEH 700會通常通過調(diào)用#PF IOCTL將錯誤轉(zhuǎn)發(fā)到SD 210'。然而,出錯的GLA已經(jīng)被儲存,位于EDX中。#PF IOCTL然后可以被改變,因此SEH 700可以傳遞來自由內(nèi)核提供的異常信息結(jié)構(gòu)的兩個值:來自CR2的GLA和來自EDX的值。SD 210'然后可以處理錯誤,例如,通過驅(qū)逐受害者頁面以及在所要求的目標頁面中進行分頁,同時相應(yīng)地更新針對LAM 208'的EPT映射。
圖8圖示了根據(jù)本公開至少一個實施例的用于采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)的示例性操作。圖8中公開的示例性操作可以是從在設(shè)備中操作的安全驅(qū)動器的視角來看的。在操作800中,安全頁面高速緩存可以被預留在存儲器中(例如在設(shè)備的存儲器模塊中)??梢栽诓僮?02中生成線性地址管理器映射(例如將偽頁面地址映射到安全頁面槽),并且后面接著可以在操作804中執(zhí)行應(yīng)用。在操作806中,可以預留應(yīng)用頁面表中的線性地址,并且可以在操作808中將該線性地址映射到線性地址管理器中的對應(yīng)偽頁面地址。然后可以在操作810中將應(yīng)用頁面加載到安全頁面高速緩存槽中,該應(yīng)用頁面在加載時變成安全頁面。
應(yīng)用可以在操作812中開始正常操作。然后在操作814中可以關(guān)于虛擬異常是否已經(jīng)發(fā)生作出確定。如果在操作814中確定虛擬異常已經(jīng)發(fā)生,則在操作816中,可以重新配置虛擬異常以供操作系統(tǒng)處理。在操作818中,可以從應(yīng)用接收頁面錯誤(例如對應(yīng)于虛擬異常),從而觸發(fā)安全驅(qū)動器以開始解決問題(例如,從安全頁面高速緩存驅(qū)逐受害者安全頁面并在被驅(qū)逐的受害者頁面的槽中加載目標應(yīng)用頁面)的操作。這些操作可以包括例如在操作820中從安全頁面高速緩存槽(例如對應(yīng)于受害者頁面)取消映射至少一個偽頁面地址。在操作822中,可以從受害者頁面的安全頁面高速緩存槽卸載該受害者頁面,后面接著在操作824中將新的線性地址(例如對應(yīng)于要加載的目標頁面)映射到新的偽頁面地址。然后在操作826中,可以將新的偽頁面地址映射到可用的安全頁面高速緩存槽,以及在操作828中,可以將新的應(yīng)用頁面(對應(yīng)于在操作824中映射的線性地址)加載到可用的安全頁面高速緩存槽中。操作828可以后面接著操作814來檢測進一步的異常。
如果在操作814中確定虛擬異常尚未發(fā)生,則在操作830中應(yīng)用可以繼續(xù)正常操作直到在操作830中確定應(yīng)用準備好(例如,或需要)終止。在操作832中,應(yīng)用可以停止執(zhí)行。在操作834中,可以放開與應(yīng)用相關(guān)聯(lián)的線性地址,后面接著在操作836中從存儲器卸載安全頁面高速緩存。操作836可以可選地后面接著返回到操作804,其中可以加載新應(yīng)用。操作806-836然后可以如上文所描述的那樣繼續(xù)進行。
雖然圖8圖示了根據(jù)實施例的操作,但要理解的是,并非在圖8中所描繪的所有操作對于其他實施例來說都是必要的。確實,在本文中完全預期的是,在本公開其他實施例中,圖8中描繪的操作和/或本文中描述的其他操作可以以未在任何附圖中具體示出但仍與本公開完全一致的方式組合。因此,涉及沒有確切地在一個附圖中示出的特征和/或操作的權(quán)利要求被認為是在本公開的范圍和內(nèi)容內(nèi)。
如在本申請中和在權(quán)利要求中所使用的,由術(shù)語“和/或”聯(lián)結(jié)的項目的列表可以意指所列項目的任何組合。例如,詞組“A、B和/或C”可以意指:A;B;C;A和B;A和C;B和C;或A、B和C。如在本申請中和在權(quán)利要求中所使用的,由術(shù)語“……中的至少一個”聯(lián)結(jié)的項目的列表可以意指所列術(shù)語的任何組合。例如,詞組“A、B或C中的至少一個”可以意指:A;B;C;A和B;A和C;B和C;或A、B和C。
如在本文的任何實施例中所使用的,術(shù)語“模塊”可以指的是被配置成執(zhí)行前述操作中的任一項的軟件、固件和/或電路。軟件可以體現(xiàn)為被記錄在非瞬變計算機可讀存儲介質(zhì)上的軟件包、代碼、指令、指令集和/或數(shù)據(jù)。固件可以體現(xiàn)為在存儲器設(shè)備中硬編碼(例如非易失性)的代碼、指令或指令集和/或數(shù)據(jù)。如本文中的任何實施例中所使用的“電路”可以包括:例如,單個地或以任何組合,硬連線電路、可編程電路(諸如包括一個或多個個體指令處理核的計算機處理器)、狀態(tài)機電路和/或存儲由可編程電路執(zhí)行的指令的固件。模塊可以共同地或個體地體現(xiàn)為形成更大系統(tǒng)的一部分的電路,例如,集成電路(IC)、片上系統(tǒng)(SoC)、臺式計算機、膝上型計算機、平板計算機、服務(wù)器、智能電話等。
本文所描述的任何操作可以在包括一個或多個存儲介質(zhì)(例如非瞬變存儲介質(zhì))的系統(tǒng)中實施,該存儲介質(zhì)上個體地或以組合方式存儲有當由一個或多個處理器執(zhí)行時執(zhí)行方法的指令。此處,處理器可以包括例如服務(wù)器CPU、移動設(shè)備CPU和/或其他可編程電路。同樣,意圖是,本文所描述的操作可以跨多個物理設(shè)備(諸如,多于一個不同的物理位置處的物理結(jié)構(gòu))而分布。存儲介質(zhì)可以包括任何類型的有形介質(zhì),例如任何類型的盤,包括硬盤、軟盤、光盤、致密盤只讀存儲器(CD-ROM)、致密盤可重寫(CD-RW)和磁光盤、半導體器件(諸如只讀存儲器(ROM))、隨機存取存儲器(RAM)(諸如動態(tài)和靜態(tài)RAM)、可擦除可編程只讀存儲器(EPROM)、電可擦除可編程只讀存儲器(EEPROM)、閃速存儲器、固態(tài)盤(SSD)、嵌入式多媒體卡(eMMC)、安全數(shù)字輸入/輸出(SDIO)卡、磁或光卡、或適合于存儲電子指令的任何類型的介質(zhì)。其他實施例可以被實施為由可編程控制設(shè)備執(zhí)行的軟件模塊。
因此,本申請涉及采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)。安全驅(qū)動器(SD)可以被加載到設(shè)備中來預留設(shè)備中的存儲器的至少部分作為安全頁面高速緩存(SPC)。該SPC可以保護應(yīng)用數(shù)據(jù)免受設(shè)備中的其他活動應(yīng)用訪問。可以通過將應(yīng)用頁面表(PT)中的線性地址(LA)映射到SPC中的頁面槽的線性地址管理器(LAM)的使用來避免潛在的競爭條件。SD也可以通過重新配置原本會被OS忽略的VE來促進設(shè)備中的差錯處理。
下面的示例關(guān)于進一步的實施例。本公開的下面的示例可以包括主題材料,諸如設(shè)備、方法、用于存儲指令(該指令當被執(zhí)行時引起機器執(zhí)行基于該方法的動作)的至少一個機器可讀介質(zhì)、用于執(zhí)行基于該方法的動作的裝置和/或用于采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)的系統(tǒng),如下文所提供。
根據(jù)示例1,提供了一種被配置成采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)的設(shè)備。該設(shè)備可以包括處理模塊和存儲器模塊,該存儲器模塊包括至少固件模塊,該固件模塊引起安全驅(qū)動器被加載到該存儲器模塊中,該安全驅(qū)動器引起存儲器模塊中的存儲器的至少一個部分被預留作為包括至少一個安全頁面槽的安全頁面高速緩存,并生成線性地址管理器,該線性地址管理器將該線性地址管理器中的至少一個偽頁面地址映射到該至少一個安全頁面槽。
示例2可以包括示例1的要素,其中該存儲器模塊進一步包括應(yīng)用在其中執(zhí)行的操作系統(tǒng),在該操作系統(tǒng)中至少一個應(yīng)用的執(zhí)行引起數(shù)據(jù)從存儲器模塊中的別處加載到安全頁面高速緩存中。
示例3可以包括示例2的要素,其中該應(yīng)用包括至少一個頁面表,該至少一個頁面表包括至少一個線性地址,該至少一個線性地址由安全驅(qū)動器預留以用于映射到線性地址管理器中的至少一個偽頁面地址。
示例4可以包括示例3的要素,其中該安全驅(qū)動器進一步放開由安全驅(qū)動器預留的線性地址以用于重新指派,將該線性地址映射到線性地址管理器中的偽頁面地址,并將來自該應(yīng)用的應(yīng)用頁面加載到被映射到偽頁面地址的安全頁面槽中,該應(yīng)用頁面在加載時變成安全頁面。
示例5可以包括示例4的要素,其中該安全驅(qū)動器進一步至少基于接收到頁面錯誤來確定在安全頁面槽中加載的安全頁面要從安全頁面高速緩存中驅(qū)逐,引起對應(yīng)于安全頁面的偽頁面地址從該安全頁面被加載在其中的安全頁面槽取消映射,并引起從該安全頁面槽卸載該安全頁面。
示例6可以包括示例5的要素,其中該安全驅(qū)動器進一步引起新應(yīng)用頁面被加載到安全頁面槽中,引起新偽頁面地址被映射到安全頁面槽,并引起新線性地址被映射到新偽頁面地址。
示例7可以包括示例4的要素,其中該安全驅(qū)動器進一步至少基于接收到頁面錯誤來確定在安全頁面槽中加載的安全頁面要從安全頁面高速緩存中驅(qū)逐,引起對應(yīng)于安全頁面的偽頁面地址從該安全頁面被加載在其中的安全頁面槽取消映射,引起該安全頁面從該安全頁面槽中卸載,引起新應(yīng)用頁面被加載到安全頁面槽中,引起新偽頁面地址被映射到安全頁面槽,并引起新線性地址被映射到新偽頁面地址。
示例8可以包括示例7的要素,其中該線性地址管理器至少避免競爭條件,其中當安全頁面從安全頁面高速緩存中驅(qū)逐時,所預留的線性地址被重新指派到另一個程序線程。
示例9可以包括示例1到8中任一個的要素,其中該安全驅(qū)動器進一步接收由于發(fā)生在安全頁面高速緩存中的頁面錯誤而引起的虛擬異常,將該虛擬異常重新配置為由操作系統(tǒng)處理,并將重新配置的虛擬異常提供給操作系統(tǒng)內(nèi)核。
示例10可以包括示例9的要素,其中該安全驅(qū)動器重新配置虛擬異常包括:該安全驅(qū)動器將差錯代碼推送到操作系統(tǒng)調(diào)用棧上,并將指示該虛擬異常已經(jīng)發(fā)生的線性地址寫入到處理模塊的控制寄存器,以引起操作系統(tǒng)差錯處理程序?qū)υ撎摂M異常作出反應(yīng),該線性地址指示該虛擬異常在引起了該異常的應(yīng)用的地址空間內(nèi)且在存儲器模塊內(nèi)的安全地址空間外。
示例11可以包括示例10的要素,其中該安全驅(qū)動器進一步將引起了該虛擬異常的線性地址寫入到安全地址空間中的寄存器。
示例12可以包括示例9的要素,其中該安全驅(qū)動器重新配置虛擬異常包括:該安全驅(qū)動器:將差錯代碼推送到操作系統(tǒng)調(diào)用棧上;將指示該虛擬異常已經(jīng)發(fā)生的線性地址寫入到處理模塊的控制寄存器,以引起操作系統(tǒng)差錯處理程序?qū)υ撎摂M異常作出反應(yīng),該線性地址指示該虛擬異常在引起了該異常的應(yīng)用的地址空間內(nèi)且在該存儲器模塊內(nèi)的安全地址空間外;以及將引起了該虛擬異常的線性地址寫入到安全地址空間中的寄存器。
示例13可以包括示例12的要素,其中該安全驅(qū)動器進一步接收來自應(yīng)用中的結(jié)構(gòu)化差錯處理程序的頁面錯誤并基于接收到頁面錯誤來解決該虛擬異常。
示例14可以包括示例1到8中任一個的要素,其中該安全驅(qū)動器是安全防護擴展(SGX, Secure Guard Extensions)驅(qū)動器,并且該安全頁面高速緩存是SGX飛地頁面高速緩存。
根據(jù)示例15,提供了一種用于采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)的方法。該方法可以包括:引起存儲器的至少一個部分被預留作為包括至少一個安全頁面槽的安全頁面高速緩存;以及生成線性地址管理器,該線性地址管理器將該線性地址管理器中的至少一個偽頁面地址映射到該至少一個安全頁面槽。
示例16可以包括示例15的要素,以及可以進一步包括:執(zhí)行包括至少一個頁面表的應(yīng)用,該至少一個頁面表具有至少一個線性地址,該至少一個線性地址被預留以用于映射到該線性地址管理器中的至少一個偽頁面地址;以及基于執(zhí)行該應(yīng)用來引起數(shù)據(jù)從存儲器中的別處加載到安全頁面高速緩存中。
示例17可以包括示例16的要素,其中引起數(shù)據(jù)被加載到安全頁面高速緩存中包括:放開所預留的線性地址以用于重新指派;將線性地址映射到線性地址管理器中的偽頁面地址;以及將來自該應(yīng)用的應(yīng)用頁面加載到被映射到該偽頁面地址的安全頁面槽中,該應(yīng)用頁面在加載時變成安全頁面。
示例18可以包括示例17的要素,以及可以進一步包括:至少基于接收到頁面錯誤來確定在安全頁面槽中加載的安全頁面要從安全頁面高速緩存中驅(qū)逐;引起對應(yīng)于安全頁面的偽頁面地址從安全頁面被加載在其中的安全頁面槽取消映射;以及引起從該安全頁面槽卸載該安全頁面。
示例19可以包括示例18的要素,以及可以進一步包括:引起新應(yīng)用頁面被加載到安全頁面槽中;引起新偽頁面地址被映射到安全頁面槽;以及引起新線性地址被映射到新偽頁面地址。
示例20可以包括示例17的要素,以及可以進一步包括:至少基于接收到頁面錯誤來確定在安全頁面槽中加載的安全頁面要從安全頁面高速緩存中驅(qū)逐;引起對應(yīng)于安全頁面的偽頁面地址從安全頁面被加載在其中的安全頁面槽取消映射;引起該安全頁面從安全頁面槽中卸載;引起新應(yīng)用頁面被加載到該安全頁面槽中;引起新偽頁面地址被映射到安全頁面槽;以及引起新線性地址被映射到新偽頁面地址。
示例21可以包括示例20的要素,其中該線性地址管理器至少避免競爭條件,其中當安全頁面從安全頁面高速緩存中驅(qū)逐時,所預留的線性地址被重新指派到另一個程序線程。
示例22可以包括示例15到21中任一個的要素,以及可以進一步包括:接收由于發(fā)生在安全頁面高速緩存中的頁面錯誤而引起的虛擬異常;將該虛擬異常重新配置為由操作系統(tǒng)處理;以及將重新配置的虛擬異常提供給操作系統(tǒng)內(nèi)核。
示例23可以包括示例22的要素,其中重新配置該虛擬異常包括:將差錯代碼推送到操作系統(tǒng)調(diào)用棧上;以及將指示該虛擬異常已經(jīng)發(fā)生的線性地址寫入到處理模塊的控制寄存器,以引起操作系統(tǒng)差錯處理程序?qū)υ撎摂M異常作出反應(yīng),該線性地址指示該虛擬異常在引起了該異常的應(yīng)用的地址空間內(nèi)且在存儲器模塊內(nèi)的安全地址空間外。
示例24可以包括示例23的要素,以及可以進一步包括:將引起了該虛擬異常的線性地址寫入到安全地址空間中的寄存器。
示例25可以包括示例22的要素,其中重新配置該虛擬異常可以包括:將差錯代碼推送到操作系統(tǒng)調(diào)用棧上;將指示該虛擬異常已經(jīng)發(fā)生的線性地址寫入到處理模塊的控制寄存器,以引起操作系統(tǒng)差錯處理程序?qū)υ撎摂M異常作出反應(yīng),該線性地址指示該虛擬異常在引起了該異常的應(yīng)用的地址空間內(nèi)且在該存儲器模塊內(nèi)的安全地址空間外;以及將引起了該虛擬異常的線性地址寫入到安全地址空間中的寄存器。
示例26可以包括示例25的要素,以及可以進一步包括:接收來自應(yīng)用中的結(jié)構(gòu)化差錯處理程序的頁面錯誤;以及基于接收到頁面錯誤來解決該虛擬異常。
示例27可以包括示例15到21中任一個的要素,其中該安全頁面高速緩存是安全防護擴展(SGX)飛地頁面高速緩存。
根據(jù)示例28,提供了一種包括至少一設(shè)備的系統(tǒng),該系統(tǒng)被布置成執(zhí)行上述示例15到27中任一個的方法。
根據(jù)示例29,提供了一種芯片集,其被布置成執(zhí)行上述示例15到27中任一個的方法。
根據(jù)示例30,提供了至少一種機器可讀介質(zhì),其包括多個指令,所述指令響應(yīng)于在計算設(shè)備上執(zhí)行而引起該計算設(shè)備實施根據(jù)上述示例15到27中任一個所述的方法。
根據(jù)示例31,提供了一種被配置用于采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)的設(shè)備,該設(shè)備被布置成執(zhí)行上述示例15到27中任一個的方法。
根據(jù)示例32,提供了一種用于采用用于促進對安全存儲器的訪問的中間結(jié)構(gòu)的系統(tǒng)。該系統(tǒng)可以包括:用于引起存儲器的至少一個部分被預留作為包括至少一個安全頁面槽的安全頁面高速緩存的裝置;以及用于生成線性地址管理器的裝置,該線性地址管理器將該線性地址管理器中的至少一個偽頁面地址映射到該至少一個安全頁面槽。
示例33可以包括示例32的要素,以及可以進一步包括:用于執(zhí)行包括至少一個頁面表的應(yīng)用的裝置,該至少一個頁面表具有至少一個線性地址,該至少一個線性地址被預留以用于映射到該線性地址管理器中的至少一個偽頁面地址;以及用于基于執(zhí)行該應(yīng)用來引起數(shù)據(jù)從存儲器中的別處加載到安全頁面高速緩存中的裝置。
示例34可以包括示例33的要素,其中用于引起數(shù)據(jù)被加載到安全頁面高速緩存中的裝置可以包括:用于放開被預留以用于重新指派的所預留的線性地址的裝置;用于將線性地址映射到線性地址管理器中的偽頁面地址的裝置;以及用于將來自該應(yīng)用的應(yīng)用頁面加載到被映射到該偽頁面地址的安全頁面槽中的裝置,該應(yīng)用頁面在加載時變成安全頁面。
示例35可以包括示例34的要素,以及可進一步包括:用于至少基于接收到頁面錯誤來確定在安全頁面槽中加載的安全頁面要從安全頁面高速緩存中驅(qū)逐的裝置;用于引起對應(yīng)于安全頁面的偽頁面地址從該安全頁面被加載在其中的安全頁面槽取消映射的裝置;以及用于引起從該安全頁面槽卸載該安全頁面的裝置。
示例36可以包括示例35的要素,以及可以進一步包括:用于引起新應(yīng)用頁面被加載到該安全頁面槽中的裝置;用于引起新偽頁面地址被映射到該安全頁面槽的裝置;以及用于引起新線性地址被映射到該新偽頁面地址的裝置。
示例37可以包括示例31到36中任一個的要素,以及可以進一步包括:用于接收由于發(fā)生在安全頁面高速緩存中的頁面錯誤而引起的虛擬異常的裝置;用于將該虛擬異常重新配置為由操作系統(tǒng)處理的裝置;以及用于將重新配置的虛擬異常提供給操作系統(tǒng)內(nèi)核的裝置。
示例38可以包括示例37的要素,其中用于重新配置虛擬異常的裝置可以包括:用于將差錯代碼推送到操作系統(tǒng)調(diào)用棧上的裝置;以及用于將指示該虛擬異常已經(jīng)發(fā)生的線性地址寫入到處理模塊的控制寄存器,以引起操作系統(tǒng)差錯處理程序?qū)υ撎摂M異常作出反應(yīng)的裝置,該線性地址指示該虛擬異常在引起了該異常的應(yīng)用的地址空間內(nèi)且在存儲器模塊內(nèi)的安全地址空間外。
示例39可以包括示例38的要素,以及可以進一步包括:用于將引起了虛擬異常的線性地址寫入到安全地址空間中的寄存器的裝置。
示例40可以包括示例31到36中任一個的要素,其中該安全頁面高速緩存是安全防護擴展(SGX)飛地頁面高速緩存。
本文中已采用的術(shù)語和表達被用作描述而非限制的術(shù)語,并且在這樣的術(shù)語和表達的使用中,并不意圖排除所示出和描述的特征的任何等同物(或其部分),并且應(yīng)當認識到的是,在權(quán)利要求的范圍內(nèi)各種修改是可能的。相應(yīng)地,權(quán)利要求意圖覆蓋所有這樣的等同物。