[發明專利]一種堆棧溢出的保護方法和裝置無效
| 申請號: | 201110251173.7 | 申請日: | 2011-08-29 |
| 公開(公告)號: | CN102298677A | 公開(公告)日: | 2011-12-28 |
| 發明(設計)人: | 宋卿 | 申請(專利權)人: | 瑞斯康達科技發展股份有限公司 |
| 主分類號: | G06F21/02 | 分類號: | G06F21/02 |
| 代理公司: | 北京德琦知識產權代理有限公司 11018 | 代理人: | 牛崢;王麗琴 |
| 地址: | 100085 北京*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 堆棧 溢出 保護 方法 裝置 | ||
技術領域
本發明涉及計算機領域,尤其涉及一種堆棧溢出的保護方法和裝置。
背景技術
計算機技術和互聯網的建設和發展,對整個社會的經濟、文化、科技等各方面帶來了巨大的推動和沖擊,大量電信、電子商務、金融網絡等信息化系統已經成為國家和政府的關鍵基礎設施,因此如何確保計算機系統的安全已成為擺在我們面前迫切需要解決的難題。
堆棧溢出漏洞是一個極其嚴重的系統安全漏洞,它是通過向一個有限的內存空間寫入過長的數據,破壞系統的內存空間,導致系統運行異常、死機或重啟。通過堆棧溢出攻擊,使用攻擊代碼的地址覆蓋函數指針,可以讓攻擊者獲取部分或全部的系統控制權,這是一種極具威脅的安全隱患。
如圖1所示,系統內存一般分為5種,代碼段code用于存放程序的執行代碼,數據段data用于存放初始化的全局變量和靜態變量,bss數據段用于存儲非初始化的全局變量和靜態變量,剩余的內存空間用于系統堆棧使用,堆用于存放系統運行時內存大小未知的對象(通常用malloc分配),使用完后釋放(通常用free釋放),棧則用于系統運行時“保存現場”,存放臨時創建的局部變量,在函數調用時保存參數、返回地址等(通常用PUSH保存),等函數返回時彈出返回所需要的數據(通常用POP彈出)。在內存中堆和棧沒有確定的界限,根據程序運行動態變化。堆從低地址往高地址生長,棧則相反。
無論是堆溢出還是棧溢出,都會覆蓋掉其他堆棧區域的數據,如果被覆蓋的數據對于系統運行是至關重要的,那么將嚴重影響系統的正常工作。
如果堆中保存了程序運行的函數指針,該堆中的數據如果被覆蓋,可以導致系統運行到錯誤的地址上。
圖2所示的是父函數調用子函數后的棧分布圖,父函數和子函數都有自己的棧空間,EBP(基址指針,base?pointer)和ESP(堆棧指針,stack?pointer)分別表示當前棧的底部和頂部指針。函數調用過程中,首先將參數壓入堆棧中,然后EBP入棧,然后是子函數的局部變量等。局部數據溢出時,若使用精心設計好的數據(如某段攻擊函數的地址)覆蓋堆棧中保存的返回指針,那么就可以控制代碼的跳轉和程序的運行。
堆棧溢出對系統危害極大,目前解決堆棧溢出保護問題的方法有多種,最簡單的就是保證代碼的質量,如:積極進行手動的邊界檢查和函數指針檢查;不允許執行堆棧中的命令;采用良好的編碼習慣,限制使用系統中存在溢出漏洞的接口函數(如字符拷貝、格式化等),但這種方法只能盡可能的減少堆棧溢出的幾率,不能從根本上消除。
另一種是通過編譯器自動對代碼進行優化,調整變量的位置,使容易發生溢出的數據盡可能的遠離重要數據(如函數指針、返回地址等),這也只能減輕堆棧溢出對系統的危害,無法消除堆棧溢出,更無法減少堆棧溢出的幾率。
目前的堆棧溢出保護實現大多使用基于Canaries的探測技術來完成對這種破壞的檢測。Canaries探測方法在檢測堆棧對函數棧的破壞時,分別在堆和棧插入Canaries緩沖區。這樣如果堆棧在遭到無意或故意的溢出時,首先修改的是Canaries緩沖區,通過對該緩沖區的檢查可以判斷出是否發生了溢出,防止繼續溢出破壞函數棧的控制信息,如圖3所示。生成Canaries的方法目前有以下種:
一種是采用固定的特殊字符串填充,通過檢查該字符串是否被修改確定是否發生溢出,固定字符串一般選擇空格、換行等特殊意義的字符串。該方法雖然可以檢查到溢出,但使用固定字符填充容易被攻擊者查出Canaries的位置,并跳過該緩沖區直接修改其后的數據,這種情況下溢出保護就無效了。
第二種方法是生成隨機數,并保存在一塊未被隱射到虛擬地址空間的內存頁中,試圖通過指針訪問保存隨機數的內存時就會發生段錯誤(segment?fault),但這個隨機數最終會作為Canaries保存在函數棧中,所以攻擊者仍然有機會獲取該隨機數的值。
第三種方法是通過隨機數和函數棧中的所有控制信息、返回地址通過運算得到緩沖區填充值,這樣函數棧中Canaries、控制信息、返回地址等的修改均可以檢查到。但這種方法運算涉及的量多,計算Canaries消耗太大。
發明內容
本發明提供了一種堆棧溢出的保護方法,在提高堆棧溢出防護能力的同時,避免計算過于復雜度的問題。
本發明采取的技術手段是:一種堆棧溢出的保護方法,方法包括:
在堆棧的緩沖區內填充格式為“固定字符串+隨機字符串”或“隨機字符串+固定字符串”的填充字符串的步驟;
每隔預定的周期檢查緩沖區內的填充值是否發生變化。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于瑞斯康達科技發展股份有限公司,未經瑞斯康達科技發展股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201110251173.7/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:基于計算機視覺的高速公路彎道檢測方法
- 下一篇:信息存儲系統及信息存儲方法





