新四季網

基於ebp構造的棧棧幀內容保護方法

2023-06-13 04:29:11 2

基於ebp構造的棧棧幀內容保護方法
【專利摘要】一種基於ebp構造的棧棧幀內容保護方法,包括1、初始化的步驟;2、當函數調用發生時,保存當前ebp寄存器數值,並更改其值為指向page所在內存頁的步驟;3、在被調用函數執行期間,捕獲其對ebp鏈的定位操作並對被調用函數所定位的棧幀提供保護的步驟;4、被調用函數執行完成返回時,查看棧幀內容和恢復的步驟。本發明中,被調用函數對棧中的棧幀定位操作被透明地重定向到影子棧幀中,被調用函數在隨後針對目標棧幀的任何修改操作都將在影子棧幀中完成,實現了對原有棧幀的保護。同時,在被調用函數返回時,將原有棧幀同影子棧幀內容進行比較,可以確定被調用函數更改了系統中的哪些棧幀內容,為分析被調用函數的棧幀行為提供支持。
【專利說明】基於ebp構造的棧棧幀內容保護方法
【技術領域】
[0001]本發明涉及計算機系統安全【技術領域】,具體來講是一種基於ebp構造的棧棧幀內容保護方法。
【背景技術】
[0002]棧保存著程序在運行過程中產生的數據以及用於函數調用與返回的控制信息,x86架構下,相同特權級內的函數調用不會引起棧切換,使得棧在發起調用的函數(調用者,caller)與被調用函數(被調用者,callee)之間共享。當被調用函數在執行時,調用者運行所需數據已經存在於棧內,被調用者則可輕易獲取並修改這些信息。
[0003]在基於ebp (extended base pointer,拓展基址指針寄存器)構造的棧中,每一次函數調用都產生一個棧幀(stack frame),棧幀中保存著該次函數調用對應參數、返回地址以及該函數在運行過程中產生的數據。各個棧幀通過ebp連通,形如單向鍊表,鍊表表頭由當前ebp寄存器指定。如圖1所示,包含三個函數棧幀A、B和C,所示函數調用順序為函數C調用函數B,函數B調用函數A,系統當前正在運行函數A中的代碼。當前ebp寄存器保存著棧幀A中的[ebp]所在地址([ebp]表示壓入棧中的ebp寄存器,參照圖1箭頭I所示),A.[ebp]則記錄著B.[ebp]所在地址,B.[ebp]中保存著C.[ebp]所在棧中的地址,形成形如ebp_>A.[ebp]->B.[ebp]->C.[epp]的單向ebp鏈。函數A對應棧巾貞為系統中的最新棧幀,函數A中的代碼便可通過上述關係去遍歷當前系統中的所有棧幀,繼而讀取甚至修改各個棧幀的內容。
[0004]當前針對系統棧的保護主要集中在防護緩衝區溢出(buffer overflow)和ROP(面向返回地址編程,return oriented programming)攻擊上,而忽略了棧巾貞內容本身的安全性。

【發明內容】

