欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用以禁止返回定向編程的動態(tài)執(zhí)行阻止的制作方法

文檔序號:9547486閱讀:341來源:國知局
用以禁止返回定向編程的動態(tài)執(zhí)行阻止的制作方法
【專利說明】用以禁止返回定向編程的動態(tài)執(zhí)行阻止
分案串請的相關(guān)信息
本案是分案申請。該分案的母案是申請日為2013年1月5日、申請?zhí)枮?01380005427.4、發(fā)明名稱為“用以禁止返回定向編程的動態(tài)執(zhí)行阻止”的發(fā)明專利申請案。
技術(shù)領(lǐng)域
一個特征大體上涉及禁止軟件系統(tǒng)中的惡意代碼的操作,且更特定來說涉及實(shí)施執(zhí)行阻止且默認(rèn)地將存儲器頁標(biāo)記為不可執(zhí)行以便減少可用于軟件系統(tǒng)中的返回定向編程開發(fā)的指令數(shù)目的方法和裝置。
【背景技術(shù)】
執(zhí)行軟件的計算系統(tǒng)正在經(jīng)歷增長的大量攻擊。這些攻擊經(jīng)常將惡意代碼插入計算系統(tǒng)中且隨后致使計算系統(tǒng)執(zhí)行惡意代碼的方式。惡意代碼可執(zhí)行許多不同操作,例如致使計算系統(tǒng)運(yùn)行得比正常慢,監(jiān)視計算系統(tǒng)上的活動,致使計算系統(tǒng)發(fā)射或接收用戶可能不希望傳送的信息,破壞持續(xù)和非持續(xù)存儲器中的數(shù)據(jù),以及使計算系統(tǒng)崩潰。
最近已提出有時稱為返回定向編程(ROP)開發(fā)的攻擊機(jī)制。一類ROP開發(fā)經(jīng)常稱為返回到libc攻擊(或返回到libc中攻擊)。返回到libc (或返回到libc中)攻擊可通過兩個屬性識別:(a)其使用駐留在許多軟件系統(tǒng)中的標(biāo)準(zhǔn)C庫,以及(b)其直接跳到libc函數(shù)的進(jìn)入點(diǎn)而不是其內(nèi)部。ROP開發(fā)是有力的技術(shù),其允許攻擊者開發(fā)軟件程序中的有效代碼序列而無需將任何新的惡意代碼注入到處理器的地址空間中。通過開發(fā)一些錯誤或弱點(diǎn),攻擊可得到對將從其執(zhí)行指令的下一存儲器地址的控制。在一個實(shí)例中,這可通過覆寫保存在堆棧上的返回地址而發(fā)生。舉例來說,此攻擊可利用緩沖器溢出來指定到堆棧上的合法代碼塊的返回地址,其在合法函數(shù)返回時具有所要的效果。攻擊指令指針和/或獲得對下一存儲器地址的控制的其它方式也是可能的。有效代碼序列的小片斷(經(jīng)常稱為小工具)可能被攻擊者發(fā)現(xiàn),隨后串接在一起以形成新的惡意代碼序列,進(jìn)而避開針對代碼注入的防御。
在傳統(tǒng)ROP開發(fā)中,小代碼片斷是代碼的以例如返回或跳轉(zhuǎn)指令結(jié)束的部分。其它指令也可用作小工具終止指令。當(dāng)調(diào)用函數(shù)時,在向經(jīng)調(diào)用函數(shù)的返回的地址完成時,在所述調(diào)用之后的指令的地址被推送到堆棧上。因此,所述堆??砂S多返回地址,用于處理器跳轉(zhuǎn)到經(jīng)調(diào)用函數(shù)完成的時間。如果攻擊可對堆棧寫入信息,那么所述攻擊可用惡意返回地址覆寫既定返回地址。此返回地址可對應(yīng)于由攻擊識別的小工具中的一者。
通過操縱多個返回地址,控制調(diào)用堆棧的攻擊可將多個小工具鏈接在一起以產(chǎn)生惡意代碼序列,而從不需要將任何新代碼注入處理器地址空間。通過這些惡意代碼序列及其布置的選擇,攻擊可針對由小工具串組成的惡意程序而引起任意的行為。此類型的攻擊是成功的,因?yàn)樵诖蠖鄶?shù)系統(tǒng)中代碼和數(shù)據(jù)地址是可預(yù)測的。也就是說,攻擊可在第一計算機(jī)中加載特定代碼,檢視第一計算機(jī)的堆棧以確定代碼正如何加載,且當(dāng)此代碼加載在第二(目標(biāo))計算機(jī)中時使用此信息來開發(fā)返回堆棧。此攻擊可大體上依賴于在不同計算機(jī)上以相同方式加載代碼。
因此,需要可禁止返回定向編程攻擊的穩(wěn)健相應(yīng)措施。

