專利名稱:提供擴展的存儲器保護的制作方法
背景技術(shù):
計算機工業(yè)在過去的若干年中遭受了無數(shù)的安全弱點,并且弱點的數(shù)量繼續(xù)增長著。這些弱點中的多數(shù)已經(jīng)變?yōu)槲<暗绞芄舻臋C器的完整性的攻擊了。許多這些攻擊的根本原因在于生成或者修改代碼時產(chǎn)生的編程錯誤。
若干解決方法已經(jīng)被嘗試。編寫安全代碼的過程已經(jīng)被一些組所運行??煽刂七\行時間環(huán)境(MRTE)在其被使用之處是有效的,但是不包含全部的編程空間。沒有一個所述努力已經(jīng)設(shè)法反轉(zhuǎn)不斷上升的弱點,攻擊和補丁。減少編程錯誤的數(shù)量將導致減少安全弱點的數(shù)量并且提高系統(tǒng)完整性。
一個通常的弱點是緩沖器溢出攻擊。如此攻擊的一個示例發(fā)生在惡意代碼重寫存儲在棧中函數(shù)的返回地址。取決于來自所述函數(shù)的返回,被修改的返回地址被壓棧到指令指針(擴展指令計數(shù)器(EIP)寄存器)。這個被修改的返回地址可能引起惡意代碼和/或棧執(zhí)行錯誤的執(zhí)行。如此的攻擊典型地被不良的編程實踐,例如,未檢查的緩沖器傳輸,所激活。相反地,一個好結(jié)構(gòu)的程序?qū)⒋鎯ζ饔成錇榻Y(jié)構(gòu)化的部分,包括包含程序代碼的文本位置,存儲已初始化和未初始化的全局數(shù)據(jù)的數(shù)據(jù)段,以及被棧和堆分享的部分。所述??梢杂脕泶鎯瘮?shù)調(diào)用的參數(shù)、本地變量和所選擇寄存器的值,例如EIP寄存器函數(shù)。所述堆保存動態(tài)變量。不良的編程實踐可能導致這些段被重寫。
存在未檢的緩沖器可以駐留于那里的其他位置。如此位置的一個示例是緩沖器溢出到堆存儲器。堆存儲器是從共有的存儲池分配的并且被程序用來存儲變量和其他運行時間數(shù)據(jù)的存儲器。
因而存在提供更多免于安全弱點的保護的需要。
附圖的簡要說明
圖1是根據(jù)本發(fā)明的實施例的檢查存儲器訪問的方法的流程圖;圖2是根據(jù)本發(fā)明的實施例的可以被使用的緩沖器的方塊圖;圖3是根據(jù)本發(fā)明的實施例的不同的管線結(jié)構(gòu);圖4是根據(jù)本發(fā)明的一個實施例的方法的流程圖;
圖5是根據(jù)本發(fā)明的另一個實施例的方法的流程圖;圖6是根據(jù)本發(fā)明的一個實施例的系統(tǒng)的方塊圖。
發(fā)明的詳細描述本發(fā)明的實施例提供一種標記存儲器位置為不可訪問的機制。如果程序嘗試去訪問受保護的存儲器位置,所述機制可以發(fā)出一個存儲器訪問干擾的信號。也就是說,根據(jù)本發(fā)明實施例的存儲器保護可以提供與所述存儲器位置相關(guān)聯(lián)的合適大小的斷點??梢酝ㄟ^標記所述位置對某種類型的操作是不可操作的來保護所述位置。于是,更多的安全操作發(fā)生。
在不同的實施例中,屬性位被定義為提供存儲器位置的保護。這些位指示訪問是否可以被準許以進行讀或者寫操作。這些屬性可以通過提供在變量上的訪問控制,提供擴展存儲器保護(EMP),在一些實施例中所述變量可以被定義為存儲器的32個位。由EMP激活編譯器所生成的程序?qū)⒃O(shè)置所述變量去提供支持的正確等級。通過不設(shè)置任何這些屬性位,傳統(tǒng)程序可以無縫地操作。
可以理解的是存儲器保護的特性可以是結(jié)構(gòu)特定的。所述選擇可以包括,例如,被提供的訪問保護類型讀保護,寫保護,執(zhí)行保護,或者所有這三種的一些混合選擇;每一屬性位所覆蓋的地址范圍;別名或者與其他屬性相一致的能力;可操作地址空間虛擬的或者物理的;以及將地址轉(zhuǎn)化為相應(yīng)的保護值的保護移動處理。
在一個實施例中,基于讀/寫的限制定義四個狀態(tài),每個用一位表示。這些狀態(tài)可以相應(yīng)于具有被稱作未分配(unallocated),未激活(uninitialized),激活(initialized),和鎖定(locked)的四個狀態(tài)的緩沖器使用模型。這個模型可以被分別映射到下述狀態(tài),no_read-no_write;no_read-write_ok;read_okay-write_ok;和read_ok-no_write。例如,no_read-no_write狀態(tài)可以通過設(shè)置讀和寫保護位而被定義。如果讀或者寫發(fā)生在具有那些保護位設(shè)置的位置,如此的異??梢员簧?。
EMP信息可以被保持在主存儲器中并且可以直接對應(yīng)于所述機器中的每個可尋址的存儲器部件。即,每個可尋址的存儲器部件可以具有與其相關(guān)聯(lián)的一組EMP屬性。EMP信息可以被處理為存儲器中的屬性頁。這些頁在所述程序的虛擬地址空間中是不可訪問的,但是改為可以由特殊的指令進行訪問。所述屬性位可以在每次存儲器訪問上被檢查。如果所述位指示限制訪問位置,存儲器訪問干擾被生成。
在虛擬存儲器分頁系統(tǒng)中,程序在邏輯地址空間中制造存儲器基準。所述邏輯地址接著通過分段被變換為線性或者虛擬地址。最終,處理器的分頁機制將虛擬地址轉(zhuǎn)化為相應(yīng)于所述數(shù)據(jù)被存儲在物理存儲器中的位置的物理地址。如果基于EMP的虛擬地址被執(zhí)行或者激活,所述處理器把來自所述虛擬地址的附加轉(zhuǎn)化制成存儲在單獨的EMP物理地址空間中的EMP限制記錄。
現(xiàn)在參考圖1,其表示根據(jù)本發(fā)明的實施例的檢查存儲器訪問的方法的流程圖。如圖1所示,數(shù)據(jù)訪問要求10被接收到處理器中,數(shù)據(jù)訪問要求10包括虛擬地址,訪問大小和訪問類型(例如,read(R)或者write(W)操作)。所述虛擬地址信息被提供到頁轉(zhuǎn)化機制20和EMP轉(zhuǎn)化機制30。這些轉(zhuǎn)化機制將來自數(shù)據(jù)訪問要求10的虛擬地址信息轉(zhuǎn)化為物理地址空間。
如圖1所示,通過頁轉(zhuǎn)化機制20獲得的物理地址被提供到邏輯操作器25,其將物理地址與操作類型結(jié)合以訪問物理存儲器50中的數(shù)據(jù)。更特別地,使用獲得的物理地址,在數(shù)據(jù)頁60之中的所需數(shù)據(jù)65可以被訪問。
然而,在能夠訪問所需數(shù)據(jù)65之前,在于其中EMP被激活的實施例中,可以首先決定是否數(shù)據(jù)65的存儲器位置是允許被訪問的。例如,如果EMP被激活并且對所要求的數(shù)據(jù)65的訪問被限制,讀或者寫操作可以被阻止。
也就是說,來自數(shù)據(jù)訪問要求10的虛擬地址信息被提供到EMP轉(zhuǎn)化機制30,在那里所述虛擬地址被轉(zhuǎn)化為相應(yīng)于EMP或者存儲于EMP頁70(與數(shù)據(jù)頁60相關(guān)聯(lián))的限制記錄75(與數(shù)據(jù)65相關(guān)聯(lián))的物理地址。被訪問的EMP記錄75被提供到EMP檢查機制40,在那里可以決定到被要求的數(shù)據(jù)65的訪問是否被允許。例如,EMP記錄75的一個或者多個位可以指示到相應(yīng)的被要求數(shù)據(jù)65的訪問不被允許。如果這樣的訪問不被允許EMP檢查機制40可以在信號線45上生成EMP保護干擾(EPV)。據(jù)此,到數(shù)據(jù)65的訪問被阻止。
如此如果EMP寫保護為了特定虛擬地址而設(shè)置并且存在到那個地址的數(shù)據(jù)寫嘗試,所述處理器可以提升EMP保護干擾(EPV)異常。EMP讀保護在數(shù)據(jù)讀訪問上具有相同的效果。在一些實施例中,歸因于代碼取回的存儲器讀可能不被認為是數(shù)據(jù)讀訪問。在不同的實施例中,EMP異常處理器可以被用于以安全方式從保護干擾恢復。
在不同的實施例中,EMP限制的檢查是混合診斷特權(quán)級。即,如果EMP寫保護被設(shè)置到特定存儲器位置,所有到那個位置的寫嘗試將導致EPV異常而不管當前程序的特權(quán)級。在這些實施例中,所有頁限制必需還要滿足成功的基準。EMP異常不發(fā)生,如果所述頁等級保護不允許在當前特權(quán)級的訪問。
EMP標志可以被包含在處理器控制結(jié)構(gòu),例如控制寄存器(例如,控制寄存器4(CR4))之中。在一些實施例中,EMP標志的默認設(shè)置是零(cleared),意味著不存在用于任何數(shù)據(jù)訪問的EMP限制檢查,當所述EMP限制檢查是全局未激活的,沒有讓所述處理器在每一數(shù)據(jù)訪問的虛擬地址上執(zhí)行EMP地址轉(zhuǎn)化的需要。為了激活EMP限制檢查,所述EMP標志可以被設(shè)置為1。
所述EMP物理地址空間對虛擬地址空間中的軟件程序是不可視的。據(jù)此,操作系統(tǒng)(OS)可以阻止通過規(guī)則的分頁機制暴露EMP物理地址。為了修改EMP限制屬性,軟件程序可以使用指令去改變所述存儲器屬性,例如移動存儲器限制(例如,MOVMR指令),其可以將所述存儲器屬性(EMP限制記錄)移動到物理空間中的EMP存儲器中。
所述EMP保護干擾(EPV)可以具有它自己的異常向量標識符(ID)。所述處理器提升EPV異常,如果數(shù)據(jù)訪問失敗于所述EMP限制檢查。另外,EPV異常也可以在MOVMR指令期間被提升。EPV可以被認為是指令執(zhí)行錯誤。所述結(jié)果的中斷是準確的并且阻止所述指令執(zhí)行。
當所述EPV異常出現(xiàn),它將錯誤代碼放置在當前棧上。所述錯誤代碼可以包括多個錯誤狀態(tài)位。在所述錯誤代碼中的每個位可以被用于指示所述EPV異常的不同的原因。當EPV出現(xiàn),被所述EMP轉(zhuǎn)化或者限制檢查所激活的資源虛擬地址被存儲在特定的位置中,例如,在控制寄存器(例如,CR2)之中。
在不同的實施例中,如此的EMP機制可以以不同的方式被使用以增加系統(tǒng)完整性。當一些實施例可以保護棧變量和參數(shù),和堆變量的時候,可以理解的是本發(fā)明的范圍并不被如此地限制。
在接下來的示例中,使用在虛擬地址模型上的字節(jié)大小的離散寫保護。在如此的實施例中,為了可尋址數(shù)據(jù)(在虛擬地址空間中)的每一字節(jié),存在與之相關(guān)聯(lián)的寫保護屬性位。如果這個位被設(shè)置,任何寫入這個位置的嘗試可能引起結(jié)構(gòu)的異常。對于每一虛擬地址頁,所述操作系統(tǒng)(OS)可以分配保護記錄,例如在分離的虛擬存儲器位置中的相應(yīng)大小(例如,1位每字節(jié))的向量。在一個實施例中,每一EMP限制記錄描述對于虛擬地址的32位(4字節(jié))的數(shù)據(jù)訪問限制。如果數(shù)據(jù)訪問覆蓋多重4字節(jié)數(shù)據(jù)塊,多重EMP限制記錄可以被使用。這個向量在物理存儲器中的位置可以通過保護移動機制而被提供。在一個實施例中,這個機制可以與頁移動機制相似,以到向量基礎(chǔ)地址的最后進入指針,替代所述物理頁。在另一個實施例中,包括以軟件幫助的哈希表的不同的轉(zhuǎn)化方案也是可能的。
雖然在此被描述為字節(jié)大小寫保護,在其他實施例中寫保護和其他保護粒度可以被執(zhí)行。在此限制記錄也可以被認為與向量有關(guān)。向量可以被保護以免于通過規(guī)則的存儲操作的修改。例如,特殊的指令可以被用戶應(yīng)用所使用以修改向量之中的特定位。這個指令可以被認為與“set/clear protection”(“設(shè)置/清除保護”)指令有關(guān)。假設(shè)虛擬地址,所述特殊設(shè)置或者清除指令可以被用于在沒有引起異常的情況下修改適當?shù)膶傩晕弧?br>
所述??梢酝ㄟ^標記關(guān)鍵存儲器位置,例如所述返回地址為不可訪問的,被保護免于緩沖器溢出和其他危險的重寫。例如,編譯器可以在程序的入口之上發(fā)出代碼以標記所述返回地址為不可訪問的。所述程序?qū)L試經(jīng)過給定的變量并且進入所述返回地址的寫,接著利用EMP機制檢測錯誤。所述錯誤可以被報告為存儲器訪問干擾。結(jié)果,所述寫不發(fā)生,并且錯誤處理器可以決定解決所述錯誤的合適方式,不象緩沖器溢出檢測方案,其僅僅在所述緩沖器已經(jīng)被惡化之后檢測溢出。
可以以兩種方式保護所述堆存儲器。未分配或者再分配的存儲器可以被標記為未分配。任何那些位置的參考都將生成錯誤。進一步地,所述堆管理器可以標記關(guān)鍵指針和內(nèi)部變量為不可訪問的。
例如,現(xiàn)在參考圖2,其表示根據(jù)本發(fā)明的實施例的可以被使用的緩沖器方塊圖。所述緩沖器可以處在數(shù)據(jù)堆或者棧結(jié)構(gòu)之中,并且如圖2所示,可以包括多重數(shù)據(jù)塊,其包括x字節(jié)長的第一數(shù)據(jù)塊115和y字節(jié)長的第二數(shù)據(jù)塊125。兩個數(shù)據(jù)塊115和125的每個都具有與之相關(guān)聯(lián)的塊首部。特別地,塊115包括首部110并且塊125包括首部120。另外,首部105被表示為零字節(jié)塊。
在緩沖器溢出攻擊中,惡意代碼重寫所述緩沖器從一個被分配的塊到下一塊并且修改其中的數(shù)據(jù)。為了避免如此的緩沖器溢出,本發(fā)明的實施例可以利用保護記錄來保護每個緩沖器塊的塊首部。例如,圖2的首部105,110,和120每個都可以具有與之相關(guān)聯(lián)的保護指示器,其被設(shè)置去指示這些存儲器位置對于寫和/或讀操作是不可訪問的。這些保護指示器可以被存儲在一個或者多個保護向量或者記錄中,例如,圖1的EMP記錄75。
為了最小化由于對保護信息的額外存儲器訪問的執(zhí)行損失,保護高速緩存和保護轉(zhuǎn)化后備緩沖器(PTLB)可以被包含在存儲器管線中?,F(xiàn)在參考圖3,其表示根據(jù)本發(fā)明的實施例的不同管線結(jié)構(gòu)的方塊圖。如圖3所示,微處理器200可以包括不同的處理器資源去激活保護數(shù)據(jù)的存儲和檢查。
在圖3的實施例中,處理器200可以包括被用來存儲放置于物理存儲器中的EMP記錄的子集的保護緩沖器210。以這樣一種方式,這些最近或者最頻繁的被訪問保護記錄可以被快速地獲得,而不需要從存儲器分級系統(tǒng)獲得所述信息的潛在擊中時間。
進一步如圖3所示,數(shù)據(jù)轉(zhuǎn)化后備緩沖器(DTLB)220被表示為存儲數(shù)據(jù)地址轉(zhuǎn)化的副本。相似地,PTLB 230被表示為存儲從虛擬地址到最近被訪問的保護記錄的物理地址的轉(zhuǎn)化。這些結(jié)構(gòu)210,220和230的每一個都被耦合去接收例如,相應(yīng)于存儲操作的虛擬地址。物理存儲器270被耦合到這些管線結(jié)構(gòu)。在不同的實施例中,可以以類似于用于分頁函數(shù)的微體系結(jié)構(gòu)設(shè)計所述EMP結(jié)構(gòu)。在一些實施例中,用于EMP和分頁的電路可以被共享。
保護高速緩存210包括具有保護向量的高速緩存線的數(shù)據(jù)部分。當每條高速緩存線的長度是明確執(zhí)行的時,所述長度可以是數(shù)據(jù)高速緩存線的大小的倍數(shù)以簡化分離地址的操作。代替使用所述保護向量地址作為查找標識符,自所述管線中接收的存儲操作的原始虛擬地址可以被用于訪問保護高速緩存210的標識符隊列。所述保護向量高速緩存線的地址被存儲在高速緩存中作為地址檢驗數(shù)據(jù)。伴隨著這種結(jié)構(gòu),高速緩存查找可以同時發(fā)生在DTLB和PTLB查找中,或者所述存儲要求的虛擬地址一變?yōu)橛行龈咚倬彺娌檎揖桶l(fā)生。
DTLB 220連同保護激活信號,被耦合以提供地址頁到保護高速緩存210。相似地,DTLB 220提供保護激活信號到PTLB 230。
來自DTLB 220和PTLB 230的結(jié)果可以通過比較所述結(jié)果和所述地址檢查數(shù)據(jù),被用于限制所述高速緩存查找結(jié)果。除發(fā)送地址到高速緩存210之外,DTLB 220或者PTLB 230可能禁止所述高速緩存查找結(jié)果。在如此的高速緩存中,所述高速緩存結(jié)果由于沒有從那里驅(qū)動的輸出而被舍棄。所述查找結(jié)果例如,在DTLB或者PTLB丟失,頁等級保護查找禁止(DTLB/PTLB),和處理器狀態(tài)保護查找禁止的時候被禁止。
如果所述虛擬地址相應(yīng)于要求存在于PTLB 230中,所述EMP記錄的物理地址連同PTLB命中信號,被提供到保護高速緩存210。類似用于頁移動的TLB,PTLB 230可以被用于加速保護移動的過程。并且,類似于用于頁移動的TLB,PTLB230可以被明確的執(zhí)行。例如,其可以是單個或者多重等級TLB,其可以支持一個或者多個移動樹型定義,并且也可以利用有軟件幫助的哈希表。
PTLB查找可以開始于引入存儲操作的虛擬頁地址,其可以與DTLB查找同時進行。PTLB 230的數(shù)據(jù)輸出是用于相應(yīng)頁的保護記錄的物理開始。所述PTLB將發(fā)送這個地址并且命中(或者激活)信號到保護高速緩存210。當DTLB220已經(jīng)激活用于那個頁的保護的時候,所述PTLB輸出僅僅在DTLB命中上是相關(guān)的。使用連同來自DTLB 220和PTLB 230的信息一起被接收的虛擬地址,保護高速緩存210可以決定所述被要求的EMP記錄是否存在。如此的信號虛擬地址可以被用于獲得對所述存儲要求(例如,存儲器中的信息)的物理地址的轉(zhuǎn)化以及相應(yīng)于所述存儲要求的EMP記錄的物理地址。
如果所述高速緩存查找輸出未被舍棄,并且所有相應(yīng)于所述存儲要求的保護位被高速緩存在它的結(jié)構(gòu)之中,高速緩存命中發(fā)生。除報告所述高速緩存命中之外,保護高速緩存210可以在所有被所述存儲要求覆蓋的保護位上執(zhí)行邏輯“OR”操作。也就是說,除了高速緩存物理地址轉(zhuǎn)化,保護高速緩存210利用存儲大小信息的字節(jié)屏蔽指示,執(zhí)行位索引。如果所述結(jié)合保護被設(shè)置,寫訪問干擾可以被生成(圖3的“Write Protected”(寫保護)信號),導致軟件可視例外,例如,EPV。如此結(jié)合的物理地址可以被用于檢查與存儲器位置相關(guān)聯(lián)的存儲器保護。
如果替換命中發(fā)生并且所述被要求數(shù)據(jù)不是保護的主體,保護高速緩存210輸出允許信號(圖3的“Write Permitted”(寫允許)信號),指示所述訪問可能發(fā)生。
如果所述高速緩存查找輸出未被舍棄,但是所述存儲地址未在所述高速緩存標識符隊列中,或者所述檢查地址與DTLB/PTLB輸出不匹配,那么高速緩存丟失發(fā)生。結(jié)果,保護高速緩存210可以通過發(fā)送丟失信號到PTLB 230來要求連同關(guān)于所述存儲數(shù)據(jù)的必需的地址信息一起的填充操作。PTLB 230可以接著啟動在存儲器270的相應(yīng)保護記錄275中被要求的高速緩存線的存儲器讀。所述存儲操作接著將在完成所述高速緩存填充后(發(fā)生在線280上)重訪問所述存儲器管線。
如果PTLB查找失敗并且保護為所述被要求頁所激活,PTLB丟失發(fā)生。如果丟失發(fā)生在PTLB 230中(例如,沒有到被要求的EMP記錄275的物理地址的轉(zhuǎn)化存在),PTLB丟失信號被生成并且被發(fā)送到保護丟失處理器(PMH)240。PMH 240可以與頁丟失處理器類似地操作以引起保護頁移動去獲得相應(yīng)于所需EMP記錄的物理地址。PMH 240執(zhí)行具有所述原始要求地址的保護移動。
如此所示,PMH 240啟動頁移動,在其中不同的頁表可以被訪問以獲得所需物理地址并且提供其到PTLB 230以存儲。在圖3所示的實施例中,三級分頁結(jié)構(gòu)被表示為包括第一份頁結(jié)構(gòu)252,第二分頁結(jié)構(gòu)254,和第三分頁結(jié)構(gòu)256。如此的頁表可以相應(yīng)于64位虛擬地址,包括頁映射等級4(PML4)表,頁目錄指針表,和頁目錄。據(jù)此,PMH 240可以提供在頁表之中的入口到PTLB 230。輪流地這個入口可以連同由保護高速緩存210提供的字節(jié)偏移量,被用于訪問物理存儲器270之中的所需EMP記錄275。
當然,實際的保護移動狀態(tài)機取決于所述保護移動算法的結(jié)構(gòu)選擇。依據(jù)所述保護移動的完成,PTLB 230可以自動地啟動用于當前存儲操作的所需標準高速緩存線的高速緩存填充操作。如上所述,所述存儲操作可以在所述高速緩存填充操作完成之后被重試。據(jù)此,PMH 240可以提供頁表之中的入口給PTLB230。輪流地這個入口可以連同由保護高速緩存210提供的字節(jié)偏移量一起,被用于訪問物理存儲器270之中的所需EMP記錄275。
在一些實施例中,PTLB入口可以通過明確的命令或者容量置換而被替代。當所述相應(yīng)的高速緩存線不需要被刷新的時候,因為PTLB命中是高速緩存命中的首要條件,如此的刷新可以提升高速緩存的效率。雖然表示的是圖3實施例中的特定結(jié)構(gòu),在其他的實施例中,高速緩存210,DTLB 220,和PTLB 230可以被結(jié)合在單個的存儲器結(jié)構(gòu)之內(nèi)。
現(xiàn)在參考圖4,其表示根據(jù)本發(fā)明的一個實施例的方法的流程圖。如圖4所示,方法300可以被用于提供存儲器保護到特定的存儲器位置。方法300可以通過接收設(shè)置的保護指令而開始(方塊310)。如此的指令可以通過編譯器發(fā)出以激活指定的存儲器位置的保護,就像緩沖器首部以阻止緩沖器溢出攻擊。
接下來,可以決定所需保護(例如,讀或者寫保護)的類型以及被保護的存儲器的位置(方塊320)。例如,所述棧中緩沖器首部的位置可以被決定。使用這個位置信息,相應(yīng)于所述存儲器位置的保護記錄可以被訪問(方塊330)。例如,這個保護記錄可以被存儲于系統(tǒng)存儲器的分離的保護頁中。最終,在所述保護記錄之中的位可以被設(shè)置為相應(yīng)于所述存儲器位置(方塊340)。作為示例,保護記錄可以是具有八位的向量,每個都相應(yīng)于存儲器四字節(jié)段。據(jù)此,相應(yīng)于包括緩沖器首部的四字節(jié)塊的給定位可以據(jù)此被設(shè)置。
現(xiàn)在參考圖5,其表示使用如圖3所示的附加管線結(jié)構(gòu)的擴展存儲器保護實現(xiàn)的流程圖。如圖5所示,方法400可以經(jīng)由接收存儲操作(方塊410)而開始。所述存儲操作的虛擬地址可以被應(yīng)用于保護高速緩存和TLB(例如,DTLB和PTLB)(方塊420)。
接下來,決定是否存在保護TLB丟失(菱形430)。如果如此,保護頁丟失發(fā)生并且保護頁移動機制可以被執(zhí)行(方塊440)。如果保護TLB命中或者依據(jù)所述頁移動的完成,接下來可以決定是否存在保護高速緩存命中(菱形445)。如果沒有,高速緩存填充操作可以被執(zhí)行(方塊450),并且控制返回到方塊420。正如上面所討論的,所述高速緩存填充可以從系統(tǒng)存儲器獲得所需保護記錄并且將它提供到所述保護高速緩存。
如果改為在菱形445處具有保護高速緩存命中,所述存儲操作的保護狀態(tài)可以被決定(方塊460)。例如,所述保護緩存或者其他結(jié)構(gòu)可以執(zhí)行邏輯操作去決定一個或者多個相應(yīng)于所述存儲操作的命中是否被設(shè)置,以指示被保護的狀態(tài)。如此,可以決定相應(yīng)于所述存儲操作的地址是否被保護(菱形470)。如果沒有,所述操作可以被允許(方塊480)。如果改為所述地址被保護,存儲器訪問干擾可以被以信號通知(方塊490)。
在一些實施例中,依照本發(fā)明的實施例的EMP可以提供硬件中的運行時間檢查,其作為減小來自編程錯誤的災(zāi)難性后果并且確保具有暴露錯誤的程序的可控終止的方法。如此,更好的調(diào)試探測和驗證可以提高代碼釋放之前錯誤的探測和覆蓋。
EMP機制可以為了意外行為而檢查程序。作為示例,如此的檢查可以包括為了越過變量端到未分配的存儲器位置,以及到未啟動的存儲器位置的訪問的檢查。所述檢查不被限定在特定的語言和子程序中。另外,EMP機制可以被用來通過保護關(guān)鍵數(shù)據(jù)而保持,例如所述堆的關(guān)鍵組合塊的完整性。
以這種方式,通過提供微結(jié)構(gòu)支持,存儲器保護能以對流水線通用處理器中的存儲器管線的標準路徑發(fā)生最小的影響來實現(xiàn)。據(jù)此,如此保護的執(zhí)行總開銷遠遠少于基于重寫探測機制的軟件。
如此,軟件的完整性可以被提高。作為一個應(yīng)用方案,在所述堆和棧結(jié)構(gòu)中的增強的緩沖器溢出探測可以被實現(xiàn)。在所述數(shù)據(jù)堆的上下環(huán)境中,堆管理器可以使用保護機制去保護每個被分配的緩沖器的塊首部。如果從一個被分配的塊到下一塊嘗試緩沖器溢出攻擊,所述保護機制將探測到它并且阻止所述有害的修改。據(jù)此,緩沖器溢出和其他的重寫攻擊可能被阻止而免于發(fā)生,勝過僅僅在事實發(fā)生之后探測所述攻擊。
用編譯器支持,可以利用根據(jù)本發(fā)明的實施例的存儲器保護減輕軟件弱點。例如,保護記錄的紋理細密的性質(zhì)可以被用于保護其他靜態(tài)結(jié)構(gòu),例如虛擬函數(shù)表指針,免于它們作為執(zhí)行路徑重定向攻擊的部分而被修改。在一些實施例中,硬件canary值也可以被放置于靜態(tài)分配緩沖器的周圍,所述靜態(tài)分配緩沖器可能是溢出的來源。
另外,保護記錄可以被視為調(diào)試斷點的無限制實現(xiàn)。代替被極少有效的調(diào)試寄存器所限制,軟件開發(fā)者將具有滿足要求的同步調(diào)試斷點。據(jù)此,紋理細密的斷點探測可以被實現(xiàn)于整個地址空間。這個探測如此地提供硬件方法去解決某種軟件完整性問題。即,對應(yīng)用中的意外行為的探測可以經(jīng)由斷點覆蓋來獲得,激活新編程方法。
現(xiàn)在參考圖6,其表示根據(jù)本發(fā)明實施例的系統(tǒng)的方塊圖。如圖6所示,所述系統(tǒng)是具有點對點總線結(jié)構(gòu)的多處理器系統(tǒng),例如公用系統(tǒng)接口(CSI)系統(tǒng),并且包括通過點對點互連550耦合的第一處理器570和第二處理器580。第一處理器570包括多處理器核心574a和574b,存儲器控制器集線器(MCH)572和點對點(P-P)接口576和578。相似地,第二處理器580包括相同的部件,即處理器核心584a和584b,MCH582,以及P-P接口586和588。
如圖6所示,MCH的572和582將所述處理器耦合到各自的存儲器,即存儲器532和存儲器534,它們可以是局部連接到各自的處理器的主存儲器的部分。第一處理器570和第二處理器580可以經(jīng)由P-P接口552和554被分別耦合到芯片組590。如圖6中所示,芯片組590包括P-P接口594和598。進一步地,芯片組590包括接口592去耦合具有高效執(zhí)行圖形引擎538的芯片組590。在一個實施例中,加速圖形接口(AGP)總線539可以被用于將圖形引擎538耦合到芯片組590。AGP總線539可以遵照加速圖像接口規(guī)范,修訂版2.0,Inter(英特爾)公司,Santa Clara,California,出版于1998年5月5日。作為選擇,點對點互連539可以耦合這些部件。
反過來,芯片組590可以經(jīng)由接口596被耦合到第一總線516。在一個實施例中,第一總線516可以是由PCI本地總線規(guī)范,制造版本,修訂版2.1,日期1995年6月,所定義的外設(shè)部件互連(PCI)總線或者例如PCI表示總線或者其他第三生成I/O互連總線的總線,盡管本發(fā)明的范圍并不被如此限制。
如圖6所示,不同的輸入/輸出(I/O)裝置514可以連同將第一總線516耦合到第二總線520的總線橋接器518一起,被耦合到第一總線516。在一個實施例中,第二總線520可以是低管腳計數(shù)(LPC)總線,不同的裝置可以被耦合到第二總線520包括,例如,鍵盤/鼠標522,通信裝置526和可以包括代碼530的數(shù)據(jù)存儲單元528,在一個實施例中。進一步地,音頻I/O524可以被耦合到第二總線520。當然,在其他實施例中,可以不同地實現(xiàn)系統(tǒng),例如,單個處理器系統(tǒng)或諸如此類。進一步地,雖然以圖6的特定實現(xiàn)進行表示,本發(fā)明的范圍并不被如此限制并且可以以不同的結(jié)構(gòu)實現(xiàn)EMP。
實施例可以在計算機程序中實現(xiàn),所述計算機程序可以存儲在具有編程計算機系統(tǒng)去執(zhí)行所述實施例的指令的存儲介質(zhì)上。所述存儲介質(zhì)可以包括,但是不限制于此,任何類型的磁盤,包括軟盤,光盤,只讀光盤存儲器(CD-ROM),可重寫光盤(CD-RW),和磁光盤,半導體裝置例如只讀存儲器(ROM),隨機訪問存儲器(RAM)例如動態(tài)和靜態(tài)RAM,可擦可編程只讀存儲器(EPROM),電可擦可編程只讀存儲器(EEPROM),閃存,磁或者光卡,或者任何類型的適合于存儲電子指令的介質(zhì)。其他實施例可以被實現(xiàn)為由可編程控制裝置執(zhí)行的軟件模塊。
雖然已經(jīng)結(jié)合有限數(shù)量的實施例描述了本發(fā)明,那些本領(lǐng)域的技術(shù)人員將理解許多來自其中的修改和變化。其意味著所附權(quán)利要求覆蓋所有那些落入本發(fā)明的實質(zhì)精神和范圍的修改和變化。
權(quán)利要求
1.一種方法,包括將保護記錄的保護指示器與存儲器位置相關(guān)聯(lián),所述保護記錄不可經(jīng)由虛擬地址空間訪問;并且基于所述保護指示器的狀態(tài)阻止訪問所述存儲器位置。
2.如權(quán)利要求1的方法,進一步包括在遠離所述存儲器位置的第二存儲器位置中存儲所述保護記錄。
3.如權(quán)利要求1的方法,進一步包括如果所述訪問被阻止,發(fā)出存儲器訪問干擾(violation)的信號。
4.如權(quán)利要求1的方法,進一步包括分配所述保護記錄到虛擬地址頁。
5.如權(quán)利要求1的方法,進一步包括在第一緩沖器中存儲所述保護記錄的副本。
6.如權(quán)利要求5的方法,進一步包括決定是否相應(yīng)于所述保護記錄地址的轉(zhuǎn)化存在于第二緩沖器。
7.如權(quán)利要求1的方法,進一步包括設(shè)置相應(yīng)于緩沖器首部的保護指示器。
8.如權(quán)利要求7的方法,進一步包括利用所述保護記錄阻止緩沖器溢出攻擊。
9.如權(quán)利要求1的方法,進一步包括將所述存儲器位置的虛擬地址轉(zhuǎn)化為用于所述存儲器位置的第一物理地址和用于所述保護記錄的第二物理地址。
10.如權(quán)利要求9的方法,進一步包括結(jié)合所述第一物理地址和所述第二物理地址以決定所述存儲器位置的保護狀態(tài)。
11.一種設(shè)備,包括第一存儲器,存儲保護向量的副本,其中所述保護向量指明了第二存儲器部分的保護狀態(tài);以及第一緩沖器,其耦合于所述第一存儲器,所述第一緩沖器存儲虛擬地址和相應(yīng)的物理地址之間轉(zhuǎn)化,所述第一緩沖器生成命中信號和丟失信號。
12.如權(quán)利要求11的設(shè)備,進一步包括保護丟失處理器,其接收所述丟失信號并且從所述第二存儲器獲得用于所述第一存儲器中的存儲的所請求保護向量。
13.如權(quán)利要求11的設(shè)備,進一步包括耦合于所述第一存儲和所述第一緩沖器的第二緩沖器,所述第二緩沖器存儲虛擬地址和所述第二存儲器的相應(yīng)部分的物理地址之間的轉(zhuǎn)化,其中所述第一緩沖器的轉(zhuǎn)化包括至少一個所述保護記錄的物理地址。
14.如權(quán)利要求13的設(shè)備,其中所述第一緩沖器和所述第二緩沖器由單個存儲器結(jié)構(gòu)組成。
15.如權(quán)利要求11的設(shè)備,其中所述第一存儲器包括高速緩存,如果所述第二存儲器的位置被保護,其生成保護信號。
16.如權(quán)利要求11的設(shè)備,其中所述第一存儲器將在保護向量的一個或者多個副本上執(zhí)行邏輯操作,以決定存儲要求的地址的保護狀態(tài)。
17.如權(quán)利要求11的設(shè)備,其中所述第二存儲器的部分包括在所述第二存儲器中的緩沖器的至少一個緩沖器首部。
18.如權(quán)利要求11的設(shè)備,所述第二存儲器包括保護頁,所述保護頁包括保護向量,所述保護頁分割自所述第二存儲器的數(shù)據(jù)頁。
19.一種包括存儲表示集成電路的數(shù)據(jù)的機器可讀存儲介質(zhì)的產(chǎn)品,包括第一高速緩存,以高速緩存保護記錄,其中所述保護記錄的每一個將識別系統(tǒng)存儲器的部分的保護狀態(tài);以及轉(zhuǎn)化后備緩沖器,其耦合于所述第一高速緩存,所述轉(zhuǎn)化后備緩沖器為保護記錄存儲虛擬地址和相應(yīng)的物理地址之間的轉(zhuǎn)化。
20.如權(quán)利要求19的產(chǎn)品,其中所述集成電路進一步包括保護丟失處理器,如果所請求的轉(zhuǎn)化不存在于所述轉(zhuǎn)化后備緩沖器,其接收來自所述轉(zhuǎn)化后備緩沖器的丟失信號。
21.如權(quán)利要求19的產(chǎn)品,其中所述第一高速緩存包括邏輯操作器到基于被請求的保護記錄的位索引以及存儲操作大小的指示的字節(jié)屏蔽。
22.如權(quán)利要求19的產(chǎn)品,其中所述集成電路進一步包括耦合到所述第一高速緩存的數(shù)據(jù)轉(zhuǎn)化后備緩沖器。
23.一種系統(tǒng),包括第一存儲器,存儲保護向量的副本,其中所述保護向量標識可訪問存儲器的部分的保護狀態(tài),第一緩存器,其耦合于所述第一存儲器,所述第一緩存器存儲虛擬地址和相應(yīng)的物理地址之間的轉(zhuǎn)化;以及動態(tài)隨機訪問存儲器,其耦合于所述第一存儲器和所述第一緩沖器。
24.如權(quán)利要求23的系統(tǒng),其中所述動態(tài)隨機訪問存儲器包括具有每個都相應(yīng)于所述存儲器緩沖器塊的多個首部的存儲器緩沖器,所述多個首部包括所述可訪問存儲器的一部分。
25.如權(quán)利要求23的系統(tǒng),其中所述動態(tài)隨機訪問存儲器包括棧,其中至少所述棧的一部分包括所述可訪問存儲器的一部分。
26.如權(quán)利要求23的系統(tǒng),其中所述動態(tài)隨機訪問存儲器包括存儲數(shù)據(jù)頁的第一部分和存儲保護頁的第二部分。
27.如權(quán)利要求26的系統(tǒng),其中所述第二部分是不可經(jīng)由虛擬地址空間訪問的。
28.如權(quán)利要求23的系統(tǒng),其中所述第一存儲器包括高速緩存,所述高速緩存生成基于所述保護狀態(tài)的保護信號。
29.如權(quán)利要求28的系統(tǒng),其中所述保護信號將引起存儲器訪問干擾。
30.如權(quán)利要求23的系統(tǒng),其中所述第一緩沖器將第一轉(zhuǎn)化存儲到所述可訪問存儲器的一部分的物理地址并且將第二轉(zhuǎn)化存儲到與所述可訪問的存儲器的一部分相關(guān)聯(lián)的保護向量的物理地址。
全文摘要
在一個實施例中,本發(fā)明提供用于系統(tǒng)的存儲器的擴展存儲器保護。所述實施例包括將保存在應(yīng)用的數(shù)據(jù)空間外面的保護記錄的保護指示器與存儲器位置相關(guān)聯(lián),并且基于所述保護指示器的狀態(tài)阻止訪問所述存儲器位置的方法。如此,提供更安全操作,將阻止像惡意代碼或者其他不良制品不能訪問受保護的存儲器位置。其他的實施例被描述和要求。
文檔編號G06F12/08GK1877547SQ20061008416
公開日2006年12月13日 申請日期2006年3月31日 優(yōu)先權(quán)日2005年3月31日
發(fā)明者A·程, F·麥克金 申請人:英特爾公司