軟件實施錯誤,例如遺漏或不正確輸入驗證,可導(dǎo)致越界緩沖區(qū)存取和內(nèi)存損壞。這些實施錯誤可導(dǎo)致軟件在正常條件下變得不穩(wěn)定或最終失效。然而,當(dāng)輸入由意圖攻擊計算機(jī)系統(tǒng)的惡意方操控時,攻擊者可利用這些內(nèi)存損壞和溢出錯誤來改變軟件代碼的預(yù)期行為,并執(zhí)行由攻擊者確定的代碼或功能。
攻擊者通常通過覆寫在存儲器中的數(shù)據(jù)結(jié)構(gòu)(例如返回解決、函數(shù)指針或虛表指針)取得對執(zhí)行的控制。在大型和傳統(tǒng)的代碼庫中發(fā)現(xiàn)和修理全部可利用的內(nèi)存損壞錯誤并不總是可能的。因此,許多計算機(jī)系統(tǒng)含有被稱作“攻擊緩解機(jī)制”的一般防御特征,其有效地對抗攻擊者用來利用這些錯誤取得對目標(biāo)計算機(jī)系統(tǒng)的控制和/或破壞目標(biāo)計算機(jī)系統(tǒng)的熟知技術(shù)。
通常包含于計算機(jī)系統(tǒng)中的攻擊緩解機(jī)制的一些實例包含:數(shù)據(jù)執(zhí)行防止(DEP)、堆棧保護(hù)(SP)和地址空間布局隨機(jī)化(ASLR)。在DEP技術(shù)中,全部代碼區(qū)被標(biāo)記為只讀,并且全部可寫入?yún)^(qū)域不可執(zhí)行。通常,代碼區(qū)的只讀特性和可寫入?yún)^(qū)的不可執(zhí)行特性通過處理器的內(nèi)存管理單元(MMU)強(qiáng)制執(zhí)行。此技術(shù)可防止攻擊者將其自己的代碼放置到數(shù)據(jù)區(qū)中并引導(dǎo)執(zhí)行流到那一代碼。在SP方法中,編譯程序?qū)嵤┯糜跈z測堆棧上的緩沖區(qū)溢出。由于就在局部數(shù)組后的堆棧上經(jīng)常存在返回地址或所保存的鏈接寄存器,所以基于堆棧的緩沖區(qū)溢出會很容易被利用。攻擊者可使局部數(shù)組溢出并覆寫返回地址/鏈接寄存器,且重新引導(dǎo)軟件的執(zhí)行流。許多常規(guī)堆棧保護(hù)實施方案插入保護(hù)值到函數(shù)序言中的堆棧上,并且在從那個函數(shù)返回之前,檢查那個值的修改。如果已發(fā)生緩沖區(qū)溢出,那么保護(hù)值連同返回地址將已經(jīng)被覆寫,因為保護(hù)值位于緩沖區(qū)和返回地址之間的堆棧中。保護(hù)值必須是隨機(jī)和/或不可預(yù)測的值,以確保SP方法的安全。在ASLR方法中,應(yīng)用程序的內(nèi)存布局可在每次執(zhí)行時隨機(jī)化。例如,可隨機(jī)確定用于代碼、靜態(tài)數(shù)據(jù)、堆棧和堆的基地址。此方法使得利用難以進(jìn)行,因為攻擊者需要預(yù)測他們需要瞄準(zhǔn)/操控以進(jìn)行成功攻擊的代碼/數(shù)據(jù)/指針的位置。
技術(shù)實現(xiàn)要素:
根據(jù)本發(fā)明的用于保護(hù)與處理器相關(guān)的堆棧的內(nèi)容的實例方法包含:從通過處理器執(zhí)行的軟件程序接收存儲指令,所述存儲指令包含與子例程相關(guān)的控制信息;響應(yīng)于從軟件程序接收存儲指令,更改控制信息以產(chǎn)生受保護(hù)的控制信息;在堆棧上存儲受保護(hù)的控制信息;從軟件程序接收加載指令;以及響應(yīng)于從軟件程序接收加載指令,從堆棧加載受保護(hù)的控制信息,更改受保護(hù)的控制信息以恢復(fù)控制信息,和將控制信息返回到軟件程序。
這種方法的實施方案可包含以下特征中的一或多者。更改控制信息以產(chǎn)生受保護(hù)的控制信息包含加密控制信息以產(chǎn)生受保護(hù)的控制信息。加密控制信息以產(chǎn)生受保護(hù)的控制信息包含使用基于分塊密碼的消息認(rèn)證碼算法加密控制信息。加密控制信息以產(chǎn)生受保護(hù)的控制信息包含使用與當(dāng)前堆棧幀相關(guān)的密鑰加密控制信息,所述當(dāng)前堆棧幀與子例程相關(guān)。更改受保護(hù)的控制信息以恢復(fù)控制信息包含解密受保護(hù)的控制信息以恢復(fù)控制信息。更改控制信息以產(chǎn)生受保護(hù)的控制信息包含添加認(rèn)證標(biāo)簽到控制信息以產(chǎn)生受保護(hù)的控制信息。認(rèn)證標(biāo)簽與當(dāng)前堆棧幀相關(guān),所述當(dāng)前堆棧幀與子例程相關(guān)。更改受保護(hù)的控制信息以恢復(fù)控制信息包含從受保護(hù)的控制信息導(dǎo)出幀指針和返回地址。更改受保護(hù)的控制信息以恢復(fù)控制信息包含應(yīng)用消息認(rèn)證碼到幀指針和返回地址以產(chǎn)生標(biāo)簽值,以及比較標(biāo)簽值與包含于受保護(hù)的控制信息中的認(rèn)證標(biāo)簽來驗證控制信息在堆棧上時未被更改。
根據(jù)本發(fā)明的用于保護(hù)與處理器相關(guān)的堆棧的內(nèi)容的實例處理器包含用于從正通過處理器執(zhí)行的軟件程序接收存儲指令的裝置,所述存儲指令包含與子例程相關(guān)的控制信息,用于更改控制信息以響應(yīng)于從軟件程序接收存儲指令產(chǎn)生受保護(hù)的控制信息的裝置、用于在在堆棧上存儲受保護(hù)的控制信息的裝置、用于從軟件程序接收加載指令的裝置;以及響應(yīng)于從軟件程序接收加載指令,用于從堆棧加載受保護(hù)的控制信息的裝置、用于更改受保護(hù)的控制信息以恢復(fù)控制信息的裝置,和用于將控制信息返回到軟件程序的裝置。
這種處理器的實施方案可包含以下特點中的一或多者。用于更改控制信息以產(chǎn)生受保護(hù)的控制信息的裝置包含用于加密控制信息以產(chǎn)生受保護(hù)的控制信息的裝置。用于加密控制信息以產(chǎn)生受保護(hù)的控制信息的裝置包含用于使用基于分塊密碼的消息認(rèn)證碼算法加密控制信息的裝置。用于加密控制信息以產(chǎn)生受保護(hù)的控制信息的裝置包含用于使用與當(dāng)前堆棧幀相關(guān)的密鑰加密控制信息的裝置,所述當(dāng)前堆棧幀與子例程相關(guān)。用于更改受保護(hù)的控制信息以恢復(fù)控制信息的裝置包含用于解密受保護(hù)的控制信息以恢復(fù)控制信息的裝置。用于更改控制信息以產(chǎn)生受保護(hù)的控制信息的裝置包含用于添加認(rèn)證標(biāo)簽到控制信息以產(chǎn)生受保護(hù)的控制信息的裝置。認(rèn)證標(biāo)簽與當(dāng)前堆棧幀相關(guān),所述當(dāng)前堆棧幀與子例程相關(guān)。用于更改受保護(hù)的控制信息以恢復(fù)控制信息的裝置包含用于從受保護(hù)的控制信息導(dǎo)出幀指針和返回地址的裝置。用于更改受保護(hù)的控制信息以恢復(fù)控制信息的裝置包含用于應(yīng)用消息認(rèn)證碼到幀指針和返回地址以產(chǎn)生標(biāo)簽值的裝置,以及用于比較標(biāo)簽值與包含于受保護(hù)的控制信息中的認(rèn)證標(biāo)簽來驗證控制信息在堆棧上時未被更改的裝置。
根據(jù)本發(fā)明的實例系統(tǒng)包含存儲器、用于存儲與一或多個子例程相關(guān)的數(shù)據(jù)的存儲器中的堆棧,以及耦合到存儲器的處理器。處理器經(jīng)配置以執(zhí)行處理器可執(zhí)行指令,所述處理器可執(zhí)行指令經(jīng)配置以使處理器進(jìn)行以下操作:從正通過處理器執(zhí)行的軟件程序接收存儲指令,所述存儲指令包含與子例程相關(guān)的控制信息;響應(yīng)于從軟件程序接收存儲指令,更改控制信息以產(chǎn)生受保護(hù)的控制信息;在堆棧上存儲受保護(hù)的控制信息;從軟件程序接收加載指令;以及響應(yīng)于從軟件程序接收加載指令,處理器經(jīng)配置以從堆棧加載受保護(hù)的控制信息,更改受保護(hù)的控制信息以恢復(fù)控制信息,和將控制信息返回到軟件程序。
這種系統(tǒng)的實施方案可包含以下特征中的一或多者。經(jīng)配置以更改控制信息以產(chǎn)生受保護(hù)的控制信息的處理器進(jìn)一步經(jīng)配置以加密控制信息以產(chǎn)生受保護(hù)的控制信息。處理器經(jīng)配置以使用基于分塊密碼的消息認(rèn)證碼算法加密控制信息。處理器經(jīng)配置以使用與當(dāng)前堆棧幀相關(guān)的密鑰加密控制信息,所述當(dāng)前堆棧幀與子例程相關(guān)。處理器經(jīng)配置以解密受保護(hù)的控制信息,從而恢復(fù)控制信息。經(jīng)配置以更改控制信息以產(chǎn)生受保護(hù)的控制信息的處理器進(jìn)一步經(jīng)配置以添加認(rèn)證標(biāo)簽到控制信息以產(chǎn)生受保護(hù)的控制信息。認(rèn)證標(biāo)簽與當(dāng)前堆棧幀相關(guān),所述當(dāng)前堆棧幀與子例程相關(guān)。經(jīng)配置以更改受保護(hù)的控制信息以恢復(fù)控制信息的處理器進(jìn)一步經(jīng)配置以從受保護(hù)的控制信息導(dǎo)出幀指針和返回地址。經(jīng)配置以更改受保護(hù)的控制信息以恢復(fù)控制信息的處理器進(jìn)一步經(jīng)配置以應(yīng)用消息認(rèn)證碼到幀指針和返回地址以產(chǎn)生標(biāo)簽值,以及比較標(biāo)簽值與包含于受保護(hù)的控制信息中的認(rèn)證標(biāo)簽來驗證控制信息在堆棧上時未被更改。
附圖說明
圖1是其中可實施本文中所論述的基于硬件的堆??刂菩畔⒈Wo(hù)技術(shù)的實例計算機(jī)系統(tǒng)的功能框圖。
圖2是來自圖1的實例計算機(jī)系統(tǒng)的功能框圖,示出了可用于實施本文所揭示的基于硬件的堆??刂菩畔⒓夹g(shù)的控制數(shù)據(jù)認(rèn)證技術(shù)的實施方案。
圖3是來自圖1的實例計算機(jī)系統(tǒng)的功能框圖,示出了可用于實施本文所揭示的基于硬件的堆??刂菩畔⒓夹g(shù)的控制數(shù)據(jù)加密技術(shù)的實施方案。
圖4是用于保護(hù)與處理器相關(guān)的堆棧的內(nèi)容的過程的流程圖,所述處理器可用于實施本文所揭示的基于硬件的堆棧控制技術(shù)。
圖5是用于使用控制數(shù)據(jù)認(rèn)證技術(shù)更改控制信息以產(chǎn)生受保護(hù)的控制信息的過程的流程圖。
圖6是用于在堆棧上存儲受保護(hù)的控制信息的過程的流程圖。
圖7是用于從堆棧加載受保護(hù)的控制信息的過程的流程圖。
圖8是用于確定使用控制數(shù)據(jù)認(rèn)證技術(shù)所產(chǎn)生的受保護(hù)的控制信息在堆棧上時是否已被更改的過程的流程圖。
圖9是用于使用控制數(shù)據(jù)加密技術(shù)更改控制信息以產(chǎn)生受保護(hù)的控制信息的過程的流程圖。
圖10是用于在堆棧上存儲受保護(hù)的控制信息的過程的流程圖。
圖11是用于從堆棧加載受保護(hù)的控制信息的過程的流程圖。
圖12是用于確定使用控制數(shù)據(jù)加密技術(shù)所產(chǎn)生的受保護(hù)的控制信息在堆棧上時是否已被更改的過程的流程圖。
具體實施方式
本文所揭示的技術(shù)經(jīng)配置以提供基于硬件的堆棧控制信息保護(hù)。所述技術(shù)可防止惡意攻擊者修改返回地址(或鏈接寄存器)、幀指針和/或堆棧上的其它控制信息的內(nèi)容,以取得對計算機(jī)系統(tǒng)的控制,或使其上被執(zhí)行的軟件的行為變得不穩(wěn)定。本文所揭示的技術(shù)包含控制數(shù)據(jù)認(rèn)證和控制數(shù)據(jù)加密技術(shù),當(dāng)控制信息使成功更改堆棧上的控制信息更為困難時,所述技術(shù)可用于識別,并且當(dāng)控制信息已被更改時,所述技術(shù)可用于使識別更加容易。
實例硬件
圖1是其中可實施本文中所論述的基于硬件的堆棧控制信息保護(hù)技術(shù)的實例計算機(jī)系統(tǒng)100的功能框圖。本文所揭示的基于硬件的堆棧控制信息保護(hù)技術(shù)可用于防止控制信息(例如,與堆棧115的堆棧幀145相關(guān)的返回地址125和幀指針120)被惡意攻擊者或通過不良寫入的軟件代碼所更改。圖1中所說明的計算機(jī)系統(tǒng)可用于實施圖4到12中所說明的過程。
計算機(jī)系統(tǒng)100包含處理器105和存儲器110。處理器105可為智能裝置,例如,個人計算機(jī)中央處理單元(CPU)(例如由公司或制造的那些)、微控制器、專用集成電路(ASIC)等。存儲器110是可包含隨機(jī)存取存儲器(RAM)和/或其它類型的存儲器的非瞬時性存儲裝置,處理器105可從所述其它類型的存儲器讀取數(shù)據(jù),并且處理器105可寫入數(shù)據(jù)到所述其它類型的存儲器。在一些實施方案中,存儲器110的部分可為只讀存儲器(ROM),所述只讀存儲器可包含可通過處理器105讀取而非更新的軟件指令和/或數(shù)據(jù)。
存儲器110可存儲處理器可讀、處理器可執(zhí)行的軟件代碼,所述軟件代碼含有用于控制處理器105執(zhí)行例如本文所描述的那些的各種函數(shù)的指令(盡管所述描述可讀取到軟件執(zhí)行函數(shù))??赏ㄟ^經(jīng)由網(wǎng)絡(luò)連接下載、從磁盤上傳等將軟件加載到存儲器260上。另外,軟件可能并非可直接執(zhí)行,例如,要求在執(zhí)行之前進(jìn)行編譯。
存儲器110可包含堆棧115。堆棧115是存儲器110中的數(shù)據(jù)結(jié)構(gòu),所述存儲器110可用于存儲與通過處理器105執(zhí)行的一或多個軟件程序中的一或多個活躍的子例程相關(guān)的數(shù)據(jù)。在一些實施方案中,通過處理器105執(zhí)行的每一軟件程序和/或線程可與不同的堆棧115相關(guān)。堆棧115可由一或多個堆棧幀145構(gòu)成。堆棧幀145含有用于尚未通過處理器105終止于返回的子例程的狀態(tài)信息。在堆棧的典型實施方案中,位于堆棧的頂部處的堆棧幀是與當(dāng)前正通過處理器105執(zhí)行的子例程相關(guān)的堆棧幀。堆棧幀145可含有與子例程相關(guān)的信息,例如可能已通過調(diào)用子例程的例程傳遞到那個子例程的任何參數(shù)值,以及可用于控制軟件程序流和其中程序存取數(shù)據(jù)的控制信息。例如,控制信息可包含指向回到與堆棧幀145相關(guān)的子例程的調(diào)用程序的返回地址(RA)125,以及幀指針(FP)120。堆棧幀145還可用于存儲與子例程相關(guān)的其它信息。
返回地址125指向調(diào)用與堆棧幀145相關(guān)的子例程的指令的地址,并且稍后可由處理器105用于在處理器105完成子例程時返回到調(diào)用了所述子例程的調(diào)用指令。
幀指針120指向在與子例程相關(guān)的堆棧幀的開始處的地址,并且在子例程的持續(xù)時間內(nèi)并不改變。處理器105還可經(jīng)配置以保持參考堆棧115的頂部的堆棧指針(SP)(未圖示)。當(dāng)內(nèi)容添加到堆棧中時,堆棧指針的值改變,而幀指針120繼續(xù)指向與堆棧幀相關(guān)的數(shù)據(jù)。幀指針120可用于指向堆棧幀內(nèi)的固定位置,所述固定位置允許幀指針120用作固定的參照點,所述參照點可用于促進(jìn)對與子例程相關(guān)的自變量和/或局部變量的存取,所述子例程與堆棧幀相關(guān)。自變量和/或局部變量的位置可確定為從幀指針120的值的固定偏移。
本文所揭示的技術(shù)可用于幫助防止返回地址125和/或幀指針120被不良寫入代碼或通過對攻擊計算機(jī)系統(tǒng)100的惡意嘗試更改。通過將返回地址覆寫成不同指令的返回地址,惡意方可嘗試將由處理器105執(zhí)行的程序代碼重新引導(dǎo)到不同于調(diào)用子例程的指令的指令。惡意代碼還可更改可用于指向由攻擊者插入到堆棧上的數(shù)據(jù)的幀指針。攻擊者可利用堆棧緩沖區(qū)溢出以將數(shù)據(jù)寫入到堆棧數(shù)據(jù)結(jié)構(gòu)之外的堆棧115,所述堆棧數(shù)據(jù)結(jié)構(gòu)實際上經(jīng)分配以存儲數(shù)據(jù)。如果正通過處理器105執(zhí)行的程序代碼并未檢查來確保被寫入到堆棧的數(shù)據(jù)實際上經(jīng)適當(dāng)?shù)卦O(shè)定大小以用于意圖存儲所述數(shù)據(jù)的緩沖區(qū),那么在堆棧115上數(shù)據(jù)可被損壞,和/或攻擊者可利用這種技術(shù)來修改幀指針120和/或返回地址125以取得對計算機(jī)系統(tǒng)100的控制。本文所揭示的技術(shù)可實施在計算機(jī)系統(tǒng)100的硬件中,以使得更改控制信息(例如幀指針120和返回地址125)更為困難。一些實施方案還可包含在將控制信息返回到通過處理器105執(zhí)行的軟件程序之前,驗證已從堆棧115加載的受保護(hù)的控制信息。
處理器105提供用于在堆棧115上存儲數(shù)據(jù)的裝置(在一個方面,用于在堆棧115上存儲數(shù)據(jù)的裝置是用于將數(shù)據(jù)推送到堆棧115上的裝置)。處理器105還提供用于從堆棧115加載數(shù)據(jù)的裝置(在一個方面,用于從堆棧115加載數(shù)據(jù)的裝置是用于從堆棧115彈出數(shù)據(jù)的裝置)。處理器105還可充當(dāng)用于從正通過處理器105執(zhí)行的軟件程序接收存儲指令和加載指令的裝置。存儲指令還可包含控制信息。處理器105提供用于更改控制信息以產(chǎn)生受保護(hù)的控制信息和用于在堆棧115上存儲受保護(hù)的控制信息的裝置。處理器105還提供用于從堆棧115加載受保護(hù)的控制信息和用于更改受保護(hù)的控制信息以恢復(fù)控制信息的裝置。處理器105還可提供用于加密控制信息以產(chǎn)生受保護(hù)的控制信息和用于解密受保護(hù)的控制信息以恢復(fù)控制信息的裝置。處理器105還可提供用于添加認(rèn)證標(biāo)簽到控制信息以產(chǎn)生受保護(hù)的控制信息的裝置。處理器105還提供用于通過從受保護(hù)的控制信息導(dǎo)出幀指針和返回地址來更改受保護(hù)的控制信息以恢復(fù)控制信息的裝置。處理器105還可提供用于應(yīng)用消息認(rèn)證碼到幀指針和返回地址以產(chǎn)生標(biāo)簽值的裝置,以及用于比較標(biāo)簽值與包含于受保護(hù)的控制信息中的認(rèn)證標(biāo)簽來驗證控制信息在堆棧上時未被更改的裝置。除非另外指定,否則處理器105可提供用于實施圖4到12中所說明的過程的各個階段的裝置。圖4到12在下文中詳細(xì)地論述。
為清楚起見,圖1僅示出了處理器105和存儲器110。計算機(jī)系統(tǒng)100可包含額外元件,例如網(wǎng)絡(luò)接口、輸入/輸出端口和/或輸入輸出裝置、無線接口,和/或此處未示出的其它組件。
圖2是來自圖1的實例計算機(jī)系統(tǒng)100的功能框圖,示出了可用于實施本文所揭示的基于硬件的堆棧控制信息技術(shù)的控制數(shù)據(jù)認(rèn)證技術(shù)的實施方案。在圖2中所說明的控制數(shù)據(jù)認(rèn)證技術(shù)中,產(chǎn)生呈認(rèn)證信息140形式的受保護(hù)的控制信息并存儲在堆棧115上。在圖2中所說明的實施方案中,認(rèn)證信息140已被推送到堆棧上,而不是幀指針120被推送到堆棧上。認(rèn)證信息140可用于驗證受保護(hù)的控制信息在堆棧上時尚未被更改。例如,當(dāng)完成與受保護(hù)的控制信息相關(guān)的子例程時,處理器105可基于從堆棧115加載的返回地址125來產(chǎn)生新的認(rèn)證信息。處理器105可使用用于產(chǎn)生被推送到堆棧115上的認(rèn)證信息140的同一技術(shù)來產(chǎn)生新的認(rèn)證信息。處理器105可比較由從堆棧115彈出的返回地址125所產(chǎn)生的新的認(rèn)證信息與包含于認(rèn)證信息140中的認(rèn)證信息140。如果新的認(rèn)證信息并不匹配來自堆棧的認(rèn)證信息140,那么處理器105可執(zhí)行異常處理例程以暫停正在執(zhí)行的應(yīng)用程序的執(zhí)行,因為返回地址125已被更改或損壞。如果新的認(rèn)證信息匹配認(rèn)證信息140,那么返回地址125尚未被更改或損壞,并且處理器105可繼續(xù)執(zhí)行由返回地址125所指代的指令。圖2中所說明的控制數(shù)據(jù)認(rèn)證技術(shù)的額外細(xì)節(jié)在下文中相對于圖4到12中所說明的過程進(jìn)行論述。
圖3是來自圖1的實例計算機(jī)系統(tǒng)100的功能框圖,示出了可用于實施本文所揭示的基于硬件的堆??刂菩畔⒓夹g(shù)的控制數(shù)據(jù)加密技術(shù)的實施方案。在圖3中所說明的控制數(shù)據(jù)加密技術(shù)中,產(chǎn)生呈加密幀數(shù)據(jù)135形式的受保護(hù)的控制信息,并將其推送到堆棧上。在圖3中所說明的實施方案中,加密幀數(shù)據(jù)135已被推送到堆棧上,而不是幀指針120和返回地址125被推送到堆棧上。加密幀數(shù)據(jù)135可用于驗證受保護(hù)的控制信息在堆棧上時尚未被更改。例如,當(dāng)完成與受保護(hù)的控制信息相關(guān)的子例程時,處理器105可解密加密幀數(shù)據(jù)135以確定加密幀數(shù)據(jù)135在堆棧115上時是否被更改。如果新的加密幀數(shù)據(jù)135在堆棧115上時被更改,那么處理器105可經(jīng)配置以執(zhí)行異常處理例程,從而暫停正在執(zhí)行的應(yīng)用程序的執(zhí)行,因為控制信息已被更改或損壞。如果加密幀數(shù)據(jù)135在堆棧上時未被更改,那么處理器可從已解密的加密幀數(shù)據(jù)135中獲得幀指針120和返回地址125,并且可繼續(xù)執(zhí)行由返回地址125所指代的指令。圖3中所說明的控制數(shù)據(jù)認(rèn)證技術(shù)的額外細(xì)節(jié)在下文中相對于圖4到12中所說明的過程進(jìn)行論述。
實例實施方案
圖4是用于保護(hù)與處理器相關(guān)的堆棧的內(nèi)容的過程的流程圖,所述處理器可用于實施本文所揭示的基于硬件的堆棧控制技術(shù)。圖4中所說明的過程可使用圖1中所說明的計算機(jī)系統(tǒng)100實施。圖1中所說明的實例計算機(jī)系統(tǒng)100提供其中可實施圖4中所說明的過程的一個計算機(jī)系統(tǒng)的一個實例,并且圖4中所說明的過程可通過具有與圖1中所說明的實例不同的架構(gòu)的計算機(jī)系統(tǒng)的處理器實施。
過程可開始于從通過處理器105執(zhí)行的軟件程序接收存儲指令(階段401)。存儲指令可包含與子例程相關(guān)的控制信息,軟件程序想要將所述控制信息存儲在堆棧115上。參考圖1中所說明的實例計算機(jī)系統(tǒng),處理器105可經(jīng)配置以響應(yīng)于接收從軟件程序接收到的存儲指令,在堆棧115上存儲與通過處理器105執(zhí)行的軟件程序的子例程相關(guān)的信息。例如,處理器105可經(jīng)配置以將幀指針120和返回地址125推送到堆棧115上,以作為存儲在用于與堆棧幀145相關(guān)的子例程的堆棧上的控制信息的部分。在其它實施方案中,控制信息可包含其它信息,作為幀指針120和返回地址125的補(bǔ)充或替代。
接著,可更改控制信息以產(chǎn)生受保護(hù)的控制信息(階段405)。處理器105可經(jīng)配置以使用本文所論述的控制數(shù)據(jù)認(rèn)證和/或控制數(shù)據(jù)加密技術(shù)來更改與軟件程序相關(guān)的控制信息。更改控制信息使攻擊者更難通過更改幀指針120、返回地址125和/或堆棧115上的其它控制信息來取得對計算機(jī)系統(tǒng)100的控制。在一些實施方案中,處理器105可驗證受保護(hù)的控制信息在堆棧115上時尚未被更改。在控制數(shù)據(jù)加密技術(shù)中,處理器105經(jīng)配置以加密控制信息,從而產(chǎn)生受保護(hù)的控制信息。用于使用控制數(shù)據(jù)加密技術(shù)產(chǎn)生安全控制信息的實例過程在圖9中說明。在控制數(shù)據(jù)認(rèn)證技術(shù)中,處理器105經(jīng)配置以產(chǎn)生認(rèn)證標(biāo)簽,所述認(rèn)證標(biāo)簽被添加到控制信息中,并可用于驗證受保護(hù)的控制信息在堆棧115上時尚未被更改。認(rèn)證標(biāo)簽可使用秘密密鑰產(chǎn)生,所述秘密密鑰對處理器105已知,但不可用于通過處理器105執(zhí)行的軟件代碼。在一些實施方案中,密鑰可實施在處理器的硬件中,或可存儲在計算機(jī)系統(tǒng)100的受信任存儲器組件中,使得受信任存儲器組件的內(nèi)容無法被在計算機(jī)系統(tǒng)100上執(zhí)行的軟件代碼存取或更改。認(rèn)證標(biāo)簽如何可產(chǎn)生的額外細(xì)節(jié)在下文中詳細(xì)地論述。例如,圖5中所說明的過程論述可用于產(chǎn)生認(rèn)證標(biāo)簽的一種技術(shù)。認(rèn)證標(biāo)簽可考慮到幀指針120、返回地址125和/或待保護(hù)的其它控制信息。
接著,受保護(hù)的控制信息可存儲在堆棧115上(階段410)。在一些實施方案中,受保護(hù)的控制信息可存儲在堆棧115上,而不是控制信息存儲在堆棧115上。圖3中所說明的實例實施方案提供實施方案的實例,其中加密幀數(shù)據(jù)135已被推送到堆棧115上,而不是如在圖1中示出的實例中的包含幀指針120和返回地址125的未更改的控制信息被推送到堆棧115上。在此實施方案中,在堆棧上不可用未更改的控制信息,這防止惡意代碼和/或惡意方的攻擊存取未受保護(hù)的控制數(shù)據(jù)。在其它實施方案中,除了控制信息以外,受保護(hù)的控制信息的至少一部分可推送到堆棧上,并且可用于確定控制信息在堆棧上時尚未被更改。圖2中所說明的實例實施方案提供實施方案的實例,其中認(rèn)證信息140已被推送到堆棧115上,而不是如在圖1中示出的實例中的幀指針120被推送到堆棧115上。除了認(rèn)證信息140以外,返回地址125已被推送到堆棧115上。在圖2中示出的實例中的認(rèn)證信息可至少部分地基于與堆棧幀相關(guān)的幀指針和返回地址來確定,并且認(rèn)證信息140可用于確定返回地址和/或堆棧115上的其它信息是否已被更改。
加載指令可從通過處理器105執(zhí)行的軟件程序接收(階段415)。處理器105可經(jīng)配置以響應(yīng)于來自軟件程序的加載指令,從堆棧115加載控制信息,并且提供控制信息到發(fā)布加載指令的軟件程序。在一些實施方案中,處理器115可經(jīng)配置以響應(yīng)于加載指令,從堆棧115中去除控制信息(和/或受保護(hù)的控制信息)以在堆棧115上釋放內(nèi)存。響應(yīng)于從通過處理器105執(zhí)行的軟件程序接收加載指令,過程可繼續(xù)到階段417、420和425。
受保護(hù)的控制信息可從堆棧加載(階段417)。響應(yīng)于完成子例程,與子例程相關(guān)的堆棧115的內(nèi)容可從堆棧115中彈出以在堆棧115上釋放內(nèi)存。此清理過程的部分可包含從堆棧115中彈出受保護(hù)的控制信息,并且在一些實施方案中,可包含從堆棧中彈出其它控制信息。
過程可繼續(xù)到更改受保護(hù)的控制信息以恢復(fù)控制信息(階段420)。處理器105可經(jīng)配置以從受保護(hù)的控制信息中恢復(fù)控制信息。處理器105如何恢復(fù)是否已被更改的受保護(hù)的控制信息取決于用于產(chǎn)生受保護(hù)的控制信息的技術(shù)。如果控制數(shù)據(jù)認(rèn)證技術(shù)用于產(chǎn)生受保護(hù)的控制信息,那么基于用于堆棧幀145的控制信息所產(chǎn)生的認(rèn)證標(biāo)簽可使用用于產(chǎn)生被推送到堆棧上的認(rèn)證標(biāo)簽的密鑰來重新產(chǎn)生,并且可做出所重新產(chǎn)生的密鑰是否匹配包含于受保護(hù)的控制信息中的密鑰的確定,所述受保護(hù)的控制信息用于堆棧115上的堆棧幀145。如果所重新產(chǎn)生的認(rèn)證標(biāo)簽并不匹配包含于受保護(hù)的控制信息中的認(rèn)證標(biāo)簽,那么受保護(hù)的控制信息在堆棧115上時已被損壞或更改。圖8可用于從受保護(hù)的控制信息中恢復(fù)控制信息。如果在階段405中控制數(shù)據(jù)加密技術(shù)用于產(chǎn)生受保護(hù)的控制信息,那么包括被推送到用于堆棧幀145的堆棧上的受保護(hù)的控制信息的加密幀數(shù)據(jù)135可使用與在階段405中用于加密數(shù)據(jù)的加密技術(shù)相關(guān)的合適密鑰進(jìn)行解密。如果加密幀數(shù)據(jù)135未使用與用于加密控制數(shù)據(jù)的密鑰相關(guān)的解密密鑰來適當(dāng)?shù)亟饷?,那么受保護(hù)的控制信息在堆棧115上時已被損壞或更改。圖12示出了用于恢復(fù)使用控制數(shù)據(jù)加密技術(shù)所產(chǎn)生的受保護(hù)的控制信息的實例過程。
接著,控制信息可被返回到軟件程序(階段425)。接著,處理器105可返回控制信息到發(fā)布加載指令到處理器105的軟件程序。在一些實施方案中,處理器105可經(jīng)配置以確定受保護(hù)的控制數(shù)據(jù)是否被更改,以及引發(fā)異常,所述異??蓵和\浖绦虻奶幚砗?或執(zhí)行可防止惡意或不良實施的代碼利用已更改或損壞的控制數(shù)據(jù)的其它動作。例如,在使用控制數(shù)據(jù)認(rèn)證和認(rèn)證標(biāo)簽并不匹配的情況下,處理器105可暫停軟件程序的執(zhí)行或執(zhí)行其它處理任務(wù)。在另一個實例中,在使用控制數(shù)據(jù)加密的情況下,處理器105可經(jīng)配置以確定與幀指針120和/或返回地址125相關(guān)的地址是否落在地址的有效范圍內(nèi)。如果地址落在地址可允許的范圍之外,這可指示地址信息在堆棧115上時被更改或損壞,那么處理器105可經(jīng)配置以暫停軟件程序的執(zhí)行或執(zhí)行其它處理任務(wù)。
圖5是用于使用控制數(shù)據(jù)認(rèn)證技術(shù)更改控制信息以產(chǎn)生受保護(hù)的控制信息的過程的流程圖。圖5中所說明的過程可用于實施圖4中所說明的過程的階段405??刂茢?shù)據(jù)認(rèn)證技術(shù)可用于至少部分地基于待保護(hù)的控制信息產(chǎn)生認(rèn)證標(biāo)簽,并且認(rèn)證標(biāo)簽可用于確定控制信息在堆棧115上時是否已被更改。除非另外指示,否則圖5中所說明的過程可通過處理器105實施。
可存取與堆棧幀相關(guān)的密鑰(階段505)。在一些實施方案中,相同密鑰可用于產(chǎn)生用于堆棧幀中的每一個堆棧幀的認(rèn)證標(biāo)簽。在其它實施方案中,不同密鑰可選自多個密鑰,以使得每一堆棧幀與多個密鑰中的一個密鑰相關(guān)。在一些實施方案中,每一堆棧幀可與不同密鑰相關(guān),并且那一密鑰可用于產(chǎn)生用于那一堆棧幀的認(rèn)證信息。在一些實施方案中,堆棧115上的每一堆棧幀與將用于產(chǎn)生認(rèn)證信息的獨特密鑰相關(guān),所述認(rèn)證信息可用于驗證與堆棧幀145相關(guān)的控制信息(例如幀指針120和/或返回地址125)在堆棧115上時尚未被更改。在一些實施方案中,處理器105可經(jīng)配置以在堆棧幀產(chǎn)生于堆棧115上時,產(chǎn)生用于每一堆棧幀的密鑰,并且存儲密鑰在受保護(hù)的存儲器中,所述存儲器可由處理器105存取,但不可由在計算機(jī)系統(tǒng)100上執(zhí)行的軟件代碼存取。在一些實施方案中,一或多個密鑰可存儲在處理器可存取的計算機(jī)系統(tǒng)100的受信任存儲器組件中,并且處理器105可經(jīng)配置以從存儲在受信任存儲器組件中的一或多個相關(guān)密鑰中選擇密鑰,所述密鑰用于產(chǎn)生與堆棧幀相關(guān)的認(rèn)證信息。用于產(chǎn)生用于堆棧115上的堆棧幀的認(rèn)證信息的密鑰應(yīng)保持秘密,以防止惡意用戶能夠更改控制信息,并且以基于更改的控制信息,產(chǎn)生新的認(rèn)證信息。當(dāng)與那一密鑰相關(guān)的堆棧幀從堆棧115中彈出時,可再使用所述密鑰。
過程還可包含計算用于幀指針120的增量值(階段510)。幀指針120可編碼為表示相對于堆棧115上的堆棧指針的地址的偏移的增量值。增量值可足夠小于幀指針120,使得存儲器中原先分配用于存儲幀指針120的空間可用于存儲堆棧幀145的增量值和認(rèn)證信息。
過程還可包含計算用于與堆棧幀相關(guān)的控制信息的認(rèn)證信息(階段515)。基于返回地址125、幀指針120、幀指針的增量值和/或待監(jiān)測以用于在堆棧115上時未授權(quán)的更改的其它控制信息,可計算認(rèn)證信息。在一些實施方案中,認(rèn)證標(biāo)簽包括消息認(rèn)證碼(MAC)標(biāo)簽,所述消息認(rèn)證碼(MAC)標(biāo)簽使用MAC算法和在階段505中存取的密鑰來計算。MAC標(biāo)簽可使用相同密鑰產(chǎn)生和驗證。MAC算法可基于加密散列函數(shù)、分塊密碼算法、全域散列或其它類型的技術(shù)。處理器105可經(jīng)配置以跟蹤用于認(rèn)證堆棧115上的堆棧幀的密鑰,其中堆棧幀中的至少一些堆棧幀使用不同密鑰認(rèn)證。在其它實施方案中,其它類型的技術(shù)可用于通過應(yīng)用過程到控制信息來產(chǎn)生認(rèn)證信息,所述過程可用于驗證受保護(hù)的控制信息的數(shù)據(jù)完整性和真實性。
圖6是用于在堆棧上存儲使用控制數(shù)據(jù)認(rèn)證技術(shù)所產(chǎn)生的受保護(hù)的控制信息的過程的流程圖。圖6中所說明的過程可用于實施圖4中所說明的過程的階段410,其中圖5中所說明的過程用于實施圖4中所說明的過程的階段405。除非另外指示,否則圖6中所說明的過程可通過處理器105實施。
可在堆棧115上存儲增量值和認(rèn)證信息(階段605)。處理器105可經(jīng)配置以推送增量值和認(rèn)證信息到堆棧115上,而不是推送幀指針120,因為增量值來源于幀指針120,并且稍后可用于計算幀指針120的值。增量值和認(rèn)證信息的大小可允許增量值和認(rèn)證標(biāo)簽剛好放入到與幀指針120相同數(shù)量的堆棧115上的存儲器中。在一些實施方案中,認(rèn)證信息包括基于待保護(hù)的受保護(hù)的控制信息所計算的MAC標(biāo)簽,所述受保護(hù)的控制信息可包含幀指針120、與幀指針相關(guān)的增量值、返回地址125和/或其它控制信息。
返回地址125還可存儲在堆棧115上(階段610)。返回地址125尚未被更改,并且可被推送到堆棧115上。如果返回地址125在堆棧115上時改變,那么在階段605中包含于被推送到堆棧上的受保護(hù)的控制信息中的認(rèn)證標(biāo)簽將不匹配基于在控制信息從堆棧115中彈出時更改的返回地址所產(chǎn)生的認(rèn)證標(biāo)簽,所述堆棧115將發(fā)信號通知處理器105控制信息在堆棧115上時已被更改以及應(yīng)該執(zhí)行異常處理程序。
圖7是用于從堆棧115中獲取使用控制數(shù)據(jù)認(rèn)證技術(shù)所產(chǎn)生的受保護(hù)的控制信息的過程的流程圖。圖7中所說明的過程可用于實施圖4中所說明的過程的階段417。除非另外指示,否則圖7中所說明的過程可通過處理器105實施。圖7中所說明的過程可用于獲取在圖6中所說明的過程中存儲在堆棧115上的信息。
過程可包含從堆棧115加載返回地址125(階段705)。增量值和認(rèn)證信息還可從堆棧加載(階段710)。如上文相對于圖6中所說明的過程所論述,返回地址125可被推送到堆棧115上,而不需更改返回地址125。如果返回地址125在堆棧115上時已被更改,那么包含于被推送到堆棧上的受保護(hù)的控制信息內(nèi)的認(rèn)證標(biāo)簽將不匹配由已從堆棧中彈出的控制信息所產(chǎn)生的認(rèn)證標(biāo)簽。
圖8是用于確定使用控制數(shù)據(jù)認(rèn)證技術(shù)所產(chǎn)生的受保護(hù)的控制信息在堆棧上時是否已被更改的過程的流程圖。圖8中所說明的過程可用于實施圖4中所說明的過程的階段425的至少部分,其中處理器105經(jīng)任選配置以在返回控制信息到已請求控制信息的軟件程序之前,驗證控制信息在堆棧115上時尚未被更改。圖8中所說明的過程可用于驗證使用圖5中所說明的過程產(chǎn)生的受保護(hù)的控制信息在堆棧115上時尚未被更改。圖8中所說明的過程可通過處理器105實施。
可存取與堆棧幀相關(guān)的密鑰(階段805)。與堆棧幀相關(guān)的密鑰可存儲在受保護(hù)的存儲器中,所述受保護(hù)的存儲器可由處理器105而非通過處理器105執(zhí)行的未授權(quán)的程序代碼存取,以防止惡意方獲得對用于產(chǎn)生認(rèn)證信息的密鑰的存取權(quán),所述認(rèn)證信息用于確??刂菩畔⒃诙褩?15上時尚未被更改。如上文所論述,密鑰可與消息認(rèn)證碼(MAC)相關(guān)。通過基于在控制信息從堆棧115加載/彈出時從堆棧115獲得的控制信息計算認(rèn)證標(biāo)簽,與堆棧幀相關(guān)的密鑰可用于認(rèn)證受保護(hù)的控制信息的內(nèi)容。在控制信息在堆棧115上時已被更改的情況下,所計算的認(rèn)證標(biāo)簽將不匹配在圖6中所說明的過程的階段605中存儲在/被推送到堆棧115上的認(rèn)證標(biāo)簽。
與堆棧幀相關(guān)的幀指針120可根據(jù)從堆棧115彈出的增量值計算(階段810)。幀指針120可編碼為表示相對于堆棧指針的堆棧115上的地址的增量值。在堆棧115上存儲增量值而不是幀指針可在堆棧115上釋放空間,所述空間可用于存儲用于堆棧幀的認(rèn)證信息。通過添加增量值的偏移到由堆棧指針表示的地址,幀指針120可根據(jù)增量值計算。
可使用幀指針120、返回地址125和/或其它控制信息,使用與堆棧幀145相關(guān)的密鑰計算認(rèn)證信息(階段815)。認(rèn)證信息應(yīng)該使用用于計算存儲在/被推送到堆棧115上的認(rèn)證信息的同一技術(shù)來計算。例如,如果特定的MAC算法用于根據(jù)幀指針120、返回地址125和/或其它控制信息來產(chǎn)生MAC標(biāo)簽,那么相同的MAC算法應(yīng)該適用于用于產(chǎn)生包含于認(rèn)證信息中的MAC標(biāo)簽的相同控制信息元件,所述認(rèn)證信息存儲在/被推送到堆棧115上。
使用幀指針120、返回地址125和/或其它控制信息和使用與堆棧幀相關(guān)的密鑰所計算的認(rèn)證信息可與包含于受保護(hù)的控制信息內(nèi)的認(rèn)證信息比較,所述受保護(hù)的控制信息作為受保護(hù)的控制信息的部分存儲在堆棧115上(階段820)。例如,如果認(rèn)證信息包括MAC標(biāo)簽,那么包含于受保護(hù)的控制信息中的MAC標(biāo)簽可與使用幀指針120、返回地址125和/或從堆棧115彈出的其它控制信息所計算的MAC標(biāo)簽比較??勺鞒鏊嬎愕恼J(rèn)證標(biāo)簽是否匹配從堆棧115獲得的認(rèn)證標(biāo)簽的確定(階段825)。如果所計算的認(rèn)證標(biāo)簽并不匹配從堆棧115獲得的認(rèn)證標(biāo)簽,那么受保護(hù)的控制信息可被識別為從受保護(hù)的控制信息被推送到堆棧115上已被更改(階段835)。否則的話,如果所計算的認(rèn)證標(biāo)簽的確匹配從堆棧115獲得的認(rèn)證標(biāo)簽,那么受保護(hù)的控制信息可被識別為從受保護(hù)的控制信息被推送到堆棧115上尚未被更改(階段840)。
圖9是用于使用控制數(shù)據(jù)加密技術(shù)更改控制信息以產(chǎn)生受保護(hù)的控制信息的過程的流程圖。圖9中所說明的過程可用于實施圖4中所說明的過程的階段405??刂茢?shù)據(jù)加密技術(shù)可用于加密在堆棧115上時待保護(hù)的控制信息。除非另外指示,否則圖9中所說明的過程可通過圖1中所說明的處理器105實施。
可存取與堆棧幀145相關(guān)的密鑰(階段905)。與堆棧幀相關(guān)的加密密鑰可存儲在受保護(hù)的存儲器中,所述受保護(hù)的存儲器可由處理器105存取,而不可由通過處理器105執(zhí)行的未授權(quán)的程序代碼存取,以防止攻擊者獲得對密鑰的存取權(quán),所述密鑰用于加密和解密受保護(hù)的控制數(shù)據(jù)以確保受保護(hù)的控制信息在堆棧115上時被更改。與堆棧幀相關(guān)的加密密鑰可用于在控制信息從堆棧115中彈出時,解密受保護(hù)的控制信息的內(nèi)容。在控制信息在堆棧115上時已被更改的情況下,解密密鑰將產(chǎn)生無效結(jié)果。在一些實施方案中,用于加密受保護(hù)的控制數(shù)據(jù)的加密密鑰可為用于解密受保護(hù)的控制數(shù)據(jù)的同一密鑰。在其它實施方案中,加密密鑰和解密密鑰可為不同的密鑰。在一些實施方案中,相同的加密密鑰可用于加密用于多個堆棧幀的數(shù)據(jù),并且每一堆棧幀可不與不同密鑰相關(guān)。在一些實施方案中,處理器105可存取加密密鑰和解密密鑰池,并且處理器105可從可用的加密密鑰池選擇用于產(chǎn)生用于特定的堆棧幀的受保護(hù)的控制信息的加密密鑰。
與堆棧幀相關(guān)的控制信息可使用與堆棧幀相關(guān)的密鑰加密以產(chǎn)生受保護(hù)的控制信息(階段910)??刂菩畔⒖砂祷氐刂?25和/或幀指針120。在其它實施方案中,控制信息可包含額外信息。加密控制信息可防止當(dāng)受保護(hù)的控制信息在堆棧115上時對控制信息作出未授權(quán)的更改。
圖10是用于在堆棧上存儲使用控制數(shù)據(jù)加密技術(shù)所產(chǎn)生的受保護(hù)的控制信息的過程的流程圖。圖10中所說明的過程可用于實施圖4中所說明的過程的階段410。受保護(hù)的控制信息包括加密幀數(shù)據(jù)135,并且可包含額外控制信息或其它信息。
加密控制信息可存儲在/被推送到堆棧115上(階段1005)。加密控制信息(在本文中也被稱作加密幀數(shù)據(jù)135)可與特定的堆棧幀145相關(guān)。處理器105可經(jīng)配置以推送在圖9中所說明的過程的階段910中加密的受保護(hù)的控制信息到堆棧115上。加密幀數(shù)據(jù)135可被推送到堆棧115上,為處理器105執(zhí)行另一子例程做準(zhǔn)備,并且用于當(dāng)前正執(zhí)行的子例程的信息被推送到用于當(dāng)前正執(zhí)行的子例程的堆棧上。以加密形式推送控制信息到堆棧上可防止攻擊者通過更改堆棧115的內(nèi)容來更改控制信息。攻擊者將需要知道用于加密受保護(hù)的控制信息的密鑰,以能夠成功地修改返回地址或包含于受保護(hù)的控制信息中的其它信息。
返回地址125還可任選地存儲在/被推送到堆棧上(階段1010)。在一些實施方案中,除了受保護(hù)的控制信息以外,返回地址125還可被推送到堆棧上。在此類實施方案中,返回地址可用于分支預(yù)測和/或利用返回地址的其它技術(shù)。返回地址125可通過解密受保護(hù)的控制信息來驗證,從而驗證返回地址在堆棧115上時未被更改。
圖11是用于從堆棧115中獲取使用控制數(shù)據(jù)加密技術(shù)所產(chǎn)生的受保護(hù)的控制信息的過程的流程圖。圖11中所說明的過程可用于實施圖4中所說明的過程的階段415。當(dāng)完成與堆棧幀145相關(guān)的子例程時,圖11中所說明的過程可通過處理器105執(zhí)行。處理器105可經(jīng)配置以從堆棧115中去除從堆棧115加載的信息以在存儲器110中釋放空間。
如果返回地址被推送到堆棧115上,那么返回地址可從堆棧115加載(階段1105)。如果在圖10中所說明的過程的階段1010中,返回地址被推送到堆棧上,那么處理器105可經(jīng)配置以從堆棧115中彈出返回地址。在一些實施方案中,返回地址未被推送到堆棧上,并且過程可繼續(xù)到階段1110,其中受保護(hù)的控制信息從堆棧中彈出。
加密受保護(hù)的控制信息可從堆棧115加載(階段1110)。處理器105可從堆棧115中彈出受保護(hù)的控制信息。例如,當(dāng)完成與相堆棧幀145關(guān)的子例程時,處理器105可從堆棧115中彈出受保護(hù)的控制信息,這作為堆棧幀145的清理的部分。接著,受保護(hù)的控制信息可進(jìn)行解密和驗證。如果受保護(hù)的控制信息在堆棧115上時尚未被更改,那么處理器105可繼續(xù)執(zhí)行由返回地址指示的子例程。否則的話,在受保護(hù)的控制信息在堆棧115上時已被更改的情況下,處理器105可執(zhí)行異常處理程序。
圖12是用于確定使用控制數(shù)據(jù)加密技術(shù)所產(chǎn)生的受保護(hù)的控制信息在堆棧115上時是否已被更改的過程的流程圖。圖12中所說明的過程可用于實施圖4中所說明的過程的階段425的至少部分,其中處理器105經(jīng)任選配置以在返回控制信息到已請求控制信息的軟件程序之前,驗證控制信息在堆棧115上時尚未被更改。
可存取與堆棧幀相關(guān)的密鑰(階段1205)。與堆棧幀相關(guān)的密鑰可存儲在受保護(hù)的存儲器中,所述受保護(hù)的存儲器可由處理器105存取,而不可由通過處理器105執(zhí)行的未授權(quán)的程序代碼存取,以防止惡意方獲得對密鑰的存取權(quán),所述密鑰用于加密加密幀數(shù)據(jù)135以確保受保護(hù)的控制信息在堆棧115上時被更改。與堆棧幀相關(guān)的密鑰可用于在控制信息從堆棧115中彈出時,解密受保護(hù)的控制信息的內(nèi)容。在一些實施方案中,用于加密加密幀數(shù)據(jù)135的密鑰可為與可用于解密受保護(hù)的控制信息的密鑰相同的密鑰。在其它實施方案中,用于加密和解密受保護(hù)的控制信息的密鑰是不同的密鑰。處理器105可經(jīng)配置以跟蹤已利用加密密鑰加密的堆棧幀,其中多個加密密鑰可用,并且以選擇用于解密加密幀數(shù)據(jù)135的合適的解密密鑰。
加密的受保護(hù)的控制信息可使用密鑰解密以恢復(fù)控制信息(階段1210),并且可作出加密控制信息在堆棧115上時是否被更改或損壞的確定(階段1215)。處理器105可經(jīng)配置以使用在階段1205中獲得的密鑰解密加密幀數(shù)據(jù)135。處理器105可經(jīng)配置以通過比較由解密加密幀數(shù)據(jù)135恢復(fù)的控制信息中的地址與地址的有效范圍來確定加密幀數(shù)據(jù)135是否已被更改。如果通過解密加密幀數(shù)據(jù)135恢復(fù)的控制信息中的幀指針120和/或返回地址125落在此范圍之外,那么加密幀數(shù)據(jù)135在堆棧115上時可能已被更改或損壞。
如果數(shù)據(jù)已被更改或損壞,那么受保護(hù)的控制信息可被識別為已被更改(階段1220)。否則的話,受保護(hù)的控制信息可被識別為尚未被更改(階段1225)。響應(yīng)于數(shù)據(jù)已被更改的指示,處理器105可經(jīng)配置以引發(fā)異常,所述異??蓵和\浖绦虻奶幚砗?或執(zhí)行可防止惡意或不良實施的代碼利用已被更改或損壞的控制數(shù)據(jù)的其它動作。響應(yīng)于數(shù)據(jù)尚未被更改的指示,處理器105可經(jīng)配置以返回控制數(shù)據(jù)到已發(fā)布加載命令到處理器105的軟件程序(見圖4中所說明的過程的階段405)。
取決于應(yīng)用,本文所述的方法可由各種裝置實施。例如,這些方法可在硬件、固件、軟件或其任何組合中實施。對于硬件實施方案,處理單元可在一或多個專用集成電路(ASIC)、數(shù)字信號處理器(DSP)、數(shù)字信號處理裝置(DSPD)、可編程邏輯裝置(PLD)、現(xiàn)場可編程門陣列(FPGA)、處理器、控制器、微控制器、微處理器、電子裝置、經(jīng)設(shè)計以執(zhí)行本文中所描述的功能的其它電子單元或其組合內(nèi)實現(xiàn)。
對于固件和/或軟件實施方案,可使用執(zhí)行本文中所描述的功能的模塊(例如,程序、函數(shù)等等)實施方法。在實施本文中所描述的方法的過程中,可使用任何有形地體現(xiàn)指令的機(jī)器可讀媒體。例如,軟件代碼可存儲在存儲器中,并且由處理器單元執(zhí)行。存儲器可實施于處理器單元內(nèi)或處理器單元外部。如本文中所使用,術(shù)語“存儲器”是指任何類型的長期、短期、易失性、非易失性或其它存儲器,且并不限于任何特定類型的存儲器或特定數(shù)目的存儲器或特定類型的媒體。有形媒體包含機(jī)器可讀媒體的一或多個物理物品,例如隨機(jī)存取存儲器、磁性存儲裝置、光學(xué)存儲媒體等等。
如果在固件和/或軟件中實施,那么可將功能作為一或多個指令或代碼存儲在計算機(jī)可讀媒體上。實例包含編碼有數(shù)據(jù)結(jié)構(gòu)的計算機(jī)可讀媒體和編碼有計算機(jī)程序的計算機(jī)可讀媒體。計算機(jī)可讀媒體包含物理計算機(jī)存儲媒體。存儲媒體可為可由計算機(jī)存取的任何可用媒體。借助于實例而非限制,此類計算機(jī)可讀媒體可包括RAM、ROM、EEPROM、CD-ROM或其它光盤存儲器,磁盤存儲器或其它磁性存儲裝置,或任何其它可用于存儲呈指令或數(shù)據(jù)結(jié)構(gòu)形式的所要程序代碼且可由計算機(jī)接入的媒體;如本文中所使用,磁盤和光盤包含壓縮光盤(CD)、激光光盤、光學(xué)光盤、數(shù)字多功能光盤(DVD),軟性磁盤和藍(lán)光光盤,其中磁盤通常以磁性方式再現(xiàn)數(shù)據(jù),而光盤用激光以光學(xué)方式再現(xiàn)數(shù)據(jù)。上述的組合應(yīng)包含于計算機(jī)可讀媒體的范圍內(nèi)。此類媒體還提供可為機(jī)器可讀的非暫時性媒體的實例,且其中計算機(jī)為可從此類非暫時性媒體讀取的機(jī)器的實例。
在不脫離本發(fā)明或權(quán)利要求的精神或范疇的情況下,本文中所論述的一般原理可應(yīng)用于其它實施方案。