【發(fā)明內(nèi)容】

本發(fā)明的實(shí)施例包含用于禁止開發(fā)堆棧和/或存儲器中的脆弱性的設(shè)備、方法和計算機(jī)可讀碼。
提供一種在處理電路中操作的方法以通過可執(zhí)行代碼的執(zhí)行阻止來阻礙返回定向攻擊??蓪⒋鎯ζ餮b置中的可執(zhí)行代碼的多個存儲器頁的第一子集的狀態(tài)指示符設(shè)定為不可執(zhí)行狀態(tài)。舉例來說,此狀態(tài)指示符可用以實(shí)行駐留于所述多個存儲器頁的所述第一子集中的可執(zhí)行代碼的執(zhí)行阻止。類似地,可將用于所述多個存儲器頁的第二子集的狀態(tài)指示符設(shè)定為可執(zhí)行狀態(tài),其中所述多個存儲器頁的第二子集包含到所述多個存儲器頁的第一子集中的函數(shù)的間接存根。應(yīng)注意,可在所述多個存儲器頁的第一子集或第二子集中的至少一者的狀態(tài)指示符已設(shè)定為不可執(zhí)行狀態(tài)之前和/或之后將可執(zhí)行代碼的所述多個存儲器頁加載到存儲器裝置中??蓤?zhí)行代碼駐留的存儲器裝置可實(shí)施虛擬存儲器。隨后將函數(shù)調(diào)用引導(dǎo)到所述多個存儲器頁的所述第二子集中的對應(yīng)間接存根,所述間接存根在引導(dǎo)來自所述多個存儲器頁的所述第一子集的被調(diào)用函數(shù)的執(zhí)行之前修改所述多個存儲器頁的所述第一子集中的對應(yīng)函數(shù)的所述狀態(tài)指示符。間接存根可將所述多個存儲器頁的第一子集中的對應(yīng)函數(shù)的狀態(tài)指示符從不可執(zhí)行狀態(tài)修改為可執(zhí)行狀態(tài)以實(shí)現(xiàn)函數(shù)的執(zhí)行。在完成所述函數(shù)調(diào)用后,所述方法可即刻返回到所述多個存儲器頁的所述第二子集中的所述對應(yīng)間接存根,其中所述對應(yīng)間接存根隨后修改所述多個存儲器頁的所述第一子集中的所述對應(yīng)函數(shù)的所述狀態(tài)指示符。間接存根隨后可將所述多個存儲器頁的第一子集中的對應(yīng)函數(shù)的狀態(tài)指示符從可執(zhí)行狀態(tài)修改為不可執(zhí)行狀態(tài)以停用函數(shù)的執(zhí)行。
在一個實(shí)例中,實(shí)行執(zhí)行阻止可包含當(dāng)處理電路獲取可執(zhí)行代碼用于執(zhí)行時中止駐留于處于不可執(zhí)行狀態(tài)的存儲器頁中的任何可執(zhí)行代碼的執(zhí)行。
在一個實(shí)例中,所述第一指令可為所述函數(shù)調(diào)用的部分且所述第二指令是所述對應(yīng)函數(shù)的初始指令??赏ㄟ^將所述第一指令綁定到所述第二指令以使得只有所述第一指令跟隨有所述第二指令才不中止執(zhí)行,來實(shí)施所述間接存根。
可執(zhí)行代碼可對應(yīng)于單個應(yīng)用程序和/或進(jìn)程。在一些實(shí)施方案中,所述方法還可包含在完成所述函數(shù)調(diào)用后即刻沖刷所述處理電路的內(nèi)部高速緩存存儲器。在一些實(shí)施方案中,間接存根可在可執(zhí)行代碼的編譯階段或預(yù)編譯階段產(chǎn)生。
根據(jù)一個實(shí)例,用于所述函數(shù)的代碼可駐留于所述多個存儲器頁的所述第一子集內(nèi)的第一存儲器頁中。可跟蹤處于所述可執(zhí)行狀態(tài)的所述第一存儲器頁的使用以確認(rèn)何時所有進(jìn)行中函數(shù)調(diào)用已完成執(zhí)行所述第一存儲器頁內(nèi)的對應(yīng)代碼。隨后在完成最后進(jìn)行中函數(shù)調(diào)用后即刻將所述第一存儲器頁的所述狀態(tài)指示符設(shè)定于不可執(zhí)行狀態(tài)。
還可提供包括存儲器裝置和處理電路的處理裝置。所述處理電路可經(jīng)配置以:(a)將存儲器裝置中的可執(zhí)行代碼的多個存儲器頁的第一子集的狀態(tài)指示符設(shè)定為不可執(zhí)行狀態(tài);(b)將所述多個存儲器頁的第二子集的所述狀態(tài)指示符設(shè)定為可執(zhí)行狀態(tài),其中所述多個存儲器頁的所述第二子集包含到所述多個存儲器頁的所述第一子集中的函數(shù)的間接存根;和/或(C)將函數(shù)調(diào)用引導(dǎo)到所述多個存儲器頁的所述第二子集中的對應(yīng)間接存根,所述間接存根在引導(dǎo)來自所述多個存儲器頁的所述第一子集的被調(diào)用函數(shù)的執(zhí)行之前修改所述多個存儲器頁的所述第一子集中的對應(yīng)函數(shù)的所述狀態(tài)指示符。
根據(jù)另一方面,對應(yīng)間接存根可包含限于由處理電路循序執(zhí)行的至少第一指令和第二指令。如果第一指令之后是除了第二指令之外的任一指令,那么中止函數(shù)調(diào)用的執(zhí)行。
提供在處理電路中操作的再一方法。產(chǎn)生包含多個函數(shù)的應(yīng)用程序源代碼。還獲得和/或產(chǎn)生用于源代碼中的每一函數(shù)的間接代碼??商砑又噶钜灾率乖创a在加載到存儲器中時經(jīng)識別為不可執(zhí)行。也可添加指令以致使間接代碼在加載到存儲器中時經(jīng)識別為可執(zhí)行??稍谒鎏幚黼娐诽幾儞Q所述源代碼和間接代碼以產(chǎn)生可執(zhí)行代碼??蓤?zhí)行代碼可對應(yīng)于單個應(yīng)用程序和/或進(jìn)程。間接存根可在可執(zhí)行代碼的編譯階段或預(yù)編譯階段產(chǎn)生。可編譯源代碼和間接代碼以使得其在加載到存儲器中時駐留于單獨(dú)的存儲器頁中。在一個實(shí)例中,第一間接代碼可致使在調(diào)用對應(yīng)第一函數(shù)以執(zhí)行時將第一函數(shù)的存儲器狀態(tài)指示符從不可執(zhí)行狀態(tài)切換到可執(zhí)行狀態(tài)。在另一實(shí)例中,第一間接代碼可致使在對應(yīng)第一函數(shù)終止執(zhí)行時將第一函數(shù)的存儲器狀態(tài)指示符從可執(zhí)行狀態(tài)切換到不可執(zhí)行狀態(tài)。在又一實(shí)例中,與第一函數(shù)相關(guān)聯(lián)的第一間接代碼可適于指向第一函數(shù),其中當(dāng)產(chǎn)生可執(zhí)行代碼時,編譯第一間接代碼和第一函數(shù)以加載于不同存儲器頁中。
根據(jù)一個方面,間接代碼可包含限于由處理電路循序執(zhí)行的至少第一指令和第二指令。所述方法可進(jìn)一步包括添加指令以致使在所述第一指令跟隨有除了所述第二指令之外的任一指令的情況下中止所述間接代碼的執(zhí)行。
【附圖說明】
圖1是說明其中可實(shí)施用于禁止ROP攻擊的一或多個特征的示范性操作環(huán)境、裝置和/或系統(tǒng)的框圖。
圖2說明可在存儲器中實(shí)施的示范性一般調(diào)用堆棧。
圖3說明示范性處理電路,其可適于通過初始將可執(zhí)行代碼駐留的全部或大多數(shù)存儲器空間標(biāo)記為不可執(zhí)行來實(shí)行執(zhí)行阻止。
圖4說明示范性處理電路的替代配置,其中數(shù)據(jù)執(zhí)行阻止模塊位于高速緩存存儲器系統(tǒng)與存儲器裝置之間。
圖5是說明適于實(shí)行增強(qiáng)數(shù)據(jù)執(zhí)行阻止特征的處理電路的實(shí)例的框圖。
圖6說明用于產(chǎn)生惡意代碼序列的受破壞調(diào)用堆棧的實(shí)例,包含串接在一起以形成返回定向編程(ROP)開發(fā)的小工具。
圖7是說明在圖5的處理單元的上下文中對小工具獲取發(fā)生了什么的框圖。
圖8是說明用于禁止處理單元中的代碼執(zhí)行的一般示范性方法的流程圖。
圖9是說明在處理電路中操作的用于保護(hù)存儲器免于ROP開發(fā)的另一示范性方法的流程圖。
圖10是說明用于保護(hù)存儲器免于ROP開發(fā)的示范性方法的流程圖。
圖11是說明準(zhǔn)許在需要或調(diào)用存儲器區(qū)域時修改存儲器區(qū)域的狀態(tài)的間接層的示范性實(shí)施方案的框圖。
圖12是說明用于實(shí)施準(zhǔn)許在需要或調(diào)用存儲器區(qū)域時修改存儲器區(qū)域的狀態(tài)的間接層的方法。
圖13說明用于在應(yīng)用程序內(nèi)實(shí)施允許修改應(yīng)用程序可執(zhí)行代碼駐留的存儲器區(qū)域的狀態(tài)以保護(hù)對此些存儲器區(qū)域的存取的間接層的方法。
【具體實(shí)施方式】
在以下描述中,參考附圖,其中借助于圖解說明而展示其中可實(shí)踐本發(fā)明的特定實(shí)施例。實(shí)施例既定以充分的細(xì)節(jié)描述本發(fā)明的方面以使所屬領(lǐng)域的技術(shù)人員能夠?qū)嵺`本發(fā)明。在不脫離本發(fā)明的范圍的情況下可利用其它實(shí)施例且可對所揭示實(shí)施例做出改變。不應(yīng)在限制性意義進(jìn)行以下詳細(xì)描述,且本發(fā)明的范圍僅由所附權(quán)利要求書界定。
術(shù)語“數(shù)據(jù)”在本文可以可互換方式使用以指代可由處理器使用的計算指令和可由處理器操作的數(shù)據(jù)。術(shù)語“數(shù)據(jù)”的使用的上下文應(yīng)當(dāng)使得當(dāng)“數(shù)據(jù)”涉及指令時是明顯的。在需要的情況下,指令可明確地稱為指令或指令數(shù)據(jù)。
概述
本發(fā)明涉及用于通過在不使用時默認(rèn)地將可執(zhí)行和不可執(zhí)行存儲器頁兩者標(biāo)記為“不可執(zhí)行”來禁止開發(fā)存儲器堆棧中的脆弱性的設(shè)備、方法和機(jī)器可讀碼。因此,處理電路可對存儲器頁中經(jīng)標(biāo)記為“不可執(zhí)行”的函數(shù)/指令實(shí)施執(zhí)行阻止,因此禁止對來自ROP攻擊的指令的調(diào)用被執(zhí)行。
根據(jù)一個特征,實(shí)施間接層,其中對可執(zhí)行代碼的所有函數(shù)調(diào)用均首先重定向到存根代碼,其改變此些可執(zhí)行代碼所駐留的存儲器狀態(tài)。存根代碼可將此可執(zhí)行代碼駐留的存儲器區(qū)的存儲器狀態(tài)從默認(rèn)“不可執(zhí)行”狀態(tài)改變?yōu)椤翱蓤?zhí)行”狀態(tài)。存根代碼隨后指向?qū)嶋H可執(zhí)行代碼。在一個實(shí)例中,此特征可在應(yīng)用程序的源代碼中和/或當(dāng)將此應(yīng)用程序編譯為可執(zhí)行碼時實(shí)施。也就是說,間接層(例如,存根代碼)可在源代碼內(nèi)原生地產(chǎn)生和/或其可在編譯時間產(chǎn)生。
根據(jù)一個方面,處理電路可實(shí)施在“不可執(zhí)行”存儲器頁中發(fā)現(xiàn)的代碼/指令的執(zhí)行阻止。含有可執(zhí)行指令的存儲器頁初始加載到存儲器中,且將所有頁(除了用于間接層的存根代碼所駐留的那些頁)默認(rèn)地標(biāo)記為“不可執(zhí)行”。從在處理電路上操作的合法應(yīng)用程序起始的函數(shù)調(diào)用通過間接層(即,存根代碼),其在從此些存儲器頁檢索和/或執(zhí)行指令/代碼之前或同時地將存儲器頁的狀
當(dāng)前第1頁1 2 3 4 5 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
海淀区| 集贤县| 曲松县| 新兴县| 澄迈县| 喀喇| 吉水县| 邯郸市| 大洼县| 原平市| 南安市| 象山县| 辽宁省| 曲松县| 桦甸市| 剑川县| 盐津县| 罗甸县| 绥中县| 丹阳市| 南康市| 奎屯市| 盘山县| 凤山市| 库尔勒市| 平武县| 措勤县| 曲水县| 开阳县| 陆川县| 施秉县| 苏尼特左旗| 灵山县| 建宁县| 太谷县| 宜都市| 桃源县| 曲靖市| 临湘市| 教育| 清苑县|