[0005]本發明的目的是提供一種基於ebp構造的棧棧幀內容保護方法,通過監控系統棧中的已有ebp鏈,繼而攔截並修改被調用函數對棧幀所進行的定位操作,使得被調用函數定位到錯誤的內存處,達到對原有棧幀的保護。
[0006]實現本發明目的的技術方案如下:一種基於ebp構造的棧棧幀內容保護方法,包括
初始化的步驟,包括
1.1向內核申請一個內存頁,其首地址記為page ;
1.2將page對應頁表項標記為不存在;
當函數調用發生時,保存當前ebp寄存器數值,並更改其值為指向page所在內存頁的步驟,包括
2.1產生一個計數器i,初值賦為O ;
2.2當函數調用發生時,保存當前ebp寄存器數值為ebp_old,更改當前ebp寄存器數值為 ebp_new,使得 ebp_new = page + i ;
在被調用函數執行期間,捕獲其對ebp鏈的定位操作並對被調用函數所定位的棧幀提供保護的步驟,包括
3.1若被調用函數通過ebp鏈去定位系統之前的已有棧幀,則觸發缺頁中斷;否則,等待函數調用返回;
3.2在缺頁中斷處理中,判斷CR2寄存器數值是否等於ebp_new ;若相等,則根據ebp_new數值計算其相對於page的偏移量i = ebp_new - page ;若不相等,則等待函數調用返回;
3.3拷貝棧幀frame_i的內容到其它內存處形成影子棧幀frame_i_shadow ;
3.4累加計數器i,即i = i + I ;
3.5 將 page + i 賦值給 frame_i_shadow.[ebp];
3.6通過指令模擬操作,將被調用函數對上述棧幀的定位操作重定向到frame_i_shadow, [ebp]所在地址處,形成虛擬ebp鏈;
3.7轉步驟3.1 ;
被調用函數執行完成返回時,查看棧幀內容和恢復的步驟,包括
4.1比較各個影子棧幀frame_i_shadow與原有棧幀frame」的內容,查看其內容是否被更改;
4.2將保存的ebp_old數值恢復到當前 ebp寄存器中。
[0007]進一步地,所述指令模擬操作包括:
分析當前被調用函數觸發缺頁的指令,將其中尋址內存地址ebp_new處的操作數改為尋址地址frame_i_shadow.[ebp],再模擬出修改後的臨時指令;
將返回地址數值改為指向當前被調用函數觸發缺頁的指令的下一條指令所在地址。
[0008]本發明的有益效果在於:被調用函數對棧中的棧幀定位操作被透明地重定向到影子棧幀中,被調用函數在隨後針對目標棧幀的任何修改操作都將在影子棧幀中完成,不會影響到系統中原有棧幀的安全,實現了對原有棧幀的保護。同時,在被調用函數返回時,將原有棧幀同影子棧幀內容進行比較,可以確定被調用函數更改了系統中的哪些棧幀內容,為分析被調用函數的棧幀行為提供支持。
【專利附圖】

【附圖說明】
[0009]圖1是基於ebp構造的棧結構示意圖。
[0010]圖2是本發明的流程圖。
[0011]圖3是壓入棧中被修改的ebp寄存器的示意圖。
[0012]圖4是拷貝棧幀的內容形成影子棧幀的示意圖。
[0013]圖5是虛擬ebp鏈的形成示意圖。
[0014]圖6是兩次定位操作產生的虛擬ebp鏈的示意圖。
【具體實施方式】
[0015]本發明的總體思路是:當函數調用發生時,更改當前ebp寄存器數值,使其指向系統中一個不存在的內存頁。被更改後的ebp會被系統壓入到棧中形成[ebp],若被調用函數通過ebp鏈定位系統已有棧幀,則會觸發缺頁異常。在缺頁異常中將被調用函數定位的棧幀內容拷貝到其它內存地址處形成影子棧幀,通過指令模擬技術將被調用函數的棧幀定位操作重定向到影子棧幀中。
[0016]下面結合附圖具體描述本發明的實施方式。
[0017]如圖2所示,基於ebp構造的棧棧幀內容保護方法,包括 1、初始化的步驟,包括
1.1向內核申請一個內存頁,其首地址記為page ;
1.2將page對應頁表項標記為不存在;
上述初始化的步驟,申請page內存頁用於引發缺頁中斷。
[0018]2、當函數調用發生時,保存當前ebp寄存器數值,並更改其值為指向page所在內存頁的步驟,包括
2.1產生一個計數器i,初值賦為O ;計數器i用於標記系統中的棧幀。
[0019]2.2當函數調用發生時,保存當前ebp寄存器數值為ebp_old,更改當前ebp寄存器數值為ebp_new,使得ebp_new = page + i ;該值隨後會被壓入棧中,如圖3中棧幀A所
/Jn ο
[0020]3、在被調用函數執行期間,捕獲其對ebp鏈的定位操作並對被調用函數所定位的棧幀提供保護的步驟,包括
3.1若被調用函數通過ebp鏈`去定位系統之前的已有棧幀,則觸發缺頁中斷;否則,等待函數調用返回;如圖3所示,此時,原有ebp鏈已經斷裂,page所在內存頁在頁表項中被標記為不存在,引用I處的[ebp]去定位棧B會觸發缺頁中斷。
[0021]3.2在缺頁中斷處理中,判斷CR2寄存器數值是否等於ebp_neW ;若相等,則根據ebp_new數值計算其相對於page的偏移量i = ebp_new - page ;若不相等,貝U等待函數調用返回;其中,CR2為頁故障線性地址寄存器,用來保存最近一次出現頁故障時的虛擬地址。
[0022]3.3拷貝棧幀frame_i的內容到其它內存處形成影子棧幀frame_i_shadow ;如圖
4所示,拷貝棧幀B的內容,形成影子棧幀frame_B_shadow。
[0023]3.4累加計數器i,即i = i + I ;
3.5 將 page + i 賦值給 frame_i_shadow.[ebp];
3.6通過指令模擬操作,將被調用函數對上述棧幀的定位操作重定向到frame_i_shadow, [ebp]所在地址處,形成虛擬ebp鏈;如圖5所示,重定向被調用函數的棧幀定位操作到影子棧幀中,形成一個虛擬的ebp鏈,如箭頭2所示。箭頭I處的內容並不實際指向frame_B_shadow,通過重定向操作,使得被調用函數感覺存在箭頭2所示的指向關係,即讓當前棧幀的前一個棧幀看起來是frame_B_shadow。
[0024]其中,指令模擬(Instructionsimulation,參見維基百科http://en.wikipedia.0rg/wiki/Instruction_set_simulator))包括:1、分析當前被調用函數觸發缺頁的指令,將其中尋址內存地址ebp_new處的操作數改為尋址地址frame_i_shadow.[ebp],再模擬出修改後的臨時指令;2、將返回地址數值改為指向當前被調用函數觸發缺頁的指令的下一條指令所在地址。此處的返回地址指等缺頁中斷執行完成後,用於返回被調用函數的地址。
[0025]3.7 轉步驟 3.1 ;如圖6所示,被調用函數通過frame_B_shadow繼續定位之前棧幀C,產生一個新的影子棧中貞 frame_C_shadow,形成 A--->frame_B_shadow--->frame_C_shadow 的虛擬棧幀關係。
[0026]4、被調用函數執行完成返回時,查看棧幀內容和恢復的步驟,包括
4.1比較各個影子棧幀frame_i_shadow與原有棧幀frame」的內容,查看其內容是否被更改;這裡,將原有棧幀同影子棧幀內容進行比較,可以確定被調用函數更改了系統中的哪些棧幀內容,為分析被調用函數的棧幀行為提供支持。
[0027]4.2將保存 的ebp_old數值恢復到當前ebp寄存器中。
【權利要求】
1.一種基於ebp構造的棧棧幀內容保護方法,其特徵在於,包括 初始化的步驟,包括 1.1向內核申請一個內存頁,其首地址記為page ; 1.2將page對應頁表項標記為不存在; 當函數調用發生時,保存當前ebp寄存器數值,並更改其值為指向page所在內存頁的步驟,包括 2.1產生一個計數器i,初值賦為O ; 2.2當函數調用發生時,保存當前ebp寄存器數值為ebp_old,更改當前ebp寄存器數值為 ebp_new,使得 ebp_new = page + i ; 在被調用 函數執行期間,捕獲其對ebp鏈的定位操作並對被調用函數所定位的棧幀提供保護的步驟,包括 3.1若被調用函數通過ebp鏈去定位系統之前的已有棧幀,則觸發缺頁中斷;否則,等待函數調用返回; 3.2在缺頁中斷處理中,判斷CR2寄存器數值是否等於ebp_new ;若相等,則根據ebp_new數值計算其相對於page的偏移量i = ebp_new - page ;若不相等,則等待函數調用返回; 3.3拷貝棧幀frame_i的內容到其它內存處形成影子棧幀frame_i_shadow ; 3.4累加計數器i,即i = i + I ;
3.5 將 page + i 賦值給 frame_i_shadow.[ebp]; 3.6通過指令模擬操作,將被調用函數對上述棧幀的定位操作重定向到frame_i_shadow, [ebp]所在地址處,形成虛擬ebp鏈; 3.7轉步驟3.1 ; 被調用函數執行完成返回時,查看棧幀內容和恢復的步驟,包括 4.1比較各個影子棧幀frame_i_shadow與原有棧幀frame」的內容,查看其內容是否被更改; 4.2將保存的ebp_old數值恢復到當前ebp寄存器中。
2.根據權利要求1所述的基於ebp構造的棧棧幀內容保護方法,其特徵在於,所述指令模擬操作包括 分析當前被調用函數觸發缺頁的指令,將其中尋址內存地址ebp_new處的操作數改為尋址地址frame_i_shadow.[ebp],再模擬出修改後的臨時指令; 將返回地址數值改為指向當前被調用函數觸發缺頁的指令的下一條指令所在地址。
【文檔編號】G06F21/78GK103870767SQ201410102934
【公開日】2014年6月18日 申請日期:2014年3月19日 優先權日:2014年3月19日
【發明者】陳興蜀, 李輝, 張磊, 王文賢, 鄭炳倫 申請人:四川大學

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